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,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System State Intelligence Model
|
|
3
|
+
* Phase 5: UI-Driven Architecture Lock-In
|
|
4
|
+
*
|
|
5
|
+
* This is the authoritative system intelligence model.
|
|
6
|
+
* The UI reads from this, never computes values itself.
|
|
7
|
+
*
|
|
8
|
+
* Architecture:
|
|
9
|
+
* Runtime State (AppState) → System Intelligence (SystemState) → UI Rendering
|
|
10
|
+
*
|
|
11
|
+
* The 5 mandatory intelligence surfaces are:
|
|
12
|
+
* 1. system_posture
|
|
13
|
+
* 2. network_context
|
|
14
|
+
* 3. asset_registry_summary
|
|
15
|
+
* 4. operation_feed
|
|
16
|
+
* 5. capability_flags
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* System State Provider
|
|
20
|
+
* Computes SystemState from AppState
|
|
21
|
+
* This is the single source of truth for intelligence data
|
|
22
|
+
*/
|
|
23
|
+
export class SystemStateProvider {
|
|
24
|
+
cachedState = null;
|
|
25
|
+
lastAppStateVersion = 0;
|
|
26
|
+
appStateVersion = 0;
|
|
27
|
+
/**
|
|
28
|
+
* Compute system posture from app state
|
|
29
|
+
* Phase 5: Centralized, deterministic computation
|
|
30
|
+
*/
|
|
31
|
+
computeSystemPosture(state) {
|
|
32
|
+
// Determine overall posture
|
|
33
|
+
let overallPosture;
|
|
34
|
+
let sourceOfTruth;
|
|
35
|
+
if (!state.systemReady) {
|
|
36
|
+
overallPosture = 'CRITICAL';
|
|
37
|
+
sourceOfTruth = 'system_initialization';
|
|
38
|
+
}
|
|
39
|
+
else if (state.gatewayConnected && state.localMode) {
|
|
40
|
+
overallPosture = 'OPERATIONAL';
|
|
41
|
+
sourceOfTruth = 'hybrid_mode';
|
|
42
|
+
}
|
|
43
|
+
else if (state.gatewayConnected) {
|
|
44
|
+
overallPosture = 'OPERATIONAL';
|
|
45
|
+
sourceOfTruth = 'gateway_connection';
|
|
46
|
+
}
|
|
47
|
+
else if (state.localMode) {
|
|
48
|
+
overallPosture = 'OPERATIONAL';
|
|
49
|
+
sourceOfTruth = 'local_mode';
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
overallPosture = 'DEGRADED';
|
|
53
|
+
sourceOfTruth = 'no_connection';
|
|
54
|
+
}
|
|
55
|
+
// Determine execution mode
|
|
56
|
+
let executionMode;
|
|
57
|
+
if (state.localMode && state.gatewayConnected) {
|
|
58
|
+
executionMode = 'HYBRID';
|
|
59
|
+
}
|
|
60
|
+
else if (state.localMode) {
|
|
61
|
+
executionMode = 'LOCAL';
|
|
62
|
+
}
|
|
63
|
+
else if (state.gatewayConnected) {
|
|
64
|
+
executionMode = 'REMOTE';
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
executionMode = 'LOCAL'; // Fallback
|
|
68
|
+
}
|
|
69
|
+
// Determine risk level
|
|
70
|
+
let riskLevel;
|
|
71
|
+
if (overallPosture === 'CRITICAL') {
|
|
72
|
+
riskLevel = 'HIGH';
|
|
73
|
+
}
|
|
74
|
+
else if (overallPosture === 'DEGRADED') {
|
|
75
|
+
riskLevel = 'ELEVATED';
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
riskLevel = 'LOW';
|
|
79
|
+
}
|
|
80
|
+
// Track last state change (would be tracked in state transitions)
|
|
81
|
+
// For v1, use current timestamp (would track actual state transitions)
|
|
82
|
+
const lastStateChange = Date.now();
|
|
83
|
+
return {
|
|
84
|
+
overallPosture,
|
|
85
|
+
executionMode,
|
|
86
|
+
riskLevel,
|
|
87
|
+
lastStateChange,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Compute network context from app state
|
|
92
|
+
* Phase 5: Spatial and infrastructural awareness
|
|
93
|
+
*/
|
|
94
|
+
computeNetworkContext(state) {
|
|
95
|
+
// Operator origin (privacy-safe, approximate)
|
|
96
|
+
const operatorOrigin = {
|
|
97
|
+
region: process.env.OPERATOR_REGION || 'UNKNOWN',
|
|
98
|
+
networkType: (() => {
|
|
99
|
+
if (state.localMode)
|
|
100
|
+
return 'LOCAL';
|
|
101
|
+
if (state.gatewayUrl?.includes('localhost') || state.gatewayUrl?.includes('127.0.0.1')) {
|
|
102
|
+
return 'LOCAL';
|
|
103
|
+
}
|
|
104
|
+
if (state.gatewayUrl?.includes('vpn') || state.gatewayUrl?.includes('tunnel')) {
|
|
105
|
+
return 'VPN';
|
|
106
|
+
}
|
|
107
|
+
if (state.gatewayUrl) {
|
|
108
|
+
return 'CLOUD';
|
|
109
|
+
}
|
|
110
|
+
return 'UNKNOWN';
|
|
111
|
+
})(),
|
|
112
|
+
};
|
|
113
|
+
// Target infrastructure
|
|
114
|
+
const targetInfrastructure = {
|
|
115
|
+
gatewayRegion: state.gatewayUrl
|
|
116
|
+
? this.extractRegionFromUrl(state.gatewayUrl)
|
|
117
|
+
: 'NONE',
|
|
118
|
+
databaseRegion: state.gatewayConnected
|
|
119
|
+
? this.extractRegionFromUrl(state.gatewayUrl || '')
|
|
120
|
+
: 'NONE',
|
|
121
|
+
latencyClass: (() => {
|
|
122
|
+
// Simplified - would measure actual latency
|
|
123
|
+
if (state.localMode)
|
|
124
|
+
return 'LOW';
|
|
125
|
+
if (state.gatewayConnected)
|
|
126
|
+
return 'MEDIUM';
|
|
127
|
+
return 'HIGH';
|
|
128
|
+
})(),
|
|
129
|
+
};
|
|
130
|
+
return {
|
|
131
|
+
operatorOrigin,
|
|
132
|
+
targetInfrastructure,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Extract region from URL (simplified)
|
|
137
|
+
*/
|
|
138
|
+
extractRegionFromUrl(url) {
|
|
139
|
+
if (url.includes('localhost') || url.includes('127.0.0.1'))
|
|
140
|
+
return 'LOCAL';
|
|
141
|
+
if (url.includes('us-'))
|
|
142
|
+
return 'US';
|
|
143
|
+
if (url.includes('eu-'))
|
|
144
|
+
return 'EU';
|
|
145
|
+
if (url.includes('ap-'))
|
|
146
|
+
return 'APAC';
|
|
147
|
+
return 'UNKNOWN';
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Compute asset registry summary
|
|
151
|
+
* Phase 5: Deployed intelligence surface
|
|
152
|
+
*/
|
|
153
|
+
computeAssetRegistrySummary(state) {
|
|
154
|
+
const total = state.customAgents.size;
|
|
155
|
+
// Count by status
|
|
156
|
+
const activeRuns = state.runHistory.filter(r => r.status === 'RUNNING');
|
|
157
|
+
const failedRuns = state.runHistory.filter(r => r.status === 'FAILED');
|
|
158
|
+
const active = activeRuns.length;
|
|
159
|
+
const error = failedRuns.length > 0 && failedRuns[0].timestamp > Date.now() - 60000 ? 1 : 0;
|
|
160
|
+
const idle = Math.max(0, total - active - error);
|
|
161
|
+
// Primary asset (last used or pinned)
|
|
162
|
+
let highlighted = null;
|
|
163
|
+
if (activeRuns.length > 0) {
|
|
164
|
+
const activeRun = activeRuns[activeRuns.length - 1];
|
|
165
|
+
const asset = Array.from(state.customAgents.values()).find(a => a.name === activeRun.agentName);
|
|
166
|
+
if (asset) {
|
|
167
|
+
highlighted = {
|
|
168
|
+
name: asset.name,
|
|
169
|
+
status: 'ACTIVE',
|
|
170
|
+
reason: 'Currently executing',
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
else if (state.runHistory.length > 0) {
|
|
175
|
+
const lastRun = state.runHistory[state.runHistory.length - 1];
|
|
176
|
+
const asset = Array.from(state.customAgents.values()).find(a => a.name === lastRun.agentName);
|
|
177
|
+
if (asset) {
|
|
178
|
+
highlighted = {
|
|
179
|
+
name: asset.name,
|
|
180
|
+
status: lastRun.status === 'FAILED' ? 'ERROR' : 'IDLE',
|
|
181
|
+
reason: lastRun.status === 'FAILED' ? 'Recent failure' : 'Last used',
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
else if (total > 0) {
|
|
186
|
+
const firstAsset = Array.from(state.customAgents.values())[0];
|
|
187
|
+
highlighted = {
|
|
188
|
+
name: firstAsset.name,
|
|
189
|
+
status: 'IDLE',
|
|
190
|
+
reason: 'Available',
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
total,
|
|
195
|
+
active,
|
|
196
|
+
idle,
|
|
197
|
+
error,
|
|
198
|
+
highlighted,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get operation feed
|
|
203
|
+
* Phase 5: Living operational pulse
|
|
204
|
+
*/
|
|
205
|
+
getOperationFeed(state) {
|
|
206
|
+
// Return last 10 events (hard limit)
|
|
207
|
+
return state.operationEvents.slice(-10);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Compute capability flags
|
|
211
|
+
* Phase 5: What the system is capable of right now
|
|
212
|
+
*/
|
|
213
|
+
computeCapabilityFlags(state) {
|
|
214
|
+
return {
|
|
215
|
+
gateway: state.gatewayConnected ? 'READY' : 'DEGRADED',
|
|
216
|
+
database: state.gatewayConnected ? 'READY' : 'NOT_INITIALIZED',
|
|
217
|
+
memoryLayer: state.gatewayConnected ? 'PERSISTENT' : 'IN_MEMORY',
|
|
218
|
+
security: state.currentUser ? 'JWT' : 'OPEN',
|
|
219
|
+
rateLimiting: 'DISABLED', // Would check actual config
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Compute complete SystemState from AppState
|
|
224
|
+
* This is the single computation point
|
|
225
|
+
*/
|
|
226
|
+
compute(state) {
|
|
227
|
+
// Increment version for cache invalidation
|
|
228
|
+
this.appStateVersion++;
|
|
229
|
+
const systemState = {
|
|
230
|
+
systemPosture: this.computeSystemPosture(state),
|
|
231
|
+
networkContext: this.computeNetworkContext(state),
|
|
232
|
+
assetRegistrySummary: this.computeAssetRegistrySummary(state),
|
|
233
|
+
operationFeed: this.getOperationFeed(state),
|
|
234
|
+
capabilityFlags: this.computeCapabilityFlags(state),
|
|
235
|
+
computedAt: Date.now(),
|
|
236
|
+
version: this.appStateVersion,
|
|
237
|
+
};
|
|
238
|
+
// Cache the result
|
|
239
|
+
this.cachedState = systemState;
|
|
240
|
+
this.lastAppStateVersion = this.appStateVersion;
|
|
241
|
+
return systemState;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Get cached state if available and valid
|
|
245
|
+
* Otherwise compute fresh
|
|
246
|
+
*/
|
|
247
|
+
get(state, forceRefresh = false) {
|
|
248
|
+
if (!forceRefresh && this.cachedState && this.appStateVersion === this.lastAppStateVersion) {
|
|
249
|
+
return this.cachedState;
|
|
250
|
+
}
|
|
251
|
+
return this.compute(state);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Invalidate cache (call when state changes)
|
|
255
|
+
*/
|
|
256
|
+
invalidate() {
|
|
257
|
+
this.cachedState = null;
|
|
258
|
+
this.lastAppStateVersion = 0;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Global system state provider instance
|
|
263
|
+
* Single source of truth for intelligence data
|
|
264
|
+
*/
|
|
265
|
+
export const systemStateProvider = new SystemStateProvider();
|
|
266
|
+
/**
|
|
267
|
+
* Get current system state
|
|
268
|
+
* This is what the UI reads from
|
|
269
|
+
*/
|
|
270
|
+
export function getSystemState(state, forceRefresh = false) {
|
|
271
|
+
return systemStateProvider.get(state, forceRefresh);
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=system-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-state.js","sourceRoot":"","sources":["../src/system-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boot Sequence
|
|
3
|
+
* Phase 7: Scan page → Hub transition
|
|
4
|
+
*/
|
|
5
|
+
import type { Widgets } from 'neo-blessed';
|
|
6
|
+
/**
|
|
7
|
+
* Render boot screen
|
|
8
|
+
*/
|
|
9
|
+
export declare function renderBootScreen(screen: Widgets.Screen): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=sequence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequence.d.ts","sourceRoot":"","sources":["../../../src/ui/boot/sequence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAU3C;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+I5E"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boot Sequence
|
|
3
|
+
* Phase 7: Scan page → Hub transition
|
|
4
|
+
*/
|
|
5
|
+
import { getBlessedColor } from '../theme/tokens.js';
|
|
6
|
+
import { navigationState } from '../navigation/state.js';
|
|
7
|
+
/**
|
|
8
|
+
* Render boot screen
|
|
9
|
+
*/
|
|
10
|
+
export async function renderBootScreen(screen) {
|
|
11
|
+
const blessed = require('neo-blessed');
|
|
12
|
+
const blessedLib = blessed;
|
|
13
|
+
const noAnimations = process.env.NO_ANIMATIONS === '1';
|
|
14
|
+
const bootDuration = parseInt(process.env.BOOT_DURATION_MS || '2000', 10);
|
|
15
|
+
const startTime = Date.now();
|
|
16
|
+
// Create boot container
|
|
17
|
+
const bootBox = blessedLib.box({
|
|
18
|
+
top: 0,
|
|
19
|
+
left: 0,
|
|
20
|
+
width: screen.width,
|
|
21
|
+
height: screen.height,
|
|
22
|
+
border: { type: 'line' },
|
|
23
|
+
style: {
|
|
24
|
+
border: { fg: getBlessedColor('primaryPurple') },
|
|
25
|
+
},
|
|
26
|
+
tags: true,
|
|
27
|
+
});
|
|
28
|
+
screen.append(bootBox);
|
|
29
|
+
screen.render();
|
|
30
|
+
// Header
|
|
31
|
+
const header = `{${getBlessedColor('primaryPurple')}-fg}{bold}4Runr OS Intelligence Console{/bold}`;
|
|
32
|
+
const version = `{${getBlessedColor('mutedGrey')}-fg}v1.0.34{/}`;
|
|
33
|
+
// Boot checks
|
|
34
|
+
const checks = [
|
|
35
|
+
{ label: 'CONFIG', status: 'checking' },
|
|
36
|
+
{ label: 'GATEWAY', status: 'checking' },
|
|
37
|
+
{ label: 'DB', status: 'checking' },
|
|
38
|
+
{ label: 'SECURITY', status: 'checking' },
|
|
39
|
+
{ label: 'CAPABILITIES', status: 'checking' },
|
|
40
|
+
];
|
|
41
|
+
// Simulate checks (in real implementation, these would be actual checks)
|
|
42
|
+
const checkInterval = 200; // ms per check
|
|
43
|
+
let checkIndex = 0;
|
|
44
|
+
const updateBootScreen = () => {
|
|
45
|
+
const content = [];
|
|
46
|
+
content.push('');
|
|
47
|
+
content.push(` ${header}`);
|
|
48
|
+
content.push(` ${version}`);
|
|
49
|
+
content.push('');
|
|
50
|
+
content.push(`{${getBlessedColor('accentCyan')}-fg} BOOT SEQUENCE{/}`);
|
|
51
|
+
content.push('');
|
|
52
|
+
checks.forEach((check, idx) => {
|
|
53
|
+
let statusText = '';
|
|
54
|
+
let statusColor = getBlessedColor('mutedGrey');
|
|
55
|
+
if (check.status === 'checking') {
|
|
56
|
+
if (noAnimations) {
|
|
57
|
+
statusText = '...';
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Simple spinner: cycle through | / - \
|
|
61
|
+
const spinnerChars = ['|', '/', '-', '\\'];
|
|
62
|
+
const spinnerIndex = Math.floor((Date.now() - startTime) / 150) % spinnerChars.length;
|
|
63
|
+
statusText = spinnerChars[spinnerIndex];
|
|
64
|
+
}
|
|
65
|
+
statusColor = getBlessedColor('accentCyan');
|
|
66
|
+
}
|
|
67
|
+
else if (check.status === 'ok') {
|
|
68
|
+
statusText = 'OK';
|
|
69
|
+
statusColor = getBlessedColor('successGreen');
|
|
70
|
+
}
|
|
71
|
+
else if (check.status === 'degraded') {
|
|
72
|
+
statusText = 'DEGRADED';
|
|
73
|
+
statusColor = getBlessedColor('warnAmber');
|
|
74
|
+
}
|
|
75
|
+
else if (check.status === 'error') {
|
|
76
|
+
statusText = 'ERROR';
|
|
77
|
+
statusColor = getBlessedColor('criticalRed');
|
|
78
|
+
}
|
|
79
|
+
else if (check.status === 'timeout') {
|
|
80
|
+
statusText = 'TIMEOUT';
|
|
81
|
+
statusColor = getBlessedColor('warnAmber');
|
|
82
|
+
}
|
|
83
|
+
const message = check.message ? ` (${check.message})` : '';
|
|
84
|
+
content.push(` {${getBlessedColor('mutedGrey')}-fg}${check.label.padEnd(12)}{/} {${statusColor}-fg}${statusText}{/}${message}`);
|
|
85
|
+
});
|
|
86
|
+
content.push('');
|
|
87
|
+
// Transition message when all checks complete
|
|
88
|
+
const allComplete = checks.every(c => c.status !== 'checking');
|
|
89
|
+
if (allComplete) {
|
|
90
|
+
content.push(`{${getBlessedColor('accentCyan')}-fg} TRANSITION → INTELLIGENCE CONSOLE{/}`);
|
|
91
|
+
}
|
|
92
|
+
bootBox.setContent(content.join('\n'));
|
|
93
|
+
screen.render();
|
|
94
|
+
};
|
|
95
|
+
// Initial render
|
|
96
|
+
updateBootScreen();
|
|
97
|
+
// Simulate checks
|
|
98
|
+
const checkTimer = setInterval(() => {
|
|
99
|
+
if (checkIndex < checks.length) {
|
|
100
|
+
// Simulate check result (in real implementation, perform actual checks)
|
|
101
|
+
const check = checks[checkIndex];
|
|
102
|
+
const elapsed = Date.now() - startTime;
|
|
103
|
+
// Simulate timeout if check takes too long
|
|
104
|
+
if (elapsed > 1000 && check.status === 'checking') {
|
|
105
|
+
check.status = 'timeout';
|
|
106
|
+
}
|
|
107
|
+
else if (check.status === 'checking') {
|
|
108
|
+
// Most checks succeed
|
|
109
|
+
if (check.label === 'GATEWAY') {
|
|
110
|
+
check.status = 'degraded';
|
|
111
|
+
check.message = 'not connected';
|
|
112
|
+
}
|
|
113
|
+
else if (check.label === 'DB') {
|
|
114
|
+
check.status = 'ok';
|
|
115
|
+
check.message = 'in-memory';
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
check.status = 'ok';
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
checkIndex++;
|
|
122
|
+
updateBootScreen();
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
clearInterval(checkTimer);
|
|
126
|
+
}
|
|
127
|
+
}, checkInterval);
|
|
128
|
+
// Wait for boot duration
|
|
129
|
+
await new Promise(resolve => setTimeout(resolve, bootDuration));
|
|
130
|
+
// Clean up
|
|
131
|
+
clearInterval(checkTimer);
|
|
132
|
+
bootBox.destroy();
|
|
133
|
+
// Check for fatal errors
|
|
134
|
+
const hasFatalError = checks.some(c => c.status === 'error');
|
|
135
|
+
if (hasFatalError) {
|
|
136
|
+
// Show safe hold screen
|
|
137
|
+
renderSafeHoldScreen(screen);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// Transition to hub
|
|
141
|
+
navigationState.goToHub();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Render safe hold screen (fatal config error)
|
|
146
|
+
*/
|
|
147
|
+
function renderSafeHoldScreen(screen) {
|
|
148
|
+
const blessed = require('neo-blessed');
|
|
149
|
+
const blessedLib = blessed;
|
|
150
|
+
const { getBlessedColor } = require('../theme/tokens.js');
|
|
151
|
+
const safeHoldBox = blessedLib.box({
|
|
152
|
+
top: 0,
|
|
153
|
+
left: 0,
|
|
154
|
+
width: screen.width,
|
|
155
|
+
height: screen.height,
|
|
156
|
+
border: { type: 'line' },
|
|
157
|
+
style: {
|
|
158
|
+
border: { fg: getBlessedColor('criticalRed') },
|
|
159
|
+
},
|
|
160
|
+
tags: true,
|
|
161
|
+
});
|
|
162
|
+
const content = [];
|
|
163
|
+
content.push('');
|
|
164
|
+
content.push(`{${getBlessedColor('criticalRed')}-fg}{bold}SAFE HOLD{/bold}`);
|
|
165
|
+
content.push('');
|
|
166
|
+
content.push(`POSTURE: {${getBlessedColor('criticalRed')}-fg}OFFLINE{/}`);
|
|
167
|
+
content.push('');
|
|
168
|
+
content.push(`{${getBlessedColor('mutedGrey')}-fg}Action: : system or : help{/}`);
|
|
169
|
+
safeHoldBox.setContent(content.join('\n'));
|
|
170
|
+
screen.append(safeHoldBox);
|
|
171
|
+
screen.render();
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=sequence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequence.js","sourceRoot":"","sources":["../../../src/ui/boot/sequence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layout Specification
|
|
3
|
+
* Phase 8: Terminal fit & layout constraints
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Terminal minimum size
|
|
7
|
+
*/
|
|
8
|
+
export declare const TERMINAL_MIN_WIDTH = 120;
|
|
9
|
+
export declare const TERMINAL_MIN_HEIGHT = 35;
|
|
10
|
+
/**
|
|
11
|
+
* Panel line budgets
|
|
12
|
+
*/
|
|
13
|
+
export declare const LINE_BUDGETS: {
|
|
14
|
+
readonly SMALL_PANEL: 6;
|
|
15
|
+
readonly OPERATIONS_FEED: 12;
|
|
16
|
+
readonly BOTTOM_BAR: 1;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Layout specification
|
|
20
|
+
*/
|
|
21
|
+
export declare const layoutSpec: {
|
|
22
|
+
readonly terminal: {
|
|
23
|
+
readonly minWidth: 120;
|
|
24
|
+
readonly minHeight: 35;
|
|
25
|
+
};
|
|
26
|
+
readonly panels: {
|
|
27
|
+
readonly small: {
|
|
28
|
+
readonly maxContentLines: 6;
|
|
29
|
+
};
|
|
30
|
+
readonly feed: {
|
|
31
|
+
readonly maxEntries: 12;
|
|
32
|
+
};
|
|
33
|
+
readonly bottomBar: {
|
|
34
|
+
readonly height: 1;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Check if terminal size meets minimum requirements
|
|
40
|
+
*/
|
|
41
|
+
export declare function checkTerminalSize(width: number, height: number): {
|
|
42
|
+
valid: boolean;
|
|
43
|
+
widthOk: boolean;
|
|
44
|
+
heightOk: boolean;
|
|
45
|
+
message?: string;
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=layoutSpec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutSpec.d.ts","sourceRoot":"","sources":["../../../src/ui/constraints/layoutSpec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC;;GAEG;AACH,eAAO,MAAM,YAAY;;;;CAIf,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;CAgBb,CAAC;AAEX;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAkBA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layout Specification
|
|
3
|
+
* Phase 8: Terminal fit & layout constraints
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Terminal minimum size
|
|
7
|
+
*/
|
|
8
|
+
export const TERMINAL_MIN_WIDTH = 120;
|
|
9
|
+
export const TERMINAL_MIN_HEIGHT = 35;
|
|
10
|
+
/**
|
|
11
|
+
* Panel line budgets
|
|
12
|
+
*/
|
|
13
|
+
export const LINE_BUDGETS = {
|
|
14
|
+
SMALL_PANEL: 6, // Max content lines (excluding border + title)
|
|
15
|
+
OPERATIONS_FEED: 12, // Max feed entries
|
|
16
|
+
BOTTOM_BAR: 1, // Status strip
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Layout specification
|
|
20
|
+
*/
|
|
21
|
+
export const layoutSpec = {
|
|
22
|
+
terminal: {
|
|
23
|
+
minWidth: TERMINAL_MIN_WIDTH,
|
|
24
|
+
minHeight: TERMINAL_MIN_HEIGHT,
|
|
25
|
+
},
|
|
26
|
+
panels: {
|
|
27
|
+
small: {
|
|
28
|
+
maxContentLines: LINE_BUDGETS.SMALL_PANEL,
|
|
29
|
+
},
|
|
30
|
+
feed: {
|
|
31
|
+
maxEntries: LINE_BUDGETS.OPERATIONS_FEED,
|
|
32
|
+
},
|
|
33
|
+
bottomBar: {
|
|
34
|
+
height: LINE_BUDGETS.BOTTOM_BAR,
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Check if terminal size meets minimum requirements
|
|
40
|
+
*/
|
|
41
|
+
export function checkTerminalSize(width, height) {
|
|
42
|
+
const widthOk = width >= TERMINAL_MIN_WIDTH;
|
|
43
|
+
const heightOk = height >= TERMINAL_MIN_HEIGHT;
|
|
44
|
+
const valid = widthOk && heightOk;
|
|
45
|
+
if (!valid) {
|
|
46
|
+
const issues = [];
|
|
47
|
+
if (!widthOk)
|
|
48
|
+
issues.push(`width ${width} < ${TERMINAL_MIN_WIDTH}`);
|
|
49
|
+
if (!heightOk)
|
|
50
|
+
issues.push(`height ${height} < ${TERMINAL_MIN_HEIGHT}`);
|
|
51
|
+
return {
|
|
52
|
+
valid: false,
|
|
53
|
+
widthOk,
|
|
54
|
+
heightOk,
|
|
55
|
+
message: `Terminal too small: ${issues.join(', ')}`,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return { valid: true, widthOk: true, heightOk: true };
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=layoutSpec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layoutSpec.js","sourceRoot":"","sources":["../../../src/ui/constraints/layoutSpec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AACtC,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,WAAW,EAAE,CAAC,EAAS,+CAA+C;IACtE,eAAe,EAAE,EAAE,EAAI,mBAAmB;IAC1C,UAAU,EAAE,CAAC,EAAU,eAAe;CAC9B,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ,EAAE;QACR,QAAQ,EAAE,kBAAkB;QAC5B,SAAS,EAAE,mBAAmB;KAC/B;IACD,MAAM,EAAE;QACN,KAAK,EAAE;YACL,eAAe,EAAE,YAAY,CAAC,WAAW;SAC1C;QACD,IAAI,EAAE;YACJ,UAAU,EAAE,YAAY,CAAC,eAAe;SACzC;QACD,SAAS,EAAE;YACT,MAAM,EAAE,YAAY,CAAC,UAAU;SAChC;KACF;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,MAAc;IAM7D,MAAM,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,mBAAmB,CAAC;IAC/C,MAAM,KAAK,GAAG,OAAO,IAAI,QAAQ,CAAC;IAElC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,MAAM,kBAAkB,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,MAAM,mBAAmB,EAAE,CAAC,CAAC;QACxE,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,OAAO;YACP,QAAQ;YACR,OAAO,EAAE,uBAAuB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SACpD,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unknown Handling
|
|
3
|
+
* Phase 8: No fake data - all unknown values display as UNKNOWN
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Format a value, ensuring unknown values display as "UNKNOWN"
|
|
7
|
+
*
|
|
8
|
+
* Rules:
|
|
9
|
+
* - null, undefined, "UNKNOWN" → "UNKNOWN"
|
|
10
|
+
* - Empty string → "UNKNOWN"
|
|
11
|
+
* - All other values → string representation
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatValue(value: any, options?: {
|
|
14
|
+
unknownLabel?: string;
|
|
15
|
+
allowEmpty?: boolean;
|
|
16
|
+
}): string;
|
|
17
|
+
/**
|
|
18
|
+
* Format value with optional cause code
|
|
19
|
+
* Example: "UNKNOWN (TIMEOUT)"
|
|
20
|
+
*/
|
|
21
|
+
export declare function formatValueWithCause(value: any, cause?: string, options?: {
|
|
22
|
+
unknownLabel?: string;
|
|
23
|
+
}): string;
|
|
24
|
+
/**
|
|
25
|
+
* Validate that a value is not fake/placeholder
|
|
26
|
+
* Throws if value looks like a placeholder
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateNotPlaceholder(value: any): void;
|
|
29
|
+
//# sourceMappingURL=unknownHandling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unknownHandling.d.ts","sourceRoot":"","sources":["../../../src/ui/constraints/unknownHandling.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,GAAG,EACV,OAAO,GAAE;IACP,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACjB,GACL,MAAM,CAyBR;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,GAAG,EACV,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,GAAE;IACP,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL,MAAM,CAUR;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CASvD"}
|