Equilibrium Review
v0.5.0Full-page equilibrium definition review block. Displays AI-generated equilibrium definitions with metrics, weights, thresholds, and batch review tracking.
Preview
Install & usage
npx shadcn@latest add @signalos/equilibrium-01Pulls the page source plus its widget dependencies (@signalos/tokens, @signalos/utils, @signalos/button, @signalos/badge, @signalos/input, @signalos/label, @signalos/select, @signalos/checkbox, @signalos/tooltip, @signalos/textarea, @signalos/split-panel, @signalos/command, @signalos/popover, @signalos/progress, @signalos/page-header, @signalos/dialog) into your app - you own the copy. Requires access.
usage
// after: npx shadcn@latest add @signalos/equilibrium-01
// mount the pulled page in a route, e.g. src/app/semantics-details/page.tsx
import Equilibrium from "@/components/blocks/equilibrium-01/Equilibrium"
export default function Page() {
return <Equilibrium />
}Props
EquilibriumStateThresholds
| Prop | Type | Default | Description |
|---|---|---|---|
| STABLE* | number | - | |
| DRIFTING* | number | - | |
| INTERVENTION* | number | - | |
| CRITICAL* | number | - |
EquilibriumDefinition
| Prop | Type | Default | Description |
|---|---|---|---|
| equilibrium_id* | string | - | |
| name* | string | - | |
| description* | string | - | |
| domain* | string | - | |
| scoring_method* | EquilibriumScoringMethod | - | |
| decay_rate* | number | - | |
| healthy_range* | [number, number] | - | |
| metrics* | string[] | - | |
| weights* | Record<string, number> | - | |
| confidence* | number | - | |
| state_thresholds* | EquilibriumStateThresholds | - | |
| review_origin | string | null | undefined | - |
MetricCatalogEntry
| Prop | Type | Default | Description |
|---|---|---|---|
| display_name | string | null | undefined | - | |
| description | string | null | undefined | - | |
| direction | MetricDirection | null | undefined | - | |
| unit | string | null | undefined | - | |
| connector_id | string | null | undefined | - | |
| source_cluster | string | null | undefined | - | |
| is_cross_source | boolean | null | undefined | - | |
| source_entities | string[] | null | undefined | - | |
| sql_logic | string | null | undefined | - |
EquilibriaArtifact
| Prop | Type | Default | Description |
|---|---|---|---|
| definitions* | EquilibriumDefinition[] | - |
EquilibriumReviewItem
| Prop | Type | Default | Description |
|---|---|---|---|
| index* | number | - | |
| status* | "accepted" | "flagged" | "deleted" | - | |
| feedback* | string | - | |
| edits* | Partial<Pick<EquilibriumDefinition, "name" | "domain" | "scoring_method" | "decay_rate" | "description" | "healthy_range" | "state_thresholds" | "metrics" | "weights" | "confidence">> | - | |
| connector_id | string | undefined | - | |
| item_id | string | undefined | - |
SubmitEquilibriaReviewPayload
| Prop | Type | Default | Description |
|---|---|---|---|
| action* | "confirm" | "retry" | - | |
| items | EquilibriumReviewItem[] | undefined | - |
EquilibriumItemEdits
| Prop | Type | Default | Description |
|---|---|---|---|
| equilibrium_id | string | undefined | - | |
| name* | string | - | |
| description* | string | - | |
| domain* | string | - | |
| scoring_method* | EquilibriumScoringMethod | - | |
| decay_rate* | number | - | |
| healthy_range* | [number, number] | - | |
| state_thresholds* | EquilibriumStateThresholds | - | |
| confidence* | number | - | |
| metrics* | string[] | - | |
| weights* | Record<string, number> | - |
AddEquilibriumPayload
| Prop | Type | Default | Description |
|---|---|---|---|
| action* | "add_item" | "improve_new_item" | - | |
| feedback | string | undefined | - | |
| item_edits* | EquilibriumItemEdits | - | |
| connector_id | string | undefined | - |
AddEquilibriumResponse
| Prop | Type | Default | Description |
|---|---|---|---|
| status | string | undefined | - | |
| item | EquilibriumDefinition | undefined | - | |
| soft_warning | string | undefined | - |
Supporting types
export type EquilibriumScoringMethod = "weighted_average" | "geometric_mean"
export type MetricDirection = "up_is_good" | "down_is_good" | "neutral"
export type MetricCatalog = Record<string, MetricCatalogEntry>
More Semantics Stages variants
Changelog
0.5.0
- Extract
AddDialogFormFieldsinto its own component file; splitStateThresholdsSectionandMetricsWeightsSectioninto dedicated subcomponents. - Decompose
EquilibriumAddDialog,EquilibriumEditView,EquilibriumReadView,EquilibriumQueue, andEquilibriumDetailinto thecomponents/folder.
0.4.10
- Replace raw scale token classes with semantic tokens (text-text-error, bg-bg-success, border-border-warning, etc.) to respect client theme overrides.
0.4.9
- Fix cross-item imports to use canonical @/components paths; add missing signalos.category to manifests.
0.4.8
Equilibrium: removeisSubmittingprop andmetricPickerOpen/onMetricPickerChangeprops (metric picker open state is now internal toEquilibriumDetail).Equilibrium: addonAddFormValidationFailcallback prop; thread through toEquilibriumAddDialog.Equilibrium: move confirmed banner outsidePageHeader, update border token toborder-border-successand removeCheckCircle2icon.Equilibrium: rename confirm buttondata-testidfromequilibrium-confirm-buttontoequilibrium-submit-button.Equilibrium: update header description copy.EquilibriumAddDialog: replaceFormDialog+TextFieldwith rawDialog/DialogContent/DialogHeader/DialogTitle/DialogDescription/DialogFooterandLabel+Input; addonValidationFailprop.EquilibriumAddDialog: moveMetricCatalogEntryimport frommetrics-01to localEquilibrium.types.ts.Equilibrium.types.ts: defineMetricCatalogandMetricCatalogEntrylocally; remove import frommetrics-01.- Remove
@signalos/form-dialogand@signalos/text-fieldfromregistryDependencies; add@signalos/label.
0.4.7
- Replace raw Dialog/DialogFooter with FormDialog in EquilibriumAddDialog; custom footer carries error banner + cancel/create buttons.
- Replace Label + Input with TextField for Name, Domain, Decay Rate, and Healthy Range fields; Description textarea keeps inline label + aria-invalid.
- Fix raw color tokens: text-destructive → text-text-error, bg-destructive/10 → bg-bg-error, border-destructive/30 → border-border-error throughout.
- Swap @signalos/dialog + @signalos/label → @signalos/form-dialog + @signalos/text-field; @signalos/input kept for compact inline weight/threshold rows.
0.4.5
- Fix removed statics buttons
0.4.4
- Fix file casing: rename Metrics.types.ts to match PascalCase import paths.
0.4.3
- Lift EquilibriumAddDialog form state (form, errors, metricPickerOpen) to props. Parent now owns all add-dialog state via addForm, addFormErrors, addMetricPickerOpen, onAddFormChange, onAddMetricPickerOpenChange.
0.3.1
- Replace desktop
lg:grid-cols-12layout withSplitPanelwidget for the queue/detail split. - Mobile tab-switcher layout unchanged;
SplitPanelis shown only onlg:and above. - Add
@signalos/split-paneltoregistryDependencies.
0.2.0
Initial release.