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,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* History Store
|
|
3
|
+
* Phase 4: Rolling buffer for sparkline data
|
|
4
|
+
*/
|
|
5
|
+
import { SPARKLINE_HISTORY_SIZE } from '../core/constants.js';
|
|
6
|
+
/**
|
|
7
|
+
* Rolling buffer for metric samples
|
|
8
|
+
*/
|
|
9
|
+
class HistoryStore {
|
|
10
|
+
buffers = new Map();
|
|
11
|
+
constructor() {
|
|
12
|
+
// Initialize buffers
|
|
13
|
+
this.buffers.set('cpu', []);
|
|
14
|
+
this.buffers.set('ram', []);
|
|
15
|
+
this.buffers.set('latency', []);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Add sample to metric buffer
|
|
19
|
+
* Maintains last N samples, discards oldest
|
|
20
|
+
*/
|
|
21
|
+
addSample(key, value) {
|
|
22
|
+
const buffer = this.buffers.get(key);
|
|
23
|
+
if (!buffer)
|
|
24
|
+
return;
|
|
25
|
+
buffer.push(value);
|
|
26
|
+
// Keep only last N samples
|
|
27
|
+
if (buffer.length > SPARKLINE_HISTORY_SIZE) {
|
|
28
|
+
buffer.shift();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get last N samples for metric
|
|
33
|
+
*/
|
|
34
|
+
getSamples(key) {
|
|
35
|
+
const buffer = this.buffers.get(key);
|
|
36
|
+
return buffer ? [...buffer] : [];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Clear all buffers
|
|
40
|
+
*/
|
|
41
|
+
clear() {
|
|
42
|
+
this.buffers.forEach(buffer => buffer.length = 0);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Clear specific metric buffer
|
|
46
|
+
*/
|
|
47
|
+
clearMetric(key) {
|
|
48
|
+
const buffer = this.buffers.get(key);
|
|
49
|
+
if (buffer) {
|
|
50
|
+
buffer.length = 0;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Global history store instance
|
|
56
|
+
*/
|
|
57
|
+
export const historyStore = new HistoryStore();
|
|
58
|
+
//# sourceMappingURL=historyStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"historyStore.js","sourceRoot":"","sources":["../../src/state/historyStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAI9D;;GAEG;AACH,MAAM,YAAY;IACR,OAAO,GAAyC,IAAI,GAAG,EAAE,CAAC;IAElE;QACE,qBAAqB;QACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,GAAc,EAAE,KAAoB;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnB,2BAA2B;QAC3B,IAAI,MAAM,CAAC,MAAM,GAAG,sBAAsB,EAAE,CAAC;YAC3C,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,GAAc;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,GAAc;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UiState Builder
|
|
3
|
+
* Phase 3: Merge collector results into single UiState snapshot
|
|
4
|
+
*/
|
|
5
|
+
import type { UiState } from '../core/types.js';
|
|
6
|
+
import type { AppState } from '../store.js';
|
|
7
|
+
/**
|
|
8
|
+
* Build UiState from collectors
|
|
9
|
+
* Pure-ish and testable
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildUiState(appState: AppState): Promise<UiState>;
|
|
12
|
+
//# sourceMappingURL=uiStateBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uiStateBuilder.d.ts","sourceRoot":"","sources":["../../src/state/uiStateBuilder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAe5C;;;GAGG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAsKvE"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UiState Builder
|
|
3
|
+
* Phase 3: Merge collector results into single UiState snapshot
|
|
4
|
+
*/
|
|
5
|
+
import { collectPosture } from '../collectors/collector_posture.js';
|
|
6
|
+
import { collectNetwork } from '../collectors/collector_network.js';
|
|
7
|
+
import { collectResources } from '../collectors/collector_resources.js';
|
|
8
|
+
import { collectAssets } from '../collectors/collector_assets.js';
|
|
9
|
+
import { collectCapabilities } from '../collectors/collector_capabilities.js';
|
|
10
|
+
import { collectFeed } from '../collectors/collector_feed.js';
|
|
11
|
+
import { collectGeo } from '../collectors/collector_geo.js';
|
|
12
|
+
import { historyStore } from './historyStore.js';
|
|
13
|
+
import { setCollectorResults } from './getCollectorResults.js';
|
|
14
|
+
// Cache for expensive collectors
|
|
15
|
+
let cachedNetwork = null;
|
|
16
|
+
const NETWORK_CACHE_MS = 30000; // 30 seconds
|
|
17
|
+
/**
|
|
18
|
+
* Build UiState from collectors
|
|
19
|
+
* Pure-ish and testable
|
|
20
|
+
*/
|
|
21
|
+
export async function buildUiState(appState) {
|
|
22
|
+
const now = Date.now();
|
|
23
|
+
// Collect all data (some cached, some fresh)
|
|
24
|
+
const [postureResult, networkResult, resourcesResult, assetsResult, capabilitiesResult, feedResult, geoResult,] = await Promise.all([
|
|
25
|
+
collectPosture(appState),
|
|
26
|
+
(async () => {
|
|
27
|
+
// Cache network collector (expensive)
|
|
28
|
+
if (cachedNetwork && (now - cachedNetwork.ts) < NETWORK_CACHE_MS) {
|
|
29
|
+
return cachedNetwork.result;
|
|
30
|
+
}
|
|
31
|
+
const result = await collectNetwork(appState);
|
|
32
|
+
cachedNetwork = { result, ts: now };
|
|
33
|
+
return result;
|
|
34
|
+
})(),
|
|
35
|
+
collectResources(),
|
|
36
|
+
collectAssets(appState),
|
|
37
|
+
collectCapabilities(appState),
|
|
38
|
+
collectFeed(),
|
|
39
|
+
collectGeo(appState),
|
|
40
|
+
]);
|
|
41
|
+
// Phase 9: Calculate freshness from asOf (new contract) or ts (legacy)
|
|
42
|
+
const freshness = {
|
|
43
|
+
posture: (now - (postureResult.asOf || postureResult.ts || now)) < postureResult.staleAfterMs ? "FRESH" : "STALE",
|
|
44
|
+
network: (now - (networkResult.asOf || networkResult.ts || now)) < networkResult.staleAfterMs ? "FRESH" : "STALE",
|
|
45
|
+
resources: (now - (resourcesResult.asOf || resourcesResult.ts || now)) < resourcesResult.staleAfterMs ? "FRESH" : "STALE",
|
|
46
|
+
assets: (now - (assetsResult.asOf || assetsResult.ts || now)) < assetsResult.staleAfterMs ? "FRESH" : "STALE",
|
|
47
|
+
capabilities: (now - (capabilitiesResult.asOf || capabilitiesResult.ts || now)) < capabilitiesResult.staleAfterMs ? "FRESH" : "STALE",
|
|
48
|
+
};
|
|
49
|
+
// Phase 9: Store collector results for validation
|
|
50
|
+
const resultsMap = new Map();
|
|
51
|
+
resultsMap.set('posture', postureResult);
|
|
52
|
+
resultsMap.set('network', networkResult);
|
|
53
|
+
resultsMap.set('resources', resourcesResult);
|
|
54
|
+
resultsMap.set('assets', assetsResult);
|
|
55
|
+
resultsMap.set('capabilities', capabilitiesResult);
|
|
56
|
+
resultsMap.set('feed', feedResult);
|
|
57
|
+
resultsMap.set('geo', geoResult);
|
|
58
|
+
setCollectorResults(resultsMap);
|
|
59
|
+
// Phase 9: Validate collector results before building UiState
|
|
60
|
+
// Check that all collectors have status and asOf
|
|
61
|
+
const collectorResults = [
|
|
62
|
+
{ name: 'posture', result: postureResult },
|
|
63
|
+
{ name: 'network', result: networkResult },
|
|
64
|
+
{ name: 'resources', result: resourcesResult },
|
|
65
|
+
{ name: 'assets', result: assetsResult },
|
|
66
|
+
{ name: 'capabilities', result: capabilitiesResult },
|
|
67
|
+
{ name: 'feed', result: feedResult },
|
|
68
|
+
{ name: 'geo', result: geoResult },
|
|
69
|
+
];
|
|
70
|
+
const invalidCollectors = collectorResults.filter(cr => !cr.result.status || !cr.result.asOf);
|
|
71
|
+
if (invalidCollectors.length > 0) {
|
|
72
|
+
// If in dev, throw; otherwise, log and continue with degraded state
|
|
73
|
+
const errorMsg = `Collector validation failed: ${invalidCollectors.map(c => c.name).join(', ')}`;
|
|
74
|
+
if (process.env.NODE_ENV === 'development' || process.env.DEV === '1') {
|
|
75
|
+
throw new Error(errorMsg);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.error(`[SAFE HOLD] ${errorMsg}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Get history for sparklines
|
|
82
|
+
const history = {
|
|
83
|
+
cpu: historyStore.getSamples('cpu'),
|
|
84
|
+
ram: historyStore.getSamples('ram'),
|
|
85
|
+
latency: historyStore.getSamples('latency'),
|
|
86
|
+
};
|
|
87
|
+
// Phase 9: Build UiState (only include data if status is LIVE or STALE)
|
|
88
|
+
const uiState = {
|
|
89
|
+
ts: now,
|
|
90
|
+
posture: (postureResult.status === 'LIVE' || postureResult.status === 'STALE')
|
|
91
|
+
? postureResult.data
|
|
92
|
+
: {
|
|
93
|
+
posture: 'UNKNOWN',
|
|
94
|
+
risk: 'UNKNOWN',
|
|
95
|
+
connected: 'UNKNOWN',
|
|
96
|
+
target: 'UNKNOWN',
|
|
97
|
+
lastChange: 'UNKNOWN',
|
|
98
|
+
cause: 'UNKNOWN',
|
|
99
|
+
dependencies: {
|
|
100
|
+
config: 'UNKNOWN',
|
|
101
|
+
gateway: 'UNKNOWN',
|
|
102
|
+
database: 'UNKNOWN',
|
|
103
|
+
registry: 'UNKNOWN',
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
network: (networkResult.status === 'LIVE' || networkResult.status === 'STALE')
|
|
107
|
+
? networkResult.data
|
|
108
|
+
: {
|
|
109
|
+
originRegion: 'UNKNOWN',
|
|
110
|
+
originClass: 'UNKNOWN',
|
|
111
|
+
gatewayRegion: 'UNKNOWN',
|
|
112
|
+
dbRegion: 'UNKNOWN',
|
|
113
|
+
latencyMs: 'UNKNOWN',
|
|
114
|
+
latencyClass: 'UNKNOWN',
|
|
115
|
+
publicIpMasked: 'UNKNOWN',
|
|
116
|
+
},
|
|
117
|
+
resources: (resourcesResult.status === 'LIVE' || resourcesResult.status === 'STALE')
|
|
118
|
+
? resourcesResult.data
|
|
119
|
+
: {
|
|
120
|
+
cpuPercent: 'UNKNOWN',
|
|
121
|
+
load1m: 'UNKNOWN',
|
|
122
|
+
ramUsedMb: 'UNKNOWN',
|
|
123
|
+
ramTotalMb: 'UNKNOWN',
|
|
124
|
+
diskUsedGb: 'UNKNOWN',
|
|
125
|
+
diskTotalGb: 'UNKNOWN',
|
|
126
|
+
uptimeSec: 'UNKNOWN',
|
|
127
|
+
procCount: 'UNKNOWN',
|
|
128
|
+
},
|
|
129
|
+
assets: (assetsResult.status === 'LIVE' || assetsResult.status === 'STALE')
|
|
130
|
+
? assetsResult.data
|
|
131
|
+
: {
|
|
132
|
+
total: 'UNKNOWN',
|
|
133
|
+
active: 'UNKNOWN',
|
|
134
|
+
idle: 'UNKNOWN',
|
|
135
|
+
error: 'UNKNOWN',
|
|
136
|
+
highlight: 'UNKNOWN',
|
|
137
|
+
lastAction: 'UNKNOWN',
|
|
138
|
+
},
|
|
139
|
+
capabilities: (capabilitiesResult.status === 'LIVE' || capabilitiesResult.status === 'STALE')
|
|
140
|
+
? capabilitiesResult.data
|
|
141
|
+
: {
|
|
142
|
+
gateway: 'UNKNOWN',
|
|
143
|
+
database: 'UNKNOWN',
|
|
144
|
+
memory: 'UNKNOWN',
|
|
145
|
+
security: 'UNKNOWN',
|
|
146
|
+
rateLimit: 'UNKNOWN',
|
|
147
|
+
},
|
|
148
|
+
feed: (feedResult.status === 'LIVE' || feedResult.status === 'STALE')
|
|
149
|
+
? feedResult.data
|
|
150
|
+
: { events: [] },
|
|
151
|
+
geo: (geoResult.status === 'LIVE' || geoResult.status === 'STALE')
|
|
152
|
+
? geoResult.data
|
|
153
|
+
: {
|
|
154
|
+
originLabel: 'UNKNOWN',
|
|
155
|
+
originRegion: 'UNKNOWN',
|
|
156
|
+
gatewayRegion: 'UNKNOWN',
|
|
157
|
+
dbRegion: 'UNKNOWN',
|
|
158
|
+
routeLabel: 'UNKNOWN',
|
|
159
|
+
pingMs: 'UNKNOWN',
|
|
160
|
+
pingClass: 'UNKNOWN',
|
|
161
|
+
confidence: 'UNKNOWN',
|
|
162
|
+
source: 'NONE',
|
|
163
|
+
},
|
|
164
|
+
freshness,
|
|
165
|
+
history,
|
|
166
|
+
};
|
|
167
|
+
return uiState;
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=uiStateBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uiStateBuilder.js","sourceRoot":"","sources":["../../src/state/uiStateBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UiState Scheduler
|
|
3
|
+
* Phase 3: Rebuild UiState on steady cadence, handle expensive checks slower
|
|
4
|
+
*/
|
|
5
|
+
import type { AppState } from '../store.js';
|
|
6
|
+
import type { UiState } from '../core/types.js';
|
|
7
|
+
type UiStateUpdateHandler = (uiState: UiState) => void;
|
|
8
|
+
declare class UiStateScheduler {
|
|
9
|
+
private interval;
|
|
10
|
+
private handler;
|
|
11
|
+
private getAppState;
|
|
12
|
+
private refreshIntervalMs;
|
|
13
|
+
private networkIntervalMs;
|
|
14
|
+
constructor(refreshIntervalMs?: number, networkIntervalMs?: number);
|
|
15
|
+
/**
|
|
16
|
+
* Start scheduler
|
|
17
|
+
* getAppState is a function that returns current AppState (allows dynamic updates)
|
|
18
|
+
*/
|
|
19
|
+
start(getAppState: () => AppState, handler: UiStateUpdateHandler): void;
|
|
20
|
+
/**
|
|
21
|
+
* Refresh UiState (rebuild from collectors)
|
|
22
|
+
*/
|
|
23
|
+
private refresh;
|
|
24
|
+
/**
|
|
25
|
+
* Stop scheduler
|
|
26
|
+
*/
|
|
27
|
+
stop(): void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get or create scheduler
|
|
31
|
+
*/
|
|
32
|
+
export declare function getScheduler(): UiStateScheduler;
|
|
33
|
+
/**
|
|
34
|
+
* Start scheduler
|
|
35
|
+
* getAppState is a function that returns current AppState (allows dynamic updates)
|
|
36
|
+
*/
|
|
37
|
+
export declare function startScheduler(getAppState: () => AppState, handler: UiStateUpdateHandler): void;
|
|
38
|
+
/**
|
|
39
|
+
* Stop scheduler
|
|
40
|
+
*/
|
|
41
|
+
export declare function stopScheduler(): void;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=uiStateScheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uiStateScheduler.d.ts","sourceRoot":"","sources":["../../src/state/uiStateScheduler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAKhD,KAAK,oBAAoB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAEvD,cAAM,gBAAgB;IACpB,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,iBAAiB,CAAS;gBAGhC,iBAAiB,GAAE,MAAa,EAChC,iBAAiB,GAAE,MAAc;IAMnC;;;OAGG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,QAAQ,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAmBvE;;OAEG;YACW,OAAO;IAoCrB;;OAEG;IACH,IAAI,IAAI,IAAI;CAQb;AAOD;;GAEG;AACH,wBAAgB,YAAY,IAAI,gBAAgB,CAO/C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,QAAQ,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAG/F;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAKpC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UiState Scheduler
|
|
3
|
+
* Phase 3: Rebuild UiState on steady cadence, handle expensive checks slower
|
|
4
|
+
*/
|
|
5
|
+
import { buildUiState } from './uiStateBuilder.js';
|
|
6
|
+
import { eventBus } from '../core/eventBus.js';
|
|
7
|
+
import { historyStore } from './historyStore.js';
|
|
8
|
+
class UiStateScheduler {
|
|
9
|
+
interval = null;
|
|
10
|
+
handler = null;
|
|
11
|
+
getAppState = null;
|
|
12
|
+
refreshIntervalMs;
|
|
13
|
+
networkIntervalMs;
|
|
14
|
+
constructor(refreshIntervalMs = 1500, networkIntervalMs = 30000) {
|
|
15
|
+
this.refreshIntervalMs = refreshIntervalMs;
|
|
16
|
+
this.networkIntervalMs = networkIntervalMs;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Start scheduler
|
|
20
|
+
* getAppState is a function that returns current AppState (allows dynamic updates)
|
|
21
|
+
*/
|
|
22
|
+
start(getAppState, handler) {
|
|
23
|
+
this.getAppState = getAppState;
|
|
24
|
+
this.handler = handler;
|
|
25
|
+
// Initial build
|
|
26
|
+
this.refresh();
|
|
27
|
+
// Regular refresh loop
|
|
28
|
+
this.interval = setInterval(() => {
|
|
29
|
+
this.refresh();
|
|
30
|
+
}, this.refreshIntervalMs);
|
|
31
|
+
// Subscribe to feed events for instant updates
|
|
32
|
+
eventBus.subscribe(() => {
|
|
33
|
+
// Feed event occurred - rebuild UiState immediately
|
|
34
|
+
this.refresh();
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Refresh UiState (rebuild from collectors)
|
|
39
|
+
*/
|
|
40
|
+
async refresh() {
|
|
41
|
+
if (!this.getAppState || !this.handler) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const appState = this.getAppState(); // Get fresh AppState
|
|
46
|
+
const uiState = await buildUiState(appState);
|
|
47
|
+
// Update history store for sparklines
|
|
48
|
+
if (typeof uiState.resources.cpuPercent === 'number') {
|
|
49
|
+
historyStore.addSample('cpu', uiState.resources.cpuPercent);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
historyStore.addSample('cpu', null);
|
|
53
|
+
}
|
|
54
|
+
if (typeof uiState.resources.ramUsedMb === 'number' && typeof uiState.resources.ramTotalMb === 'number') {
|
|
55
|
+
const ramPercent = (uiState.resources.ramUsedMb / uiState.resources.ramTotalMb) * 100;
|
|
56
|
+
historyStore.addSample('ram', ramPercent);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
historyStore.addSample('ram', null);
|
|
60
|
+
}
|
|
61
|
+
if (typeof uiState.network.latencyMs === 'number') {
|
|
62
|
+
historyStore.addSample('latency', uiState.network.latencyMs);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
historyStore.addSample('latency', null);
|
|
66
|
+
}
|
|
67
|
+
this.handler(uiState);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
// Silently fail - don't break scheduler
|
|
71
|
+
console.error('[UiStateScheduler] Build error:', error);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Stop scheduler
|
|
76
|
+
*/
|
|
77
|
+
stop() {
|
|
78
|
+
if (this.interval) {
|
|
79
|
+
clearInterval(this.interval);
|
|
80
|
+
this.interval = null;
|
|
81
|
+
}
|
|
82
|
+
this.handler = null;
|
|
83
|
+
this.getAppState = null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Global scheduler instance
|
|
88
|
+
*/
|
|
89
|
+
let scheduler = null;
|
|
90
|
+
/**
|
|
91
|
+
* Get or create scheduler
|
|
92
|
+
*/
|
|
93
|
+
export function getScheduler() {
|
|
94
|
+
if (!scheduler) {
|
|
95
|
+
const refreshMs = parseInt(process.env.UI_REFRESH_MS || '1500', 10);
|
|
96
|
+
const networkMs = parseInt(process.env.NETWORK_REFRESH_MS || '30000', 10);
|
|
97
|
+
scheduler = new UiStateScheduler(refreshMs, networkMs);
|
|
98
|
+
}
|
|
99
|
+
return scheduler;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Start scheduler
|
|
103
|
+
* getAppState is a function that returns current AppState (allows dynamic updates)
|
|
104
|
+
*/
|
|
105
|
+
export function startScheduler(getAppState, handler) {
|
|
106
|
+
const sched = getScheduler();
|
|
107
|
+
sched.start(getAppState, handler);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Stop scheduler
|
|
111
|
+
*/
|
|
112
|
+
export function stopScheduler() {
|
|
113
|
+
if (scheduler) {
|
|
114
|
+
scheduler.stop();
|
|
115
|
+
scheduler = null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=uiStateScheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uiStateScheduler.js","sourceRoot":"","sources":["../../src/state/uiStateScheduler.ts"],"names":[],"mappings":"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"}
|
package/dist/store.d.ts
CHANGED
|
@@ -21,13 +21,14 @@
|
|
|
21
21
|
import { GatewayClient } from './gateway-client.js';
|
|
22
22
|
import { UserSession } from './auth.js';
|
|
23
23
|
import type { CustomAgent } from './types.js';
|
|
24
|
+
import type { OperationEvent } from './models.js';
|
|
24
25
|
/**
|
|
25
26
|
* Application State
|
|
26
27
|
* This is the single source of truth for all runtime state
|
|
27
28
|
*/
|
|
28
29
|
export interface AppState {
|
|
29
30
|
systemReady: boolean;
|
|
30
|
-
currentView: 'BOOT' | '
|
|
31
|
+
currentView: 'BOOT' | 'INTELLIGENCE_POSTURE' | 'AGENT_LAB' | 'RUN_CONSOLE' | 'METRICS' | 'SYSTEM';
|
|
31
32
|
gatewayClient: GatewayClient | null;
|
|
32
33
|
gatewayConnected: boolean;
|
|
33
34
|
gatewayUrl: string | null;
|
|
@@ -48,6 +49,7 @@ export interface AppState {
|
|
|
48
49
|
};
|
|
49
50
|
firstRunCompleted: boolean;
|
|
50
51
|
chatMode: boolean;
|
|
52
|
+
operationEvents: OperationEvent[];
|
|
51
53
|
}
|
|
52
54
|
/**
|
|
53
55
|
* Get current state (read-only)
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,QAAQ;IAEvB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,sBAAsB,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;IAGlG,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IAGnB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAG5C,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAGvC,UAAU,EAAE,KAAK,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;QACzC,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;IAGF,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAKlB,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AA2BD;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAE7C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAGnE;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAqBjC"}
|
package/dist/store.js
CHANGED
|
@@ -40,6 +40,7 @@ let appState = {
|
|
|
40
40
|
},
|
|
41
41
|
firstRunCompleted: false,
|
|
42
42
|
chatMode: false,
|
|
43
|
+
operationEvents: [],
|
|
43
44
|
};
|
|
44
45
|
/**
|
|
45
46
|
* Get current state (read-only)
|
|
@@ -81,6 +82,7 @@ export function resetState() {
|
|
|
81
82
|
},
|
|
82
83
|
firstRunCompleted: false,
|
|
83
84
|
chatMode: false,
|
|
85
|
+
operationEvents: [],
|
|
84
86
|
};
|
|
85
87
|
}
|
|
86
88
|
//# sourceMappingURL=store.js.map
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAoDH;;;GAGG;AACH,IAAI,QAAQ,GAAa;IACvB,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,MAAM;IACnB,aAAa,EAAE,IAAI;IACnB,gBAAgB,EAAE,KAAK;IACvB,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,KAAK;IAChB,WAAW,EAAE,IAAI;IACjB,oBAAoB,EAAE,IAAI;IAC1B,YAAY,EAAE,IAAI,GAAG,EAAE;IACvB,UAAU,EAAE,EAAE;IACd,UAAU,EAAE;QACV,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,IAAI;KAChB;IACD,iBAAiB,EAAE,KAAK;IACxB,QAAQ,EAAE,KAAK;IACf,eAAe,EAAE,EAAE;CACpB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,OAA0B;IACvD,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;IACvC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,QAAQ,GAAG;QACT,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,MAAM;QACnB,aAAa,EAAE,IAAI;QACnB,gBAAgB,EAAE,KAAK;QACvB,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,IAAI;QACjB,oBAAoB,EAAE,IAAI;QAC1B,YAAY,EAAE,IAAI,GAAG,EAAE;QACvB,UAAU,EAAE,EAAE;QACd,UAAU,EAAE;YACV,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,IAAI;SAChB;QACD,iBAAiB,EAAE,KAAK;QACxB,QAAQ,EAAE,KAAK;QACf,eAAe,EAAE,EAAE;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
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
|
+
import type { AppState } from './store.js';
|
|
19
|
+
import type { SystemPosture, NetworkAwareness, AssetOverview, OperationEvent, CapabilityReadiness } from './models.js';
|
|
20
|
+
/**
|
|
21
|
+
* SystemState: The complete intelligence model
|
|
22
|
+
* Queryable, composable, versionable
|
|
23
|
+
*/
|
|
24
|
+
export interface SystemState {
|
|
25
|
+
systemPosture: SystemPosture;
|
|
26
|
+
networkContext: NetworkAwareness;
|
|
27
|
+
assetRegistrySummary: AssetOverview;
|
|
28
|
+
operationFeed: OperationEvent[];
|
|
29
|
+
capabilityFlags: CapabilityReadiness;
|
|
30
|
+
computedAt: number;
|
|
31
|
+
version: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* System State Provider
|
|
35
|
+
* Computes SystemState from AppState
|
|
36
|
+
* This is the single source of truth for intelligence data
|
|
37
|
+
*/
|
|
38
|
+
export declare class SystemStateProvider {
|
|
39
|
+
private cachedState;
|
|
40
|
+
private lastAppStateVersion;
|
|
41
|
+
private appStateVersion;
|
|
42
|
+
/**
|
|
43
|
+
* Compute system posture from app state
|
|
44
|
+
* Phase 5: Centralized, deterministic computation
|
|
45
|
+
*/
|
|
46
|
+
private computeSystemPosture;
|
|
47
|
+
/**
|
|
48
|
+
* Compute network context from app state
|
|
49
|
+
* Phase 5: Spatial and infrastructural awareness
|
|
50
|
+
*/
|
|
51
|
+
private computeNetworkContext;
|
|
52
|
+
/**
|
|
53
|
+
* Extract region from URL (simplified)
|
|
54
|
+
*/
|
|
55
|
+
private extractRegionFromUrl;
|
|
56
|
+
/**
|
|
57
|
+
* Compute asset registry summary
|
|
58
|
+
* Phase 5: Deployed intelligence surface
|
|
59
|
+
*/
|
|
60
|
+
private computeAssetRegistrySummary;
|
|
61
|
+
/**
|
|
62
|
+
* Get operation feed
|
|
63
|
+
* Phase 5: Living operational pulse
|
|
64
|
+
*/
|
|
65
|
+
private getOperationFeed;
|
|
66
|
+
/**
|
|
67
|
+
* Compute capability flags
|
|
68
|
+
* Phase 5: What the system is capable of right now
|
|
69
|
+
*/
|
|
70
|
+
private computeCapabilityFlags;
|
|
71
|
+
/**
|
|
72
|
+
* Compute complete SystemState from AppState
|
|
73
|
+
* This is the single computation point
|
|
74
|
+
*/
|
|
75
|
+
compute(state: AppState): SystemState;
|
|
76
|
+
/**
|
|
77
|
+
* Get cached state if available and valid
|
|
78
|
+
* Otherwise compute fresh
|
|
79
|
+
*/
|
|
80
|
+
get(state: AppState, forceRefresh?: boolean): SystemState;
|
|
81
|
+
/**
|
|
82
|
+
* Invalidate cache (call when state changes)
|
|
83
|
+
*/
|
|
84
|
+
invalidate(): void;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Global system state provider instance
|
|
88
|
+
* Single source of truth for intelligence data
|
|
89
|
+
*/
|
|
90
|
+
export declare const systemStateProvider: SystemStateProvider;
|
|
91
|
+
/**
|
|
92
|
+
* Get current system state
|
|
93
|
+
* This is what the UI reads from
|
|
94
|
+
*/
|
|
95
|
+
export declare function getSystemState(state: AppState, forceRefresh?: boolean): SystemState;
|
|
96
|
+
//# sourceMappingURL=system-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-state.d.ts","sourceRoot":"","sources":["../src/system-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,MAAM,WAAW,WAAW;IAE1B,aAAa,EAAE,aAAa,CAAC;IAG7B,cAAc,EAAE,gBAAgB,CAAC;IAGjC,oBAAoB,EAAE,aAAa,CAAC;IAGpC,aAAa,EAAE,cAAc,EAAE,CAAC;IAGhC,eAAe,EAAE,mBAAmB,CAAC;IAGrC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,eAAe,CAAa;IAEpC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAwD5B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAyC7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAwDnC;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAU9B;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,WAAW;IAqBrC;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,GAAE,OAAe,GAAG,WAAW;IAOhE;;OAEG;IACH,UAAU,IAAI,IAAI;CAInB;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,qBAA4B,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,GAAE,OAAe,GAAG,WAAW,CAE1F"}
|