omegon 0.6.25 → 0.6.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/extensions/dashboard/footer.ts +33 -31
- package/package.json +1 -1
|
@@ -92,7 +92,7 @@ const CLEAVE_STALE_MS = 30_000;
|
|
|
92
92
|
/** Recovery notices auto-suppress in compact mode after this many ms with no new error. */
|
|
93
93
|
const RECOVERY_STALE_MS = 45_000;
|
|
94
94
|
const RAISED_NARROW_WIDTH = 100;
|
|
95
|
-
const RAISED_WIDE_WIDTH =
|
|
95
|
+
const RAISED_WIDE_WIDTH = 160;
|
|
96
96
|
|
|
97
97
|
type PrioritySegment = {
|
|
98
98
|
text: string;
|
|
@@ -810,24 +810,28 @@ export class DashboardFooter implements Component {
|
|
|
810
810
|
|
|
811
811
|
private formatModelTopologyLine(summary: DashboardModelRoleSummary, width: number, compact = false): string {
|
|
812
812
|
const theme = this.theme;
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
: summary.source === "cloud"
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
813
|
+
// In compact mode, use single-char glyphs to save space
|
|
814
|
+
const sourceBadge = compact
|
|
815
|
+
? (summary.source === "local" ? theme.fg("accent", "⌂") : summary.source === "cloud" ? theme.fg("muted", "☁") : theme.fg("dim", "?"))
|
|
816
|
+
: (summary.source === "local"
|
|
817
|
+
? theme.fg("accent", "local")
|
|
818
|
+
: summary.source === "cloud"
|
|
819
|
+
? theme.fg("muted", "cloud")
|
|
820
|
+
: theme.fg("dim", summary.source));
|
|
821
|
+
const stateBadge = compact
|
|
822
|
+
? "" // state is implicit in compact mode — icon color carries meaning
|
|
823
|
+
: (summary.state === "active"
|
|
824
|
+
? theme.fg("success", "active")
|
|
825
|
+
: summary.state === "offline"
|
|
826
|
+
? theme.fg("warning", "offline")
|
|
827
|
+
: summary.state === "fallback"
|
|
828
|
+
? theme.fg("warning", "fallback")
|
|
829
|
+
: theme.fg("dim", summary.state));
|
|
825
830
|
const normalized = normalizeLocalModelLabel(summary.model);
|
|
826
|
-
const alias = normalized.alias ? theme.fg("dim", `alias ${normalized.alias}`) : "";
|
|
827
|
-
const
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
return truncateToWidth(composePrimaryMetaLine(width, primary, [sourceBadge, stateBadge, summary.detail ? theme.fg("dim", summary.detail) : "", alias]), width, "…");
|
|
831
|
+
const alias = compact ? "" : (normalized.alias ? theme.fg("dim", `alias ${normalized.alias}`) : "");
|
|
832
|
+
const sep = compact ? " " : ` ${theme.fg("dim", "·")} `;
|
|
833
|
+
const primary = `${theme.fg("accent", summary.label)}${sep}${theme.fg("muted", normalized.canonical)}`;
|
|
834
|
+
return truncateToWidth(composePrimaryMetaLine(width, primary, [sourceBadge, stateBadge, summary.detail ? theme.fg("dim", summary.detail) : "", alias].filter(Boolean)), width, "…");
|
|
831
835
|
}
|
|
832
836
|
|
|
833
837
|
private buildSummaryCard(title: string, lines: string[], width: number): string[] {
|
|
@@ -841,7 +845,7 @@ export class DashboardFooter implements Component {
|
|
|
841
845
|
const contextCard = this.buildSummaryCard("context", this.buildHudContextLines(Math.max(1, width - 2)).map((l) => l.trimStart()), width);
|
|
842
846
|
const modelCard = this.buildSummaryCard(
|
|
843
847
|
"models",
|
|
844
|
-
this.buildModelTopologySummaries().map((s) => this.formatModelTopologyLine(s, Math.max(1, width - 2), width <
|
|
848
|
+
this.buildModelTopologySummaries().map((s) => this.formatModelTopologyLine(s, Math.max(1, width - 2), width < 120)),
|
|
845
849
|
width,
|
|
846
850
|
);
|
|
847
851
|
const memoryCard = this.buildSummaryCard("memory", (() => {
|
|
@@ -862,6 +866,7 @@ export class DashboardFooter implements Component {
|
|
|
862
866
|
}
|
|
863
867
|
|
|
864
868
|
if (width < RAISED_WIDE_WIDTH) {
|
|
869
|
+
// Two columns: context+memory on left, models+system on right
|
|
865
870
|
const left = [...contextCard, ...memoryCard];
|
|
866
871
|
const right = [...modelCard, ...(recoveryCard.length > 0 ? recoveryCard : []), ...systemCard];
|
|
867
872
|
const colWidth = Math.floor((width - 1) / 2);
|
|
@@ -869,19 +874,16 @@ export class DashboardFooter implements Component {
|
|
|
869
874
|
return mergeColumns(left, right, colWidth, rightWidth, this.theme.fg("dim", BOX.v));
|
|
870
875
|
}
|
|
871
876
|
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
const
|
|
877
|
+
// Wide: three columns — context+memory | models | system+recovery
|
|
878
|
+
// Gives each column ~50 chars at 160 cols, enough to avoid truncation.
|
|
879
|
+
const leftCard = [...contextCard, ...memoryCard];
|
|
880
|
+
const midCard = modelCard;
|
|
881
|
+
const rightCard = [...(recoveryCard.length > 0 ? recoveryCard : []), ...systemCard];
|
|
882
|
+
const colW = Math.floor((width - 2) / 3);
|
|
883
|
+
const lastColW = width - colW * 2 - 2;
|
|
875
884
|
const divider = this.theme.fg("dim", BOX.v);
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
for (let i = 1; i < cards.length; i++) {
|
|
879
|
-
const remainingCols = totalCols - i;
|
|
880
|
-
const nextWidth = i === cards.length - 1 ? width - usedWidth - 1 : colWidth;
|
|
881
|
-
merged = mergeColumns(merged, cards[i] ?? [], usedWidth, nextWidth, divider);
|
|
882
|
-
usedWidth += 1 + nextWidth;
|
|
883
|
-
}
|
|
884
|
-
return merged;
|
|
885
|
+
const leftMid = mergeColumns(leftCard, midCard, colW, colW, divider);
|
|
886
|
+
return mergeColumns(leftMid, rightCard, colW * 2 + 1, lastColW, divider);
|
|
885
887
|
}
|
|
886
888
|
|
|
887
889
|
// ── Section builders (shared by stacked + wide layouts) ───────
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "omegon",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.26",
|
|
4
4
|
"description": "Omegon — an opinionated distribution of pi (by Mario Zechner) with extensions for lifecycle management, memory, orchestration, and visualization",
|
|
5
5
|
"bin": {
|
|
6
6
|
"omegon": "bin/omegon.mjs",
|