4runr-os 1.0.23 → 1.0.36
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/dist/collectors/collector_assets.d.ts +19 -0
- package/dist/collectors/collector_assets.d.ts.map +1 -0
- package/dist/collectors/collector_assets.js +72 -0
- package/dist/collectors/collector_assets.js.map +1 -0
- package/dist/collectors/collector_capabilities.d.ts +19 -0
- package/dist/collectors/collector_capabilities.d.ts.map +1 -0
- package/dist/collectors/collector_capabilities.js +61 -0
- package/dist/collectors/collector_capabilities.js.map +1 -0
- package/dist/collectors/collector_feed.d.ts +30 -0
- package/dist/collectors/collector_feed.d.ts.map +1 -0
- package/dist/collectors/collector_feed.js +78 -0
- package/dist/collectors/collector_feed.js.map +1 -0
- package/dist/collectors/collector_geo.d.ts +12 -0
- package/dist/collectors/collector_geo.d.ts.map +1 -0
- package/dist/collectors/collector_geo.js +248 -0
- package/dist/collectors/collector_geo.js.map +1 -0
- package/dist/collectors/collector_network.d.ts +22 -0
- package/dist/collectors/collector_network.d.ts.map +1 -0
- package/dist/collectors/collector_network.js +83 -0
- package/dist/collectors/collector_network.js.map +1 -0
- package/dist/collectors/collector_posture.d.ts +25 -0
- package/dist/collectors/collector_posture.d.ts.map +1 -0
- package/dist/collectors/collector_posture.js +207 -0
- package/dist/collectors/collector_posture.js.map +1 -0
- package/dist/collectors/collector_resources.d.ts +21 -0
- package/dist/collectors/collector_resources.d.ts.map +1 -0
- package/dist/collectors/collector_resources.js +87 -0
- package/dist/collectors/collector_resources.js.map +1 -0
- package/dist/collectors/helpers.d.ts +21 -0
- package/dist/collectors/helpers.d.ts.map +1 -0
- package/dist/collectors/helpers.js +49 -0
- package/dist/collectors/helpers.js.map +1 -0
- package/dist/core/collectorRegistry.d.ts +43 -0
- package/dist/core/collectorRegistry.d.ts.map +1 -0
- package/dist/core/collectorRegistry.js +76 -0
- package/dist/core/collectorRegistry.js.map +1 -0
- package/dist/core/constants.d.ts +25 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +33 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/eventBus.d.ts +36 -0
- package/dist/core/eventBus.d.ts.map +1 -0
- package/dist/core/eventBus.js +52 -0
- package/dist/core/eventBus.js.map +1 -0
- package/dist/core/types.d.ts +128 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +6 -0
- package/dist/core/types.js.map +1 -0
- package/dist/events.d.ts +35 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +89 -0
- package/dist/events.js.map +1 -0
- package/dist/index.js +301 -36
- package/dist/index.js.map +1 -1
- package/dist/models.d.ts +74 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +7 -0
- package/dist/models.js.map +1 -0
- package/dist/state/getCollectorResults.d.ts +18 -0
- package/dist/state/getCollectorResults.d.ts.map +1 -0
- package/dist/state/getCollectorResults.js +25 -0
- package/dist/state/getCollectorResults.js.map +1 -0
- package/dist/state/historyStore.d.ts +35 -0
- package/dist/state/historyStore.d.ts.map +1 -0
- package/dist/state/historyStore.js +58 -0
- package/dist/state/historyStore.js.map +1 -0
- package/dist/state/uiStateBuilder.d.ts +12 -0
- package/dist/state/uiStateBuilder.d.ts.map +1 -0
- package/dist/state/uiStateBuilder.js +169 -0
- package/dist/state/uiStateBuilder.js.map +1 -0
- package/dist/state/uiStateScheduler.d.ts +43 -0
- package/dist/state/uiStateScheduler.d.ts.map +1 -0
- package/dist/state/uiStateScheduler.js +118 -0
- package/dist/state/uiStateScheduler.js.map +1 -0
- package/dist/store.d.ts +3 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +2 -0
- package/dist/store.js.map +1 -1
- package/dist/system-state.d.ts +96 -0
- package/dist/system-state.d.ts.map +1 -0
- package/dist/system-state.js +273 -0
- package/dist/system-state.js.map +1 -0
- package/dist/ui/boot/sequence.d.ts +10 -0
- package/dist/ui/boot/sequence.d.ts.map +1 -0
- package/dist/ui/boot/sequence.js +173 -0
- package/dist/ui/boot/sequence.js.map +1 -0
- package/dist/ui/constraints/layoutSpec.d.ts +47 -0
- package/dist/ui/constraints/layoutSpec.d.ts.map +1 -0
- package/dist/ui/constraints/layoutSpec.js +60 -0
- package/dist/ui/constraints/layoutSpec.js.map +1 -0
- package/dist/ui/constraints/unknownHandling.d.ts +29 -0
- package/dist/ui/constraints/unknownHandling.d.ts.map +1 -0
- package/dist/ui/constraints/unknownHandling.js +60 -0
- package/dist/ui/constraints/unknownHandling.js.map +1 -0
- package/dist/ui/drilldowns/feed.d.ts +11 -0
- package/dist/ui/drilldowns/feed.d.ts.map +1 -0
- package/dist/ui/drilldowns/feed.js +68 -0
- package/dist/ui/drilldowns/feed.js.map +1 -0
- package/dist/ui/drilldowns/index.d.ts +7 -0
- package/dist/ui/drilldowns/index.d.ts.map +1 -0
- package/dist/ui/drilldowns/index.js +8 -0
- package/dist/ui/drilldowns/index.js.map +1 -0
- package/dist/ui/drilldowns/posture.d.ts +11 -0
- package/dist/ui/drilldowns/posture.d.ts.map +1 -0
- package/dist/ui/drilldowns/posture.js +74 -0
- package/dist/ui/drilldowns/posture.js.map +1 -0
- package/dist/ui/intelligence-posture-view.d.ts +22 -0
- package/dist/ui/intelligence-posture-view.d.ts.map +1 -0
- package/dist/ui/intelligence-posture-view.js +169 -0
- package/dist/ui/intelligence-posture-view.js.map +1 -0
- package/dist/ui/navigation/keymaps.d.ts +26 -0
- package/dist/ui/navigation/keymaps.d.ts.map +1 -0
- package/dist/ui/navigation/keymaps.js +135 -0
- package/dist/ui/navigation/keymaps.js.map +1 -0
- package/dist/ui/navigation/palette.d.ts +10 -0
- package/dist/ui/navigation/palette.d.ts.map +1 -0
- package/dist/ui/navigation/palette.js +133 -0
- package/dist/ui/navigation/palette.js.map +1 -0
- package/dist/ui/navigation/state.d.ts +47 -0
- package/dist/ui/navigation/state.d.ts.map +1 -0
- package/dist/ui/navigation/state.js +84 -0
- package/dist/ui/navigation/state.js.map +1 -0
- package/dist/ui/navigation/types.d.ts +38 -0
- package/dist/ui/navigation/types.d.ts.map +1 -0
- package/dist/ui/navigation/types.js +36 -0
- package/dist/ui/navigation/types.js.map +1 -0
- package/dist/ui/panels/active-assets.d.ts +12 -0
- package/dist/ui/panels/active-assets.d.ts.map +1 -0
- package/dist/ui/panels/active-assets.js +83 -0
- package/dist/ui/panels/active-assets.js.map +1 -0
- package/dist/ui/panels/capability-flags.d.ts +12 -0
- package/dist/ui/panels/capability-flags.d.ts.map +1 -0
- package/dist/ui/panels/capability-flags.js +59 -0
- package/dist/ui/panels/capability-flags.js.map +1 -0
- package/dist/ui/panels/command-surface.d.ts +12 -0
- package/dist/ui/panels/command-surface.d.ts.map +1 -0
- package/dist/ui/panels/command-surface.js +55 -0
- package/dist/ui/panels/command-surface.js.map +1 -0
- package/dist/ui/panels/network-origin.d.ts +12 -0
- package/dist/ui/panels/network-origin.d.ts.map +1 -0
- package/dist/ui/panels/network-origin.js +79 -0
- package/dist/ui/panels/network-origin.js.map +1 -0
- package/dist/ui/panels/operations-feed.d.ts +12 -0
- package/dist/ui/panels/operations-feed.d.ts.map +1 -0
- package/dist/ui/panels/operations-feed.js +90 -0
- package/dist/ui/panels/operations-feed.js.map +1 -0
- package/dist/ui/panels/posture.d.ts +12 -0
- package/dist/ui/panels/posture.d.ts.map +1 -0
- package/dist/ui/panels/posture.js +84 -0
- package/dist/ui/panels/posture.js.map +1 -0
- package/dist/ui/panels/resources.d.ts +11 -0
- package/dist/ui/panels/resources.d.ts.map +1 -0
- package/dist/ui/panels/resources.js +88 -0
- package/dist/ui/panels/resources.js.map +1 -0
- package/dist/ui/primitives/Panel.d.ts +25 -0
- package/dist/ui/primitives/Panel.d.ts.map +1 -0
- package/dist/ui/primitives/Panel.js +59 -0
- package/dist/ui/primitives/Panel.js.map +1 -0
- package/dist/ui/rendering/metricRenderer.d.ts +24 -0
- package/dist/ui/rendering/metricRenderer.d.ts.map +1 -0
- package/dist/ui/rendering/metricRenderer.js +86 -0
- package/dist/ui/rendering/metricRenderer.js.map +1 -0
- package/dist/ui/runtime/hub.d.ts +12 -0
- package/dist/ui/runtime/hub.d.ts.map +1 -0
- package/dist/ui/runtime/hub.js +468 -0
- package/dist/ui/runtime/hub.js.map +1 -0
- package/dist/ui/runtime/hubValidation.d.ts +23 -0
- package/dist/ui/runtime/hubValidation.d.ts.map +1 -0
- package/dist/ui/runtime/hubValidation.js +90 -0
- package/dist/ui/runtime/hubValidation.js.map +1 -0
- package/dist/ui/runtime/index.d.ts +29 -0
- package/dist/ui/runtime/index.d.ts.map +1 -0
- package/dist/ui/runtime/index.js +299 -0
- package/dist/ui/runtime/index.js.map +1 -0
- package/dist/ui/runtime/no-tui.d.ts +12 -0
- package/dist/ui/runtime/no-tui.d.ts.map +1 -0
- package/dist/ui/runtime/no-tui.js +77 -0
- package/dist/ui/runtime/no-tui.js.map +1 -0
- package/dist/ui/runtime/state-builder.d.ts +13 -0
- package/dist/ui/runtime/state-builder.d.ts.map +1 -0
- package/dist/ui/runtime/state-builder.js +114 -0
- package/dist/ui/runtime/state-builder.js.map +1 -0
- package/dist/ui/runtime/terminalSizeCheck.d.ts +10 -0
- package/dist/ui/runtime/terminalSizeCheck.d.ts.map +1 -0
- package/dist/ui/runtime/terminalSizeCheck.js +51 -0
- package/dist/ui/runtime/terminalSizeCheck.js.map +1 -0
- package/dist/ui/runtime/tuiLogGate.d.ts +22 -0
- package/dist/ui/runtime/tuiLogGate.d.ts.map +1 -0
- package/dist/ui/runtime/tuiLogGate.js +68 -0
- package/dist/ui/runtime/tuiLogGate.js.map +1 -0
- package/dist/ui/state/types.d.ts +72 -0
- package/dist/ui/state/types.d.ts.map +1 -0
- package/dist/ui/state/types.js +6 -0
- package/dist/ui/state/types.js.map +1 -0
- package/dist/ui/theme/borders.d.ts +20 -0
- package/dist/ui/theme/borders.d.ts.map +1 -0
- package/dist/ui/theme/borders.js +55 -0
- package/dist/ui/theme/borders.js.map +1 -0
- package/dist/ui/theme/tokens.d.ts +28 -0
- package/dist/ui/theme/tokens.d.ts.map +1 -0
- package/dist/ui/theme/tokens.js +50 -0
- package/dist/ui/theme/tokens.js.map +1 -0
- package/dist/ui/theme/typography.d.ts +14 -0
- package/dist/ui/theme/typography.d.ts.map +1 -0
- package/dist/ui/theme/typography.js +30 -0
- package/dist/ui/theme/typography.js.map +1 -0
- package/dist/ui/widgets/flagRow.d.ts +25 -0
- package/dist/ui/widgets/flagRow.d.ts.map +1 -0
- package/dist/ui/widgets/flagRow.js +57 -0
- package/dist/ui/widgets/flagRow.js.map +1 -0
- package/dist/ui/widgets/index.d.ts +9 -0
- package/dist/ui/widgets/index.d.ts.map +1 -0
- package/dist/ui/widgets/index.js +9 -0
- package/dist/ui/widgets/index.js.map +1 -0
- package/dist/ui/widgets/meter.d.ts +18 -0
- package/dist/ui/widgets/meter.d.ts.map +1 -0
- package/dist/ui/widgets/meter.js +38 -0
- package/dist/ui/widgets/meter.js.map +1 -0
- package/dist/ui/widgets/miniMap.d.ts +26 -0
- package/dist/ui/widgets/miniMap.d.ts.map +1 -0
- package/dist/ui/widgets/miniMap.js +94 -0
- package/dist/ui/widgets/miniMap.js.map +1 -0
- package/dist/ui/widgets/sparkline.d.ts +17 -0
- package/dist/ui/widgets/sparkline.d.ts.map +1 -0
- package/dist/ui/widgets/sparkline.js +63 -0
- package/dist/ui/widgets/sparkline.js.map +1 -0
- package/dist/ui-primitives.d.ts +5 -2
- package/dist/ui-primitives.d.ts.map +1 -1
- package/dist/ui-primitives.js +22 -9
- package/dist/ui-primitives.js.map +1 -1
- package/package.json +5 -4
- package/dist/ui/home-view.d.ts +0 -27
- package/dist/ui/home-view.d.ts.map +0 -1
- package/dist/ui/home-view.js +0 -127
- package/dist/ui/home-view.js.map +0 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State Builder
|
|
3
|
+
* Phase 1: Build UiState from AppState (or use UNKNOWN if not available)
|
|
4
|
+
*/
|
|
5
|
+
import { getSystemState } from '../../system-state.js';
|
|
6
|
+
/**
|
|
7
|
+
* Build UI state from application state
|
|
8
|
+
* Uses real values if available, otherwise UNKNOWN
|
|
9
|
+
* NO FAKE DATA - this is a hard requirement
|
|
10
|
+
*/
|
|
11
|
+
export function buildUiState(appState) {
|
|
12
|
+
// Try to get system state if available
|
|
13
|
+
let systemState;
|
|
14
|
+
try {
|
|
15
|
+
systemState = getSystemState(appState, false);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
systemState = null;
|
|
19
|
+
}
|
|
20
|
+
// System Posture
|
|
21
|
+
const system_posture = systemState
|
|
22
|
+
? {
|
|
23
|
+
overallPosture: systemState.systemPosture.overallPosture,
|
|
24
|
+
executionMode: systemState.systemPosture.executionMode,
|
|
25
|
+
riskLevel: systemState.systemPosture.riskLevel,
|
|
26
|
+
}
|
|
27
|
+
: {
|
|
28
|
+
overallPosture: 'UNKNOWN',
|
|
29
|
+
executionMode: 'UNKNOWN',
|
|
30
|
+
riskLevel: 'UNKNOWN',
|
|
31
|
+
};
|
|
32
|
+
// Network Context
|
|
33
|
+
const network_context = systemState
|
|
34
|
+
? {
|
|
35
|
+
operatorOrigin: {
|
|
36
|
+
region: systemState.networkContext.operatorOrigin.region || 'UNKNOWN',
|
|
37
|
+
networkType: systemState.networkContext.operatorOrigin.networkType,
|
|
38
|
+
},
|
|
39
|
+
targetInfrastructure: {
|
|
40
|
+
gatewayRegion: systemState.networkContext.targetInfrastructure.gatewayRegion || 'UNKNOWN',
|
|
41
|
+
databaseRegion: systemState.networkContext.targetInfrastructure.databaseRegion || 'UNKNOWN',
|
|
42
|
+
latencyClass: systemState.networkContext.targetInfrastructure.latencyClass,
|
|
43
|
+
},
|
|
44
|
+
}
|
|
45
|
+
: {
|
|
46
|
+
operatorOrigin: {
|
|
47
|
+
region: 'UNKNOWN',
|
|
48
|
+
networkType: 'UNKNOWN',
|
|
49
|
+
},
|
|
50
|
+
targetInfrastructure: {
|
|
51
|
+
gatewayRegion: 'UNKNOWN',
|
|
52
|
+
databaseRegion: 'UNKNOWN',
|
|
53
|
+
latencyClass: 'UNKNOWN',
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
// Asset Registry Summary
|
|
57
|
+
const asset_registry_summary = systemState
|
|
58
|
+
? {
|
|
59
|
+
total: systemState.assetRegistrySummary.total,
|
|
60
|
+
active: systemState.assetRegistrySummary.active,
|
|
61
|
+
idle: systemState.assetRegistrySummary.idle,
|
|
62
|
+
error: systemState.assetRegistrySummary.error,
|
|
63
|
+
highlighted: systemState.assetRegistrySummary.highlighted
|
|
64
|
+
? {
|
|
65
|
+
name: systemState.assetRegistrySummary.highlighted.name,
|
|
66
|
+
status: systemState.assetRegistrySummary.highlighted.status,
|
|
67
|
+
}
|
|
68
|
+
: null,
|
|
69
|
+
}
|
|
70
|
+
: {
|
|
71
|
+
total: 0,
|
|
72
|
+
active: 0,
|
|
73
|
+
idle: 0,
|
|
74
|
+
error: 0,
|
|
75
|
+
highlighted: null,
|
|
76
|
+
};
|
|
77
|
+
// Operation Feed
|
|
78
|
+
const operation_feed = systemState
|
|
79
|
+
? {
|
|
80
|
+
events: systemState.operationFeed.map(e => ({
|
|
81
|
+
type: e.type,
|
|
82
|
+
description: e.description,
|
|
83
|
+
timestamp: e.timestamp,
|
|
84
|
+
severity: e.severity,
|
|
85
|
+
})),
|
|
86
|
+
}
|
|
87
|
+
: {
|
|
88
|
+
events: [],
|
|
89
|
+
};
|
|
90
|
+
// Capability Flags
|
|
91
|
+
const capability_flags = systemState
|
|
92
|
+
? {
|
|
93
|
+
gateway: systemState.capabilityFlags.gateway,
|
|
94
|
+
database: systemState.capabilityFlags.database,
|
|
95
|
+
memoryLayer: systemState.capabilityFlags.memoryLayer,
|
|
96
|
+
security: systemState.capabilityFlags.security,
|
|
97
|
+
rateLimiting: systemState.capabilityFlags.rateLimiting,
|
|
98
|
+
}
|
|
99
|
+
: {
|
|
100
|
+
gateway: 'UNKNOWN',
|
|
101
|
+
database: 'UNKNOWN',
|
|
102
|
+
memoryLayer: 'UNKNOWN',
|
|
103
|
+
security: 'UNKNOWN',
|
|
104
|
+
rateLimiting: 'UNKNOWN',
|
|
105
|
+
};
|
|
106
|
+
return {
|
|
107
|
+
system_posture,
|
|
108
|
+
network_context,
|
|
109
|
+
asset_registry_summary,
|
|
110
|
+
operation_feed,
|
|
111
|
+
capability_flags,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=state-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-builder.js","sourceRoot":"","sources":["../../../src/ui/runtime/state-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Size Check
|
|
3
|
+
* Phase 8: Runtime check for terminal size
|
|
4
|
+
*/
|
|
5
|
+
import type { Widgets } from 'neo-blessed';
|
|
6
|
+
/**
|
|
7
|
+
* Check terminal size and render fallback if too small
|
|
8
|
+
*/
|
|
9
|
+
export declare function checkAndRenderTerminalSize(screen: Widgets.Screen): boolean;
|
|
10
|
+
//# sourceMappingURL=terminalSizeCheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminalSizeCheck.d.ts","sourceRoot":"","sources":["../../../src/ui/runtime/terminalSizeCheck.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAI3C;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAY1E"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Size Check
|
|
3
|
+
* Phase 8: Runtime check for terminal size
|
|
4
|
+
*/
|
|
5
|
+
import { checkTerminalSize } from '../constraints/layoutSpec.js';
|
|
6
|
+
import { getBlessedColor } from '../theme/tokens.js';
|
|
7
|
+
/**
|
|
8
|
+
* Check terminal size and render fallback if too small
|
|
9
|
+
*/
|
|
10
|
+
export function checkAndRenderTerminalSize(screen) {
|
|
11
|
+
const width = screen.width;
|
|
12
|
+
const height = screen.height;
|
|
13
|
+
const check = checkTerminalSize(width, height);
|
|
14
|
+
if (!check.valid) {
|
|
15
|
+
renderTerminalTooSmallScreen(screen, width, height, check.message);
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Render fallback screen when terminal is too small
|
|
22
|
+
*/
|
|
23
|
+
function renderTerminalTooSmallScreen(screen, currentWidth, currentHeight, message) {
|
|
24
|
+
const blessed = require('neo-blessed');
|
|
25
|
+
const blessedLib = blessed;
|
|
26
|
+
// Clear screen
|
|
27
|
+
screen.children.forEach((child) => child.destroy());
|
|
28
|
+
const fallbackBox = blessedLib.box({
|
|
29
|
+
top: 0,
|
|
30
|
+
left: 0,
|
|
31
|
+
width: screen.width,
|
|
32
|
+
height: screen.height,
|
|
33
|
+
border: { type: 'line' },
|
|
34
|
+
style: {
|
|
35
|
+
border: { fg: getBlessedColor('warnAmber') },
|
|
36
|
+
},
|
|
37
|
+
tags: true,
|
|
38
|
+
});
|
|
39
|
+
const content = [];
|
|
40
|
+
content.push('');
|
|
41
|
+
content.push(`{${getBlessedColor('warnAmber')}-fg}{bold}TERMINAL TOO SMALL{/bold}`);
|
|
42
|
+
content.push('');
|
|
43
|
+
content.push(`{${getBlessedColor('mutedGrey')}-fg}Current size: ${currentWidth}x${currentHeight}{/}`);
|
|
44
|
+
content.push(`{${getBlessedColor('mutedGrey')}-fg}Required: 120x35{/}`);
|
|
45
|
+
content.push('');
|
|
46
|
+
content.push(`{${getBlessedColor('mutedGrey')}-fg}Hint: resize terminal or set NO_TUI=1{/}`);
|
|
47
|
+
fallbackBox.setContent(content.join('\n'));
|
|
48
|
+
screen.append(fallbackBox);
|
|
49
|
+
screen.render();
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=terminalSizeCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminalSizeCheck.js","sourceRoot":"","sources":["../../../src/ui/runtime/terminalSizeCheck.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,MAAsB;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAe,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAgB,CAAC;IAEvC,MAAM,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAE/C,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,4BAA4B,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,OAAQ,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,4BAA4B,CACnC,MAAsB,EACtB,YAAoB,EACpB,aAAqB,EACrB,OAAe;IAEf,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,MAAM,UAAU,GAAQ,OAAO,CAAC;IAEhC,eAAe;IACf,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAEzD,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC;QACjC,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,MAAM,CAAC,KAAe;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAgB;QAC/B,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACxB,KAAK,EAAE;YACL,MAAM,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC,EAAE;SAC7C;QACD,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;IAEH,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,WAAW,CAAC,qCAAqC,CAAC,CAAC;IACpF,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,WAAW,CAAC,qBAAqB,YAAY,IAAI,aAAa,KAAK,CAAC,CAAC;IACtG,OAAO,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;IACxE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,WAAW,CAAC,8CAA8C,CAAC,CAAC;IAE7F,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3B,MAAM,CAAC,MAAM,EAAE,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI Log Gate
|
|
3
|
+
* Phase 8: Prevent unstructured prints during TUI mode
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Initialize TUI log gate
|
|
7
|
+
* Overrides console methods to prevent unstructured prints
|
|
8
|
+
*/
|
|
9
|
+
export declare function initTuiLogGate(isDev?: boolean): void;
|
|
10
|
+
/**
|
|
11
|
+
* Restore original console methods
|
|
12
|
+
*/
|
|
13
|
+
export declare function restoreConsoleMethods(): void;
|
|
14
|
+
/**
|
|
15
|
+
* Get debug buffer (for optional debug panel)
|
|
16
|
+
*/
|
|
17
|
+
export declare function getDebugBuffer(): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Clear debug buffer
|
|
20
|
+
*/
|
|
21
|
+
export declare function clearDebugBuffer(): void;
|
|
22
|
+
//# sourceMappingURL=tuiLogGate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tuiLogGate.d.ts","sourceRoot":"","sources":["../../../src/ui/runtime/tuiLogGate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,GAAE,OAAe,GAAG,IAAI,CAgC3D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAQ5C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI Log Gate
|
|
3
|
+
* Phase 8: Prevent unstructured prints during TUI mode
|
|
4
|
+
*/
|
|
5
|
+
let originalConsoleLog;
|
|
6
|
+
let originalConsoleError;
|
|
7
|
+
let originalConsoleWarn;
|
|
8
|
+
let tuiModeActive = false;
|
|
9
|
+
let debugBuffer = [];
|
|
10
|
+
/**
|
|
11
|
+
* Initialize TUI log gate
|
|
12
|
+
* Overrides console methods to prevent unstructured prints
|
|
13
|
+
*/
|
|
14
|
+
export function initTuiLogGate(isDev = false) {
|
|
15
|
+
tuiModeActive = true;
|
|
16
|
+
// Save original methods
|
|
17
|
+
originalConsoleLog = console.log;
|
|
18
|
+
originalConsoleError = console.error;
|
|
19
|
+
originalConsoleWarn = console.warn;
|
|
20
|
+
// Override console.log
|
|
21
|
+
console.log = (...args) => {
|
|
22
|
+
if (isDev) {
|
|
23
|
+
// In dev, throw to catch violations early
|
|
24
|
+
throw new Error(`TUI mode: console.log() called. Use structured logger instead.\nArgs: ${JSON.stringify(args)}`);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// In prod, route to debug buffer (optional)
|
|
28
|
+
debugBuffer.push(`[LOG] ${args.join(' ')}`);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
// Override console.error (allow in TUI, but log to buffer)
|
|
32
|
+
console.error = (...args) => {
|
|
33
|
+
debugBuffer.push(`[ERROR] ${args.join(' ')}`);
|
|
34
|
+
// Still call original in case of critical errors
|
|
35
|
+
if (isDev) {
|
|
36
|
+
originalConsoleError(...args);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
// Override console.warn
|
|
40
|
+
console.warn = (...args) => {
|
|
41
|
+
debugBuffer.push(`[WARN] ${args.join(' ')}`);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Restore original console methods
|
|
46
|
+
*/
|
|
47
|
+
export function restoreConsoleMethods() {
|
|
48
|
+
if (tuiModeActive) {
|
|
49
|
+
console.log = originalConsoleLog;
|
|
50
|
+
console.error = originalConsoleError;
|
|
51
|
+
console.warn = originalConsoleWarn;
|
|
52
|
+
tuiModeActive = false;
|
|
53
|
+
debugBuffer = [];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get debug buffer (for optional debug panel)
|
|
58
|
+
*/
|
|
59
|
+
export function getDebugBuffer() {
|
|
60
|
+
return [...debugBuffer];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Clear debug buffer
|
|
64
|
+
*/
|
|
65
|
+
export function clearDebugBuffer() {
|
|
66
|
+
debugBuffer = [];
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=tuiLogGate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tuiLogGate.js","sourceRoot":"","sources":["../../../src/ui/runtime/tuiLogGate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,IAAI,kBAAsC,CAAC;AAC3C,IAAI,oBAA0C,CAAC;AAC/C,IAAI,mBAAwC,CAAC;AAC7C,IAAI,aAAa,GAAY,KAAK,CAAC;AACnC,IAAI,WAAW,GAAa,EAAE,CAAC;AAE/B;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAiB,KAAK;IACnD,aAAa,GAAG,IAAI,CAAC;IAErB,wBAAwB;IACxB,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;IACjC,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC;IACrC,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAEnC,uBAAuB;IACvB,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;QAC/B,IAAI,KAAK,EAAE,CAAC;YACV,0CAA0C;YAC1C,MAAM,IAAI,KAAK,CAAC,yEAAyE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnH,CAAC;aAAM,CAAC;YACN,4CAA4C;YAC5C,WAAW,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC;IAEF,2DAA2D;IAC3D,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;QACjC,WAAW,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9C,iDAAiD;QACjD,IAAI,KAAK,EAAE,CAAC;YACV,oBAAoB,CAAC,GAAG,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC;IAEF,wBAAwB;IACxB,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE;QAChC,WAAW,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,GAAG,kBAAkB,CAAC;QACjC,OAAO,CAAC,KAAK,GAAG,oBAAoB,CAAC;QACrC,OAAO,CAAC,IAAI,GAAG,mBAAmB,CAAC;QACnC,aAAa,GAAG,KAAK,CAAC;QACtB,WAAW,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,WAAW,GAAG,EAAE,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI State Types
|
|
3
|
+
* Phase 1: Stub state object - no fake data, use UNKNOWN if not available
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* System Posture State
|
|
7
|
+
*/
|
|
8
|
+
export interface SystemPostureState {
|
|
9
|
+
overallPosture: 'OPERATIONAL' | 'DEGRADED' | 'OFFLINE' | 'CRITICAL' | 'UNKNOWN';
|
|
10
|
+
executionMode: 'LOCAL' | 'REMOTE' | 'HYBRID' | 'UNKNOWN';
|
|
11
|
+
riskLevel: 'LOW' | 'ELEVATED' | 'HIGH' | 'UNKNOWN';
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Network Context State
|
|
15
|
+
*/
|
|
16
|
+
export interface NetworkContextState {
|
|
17
|
+
operatorOrigin: {
|
|
18
|
+
region: string;
|
|
19
|
+
networkType: 'LOCAL' | 'VPN' | 'CLOUD' | 'UNKNOWN';
|
|
20
|
+
};
|
|
21
|
+
targetInfrastructure: {
|
|
22
|
+
gatewayRegion: string;
|
|
23
|
+
databaseRegion: string;
|
|
24
|
+
latencyClass: 'LOW' | 'MEDIUM' | 'HIGH' | 'UNKNOWN';
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Asset Registry Summary State
|
|
29
|
+
*/
|
|
30
|
+
export interface AssetRegistrySummaryState {
|
|
31
|
+
total: number;
|
|
32
|
+
active: number;
|
|
33
|
+
idle: number;
|
|
34
|
+
error: number;
|
|
35
|
+
highlighted: {
|
|
36
|
+
name: string;
|
|
37
|
+
status: 'ACTIVE' | 'IDLE' | 'ERROR' | 'UNKNOWN';
|
|
38
|
+
} | null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Operation Feed State
|
|
42
|
+
*/
|
|
43
|
+
export interface OperationFeedState {
|
|
44
|
+
events: Array<{
|
|
45
|
+
type: string;
|
|
46
|
+
description: string;
|
|
47
|
+
timestamp: number;
|
|
48
|
+
severity: 'info' | 'warning' | 'critical';
|
|
49
|
+
}>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Capability Flags State
|
|
53
|
+
*/
|
|
54
|
+
export interface CapabilityFlagsState {
|
|
55
|
+
gateway: 'READY' | 'DEGRADED' | 'UNKNOWN';
|
|
56
|
+
database: 'READY' | 'NOT_INITIALIZED' | 'UNKNOWN';
|
|
57
|
+
memoryLayer: 'IN_MEMORY' | 'PERSISTENT' | 'UNKNOWN';
|
|
58
|
+
security: 'OPEN' | 'BASIC' | 'JWT' | 'UNKNOWN';
|
|
59
|
+
rateLimiting: 'ENABLED' | 'DISABLED' | 'UNKNOWN';
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Complete UI State
|
|
63
|
+
* Phase 1: Minimal stub - populate with real values if available, otherwise UNKNOWN
|
|
64
|
+
*/
|
|
65
|
+
export interface UiState {
|
|
66
|
+
system_posture: SystemPostureState;
|
|
67
|
+
network_context: NetworkContextState;
|
|
68
|
+
asset_registry_summary: AssetRegistrySummaryState;
|
|
69
|
+
operation_feed: OperationFeedState;
|
|
70
|
+
capability_flags: CapabilityFlagsState;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/state/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAChF,aAAa,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzD,SAAS,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;KACpD,CAAC;IACF,oBAAoB,EAAE;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;KACrD,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;KACjD,GAAG,IAAI,CAAC;CACV;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;KAC3C,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1C,QAAQ,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAAC;IAClD,WAAW,EAAE,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;IACpD,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;IAC/C,YAAY,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CAClD;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,cAAc,EAAE,kBAAkB,CAAC;IACnC,eAAe,EAAE,mBAAmB,CAAC;IACrC,sBAAsB,EAAE,yBAAyB,CAAC;IAClD,cAAc,EAAE,kBAAkB,CAAC;IACnC,gBAAgB,EAAE,oBAAoB,CAAC;CACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ui/state/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Border System
|
|
3
|
+
* Phase 7: Border "glow" without graphics
|
|
4
|
+
*/
|
|
5
|
+
import type { PanelId } from '../navigation/types.js';
|
|
6
|
+
export type BorderStyle = {
|
|
7
|
+
borderType: 'line' | 'bg' | 'bold';
|
|
8
|
+
borderColor: string;
|
|
9
|
+
titleColor: string;
|
|
10
|
+
};
|
|
11
|
+
export type Severity = 'OK' | 'WARNING' | 'CRITICAL' | 'NEUTRAL';
|
|
12
|
+
/**
|
|
13
|
+
* Get border style for panel
|
|
14
|
+
*/
|
|
15
|
+
export declare function getBorderStyle(panelId: PanelId, isFocused: boolean, severity?: Severity): BorderStyle;
|
|
16
|
+
/**
|
|
17
|
+
* Map status to severity
|
|
18
|
+
*/
|
|
19
|
+
export declare function statusToSeverity(status: string | 'OPERATIONAL' | 'DEGRADED' | 'OFFLINE' | 'CRITICAL' | 'UNKNOWN'): Severity;
|
|
20
|
+
//# sourceMappingURL=borders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"borders.d.ts","sourceRoot":"","sources":["../../../src/ui/theme/borders.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAEjE;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,OAAO,EAClB,QAAQ,GAAE,QAAoB,GAC7B,WAAW,CAkCb;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAC/E,QAAQ,CAMV"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Border System
|
|
3
|
+
* Phase 7: Border "glow" without graphics
|
|
4
|
+
*/
|
|
5
|
+
import { getBlessedColor } from './tokens.js';
|
|
6
|
+
/**
|
|
7
|
+
* Get border style for panel
|
|
8
|
+
*/
|
|
9
|
+
export function getBorderStyle(panelId, isFocused, severity = 'NEUTRAL') {
|
|
10
|
+
// Focus glow: cyan accent, double-line or brighter
|
|
11
|
+
if (isFocused) {
|
|
12
|
+
return {
|
|
13
|
+
borderType: 'bold', // Double-line effect via bold
|
|
14
|
+
borderColor: getBlessedColor('accentCyan'),
|
|
15
|
+
titleColor: getBlessedColor('accentCyan'),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
// Critical glow: red only when posture is CRITICAL
|
|
19
|
+
if (severity === 'CRITICAL') {
|
|
20
|
+
return {
|
|
21
|
+
borderType: 'line',
|
|
22
|
+
borderColor: getBlessedColor('criticalRed'),
|
|
23
|
+
titleColor: getBlessedColor('criticalRed'),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// Warning: amber for degraded
|
|
27
|
+
if (severity === 'WARNING') {
|
|
28
|
+
return {
|
|
29
|
+
borderType: 'line',
|
|
30
|
+
borderColor: getBlessedColor('warnAmber'),
|
|
31
|
+
titleColor: getBlessedColor('warnAmber'),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
// Standard: purple (brand identity)
|
|
35
|
+
return {
|
|
36
|
+
borderType: 'line',
|
|
37
|
+
borderColor: getBlessedColor('primaryPurple'),
|
|
38
|
+
titleColor: getBlessedColor('primaryPurple'),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Map status to severity
|
|
43
|
+
*/
|
|
44
|
+
export function statusToSeverity(status) {
|
|
45
|
+
if (status === 'OPERATIONAL')
|
|
46
|
+
return 'OK';
|
|
47
|
+
if (status === 'CRITICAL')
|
|
48
|
+
return 'CRITICAL';
|
|
49
|
+
if (status === 'DEGRADED')
|
|
50
|
+
return 'WARNING';
|
|
51
|
+
if (status === 'OFFLINE')
|
|
52
|
+
return 'WARNING'; // Amber unless critical dependency down
|
|
53
|
+
return 'NEUTRAL';
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=borders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"borders.js","sourceRoot":"","sources":["../../../src/ui/theme/borders.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAW9C;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,SAAkB,EAClB,WAAqB,SAAS;IAE9B,mDAAmD;IACnD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,UAAU,EAAE,MAAM,EAAE,8BAA8B;YAClD,WAAW,EAAE,eAAe,CAAC,YAAY,CAAC;YAC1C,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC;SAC1C,CAAC;IACJ,CAAC;IAED,mDAAmD;IACnD,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO;YACL,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,eAAe,CAAC,aAAa,CAAC;YAC3C,UAAU,EAAE,eAAe,CAAC,aAAa,CAAC;SAC3C,CAAC;IACJ,CAAC;IAED,8BAA8B;IAC9B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO;YACL,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,eAAe,CAAC,WAAW,CAAC;YACzC,UAAU,EAAE,eAAe,CAAC,WAAW,CAAC;SACzC,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,OAAO;QACL,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,eAAe,CAAC,eAAe,CAAC;QAC7C,UAAU,EAAE,eAAe,CAAC,eAAe,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAgF;IAEhF,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IAC7C,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC,CAAC,wCAAwC;IACpF,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Theme Tokens
|
|
3
|
+
* Phase 1: Single source of truth for terminal-safe colors
|
|
4
|
+
* Used by both TUI (blessed) and NO_TUI (text) modes
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Terminal color tokens
|
|
8
|
+
* These are terminal-safe ANSI color codes
|
|
9
|
+
*/
|
|
10
|
+
export declare const themeTokens: {
|
|
11
|
+
readonly primaryPurple: "magenta";
|
|
12
|
+
readonly accentCyan: "cyan";
|
|
13
|
+
readonly successGreen: "green";
|
|
14
|
+
readonly warnAmber: "yellow";
|
|
15
|
+
readonly criticalRed: "red";
|
|
16
|
+
readonly mutedGrey: "gray";
|
|
17
|
+
readonly standardWhite: "white";
|
|
18
|
+
readonly borderStyle: "line";
|
|
19
|
+
readonly titleStyle: {
|
|
20
|
+
readonly bold: true;
|
|
21
|
+
readonly fg: "magenta";
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Get blessed color name from token
|
|
26
|
+
*/
|
|
27
|
+
export declare function getBlessedColor(token: keyof typeof themeTokens): string;
|
|
28
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../src/ui/theme/tokens.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;CAwBd,CAAC;AAEX;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,OAAO,WAAW,GAAG,MAAM,CASvE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Theme Tokens
|
|
3
|
+
* Phase 1: Single source of truth for terminal-safe colors
|
|
4
|
+
* Used by both TUI (blessed) and NO_TUI (text) modes
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Terminal color tokens
|
|
8
|
+
* These are terminal-safe ANSI color codes
|
|
9
|
+
*/
|
|
10
|
+
export const themeTokens = {
|
|
11
|
+
// Primary brand color (purple)
|
|
12
|
+
primaryPurple: 'magenta',
|
|
13
|
+
// Accent color (cyan)
|
|
14
|
+
accentCyan: 'cyan',
|
|
15
|
+
// Status colors
|
|
16
|
+
successGreen: 'green',
|
|
17
|
+
warnAmber: 'yellow',
|
|
18
|
+
criticalRed: 'red',
|
|
19
|
+
// Neutral colors
|
|
20
|
+
mutedGrey: 'gray',
|
|
21
|
+
standardWhite: 'white',
|
|
22
|
+
// Border style
|
|
23
|
+
borderStyle: 'line', // 'line' for single, 'double' for double lines
|
|
24
|
+
// Title style
|
|
25
|
+
titleStyle: {
|
|
26
|
+
bold: true,
|
|
27
|
+
fg: 'magenta',
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Get blessed color name from token
|
|
32
|
+
*/
|
|
33
|
+
export function getBlessedColor(token) {
|
|
34
|
+
if (token === 'primaryPurple')
|
|
35
|
+
return 'magenta';
|
|
36
|
+
if (token === 'accentCyan')
|
|
37
|
+
return 'cyan';
|
|
38
|
+
if (token === 'successGreen')
|
|
39
|
+
return 'green';
|
|
40
|
+
if (token === 'warnAmber')
|
|
41
|
+
return 'yellow';
|
|
42
|
+
if (token === 'criticalRed')
|
|
43
|
+
return 'red';
|
|
44
|
+
if (token === 'mutedGrey')
|
|
45
|
+
return 'gray';
|
|
46
|
+
if (token === 'standardWhite')
|
|
47
|
+
return 'white';
|
|
48
|
+
return 'white';
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/ui/theme/tokens.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,+BAA+B;IAC/B,aAAa,EAAE,SAAS;IAExB,sBAAsB;IACtB,UAAU,EAAE,MAAM;IAElB,gBAAgB;IAChB,YAAY,EAAE,OAAO;IACrB,SAAS,EAAE,QAAQ;IACnB,WAAW,EAAE,KAAK;IAElB,iBAAiB;IACjB,SAAS,EAAE,MAAM;IACjB,aAAa,EAAE,OAAO;IAEtB,eAAe;IACf,WAAW,EAAE,MAAM,EAAE,+CAA+C;IAEpE,cAAc;IACd,UAAU,EAAE;QACV,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,SAAS;KACd;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAA+B;IAC7D,IAAI,KAAK,KAAK,eAAe;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,KAAK,KAAK,YAAY;QAAE,OAAO,MAAM,CAAC;IAC1C,IAAI,KAAK,KAAK,cAAc;QAAE,OAAO,OAAO,CAAC;IAC7C,IAAI,KAAK,KAAK,WAAW;QAAE,OAAO,QAAQ,CAAC;IAC3C,IAAI,KAAK,KAAK,aAAa;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,KAAK,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,KAAK,KAAK,eAAe;QAAE,OAAO,OAAO,CAAC;IAC9C,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typography Standard
|
|
3
|
+
* Phase 7: Strict title rendering
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Render panel title with consistent formatting
|
|
7
|
+
* Rules: ALL CAPS, padded with spaces, no punctuation
|
|
8
|
+
*/
|
|
9
|
+
export declare function renderPanelTitle(title: string, focused?: boolean): string;
|
|
10
|
+
/**
|
|
11
|
+
* Format label-value pair with consistent alignment
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatLabelValue(label: string, value: string, labelWidth?: number, valueColor?: string): string;
|
|
14
|
+
//# sourceMappingURL=typography.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typography.d.ts","sourceRoot":"","sources":["../../../src/ui/theme/typography.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,OAAe,GAAG,MAAM,CAehF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,UAAU,GAAE,MAAW,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAIR"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typography Standard
|
|
3
|
+
* Phase 7: Strict title rendering
|
|
4
|
+
*/
|
|
5
|
+
import { getBlessedColor } from './tokens.js';
|
|
6
|
+
/**
|
|
7
|
+
* Render panel title with consistent formatting
|
|
8
|
+
* Rules: ALL CAPS, padded with spaces, no punctuation
|
|
9
|
+
*/
|
|
10
|
+
export function renderPanelTitle(title, focused = false) {
|
|
11
|
+
// Ensure ALL CAPS
|
|
12
|
+
const upperTitle = title.toUpperCase();
|
|
13
|
+
// Pad with spaces: " POSTURE " or " OPERATIONS FEED "
|
|
14
|
+
const padded = ` ${upperTitle} `;
|
|
15
|
+
// Apply color (cyan if focused, purple otherwise)
|
|
16
|
+
const color = focused
|
|
17
|
+
? getBlessedColor('accentCyan')
|
|
18
|
+
: getBlessedColor('primaryPurple');
|
|
19
|
+
const style = focused ? '{bold}' : '';
|
|
20
|
+
return `${style}{${color}-fg}${padded}{/}${focused ? '{/bold}' : ''}`;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Format label-value pair with consistent alignment
|
|
24
|
+
*/
|
|
25
|
+
export function formatLabelValue(label, value, labelWidth = 12, valueColor) {
|
|
26
|
+
const paddedLabel = label.padEnd(labelWidth);
|
|
27
|
+
const color = valueColor || getBlessedColor('standardWhite');
|
|
28
|
+
return `{${getBlessedColor('mutedGrey')}-fg}${paddedLabel}{/}: {${color}-fg}${value}{/}`;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=typography.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typography.js","sourceRoot":"","sources":["../../../src/ui/theme/typography.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,UAAmB,KAAK;IACtE,kBAAkB;IAClB,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAEvC,sDAAsD;IACtD,MAAM,MAAM,GAAG,IAAI,UAAU,GAAG,CAAC;IAEjC,kDAAkD;IAClD,MAAM,KAAK,GAAG,OAAO;QACnB,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC;QAC/B,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IAErC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtC,OAAO,GAAG,KAAK,IAAI,KAAK,OAAO,MAAM,MAAM,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,KAAa,EACb,aAAqB,EAAE,EACvB,UAAmB;IAEnB,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,UAAU,IAAI,eAAe,CAAC,eAAe,CAAC,CAAC;IAC7D,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,OAAO,WAAW,SAAS,KAAK,OAAO,KAAK,KAAK,CAAC;AAC3F,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flag Row Widget
|
|
3
|
+
* Phase 4: Compact capability readiness strip
|
|
4
|
+
*/
|
|
5
|
+
export type Flag = {
|
|
6
|
+
key: string;
|
|
7
|
+
value: string;
|
|
8
|
+
level: "OK" | "WARN" | "BAD" | "UNKNOWN";
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Render flag row
|
|
12
|
+
* Format: KEY:VALUE KEY:VALUE ...
|
|
13
|
+
* Color is applied by caller using theme tokens
|
|
14
|
+
*/
|
|
15
|
+
export declare function renderFlagRow(flags: Flag[], maxFlags: number): string;
|
|
16
|
+
/**
|
|
17
|
+
* Get color token for flag level
|
|
18
|
+
* Returns theme token name for use with getBlessedColor
|
|
19
|
+
*/
|
|
20
|
+
export declare function getFlagColorToken(level: Flag['level']): string;
|
|
21
|
+
/**
|
|
22
|
+
* Convert capability value to flag level
|
|
23
|
+
*/
|
|
24
|
+
export declare function capabilityToLevel(value: string, capability: 'gateway' | 'database' | 'memory' | 'security' | 'rateLimit'): Flag['level'];
|
|
25
|
+
//# sourceMappingURL=flagRow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flagRow.d.ts","sourceRoot":"","sources":["../../../src/ui/widgets/flagRow.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,IAAI,GAAG;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,IAAI,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUrE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAY9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,GACvE,IAAI,CAAC,OAAO,CAAC,CAiBf"}
|