Hypothesis 01 - Review queue
v0.5.5Fully reusable list-based workflow block composed from Page Header, Filter Toolbar, Record List. Supports generic filtering, search, selection, and custom rendering. Domain-agnostic and configurable via props.
Preview
Install & usage
npx shadcn@4.1.2 add @signalos/hypothesis-01Pulls the page source plus its widget dependencies (@signalos/tokens, @signalos/utils, @signalos/page-header, @signalos/view-controler, @signalos/button, @signalos/expandable-list, @signalos/skeleton, @signalos/progress, @signalos/card, @signalos/badge, @signalos/data-primitives, @signalos/activity-timeline, @signalos/circular-progress, @signalos/dialog, @signalos/textarea, @signalos/input, @signalos/label, @signalos/tooltip, @signalos/command, @signalos/popover, @signalos/select, @signalos/switch, @signalos/scroll-area, @signalos/dropdown-menu, @signalos/table) into your app - you own the copy. Requires access.
// after: npx shadcn@4.1.2 add @signalos/hypothesis-01
// mount the pulled page in a route, e.g. src/app/hypothesis/page.tsx
import Hypothesis01 from "@/components/blocks/hypothesis-01/Hypothesis01"
export default function Page() {
return <Hypothesis01 />
}Props
MetricDeviation
| Prop | Type | Default | Description |
|---|---|---|---|
| current* | number | null | - | Current observed value, or null if unavailable. |
| baseline* | number | null | - | Baseline value used for deviation calculation. |
| deviation* | number | - | Fractional deviation from baseline (e.g. 0.12 = 12% above). |
| unit* | string | - | Unit of measure: "percent", "ratio", or a custom label. |
| direction* | string | - | Whether up movement is desirable for this metric. |
| status* | string | - | Derived status bucket for the metric. |
EquilibriumEntry
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| equilibrium_id* | string | - | |
| domain* | string | - | |
| state* | EquilibriumEqState | - | |
| balance_score* | number | - | 0–1 composite balance score. |
| previous_score* | number | null | - | |
| previous_state* | EquilibriumEqState | null | - | |
| drift_velocity* | number | - | Rate of change per hour (positive = improving). |
| metric_deviations* | Record<string, MetricDeviation> | - | |
| computed_at* | string | - | |
| updated_at* | string | - |
EligiblePipeline
| Prop | Type | Default | Description |
|---|---|---|---|
| pipeline_id* | string | - | |
| pipeline_name* | string | - |
EquilibriumSidebarProps
| Prop | Type | Default | Description |
|---|---|---|---|
| entries | EquilibriumEntry[] | undefined | - | Equilibrium entries to display. |
| isLoading | boolean | undefined | - | Shows skeleton cards while data loads. |
| pipelines | EligiblePipeline[] | undefined | - | Pipeline filter options; omit to hide the picker. |
| selectedPipelineId | string | null | undefined | - | Currently selected pipeline id, or null for all. |
| onSelectPipeline | ((pipelineId: string | null) => void) | undefined | - | Fired when the user changes the pipeline filter. |
| className | string | undefined | - | |
| data-testid | string | undefined | - | Test identifier rendered as `data-testid` on the root element. |
EquilibriumDetailSheetProps
| Prop | Type | Default | Description |
|---|---|---|---|
| entry | EquilibriumEntry | null | undefined | - | |
| open | boolean | undefined | - | |
| onOpenChange | ((open: boolean) => void) | undefined | - |
DecisionFormValues
| Prop | Type | Default | Description |
|---|---|---|---|
| rationale* | string | - | |
| expected_outcome | string | undefined | - | |
| expected_outcome_by | string | undefined | - | |
| dismiss_reason | string | undefined | - | |
| resolution | string | undefined | - | |
| reason | string | null | undefined | - |
ContributingSignal
| Prop | Type | Default | Description |
|---|---|---|---|
| role* | string | - | |
| cluster* | string | - | |
| deviation* | number | - | |
| metric_id* | string | - | |
| signal_id* | string | - | |
| confidence* | number | - |
SignalSummary
| Prop | Type | Default | Description |
|---|---|---|---|
| label | string | undefined | - | |
| cagg | number | undefined | - | |
| sufficiency | number | undefined | - | |
| signal_count | number | undefined | - | |
| severity | SeverityLevel | undefined | - | |
| domain | string | undefined | - | |
| cluster | string | undefined | - | |
| equilibrium_state | string | undefined | - | |
| contributing_signals | ContributingSignal[] | undefined | - |
WorkItem
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| executive_id* | string | - | |
| hypothesis_id* | string | - | |
| priority_rank* | number | - | |
| priority_score* | number | - | |
| signal_summary* | SignalSummary | - | |
| escalation_deadline* | string | null | - | |
| escalated_from* | string | null | - | |
| status* | SlotStatus | - | |
| closed_reason* | string | null | - | |
| created_at* | string | - | |
| updated_at* | string | - | |
| decayed_at* | string | null | - | |
| act_by_deadline* | string | null | - | |
| severity* | SeverityLevel | null | - | |
| confidence_initial* | number | null | - | |
| confidence_current* | number | null | - | |
| swap_out_slot_id | string | null | undefined | - |
WorkItemListResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| total* | number | - | |
| slots* | WorkItem[] | - |
WorkItemListFilters
| Prop | Type | Default | Description |
|---|---|---|---|
| executive_id | string | undefined | - | |
| slot_status | SlotStatus[] | undefined | - | |
| limit | number | undefined | - |
EvidenceItem
| Prop | Type | Default | Description |
|---|---|---|---|
| type | string | undefined | - | |
| role | string | undefined | - | |
| deviation | number | undefined | - | |
| metric_id | string | undefined | - |
DetailRecord
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| label* | string | - | |
| description* | string | - | |
| domain* | string | - | |
| cluster* | string | - | |
| signal_ids* | string[] | - | |
| cagg* | number | - | |
| sufficiency_score* | number | - | |
| evidence* | EvidenceItem[] | - | |
| routed* | boolean | - | |
| routed_to* | string | null | - | |
| status* | DetailRecordStatus | - | |
| created_at* | string | - | |
| updated_at* | string | - | |
| confidence_initial* | number | - | |
| decay_lambda* | number | - | |
| severity* | SeverityLevel | - | |
| target_roles* | string[] | - | |
| suggested_actions* | string[] | - | |
| tags* | string[] | - | |
| decayed_at* | string | null | - | |
| expire_reason* | string | null | - | |
| confidence_current* | number | - | |
| refined_by_llm | boolean | undefined | - | |
| refinement_confidence | number | null | undefined | - | |
| refinement_reasoning | string | null | undefined | - | |
| refinement_dropped_signal_ids | string[] | null | undefined | - | |
| refinement_dropped_reasoning | Record<string, unknown> | null | undefined | - | |
| refinement_model | string | null | undefined | - | |
| act_by_deadline | string | null | undefined | - | |
| act_by_source | string | null | undefined | - | |
| act_by_reason | string | null | undefined | - | |
| act_by_confidence | number | null | undefined | - |
DetailRecordListResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| total* | number | - | |
| hypotheses* | DetailRecord[] | - |
DetailRecordListFilters
| Prop | Type | Default | Description |
|---|---|---|---|
| hyp_status | DetailRecordStatus | undefined | - | |
| domain | string | undefined | - | |
| cluster | string | undefined | - | |
| severity | SeverityLevel | undefined | - | |
| limit | number | undefined | - | |
| offset | number | undefined | - |
SignalRecord
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| signal_id* | string | - | |
| domain* | string | - | |
| cluster* | string | - | |
| metric_id* | string | - | |
| signal_type* | string | - | |
| crlb_score* | number | - | |
| initial_crlb_score* | number | - | |
| reinforcement_term* | number | - | |
| decay_lambda* | number | - | |
| deviation_std* | number | - | |
| source_connector_id* | string | null | - | |
| source_connector_type* | string | null | - | |
| severity* | SeverityLevel | - | |
| payload* | Record<string, unknown> | - | |
| observation_ids* | string[] | - | |
| baseline_id* | string | null | - | |
| dimension_key* | Record<string, unknown> | - | |
| target_roles* | string[] | - | |
| tags* | string[] | - | |
| embedding* | number[] | null | - | |
| fired_at* | string | - | |
| expires_at* | string | null | - | |
| status* | SignalRecordStatus | - | |
| confidence_current* | number | - |
SignalRecordListResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| total* | number | - | |
| signals* | SignalRecord[] | - |
Baseline
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| metric_id* | string | - | |
| mean* | number | - | |
| stddev* | number | - | |
| window* | string | - | |
| sample_count* | number | - | |
| computed_at* | string | - |
MetricObservation
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| metric_id* | string | - | |
| value* | number | - | |
| observed_at* | string | - | |
| dimension_key* | Record<string, unknown> | - | |
| source_connector_id* | string | null | - |
MetricObservationsResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| total* | number | - | |
| observations* | MetricObservation[] | - |
TransferOffer
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| slot_id* | string | - | |
| from_user_id* | string | - | |
| to_user_id* | string | - | |
| reason* | string | null | - | |
| status* | TransferOfferStatus | - | |
| swap_out_slot_id* | string | null | - | |
| expires_at* | string | - | |
| created_at* | string | - | |
| responded_at* | string | null | - |
TransferResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| offer* | TransferOffer | - | |
| slot* | WorkItem | - | |
| immediate* | boolean | - |
TransferListItem
| Prop | Type | Default | Description |
|---|---|---|---|
| offer* | TransferOffer | - | |
| slot* | WorkItem | - |
TransferListPendingResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| incoming* | TransferListItem[] | - | |
| outgoing* | TransferListItem[] | - |
Share
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| slot_id* | string | - | |
| owner_id* | string | - | |
| collaborator_id* | string | - | |
| message* | string | null | - | |
| status* | ShareStatus | - | |
| expires_at* | string | null | - | |
| created_at* | string | - | |
| responded_at* | string | null | - |
ShareResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| share* | Share | - | |
| slot* | WorkItem | - |
ShareWithSlot
| Prop | Type | Default | Description |
|---|---|---|---|
| share* | Share | - | |
| slot* | WorkItem | - |
SharePendingResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| incoming* | ShareWithSlot[] | - | |
| outgoing* | ShareWithSlot[] | - |
SharedWithMeResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| total* | number | - | |
| shares* | ShareWithSlot[] | - |
Collaborator
| Prop | Type | Default | Description |
|---|---|---|---|
| share_id* | string | - | |
| collaborator_id* | string | - | |
| message* | string | null | - | |
| created_at* | string | - | |
| responded_at* | string | null | - |
CollaboratorsResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| collaborators* | Collaborator[] | - | |
| pending_invites* | Collaborator[] | - |
ShareInvitePayload
| Prop | Type | Default | Description |
|---|---|---|---|
| collaborator_id* | string | - | |
| message | string | null | undefined | - |
DecisionRequest
| Prop | Type | Default | Description |
|---|---|---|---|
| hypothesis_id* | string | - | |
| user_id* | string | - | |
| role* | string | - | |
| action* | string | - | |
| rationale* | string | - | |
| expected_outcome | string | null | undefined | - | |
| expected_outcome_by | string | null | undefined | - | |
| dismiss_reason | string | null | undefined | - | |
| resolution | string | null | undefined | - | |
| confidence_at_decision | number | null | undefined | - | |
| priority_score_at_decision | number | null | undefined | - |
DecisionRecord
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| hypothesis_id* | string | - | |
| user_id* | string | - | |
| role* | string | - | |
| action* | string | - | |
| rationale* | string | - | |
| expected_outcome* | string | null | - | |
| expected_outcome_by* | string | null | - | |
| dismiss_reason* | string | null | - | |
| resolution* | string | null | - | |
| confidence_at_decision* | number | null | - | |
| priority_score_at_decision* | number | null | - | |
| created_at* | string | - |
DecisionLogEvent
| Prop | Type | Default | Description |
|---|---|---|---|
| event_type* | string | - | |
| occurred_at* | string | - | |
| actor_id* | string | null | - | |
| summary* | string | - | |
| payload* | Record<string, unknown> | - |
DecisionLogGroup
| Prop | Type | Default | Description |
|---|---|---|---|
| hypothesis* | DetailRecord | - | |
| events* | DecisionLogEvent[] | - |
DecisionLogSummary
| Prop | Type | Default | Description |
|---|---|---|---|
| total_hypotheses* | number | - | |
| needs_routing* | number | - | |
| high_severity* | number | - | |
| deadline_within_24h* | number | - |
DecisionLogResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| total | number | undefined | - | |
| entries* | DecisionLogGroup[] | - | |
| summary | DecisionLogSummary | undefined | - |
DecisionLogFilters
| Prop | Type | Default | Description |
|---|---|---|---|
| executive_id | string | undefined | - | |
| user_id | string | undefined | - | |
| hypothesis_id | string | undefined | - | |
| event_type | string | undefined | - | |
| since | string | undefined | - | |
| until | string | undefined | - | |
| severity | ("low" | "medium" | "high")[] | undefined | - | |
| status | ("FORMING" | "SUFFICIENT" | "ROUTED" | "DECIDED" | "EXPIRED" | "PENDING")[] | undefined | - | |
| routed | boolean | undefined | - | |
| needs_routing | boolean | undefined | - | |
| deadline_within_hours | number | undefined | - | |
| min_confidence | number | undefined | - | |
| max_confidence | number | undefined | - | |
| q | string | undefined | - | |
| sort_by | DecisionLogSortBy | undefined | - | |
| sort_order | DecisionLogSortOrder | undefined | - | |
| limit | number | undefined | - | |
| offset | number | undefined | - | |
| include_counts | boolean | undefined | - |
FeedbackEntry
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| hypothesis_id* | string | - | |
| user_id* | string | - | |
| feedback_text* | string | - | |
| vote* | FeedbackVote | - | |
| created_at* | string | - | |
| updated_at* | string | - |
FeedbackEntryResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| total* | number | - | |
| feedback* | FeedbackEntry[] | - |
FeedbackEntryCreate
| Prop | Type | Default | Description |
|---|---|---|---|
| feedback_text* | string | - | |
| vote* | FeedbackVote | - |
DecayTick
| Prop | Type | Default | Description |
|---|---|---|---|
| hypothesis_id* | string | - | |
| current_c* | number | - | |
| ttl_hours* | number | - |
Decision
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| hypothesis_id* | string | - | |
| action* | string | - | |
| rationale* | string | - | |
| resolution* | string | null | - | |
| expected_outcome* | string | - | |
| expected_outcome_by* | string | - | |
| decided_at* | string | - | |
| confidence_at_decision* | number | - | |
| priority_score_at_decision* | number | - | |
| role* | string | null | - | |
| user_id* | string | - | |
| dismiss_reason* | string | null | - |
DecisionReponse
| Prop | Type | Default | Description |
|---|---|---|---|
| total | number | null | undefined | - | |
| decisions* | Decision[] | null | - |
SimilarDecision
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| hypothesis_id | string | null | undefined | - | |
| hypothesis_label | string | null | undefined | - | |
| action | string | null | undefined | - | |
| status | string | null | undefined | - | |
| rationale | string | null | undefined | - | |
| resolution | string | null | undefined | - | |
| decided_at | string | null | undefined | - | |
| vec_similarity* | number | - |
SimilarDecisionsResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| decision_id* | string | - | |
| total* | number | - | |
| results* | SimilarDecision[] | - |
DecisionSearchRequest
| Prop | Type | Default | Description |
|---|---|---|---|
| query* | string | - | |
| mode | DecisionSearchMode | undefined | - | |
| limit | number | undefined | - | |
| user_id | string | undefined | - | |
| role | string | undefined | - | |
| action | string | undefined | - | |
| status | string | undefined | - | |
| hypothesis_id | string | undefined | - | |
| since | string | undefined | - | |
| until | string | undefined | - |
DecisionSearchResult
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| hypothesis_id | string | null | undefined | - | |
| hypothesis_label | string | null | undefined | - | |
| user_id | string | null | undefined | - | |
| role | string | null | undefined | - | |
| action | string | null | undefined | - | |
| status | string | null | undefined | - | |
| rationale | string | null | undefined | - | |
| expected_outcome | string | null | undefined | - | |
| resolution | string | null | undefined | - | |
| dismiss_reason | string | null | undefined | - | |
| confidence_at_decision | number | null | undefined | - | |
| priority_score_at_decision | number | null | undefined | - | |
| decided_at | string | null | undefined | - | |
| score | number | null | undefined | - | |
| vec_similarity | number | null | undefined | - | |
| keyword_rank | number | null | undefined | - |
DecisionSearchResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| query* | string | - | |
| mode* | DecisionSearchMode | - | |
| total* | number | - | |
| results* | DecisionSearchResult[] | - |
UserSearchResult
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| full_name* | string | - | |
| email* | string | - |
AttentionSlot
| Prop | Type | Default | Description |
|---|---|---|---|
| id* | string | - | |
| executive_id* | string | - | |
| hypothesis_id* | string | - | |
| priority_rank* | number | - | |
| priority_score* | number | - | |
| signal_summary* | SignalSummary | - | |
| escalation_deadline* | string | null | - | |
| escalated_from* | string | null | - | |
| status* | SlotStatus | - | |
| closed_reason* | string | null | - | |
| created_at* | string | - | |
| updated_at* | string | - | |
| decayed_at* | string | null | - | |
| act_by_deadline* | string | null | - | |
| severity* | SeverityLevel | null | - | |
| confidence_initial* | number | null | - | |
| confidence_current* | number | null | - | |
| swap_out_slot_id | string | null | undefined | - |
Supporting types
export type SeverityLevel = "info" | "low" | "medium" | "high" | "critical"
export type EquilibriumEqState = "CRITICAL" | "INTERVENTION" | "DRIFTING" | "STABLE"
export type DetailRecordStatus = "FORMING" | "SUFFICIENT" | "ROUTED" | "DECIDED" | "EXPIRED"
export type SignalRecordStatus = "active" | "decayed"
export type SlotStatus = "ACTIVE" | "IN_PROGRESS" | "EXPIRED" | "ESCALATED"
export type DecisionAction = "resolve" | "dismissed" | "escalate" | "schedule" | string
export type DecisionActionType = "resolve" | "dismissed" | "escalate"
export type TransferOfferStatus = "PENDING" | "ACCEPTED" | "DECLINED" | "EXPIRED" | "CANCELED" | "WITHDRAWN"
export type ShareStatus = "PENDING" | "ACCEPTED" | "DECLINED" | "EXPIRED" | "REVOKED" | "CANCELED"
export type ShareDirection = "both" | "incoming" | "outgoing"
export type DecisionLogEventType = | "hypothesis.created" | "hypothesis.routed" | "hypothesis.expired" | "signal.fired" | "decision.created" | "feedback.submitted" | string
export type DecisionLogSortBy = "newest" | "urgency" | "deadline" | "confidence" | "severity"
export type DecisionLogSortOrder = "asc" | "desc"
export type FeedbackVote = "agree" | "disagree" | "neutral"
export type DecisionSearchMode = "hybrid" | "vector" | "keyword"
Changelog
hypothesis-01
0.5.5
- Remove Redux/Next.js/domain-type violations from the
chat/andrecall/subcomponents: deleterecall/HypothesisDetailDialog.tsx(dispatched Redux actions, importednext/dynamicand an app-only component path), replace all@/types/entities/*and@/lib/date-formatimports with local structural types (components/chat-recall.types.ts) and existingHypothesis01.utilshelpers. RecallPanel/RecallSectionare now fully controlled:result,isLoading,error,onRetry,mode,onModeChange,highConfidenceOnly,onHighConfidenceOnlyChange,onViewHypothesisall come in as props instead of an internaluseRecall(Redux) hook.HypothesisChattakessuggestions,emptySuggestionCount,followUpSuggestionCount, andisDarkModeas props (with defaults) instead of importing@/constants/hypothesis-chat.constantsand detecting theme vianext-themes.SlotDetailDialog'srecallSlot?: ReactNodeescape hatch is replaced with a fully-typedrecall?: Omit<RecallPanelProps, "hypothesisId" | "enabled">, rendering the registry's ownRecallSectioninstead of an opaque host-supplied node.Hypothesis01is updated to match: it now accepts and forwards thisrecallprop instead of the stalerecallSlot.SlotDetailDialogno longer calls the nonexistent@/hooks/use-export-html/@/hooks/use-hypothesis-detail-csv-export(a Redux/domain-type violation and a build-breaking phantom import). Export is now fully host-owned viaonExportCsv?: () => void,onExportHtml?: () => void, andisExporting?: boolean, matchinginstitutional-memory-01'sDecisionLogDetailDialogconvention.Hypothesis01'sonPrepareDetailExportis replaced withonExportCsv/onExportHtml/isExporting, scoped to the selected slot's hypothesis id.- Fix a JSX indentation bug in
SlotDetailHeader's title span. - Fix a duplicate
RequestQueuePanel.tsxentry inregistry-item.json'sfiles[]; registerchat/,recall/,chat-recall.types.ts,SlotDetailExportHeader.tsx, andSlotDetailExportPanels.tsx. - Add
react-markdown,echarts,echarts-for-reacttodependencies; add@signalos/switch,@signalos/scroll-area,@signalos/dropdown-menu,@signalos/tabletoregistryDependencies.
0.4.5
- Move
stateConfig,stateBadgeVariant, andmetricStatusColorconstants toHypothesis01.constants.ts; expandHypothesis01.types.tswithEquilibriumSidebarProps,EquilibriumDetailSheetProps, and related types. - Slim down
EquilibriumSidebarby extracting shared type definitions into the types file.
0.4.4
- format code
0.4.3
- Add
EquilibriumSidebarcomponent with entry cards, pipeline filter, and metric-deviation detail dialog - Add
EquilibriumEntry,MetricDeviation,EligiblePipeline, andEquilibriumEqStatetypes toHypothesis01.types.ts - Wire equilibrium sidebar into
Hypothesis01: the Equilibrium button toggles a collapsible side panel; new propsequilibriumOpen,onEquilibriumOpenChange,equilibriumEntries,equilibriumLoading,equilibriumPipelines,equilibriumSelectedPipelineId,onEquilibriumSelectPipeline - Add
@signalos/selecttoregistryDependencies
0.3.1
0.3.0
- Add grid view support — renders card grid when view is set to "grid"
- Conditionally render inbox icon only when inbox items exist
- Replace cross-block import (
formatRelativeTimefrominstitutional-memory-01) with localformatRelativeutil - Replace raw color scales with semantic tokens (
bg-bg-error,text-text-error, etc.) - Remove dead internal
useStatefromAttentionSlotCardlist variant - Fix
KVRowhighlight color to use semantictext-text-error
0.2.1
0.2.0
- Refactored all components to be fully props-driven and presentation-only
- Removed Redux dependencies from CollaboratorsPanel and ShareSlotDialog
- Removed external imports from ShareRequestsPanel (now self-contained)
- Deduplicated types file, added missing interfaces (SignalSummary, HypothesisEvidenceItem, UserSearchResult)
- Renamed componetns/ to components/ (typo fix)
- Added ScrollArea imports to SlotDetailDialog and SignalDetailMiniDialog
- Fixed slot:any type in HypothesisCard to use AttentionSlot
- Added missing formatShortDateTime import in HypothesisCard
- Registered all shipped component files in registry-item.json