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.
Files changed (235) hide show
  1. package/dist/collectors/collector_assets.d.ts +19 -0
  2. package/dist/collectors/collector_assets.d.ts.map +1 -0
  3. package/dist/collectors/collector_assets.js +72 -0
  4. package/dist/collectors/collector_assets.js.map +1 -0
  5. package/dist/collectors/collector_capabilities.d.ts +19 -0
  6. package/dist/collectors/collector_capabilities.d.ts.map +1 -0
  7. package/dist/collectors/collector_capabilities.js +61 -0
  8. package/dist/collectors/collector_capabilities.js.map +1 -0
  9. package/dist/collectors/collector_feed.d.ts +30 -0
  10. package/dist/collectors/collector_feed.d.ts.map +1 -0
  11. package/dist/collectors/collector_feed.js +78 -0
  12. package/dist/collectors/collector_feed.js.map +1 -0
  13. package/dist/collectors/collector_geo.d.ts +12 -0
  14. package/dist/collectors/collector_geo.d.ts.map +1 -0
  15. package/dist/collectors/collector_geo.js +248 -0
  16. package/dist/collectors/collector_geo.js.map +1 -0
  17. package/dist/collectors/collector_network.d.ts +22 -0
  18. package/dist/collectors/collector_network.d.ts.map +1 -0
  19. package/dist/collectors/collector_network.js +83 -0
  20. package/dist/collectors/collector_network.js.map +1 -0
  21. package/dist/collectors/collector_posture.d.ts +25 -0
  22. package/dist/collectors/collector_posture.d.ts.map +1 -0
  23. package/dist/collectors/collector_posture.js +207 -0
  24. package/dist/collectors/collector_posture.js.map +1 -0
  25. package/dist/collectors/collector_resources.d.ts +21 -0
  26. package/dist/collectors/collector_resources.d.ts.map +1 -0
  27. package/dist/collectors/collector_resources.js +87 -0
  28. package/dist/collectors/collector_resources.js.map +1 -0
  29. package/dist/collectors/helpers.d.ts +21 -0
  30. package/dist/collectors/helpers.d.ts.map +1 -0
  31. package/dist/collectors/helpers.js +49 -0
  32. package/dist/collectors/helpers.js.map +1 -0
  33. package/dist/core/collectorRegistry.d.ts +43 -0
  34. package/dist/core/collectorRegistry.d.ts.map +1 -0
  35. package/dist/core/collectorRegistry.js +76 -0
  36. package/dist/core/collectorRegistry.js.map +1 -0
  37. package/dist/core/constants.d.ts +25 -0
  38. package/dist/core/constants.d.ts.map +1 -0
  39. package/dist/core/constants.js +33 -0
  40. package/dist/core/constants.js.map +1 -0
  41. package/dist/core/eventBus.d.ts +36 -0
  42. package/dist/core/eventBus.d.ts.map +1 -0
  43. package/dist/core/eventBus.js +52 -0
  44. package/dist/core/eventBus.js.map +1 -0
  45. package/dist/core/types.d.ts +128 -0
  46. package/dist/core/types.d.ts.map +1 -0
  47. package/dist/core/types.js +6 -0
  48. package/dist/core/types.js.map +1 -0
  49. package/dist/events.d.ts +35 -0
  50. package/dist/events.d.ts.map +1 -0
  51. package/dist/events.js +89 -0
  52. package/dist/events.js.map +1 -0
  53. package/dist/index.js +301 -36
  54. package/dist/index.js.map +1 -1
  55. package/dist/models.d.ts +74 -0
  56. package/dist/models.d.ts.map +1 -0
  57. package/dist/models.js +7 -0
  58. package/dist/models.js.map +1 -0
  59. package/dist/state/getCollectorResults.d.ts +18 -0
  60. package/dist/state/getCollectorResults.d.ts.map +1 -0
  61. package/dist/state/getCollectorResults.js +25 -0
  62. package/dist/state/getCollectorResults.js.map +1 -0
  63. package/dist/state/historyStore.d.ts +35 -0
  64. package/dist/state/historyStore.d.ts.map +1 -0
  65. package/dist/state/historyStore.js +58 -0
  66. package/dist/state/historyStore.js.map +1 -0
  67. package/dist/state/uiStateBuilder.d.ts +12 -0
  68. package/dist/state/uiStateBuilder.d.ts.map +1 -0
  69. package/dist/state/uiStateBuilder.js +169 -0
  70. package/dist/state/uiStateBuilder.js.map +1 -0
  71. package/dist/state/uiStateScheduler.d.ts +43 -0
  72. package/dist/state/uiStateScheduler.d.ts.map +1 -0
  73. package/dist/state/uiStateScheduler.js +118 -0
  74. package/dist/state/uiStateScheduler.js.map +1 -0
  75. package/dist/store.d.ts +3 -1
  76. package/dist/store.d.ts.map +1 -1
  77. package/dist/store.js +2 -0
  78. package/dist/store.js.map +1 -1
  79. package/dist/system-state.d.ts +96 -0
  80. package/dist/system-state.d.ts.map +1 -0
  81. package/dist/system-state.js +273 -0
  82. package/dist/system-state.js.map +1 -0
  83. package/dist/ui/boot/sequence.d.ts +10 -0
  84. package/dist/ui/boot/sequence.d.ts.map +1 -0
  85. package/dist/ui/boot/sequence.js +173 -0
  86. package/dist/ui/boot/sequence.js.map +1 -0
  87. package/dist/ui/constraints/layoutSpec.d.ts +47 -0
  88. package/dist/ui/constraints/layoutSpec.d.ts.map +1 -0
  89. package/dist/ui/constraints/layoutSpec.js +60 -0
  90. package/dist/ui/constraints/layoutSpec.js.map +1 -0
  91. package/dist/ui/constraints/unknownHandling.d.ts +29 -0
  92. package/dist/ui/constraints/unknownHandling.d.ts.map +1 -0
  93. package/dist/ui/constraints/unknownHandling.js +60 -0
  94. package/dist/ui/constraints/unknownHandling.js.map +1 -0
  95. package/dist/ui/drilldowns/feed.d.ts +11 -0
  96. package/dist/ui/drilldowns/feed.d.ts.map +1 -0
  97. package/dist/ui/drilldowns/feed.js +68 -0
  98. package/dist/ui/drilldowns/feed.js.map +1 -0
  99. package/dist/ui/drilldowns/index.d.ts +7 -0
  100. package/dist/ui/drilldowns/index.d.ts.map +1 -0
  101. package/dist/ui/drilldowns/index.js +8 -0
  102. package/dist/ui/drilldowns/index.js.map +1 -0
  103. package/dist/ui/drilldowns/posture.d.ts +11 -0
  104. package/dist/ui/drilldowns/posture.d.ts.map +1 -0
  105. package/dist/ui/drilldowns/posture.js +74 -0
  106. package/dist/ui/drilldowns/posture.js.map +1 -0
  107. package/dist/ui/intelligence-posture-view.d.ts +22 -0
  108. package/dist/ui/intelligence-posture-view.d.ts.map +1 -0
  109. package/dist/ui/intelligence-posture-view.js +169 -0
  110. package/dist/ui/intelligence-posture-view.js.map +1 -0
  111. package/dist/ui/navigation/keymaps.d.ts +26 -0
  112. package/dist/ui/navigation/keymaps.d.ts.map +1 -0
  113. package/dist/ui/navigation/keymaps.js +135 -0
  114. package/dist/ui/navigation/keymaps.js.map +1 -0
  115. package/dist/ui/navigation/palette.d.ts +10 -0
  116. package/dist/ui/navigation/palette.d.ts.map +1 -0
  117. package/dist/ui/navigation/palette.js +133 -0
  118. package/dist/ui/navigation/palette.js.map +1 -0
  119. package/dist/ui/navigation/state.d.ts +47 -0
  120. package/dist/ui/navigation/state.d.ts.map +1 -0
  121. package/dist/ui/navigation/state.js +84 -0
  122. package/dist/ui/navigation/state.js.map +1 -0
  123. package/dist/ui/navigation/types.d.ts +38 -0
  124. package/dist/ui/navigation/types.d.ts.map +1 -0
  125. package/dist/ui/navigation/types.js +36 -0
  126. package/dist/ui/navigation/types.js.map +1 -0
  127. package/dist/ui/panels/active-assets.d.ts +12 -0
  128. package/dist/ui/panels/active-assets.d.ts.map +1 -0
  129. package/dist/ui/panels/active-assets.js +83 -0
  130. package/dist/ui/panels/active-assets.js.map +1 -0
  131. package/dist/ui/panels/capability-flags.d.ts +12 -0
  132. package/dist/ui/panels/capability-flags.d.ts.map +1 -0
  133. package/dist/ui/panels/capability-flags.js +59 -0
  134. package/dist/ui/panels/capability-flags.js.map +1 -0
  135. package/dist/ui/panels/command-surface.d.ts +12 -0
  136. package/dist/ui/panels/command-surface.d.ts.map +1 -0
  137. package/dist/ui/panels/command-surface.js +55 -0
  138. package/dist/ui/panels/command-surface.js.map +1 -0
  139. package/dist/ui/panels/network-origin.d.ts +12 -0
  140. package/dist/ui/panels/network-origin.d.ts.map +1 -0
  141. package/dist/ui/panels/network-origin.js +79 -0
  142. package/dist/ui/panels/network-origin.js.map +1 -0
  143. package/dist/ui/panels/operations-feed.d.ts +12 -0
  144. package/dist/ui/panels/operations-feed.d.ts.map +1 -0
  145. package/dist/ui/panels/operations-feed.js +90 -0
  146. package/dist/ui/panels/operations-feed.js.map +1 -0
  147. package/dist/ui/panels/posture.d.ts +12 -0
  148. package/dist/ui/panels/posture.d.ts.map +1 -0
  149. package/dist/ui/panels/posture.js +84 -0
  150. package/dist/ui/panels/posture.js.map +1 -0
  151. package/dist/ui/panels/resources.d.ts +11 -0
  152. package/dist/ui/panels/resources.d.ts.map +1 -0
  153. package/dist/ui/panels/resources.js +88 -0
  154. package/dist/ui/panels/resources.js.map +1 -0
  155. package/dist/ui/primitives/Panel.d.ts +25 -0
  156. package/dist/ui/primitives/Panel.d.ts.map +1 -0
  157. package/dist/ui/primitives/Panel.js +59 -0
  158. package/dist/ui/primitives/Panel.js.map +1 -0
  159. package/dist/ui/rendering/metricRenderer.d.ts +24 -0
  160. package/dist/ui/rendering/metricRenderer.d.ts.map +1 -0
  161. package/dist/ui/rendering/metricRenderer.js +86 -0
  162. package/dist/ui/rendering/metricRenderer.js.map +1 -0
  163. package/dist/ui/runtime/hub.d.ts +12 -0
  164. package/dist/ui/runtime/hub.d.ts.map +1 -0
  165. package/dist/ui/runtime/hub.js +468 -0
  166. package/dist/ui/runtime/hub.js.map +1 -0
  167. package/dist/ui/runtime/hubValidation.d.ts +23 -0
  168. package/dist/ui/runtime/hubValidation.d.ts.map +1 -0
  169. package/dist/ui/runtime/hubValidation.js +90 -0
  170. package/dist/ui/runtime/hubValidation.js.map +1 -0
  171. package/dist/ui/runtime/index.d.ts +29 -0
  172. package/dist/ui/runtime/index.d.ts.map +1 -0
  173. package/dist/ui/runtime/index.js +299 -0
  174. package/dist/ui/runtime/index.js.map +1 -0
  175. package/dist/ui/runtime/no-tui.d.ts +12 -0
  176. package/dist/ui/runtime/no-tui.d.ts.map +1 -0
  177. package/dist/ui/runtime/no-tui.js +77 -0
  178. package/dist/ui/runtime/no-tui.js.map +1 -0
  179. package/dist/ui/runtime/state-builder.d.ts +13 -0
  180. package/dist/ui/runtime/state-builder.d.ts.map +1 -0
  181. package/dist/ui/runtime/state-builder.js +114 -0
  182. package/dist/ui/runtime/state-builder.js.map +1 -0
  183. package/dist/ui/runtime/terminalSizeCheck.d.ts +10 -0
  184. package/dist/ui/runtime/terminalSizeCheck.d.ts.map +1 -0
  185. package/dist/ui/runtime/terminalSizeCheck.js +51 -0
  186. package/dist/ui/runtime/terminalSizeCheck.js.map +1 -0
  187. package/dist/ui/runtime/tuiLogGate.d.ts +22 -0
  188. package/dist/ui/runtime/tuiLogGate.d.ts.map +1 -0
  189. package/dist/ui/runtime/tuiLogGate.js +68 -0
  190. package/dist/ui/runtime/tuiLogGate.js.map +1 -0
  191. package/dist/ui/state/types.d.ts +72 -0
  192. package/dist/ui/state/types.d.ts.map +1 -0
  193. package/dist/ui/state/types.js +6 -0
  194. package/dist/ui/state/types.js.map +1 -0
  195. package/dist/ui/theme/borders.d.ts +20 -0
  196. package/dist/ui/theme/borders.d.ts.map +1 -0
  197. package/dist/ui/theme/borders.js +55 -0
  198. package/dist/ui/theme/borders.js.map +1 -0
  199. package/dist/ui/theme/tokens.d.ts +28 -0
  200. package/dist/ui/theme/tokens.d.ts.map +1 -0
  201. package/dist/ui/theme/tokens.js +50 -0
  202. package/dist/ui/theme/tokens.js.map +1 -0
  203. package/dist/ui/theme/typography.d.ts +14 -0
  204. package/dist/ui/theme/typography.d.ts.map +1 -0
  205. package/dist/ui/theme/typography.js +30 -0
  206. package/dist/ui/theme/typography.js.map +1 -0
  207. package/dist/ui/widgets/flagRow.d.ts +25 -0
  208. package/dist/ui/widgets/flagRow.d.ts.map +1 -0
  209. package/dist/ui/widgets/flagRow.js +57 -0
  210. package/dist/ui/widgets/flagRow.js.map +1 -0
  211. package/dist/ui/widgets/index.d.ts +9 -0
  212. package/dist/ui/widgets/index.d.ts.map +1 -0
  213. package/dist/ui/widgets/index.js +9 -0
  214. package/dist/ui/widgets/index.js.map +1 -0
  215. package/dist/ui/widgets/meter.d.ts +18 -0
  216. package/dist/ui/widgets/meter.d.ts.map +1 -0
  217. package/dist/ui/widgets/meter.js +38 -0
  218. package/dist/ui/widgets/meter.js.map +1 -0
  219. package/dist/ui/widgets/miniMap.d.ts +26 -0
  220. package/dist/ui/widgets/miniMap.d.ts.map +1 -0
  221. package/dist/ui/widgets/miniMap.js +94 -0
  222. package/dist/ui/widgets/miniMap.js.map +1 -0
  223. package/dist/ui/widgets/sparkline.d.ts +17 -0
  224. package/dist/ui/widgets/sparkline.d.ts.map +1 -0
  225. package/dist/ui/widgets/sparkline.js +63 -0
  226. package/dist/ui/widgets/sparkline.js.map +1 -0
  227. package/dist/ui-primitives.d.ts +5 -2
  228. package/dist/ui-primitives.d.ts.map +1 -1
  229. package/dist/ui-primitives.js +22 -9
  230. package/dist/ui-primitives.js.map +1 -1
  231. package/package.json +5 -4
  232. package/dist/ui/home-view.d.ts +0 -27
  233. package/dist/ui/home-view.d.ts.map +0 -1
  234. package/dist/ui/home-view.js +0 -127
  235. 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' | 'HOME' | 'AGENT_LAB' | 'RUN_CONSOLE' | 'METRICS' | 'SYSTEM';
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)
@@ -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;AAE9C;;;GAGG;AACH,MAAM,WAAW,QAAQ;IAEvB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;IAGlF,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;CACnB;AA0BD;;;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,CAoBjC"}
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;AA8CH;;;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;CAChB,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;KAChB,CAAC;AACJ,CAAC"}
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"}