4runr-os 1.0.28 → 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 (211) 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/index.js +135 -5
  50. package/dist/index.js.map +1 -1
  51. package/dist/state/getCollectorResults.d.ts +18 -0
  52. package/dist/state/getCollectorResults.d.ts.map +1 -0
  53. package/dist/state/getCollectorResults.js +25 -0
  54. package/dist/state/getCollectorResults.js.map +1 -0
  55. package/dist/state/historyStore.d.ts +35 -0
  56. package/dist/state/historyStore.d.ts.map +1 -0
  57. package/dist/state/historyStore.js +58 -0
  58. package/dist/state/historyStore.js.map +1 -0
  59. package/dist/state/uiStateBuilder.d.ts +12 -0
  60. package/dist/state/uiStateBuilder.d.ts.map +1 -0
  61. package/dist/state/uiStateBuilder.js +169 -0
  62. package/dist/state/uiStateBuilder.js.map +1 -0
  63. package/dist/state/uiStateScheduler.d.ts +43 -0
  64. package/dist/state/uiStateScheduler.d.ts.map +1 -0
  65. package/dist/state/uiStateScheduler.js +118 -0
  66. package/dist/state/uiStateScheduler.js.map +1 -0
  67. package/dist/ui/boot/sequence.d.ts +10 -0
  68. package/dist/ui/boot/sequence.d.ts.map +1 -0
  69. package/dist/ui/boot/sequence.js +173 -0
  70. package/dist/ui/boot/sequence.js.map +1 -0
  71. package/dist/ui/constraints/layoutSpec.d.ts +47 -0
  72. package/dist/ui/constraints/layoutSpec.d.ts.map +1 -0
  73. package/dist/ui/constraints/layoutSpec.js +60 -0
  74. package/dist/ui/constraints/layoutSpec.js.map +1 -0
  75. package/dist/ui/constraints/unknownHandling.d.ts +29 -0
  76. package/dist/ui/constraints/unknownHandling.d.ts.map +1 -0
  77. package/dist/ui/constraints/unknownHandling.js +60 -0
  78. package/dist/ui/constraints/unknownHandling.js.map +1 -0
  79. package/dist/ui/drilldowns/feed.d.ts +11 -0
  80. package/dist/ui/drilldowns/feed.d.ts.map +1 -0
  81. package/dist/ui/drilldowns/feed.js +68 -0
  82. package/dist/ui/drilldowns/feed.js.map +1 -0
  83. package/dist/ui/drilldowns/index.d.ts +7 -0
  84. package/dist/ui/drilldowns/index.d.ts.map +1 -0
  85. package/dist/ui/drilldowns/index.js +8 -0
  86. package/dist/ui/drilldowns/index.js.map +1 -0
  87. package/dist/ui/drilldowns/posture.d.ts +11 -0
  88. package/dist/ui/drilldowns/posture.d.ts.map +1 -0
  89. package/dist/ui/drilldowns/posture.js +74 -0
  90. package/dist/ui/drilldowns/posture.js.map +1 -0
  91. package/dist/ui/navigation/keymaps.d.ts +26 -0
  92. package/dist/ui/navigation/keymaps.d.ts.map +1 -0
  93. package/dist/ui/navigation/keymaps.js +135 -0
  94. package/dist/ui/navigation/keymaps.js.map +1 -0
  95. package/dist/ui/navigation/palette.d.ts +10 -0
  96. package/dist/ui/navigation/palette.d.ts.map +1 -0
  97. package/dist/ui/navigation/palette.js +133 -0
  98. package/dist/ui/navigation/palette.js.map +1 -0
  99. package/dist/ui/navigation/state.d.ts +47 -0
  100. package/dist/ui/navigation/state.d.ts.map +1 -0
  101. package/dist/ui/navigation/state.js +84 -0
  102. package/dist/ui/navigation/state.js.map +1 -0
  103. package/dist/ui/navigation/types.d.ts +38 -0
  104. package/dist/ui/navigation/types.d.ts.map +1 -0
  105. package/dist/ui/navigation/types.js +36 -0
  106. package/dist/ui/navigation/types.js.map +1 -0
  107. package/dist/ui/panels/active-assets.d.ts +12 -0
  108. package/dist/ui/panels/active-assets.d.ts.map +1 -0
  109. package/dist/ui/panels/active-assets.js +83 -0
  110. package/dist/ui/panels/active-assets.js.map +1 -0
  111. package/dist/ui/panels/capability-flags.d.ts +12 -0
  112. package/dist/ui/panels/capability-flags.d.ts.map +1 -0
  113. package/dist/ui/panels/capability-flags.js +59 -0
  114. package/dist/ui/panels/capability-flags.js.map +1 -0
  115. package/dist/ui/panels/command-surface.d.ts +12 -0
  116. package/dist/ui/panels/command-surface.d.ts.map +1 -0
  117. package/dist/ui/panels/command-surface.js +55 -0
  118. package/dist/ui/panels/command-surface.js.map +1 -0
  119. package/dist/ui/panels/network-origin.d.ts +12 -0
  120. package/dist/ui/panels/network-origin.d.ts.map +1 -0
  121. package/dist/ui/panels/network-origin.js +79 -0
  122. package/dist/ui/panels/network-origin.js.map +1 -0
  123. package/dist/ui/panels/operations-feed.d.ts +12 -0
  124. package/dist/ui/panels/operations-feed.d.ts.map +1 -0
  125. package/dist/ui/panels/operations-feed.js +90 -0
  126. package/dist/ui/panels/operations-feed.js.map +1 -0
  127. package/dist/ui/panels/posture.d.ts +12 -0
  128. package/dist/ui/panels/posture.d.ts.map +1 -0
  129. package/dist/ui/panels/posture.js +84 -0
  130. package/dist/ui/panels/posture.js.map +1 -0
  131. package/dist/ui/panels/resources.d.ts +11 -0
  132. package/dist/ui/panels/resources.d.ts.map +1 -0
  133. package/dist/ui/panels/resources.js +88 -0
  134. package/dist/ui/panels/resources.js.map +1 -0
  135. package/dist/ui/primitives/Panel.d.ts +25 -0
  136. package/dist/ui/primitives/Panel.d.ts.map +1 -0
  137. package/dist/ui/primitives/Panel.js +59 -0
  138. package/dist/ui/primitives/Panel.js.map +1 -0
  139. package/dist/ui/rendering/metricRenderer.d.ts +24 -0
  140. package/dist/ui/rendering/metricRenderer.d.ts.map +1 -0
  141. package/dist/ui/rendering/metricRenderer.js +86 -0
  142. package/dist/ui/rendering/metricRenderer.js.map +1 -0
  143. package/dist/ui/runtime/hub.d.ts +12 -0
  144. package/dist/ui/runtime/hub.d.ts.map +1 -0
  145. package/dist/ui/runtime/hub.js +468 -0
  146. package/dist/ui/runtime/hub.js.map +1 -0
  147. package/dist/ui/runtime/hubValidation.d.ts +23 -0
  148. package/dist/ui/runtime/hubValidation.d.ts.map +1 -0
  149. package/dist/ui/runtime/hubValidation.js +90 -0
  150. package/dist/ui/runtime/hubValidation.js.map +1 -0
  151. package/dist/ui/runtime/index.d.ts +29 -0
  152. package/dist/ui/runtime/index.d.ts.map +1 -0
  153. package/dist/ui/runtime/index.js +299 -0
  154. package/dist/ui/runtime/index.js.map +1 -0
  155. package/dist/ui/runtime/no-tui.d.ts +12 -0
  156. package/dist/ui/runtime/no-tui.d.ts.map +1 -0
  157. package/dist/ui/runtime/no-tui.js +77 -0
  158. package/dist/ui/runtime/no-tui.js.map +1 -0
  159. package/dist/ui/runtime/state-builder.d.ts +13 -0
  160. package/dist/ui/runtime/state-builder.d.ts.map +1 -0
  161. package/dist/ui/runtime/state-builder.js +114 -0
  162. package/dist/ui/runtime/state-builder.js.map +1 -0
  163. package/dist/ui/runtime/terminalSizeCheck.d.ts +10 -0
  164. package/dist/ui/runtime/terminalSizeCheck.d.ts.map +1 -0
  165. package/dist/ui/runtime/terminalSizeCheck.js +51 -0
  166. package/dist/ui/runtime/terminalSizeCheck.js.map +1 -0
  167. package/dist/ui/runtime/tuiLogGate.d.ts +22 -0
  168. package/dist/ui/runtime/tuiLogGate.d.ts.map +1 -0
  169. package/dist/ui/runtime/tuiLogGate.js +68 -0
  170. package/dist/ui/runtime/tuiLogGate.js.map +1 -0
  171. package/dist/ui/state/types.d.ts +72 -0
  172. package/dist/ui/state/types.d.ts.map +1 -0
  173. package/dist/ui/state/types.js +6 -0
  174. package/dist/ui/state/types.js.map +1 -0
  175. package/dist/ui/theme/borders.d.ts +20 -0
  176. package/dist/ui/theme/borders.d.ts.map +1 -0
  177. package/dist/ui/theme/borders.js +55 -0
  178. package/dist/ui/theme/borders.js.map +1 -0
  179. package/dist/ui/theme/tokens.d.ts +28 -0
  180. package/dist/ui/theme/tokens.d.ts.map +1 -0
  181. package/dist/ui/theme/tokens.js +50 -0
  182. package/dist/ui/theme/tokens.js.map +1 -0
  183. package/dist/ui/theme/typography.d.ts +14 -0
  184. package/dist/ui/theme/typography.d.ts.map +1 -0
  185. package/dist/ui/theme/typography.js +30 -0
  186. package/dist/ui/theme/typography.js.map +1 -0
  187. package/dist/ui/widgets/flagRow.d.ts +25 -0
  188. package/dist/ui/widgets/flagRow.d.ts.map +1 -0
  189. package/dist/ui/widgets/flagRow.js +57 -0
  190. package/dist/ui/widgets/flagRow.js.map +1 -0
  191. package/dist/ui/widgets/index.d.ts +9 -0
  192. package/dist/ui/widgets/index.d.ts.map +1 -0
  193. package/dist/ui/widgets/index.js +9 -0
  194. package/dist/ui/widgets/index.js.map +1 -0
  195. package/dist/ui/widgets/meter.d.ts +18 -0
  196. package/dist/ui/widgets/meter.d.ts.map +1 -0
  197. package/dist/ui/widgets/meter.js +38 -0
  198. package/dist/ui/widgets/meter.js.map +1 -0
  199. package/dist/ui/widgets/miniMap.d.ts +26 -0
  200. package/dist/ui/widgets/miniMap.d.ts.map +1 -0
  201. package/dist/ui/widgets/miniMap.js +94 -0
  202. package/dist/ui/widgets/miniMap.js.map +1 -0
  203. package/dist/ui/widgets/sparkline.d.ts +17 -0
  204. package/dist/ui/widgets/sparkline.d.ts.map +1 -0
  205. package/dist/ui/widgets/sparkline.js +63 -0
  206. package/dist/ui/widgets/sparkline.js.map +1 -0
  207. package/package.json +5 -4
  208. package/dist/ui/home-view.d.ts +0 -27
  209. package/dist/ui/home-view.d.ts.map +0 -1
  210. package/dist/ui/home-view.js +0 -127
  211. package/dist/ui/home-view.js.map +0 -1
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Core Constants
3
+ * Phase 4: Thresholds and configuration for widgets
4
+ */
5
+ /**
6
+ * Latency classification thresholds (ms)
7
+ */
8
+ export declare const LATENCY_THRESHOLDS: {
9
+ readonly LOW: 50;
10
+ readonly MEDIUM: 150;
11
+ readonly HIGH: number;
12
+ };
13
+ /**
14
+ * Get latency class from milliseconds
15
+ */
16
+ export declare function getLatencyClass(ms: number | "UNKNOWN"): "LOW" | "MEDIUM" | "HIGH" | "UNKNOWN";
17
+ /**
18
+ * Sparkline history window (samples)
19
+ */
20
+ export declare const SPARKLINE_HISTORY_SIZE = 60;
21
+ /**
22
+ * Sparkline tick interval (ms) - approximate
23
+ */
24
+ export declare const SPARKLINE_TICK_MS = 1000;
25
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC;AAEX;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAK7F;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;GAEG;AACH,eAAO,MAAM,iBAAiB,OAAO,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Core Constants
3
+ * Phase 4: Thresholds and configuration for widgets
4
+ */
5
+ /**
6
+ * Latency classification thresholds (ms)
7
+ */
8
+ export const LATENCY_THRESHOLDS = {
9
+ LOW: 50, // < 50ms = LOW
10
+ MEDIUM: 150, // 50-150ms = MEDIUM
11
+ HIGH: Infinity, // > 150ms = HIGH
12
+ };
13
+ /**
14
+ * Get latency class from milliseconds
15
+ */
16
+ export function getLatencyClass(ms) {
17
+ if (ms === "UNKNOWN")
18
+ return "UNKNOWN";
19
+ if (ms < LATENCY_THRESHOLDS.LOW)
20
+ return "LOW";
21
+ if (ms < LATENCY_THRESHOLDS.MEDIUM)
22
+ return "MEDIUM";
23
+ return "HIGH";
24
+ }
25
+ /**
26
+ * Sparkline history window (samples)
27
+ */
28
+ export const SPARKLINE_HISTORY_SIZE = 60;
29
+ /**
30
+ * Sparkline tick interval (ms) - approximate
31
+ */
32
+ export const SPARKLINE_TICK_MS = 1000;
33
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,GAAG,EAAE,EAAE,EAAO,eAAe;IAC7B,MAAM,EAAE,GAAG,EAAG,oBAAoB;IAClC,IAAI,EAAE,QAAQ,EAAE,iBAAiB;CACzB,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,EAAsB;IACpD,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,EAAE,GAAG,kBAAkB,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,EAAE,GAAG,kBAAkB,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACpD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Event Bus
3
+ * Phase 3: Fire-and-forget event system for feed updates
4
+ */
5
+ export type FeedEvent = {
6
+ tag: "RUN" | "NET" | "SEC" | "DB" | "GATEWAY" | "SYSTEM";
7
+ msg: string;
8
+ ts: number;
9
+ };
10
+ type EventHandler = (event: FeedEvent) => void;
11
+ declare class EventBus {
12
+ private handlers;
13
+ /**
14
+ * Emit event (fire and forget)
15
+ */
16
+ emit(event: FeedEvent): void;
17
+ /**
18
+ * Subscribe to events
19
+ * Returns unsubscribe function
20
+ */
21
+ subscribe(handler: EventHandler): () => void;
22
+ /**
23
+ * Clear all handlers (for testing)
24
+ */
25
+ clear(): void;
26
+ }
27
+ /**
28
+ * Global event bus instance
29
+ */
30
+ export declare const eventBus: EventBus;
31
+ /**
32
+ * Helper: Emit feed event
33
+ */
34
+ export declare function emitFeedEvent(tag: FeedEvent['tag'], msg: string): void;
35
+ export {};
36
+ //# sourceMappingURL=eventBus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventBus.d.ts","sourceRoot":"","sources":["../../src/core/eventBus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzD,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AAE/C,cAAM,QAAQ;IACZ,OAAO,CAAC,QAAQ,CAAgC;IAEhD;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAW5B;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI;IAO5C;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,UAAiB,CAAC;AAEvC;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAMtE"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Event Bus
3
+ * Phase 3: Fire-and-forget event system for feed updates
4
+ */
5
+ class EventBus {
6
+ handlers = new Set();
7
+ /**
8
+ * Emit event (fire and forget)
9
+ */
10
+ emit(event) {
11
+ this.handlers.forEach(handler => {
12
+ try {
13
+ handler(event);
14
+ }
15
+ catch (error) {
16
+ // Silently fail - don't break event bus
17
+ console.error('[EventBus] Handler error:', error);
18
+ }
19
+ });
20
+ }
21
+ /**
22
+ * Subscribe to events
23
+ * Returns unsubscribe function
24
+ */
25
+ subscribe(handler) {
26
+ this.handlers.add(handler);
27
+ return () => {
28
+ this.handlers.delete(handler);
29
+ };
30
+ }
31
+ /**
32
+ * Clear all handlers (for testing)
33
+ */
34
+ clear() {
35
+ this.handlers.clear();
36
+ }
37
+ }
38
+ /**
39
+ * Global event bus instance
40
+ */
41
+ export const eventBus = new EventBus();
42
+ /**
43
+ * Helper: Emit feed event
44
+ */
45
+ export function emitFeedEvent(tag, msg) {
46
+ eventBus.emit({
47
+ tag,
48
+ msg,
49
+ ts: Date.now(),
50
+ });
51
+ }
52
+ //# sourceMappingURL=eventBus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventBus.js","sourceRoot":"","sources":["../../src/core/eventBus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,MAAM,QAAQ;IACJ,QAAQ,GAAsB,IAAI,GAAG,EAAE,CAAC;IAEhD;;OAEG;IACH,IAAI,CAAC,KAAgB;QACnB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9B,IAAI,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,wCAAwC;gBACxC,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,OAAqB;QAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;AAEvC;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAqB,EAAE,GAAW;IAC9D,QAAQ,CAAC,IAAI,CAAC;QACZ,GAAG;QACH,GAAG;QACH,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;KACf,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Core Types
3
+ * Phase 3: Data contracts for collectors and UiState
4
+ */
5
+ /**
6
+ * Collector Result Envelope
7
+ * Phase 9: Standard collector contract with status, asOf, reasonCode, message, action
8
+ */
9
+ export type CollectorStatus = 'LIVE' | 'STALE' | 'UNAVAILABLE' | 'DISABLED';
10
+ export type CollectorResult<T> = {
11
+ status: CollectorStatus;
12
+ asOf: number;
13
+ data?: T;
14
+ source: string;
15
+ staleAfterMs: number;
16
+ reasonCode?: string;
17
+ message?: string;
18
+ action?: string;
19
+ ok?: boolean;
20
+ ts?: number;
21
+ error?: {
22
+ code: string;
23
+ message: string;
24
+ };
25
+ };
26
+ /**
27
+ * UiState - Single authoritative snapshot
28
+ * Phase 3: Complete state for hub rendering
29
+ */
30
+ export type UiState = {
31
+ ts: number;
32
+ posture: {
33
+ posture: "OPERATIONAL" | "DEGRADED" | "OFFLINE" | "CRITICAL" | "UNKNOWN";
34
+ risk: "LOW" | "ELEVATED" | "HIGH" | "UNKNOWN";
35
+ connected: boolean | "UNKNOWN";
36
+ target: string | "UNKNOWN";
37
+ lastChange: number | "UNKNOWN";
38
+ cause: string | "UNKNOWN";
39
+ dependencies: {
40
+ config: "OK" | "WARN" | "ERROR" | "UNKNOWN";
41
+ gateway: "OK" | "WARN" | "ERROR" | "UNKNOWN";
42
+ database: "OK" | "WARN" | "ERROR" | "UNKNOWN";
43
+ registry: "OK" | "WARN" | "ERROR" | "UNKNOWN";
44
+ };
45
+ };
46
+ network: {
47
+ originRegion: string | "UNKNOWN";
48
+ originClass: "LOCAL" | "VPN" | "CLOUD" | "UNKNOWN";
49
+ gatewayRegion: string | "UNKNOWN";
50
+ dbRegion: string | "NONE" | "UNKNOWN";
51
+ latencyMs: number | "UNKNOWN";
52
+ latencyClass: "LOW" | "MEDIUM" | "HIGH" | "UNKNOWN";
53
+ publicIpMasked: string | "HIDDEN" | "UNKNOWN";
54
+ };
55
+ resources: {
56
+ cpuPercent: number | "UNKNOWN";
57
+ load1m: number | "UNKNOWN";
58
+ ramUsedMb: number | "UNKNOWN";
59
+ ramTotalMb: number | "UNKNOWN";
60
+ diskUsedGb: number | "UNKNOWN";
61
+ diskTotalGb: number | "UNKNOWN";
62
+ uptimeSec: number | "UNKNOWN";
63
+ procCount: number | "UNKNOWN";
64
+ };
65
+ assets: {
66
+ total: number | "UNKNOWN";
67
+ active: number | "UNKNOWN";
68
+ idle: number | "UNKNOWN";
69
+ error: number | "UNKNOWN";
70
+ highlight: string | "UNKNOWN";
71
+ lastAction: string | "NONE" | "UNKNOWN";
72
+ };
73
+ capabilities: {
74
+ gateway: "READY" | "DEGRADED" | "UNKNOWN";
75
+ database: "READY" | "NOT_INITIALIZED" | "UNKNOWN";
76
+ memory: "IN_MEMORY" | "PERSISTENT" | "UNKNOWN";
77
+ security: "OPEN" | "BASIC" | "JWT" | "UNKNOWN";
78
+ rateLimit: "ENABLED" | "DISABLED" | "UNKNOWN";
79
+ };
80
+ feed: {
81
+ events: Array<{
82
+ ts: number;
83
+ tag: "RUN" | "NET" | "SEC" | "DB" | "GATEWAY" | "SYSTEM";
84
+ msg: string;
85
+ }>;
86
+ };
87
+ freshness: {
88
+ posture: "FRESH" | "STALE";
89
+ network: "FRESH" | "STALE";
90
+ resources: "FRESH" | "STALE";
91
+ assets: "FRESH" | "STALE";
92
+ capabilities: "FRESH" | "STALE";
93
+ };
94
+ history?: {
95
+ cpu: Array<number | null>;
96
+ ram: Array<number | null>;
97
+ latency: Array<number | null>;
98
+ };
99
+ geo?: GeoContext;
100
+ };
101
+ /**
102
+ * Geographic Context
103
+ * Phase 5: Geographic situational awareness
104
+ */
105
+ export type GeoContext = {
106
+ originLabel: string | "UNKNOWN";
107
+ originRegion: string | "UNKNOWN";
108
+ originLatLon?: {
109
+ lat: number;
110
+ lon: number;
111
+ } | "UNKNOWN";
112
+ gatewayRegion: string | "UNKNOWN";
113
+ gatewayLatLon?: {
114
+ lat: number;
115
+ lon: number;
116
+ } | "UNKNOWN";
117
+ dbRegion: string | "UNKNOWN";
118
+ dbLatLon?: {
119
+ lat: number;
120
+ lon: number;
121
+ } | "UNKNOWN";
122
+ routeLabel: string | "UNKNOWN";
123
+ pingMs: number | "UNKNOWN";
124
+ pingClass: "LOW" | "MEDIUM" | "HIGH" | "UNKNOWN";
125
+ confidence: "LOW" | "MEDIUM" | "HIGH" | "UNKNOWN";
126
+ source: "MANUAL" | "LOCAL_IP" | "AWS_META" | "NONE";
127
+ };
128
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Core Types
3
+ * Phase 3: Data contracts for collectors and UiState
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/dist/index.js CHANGED
@@ -2375,10 +2375,140 @@ process.on('SIGTERM', () => {
2375
2375
  });
2376
2376
  // Start the OS
2377
2377
  async function main() {
2378
- // Load custom agents on startup
2379
- loadCustomAgents();
2380
- await bootSequence();
2381
- await startREPL();
2378
+ // Phase 1: Check for NO_TUI mode
2379
+ const noTui = process.env.NO_TUI === '1';
2380
+ if (noTui) {
2381
+ // NO_TUI mode: text-based hub
2382
+ const { buildUiState } = await import('./state/uiStateBuilder.js');
2383
+ // Load custom agents on startup
2384
+ loadCustomAgents();
2385
+ // Build UI state
2386
+ syncStateToStore();
2387
+ const state = getState();
2388
+ updateAppState({
2389
+ customAgents: customAgents,
2390
+ runHistory: runHistory,
2391
+ });
2392
+ const uiState = await buildUiState(getState());
2393
+ const { renderTextHub } = await import('./ui/runtime/no-tui.js');
2394
+ renderTextHub(uiState);
2395
+ // In NO_TUI mode, we can still run REPL if needed, or just exit
2396
+ // For now, just show the hub and exit
2397
+ process.exit(0);
2398
+ }
2399
+ else {
2400
+ // TUI mode: blessed console
2401
+ const { createConsoleApp, renderHubLayout } = await import('./ui/runtime/index.js');
2402
+ const { startScheduler } = await import('./state/uiStateScheduler.js');
2403
+ // Load custom agents on startup
2404
+ loadCustomAgents();
2405
+ // Initialize TUI
2406
+ const screen = createConsoleApp({
2407
+ title: '4Runr OS Intelligence Console',
2408
+ });
2409
+ // Phase 7: Boot sequence
2410
+ const { renderBootScreen } = await import('./ui/boot/sequence.js');
2411
+ await renderBootScreen(screen);
2412
+ // Sync state
2413
+ syncStateToStore();
2414
+ const state = getState();
2415
+ updateAppState({
2416
+ customAgents: customAgents,
2417
+ runHistory: runHistory,
2418
+ });
2419
+ // Start scheduler (rebuilds UiState on cadence, handles feed events)
2420
+ startScheduler(() => getState(), async (uiState) => {
2421
+ // Render hub from UiState snapshot
2422
+ await renderHubLayout(uiState);
2423
+ });
2424
+ // For Phase 1, just show the hub
2425
+ // Later phases will add interactivity
2426
+ }
2427
+ }
2428
+ // Handle CLI arguments for NO_TUI mode
2429
+ const cliArgs = process.argv.slice(2);
2430
+ if (process.env.NO_TUI === '1' || cliArgs.includes('--no-tui')) {
2431
+ // NO_TUI mode: handle CLI commands
2432
+ (async () => {
2433
+ loadCustomAgents();
2434
+ syncStateToStore();
2435
+ const state = getState();
2436
+ updateAppState({
2437
+ customAgents: customAgents,
2438
+ runHistory: runHistory,
2439
+ });
2440
+ const { buildUiState } = await import('./state/uiStateBuilder.js');
2441
+ const uiState = await buildUiState(getState());
2442
+ if (cliArgs[0] === 'hub') {
2443
+ // Print hub summary
2444
+ const { renderTextHub } = await import('./ui/runtime/no-tui.js');
2445
+ renderTextHub(uiState);
2446
+ }
2447
+ else if (cliArgs[0] === 'inspect') {
2448
+ const panel = cliArgs[1];
2449
+ const filterIndex = cliArgs.indexOf('--filter');
2450
+ const filter = filterIndex >= 0 && cliArgs[filterIndex + 1] ? cliArgs[filterIndex + 1] : undefined;
2451
+ // Print drilldown text
2452
+ if (panel === 'posture') {
2453
+ printPostureDrilldown(uiState);
2454
+ }
2455
+ else if (panel === 'feed') {
2456
+ printFeedDrilldown(uiState, filter);
2457
+ }
2458
+ else {
2459
+ console.log(`NOT IMPLEMENTED: ${panel} drilldown`);
2460
+ }
2461
+ }
2462
+ else {
2463
+ // Default: show hub
2464
+ const { renderTextHub } = await import('./ui/runtime/no-tui.js');
2465
+ renderTextHub(uiState);
2466
+ }
2467
+ process.exit(0);
2468
+ })();
2469
+ }
2470
+ else {
2471
+ main();
2472
+ }
2473
+ /**
2474
+ * Print posture drilldown (NO_TUI)
2475
+ */
2476
+ function printPostureDrilldown(uiState) {
2477
+ const posture = uiState.posture;
2478
+ console.log('POSTURE DRILLDOWN');
2479
+ console.log('');
2480
+ console.log(`POSTURE: ${posture.posture}`);
2481
+ console.log(`RISK: ${posture.risk}`);
2482
+ console.log(`LAST CHANGE: ${posture.lastChange !== 'UNKNOWN' ? new Date(posture.lastChange).toLocaleString() : 'UNKNOWN'}`);
2483
+ if (posture.cause !== 'UNKNOWN') {
2484
+ console.log(`CAUSE: ${posture.cause}`);
2485
+ }
2486
+ console.log('');
2487
+ console.log('HEALTH CHECKS:');
2488
+ console.log(` Config: ${posture.dependencies.config}`);
2489
+ console.log(` Gateway: ${posture.dependencies.gateway}`);
2490
+ console.log(` Database: ${posture.dependencies.database}`);
2491
+ console.log(` Registry: ${posture.dependencies.registry}`);
2492
+ }
2493
+ /**
2494
+ * Print feed drilldown (NO_TUI)
2495
+ */
2496
+ function printFeedDrilldown(uiState, filter) {
2497
+ let events = uiState.feed.events;
2498
+ if (filter) {
2499
+ const lowerFilter = filter.toLowerCase();
2500
+ events = events.filter((e) => e.tag.toLowerCase().includes(lowerFilter) ||
2501
+ e.msg.toLowerCase().includes(lowerFilter));
2502
+ }
2503
+ console.log('FEED DRILLDOWN');
2504
+ if (filter) {
2505
+ console.log(`Filter: ${filter}`);
2506
+ console.log(`${events.length} results`);
2507
+ }
2508
+ console.log('');
2509
+ events.slice().reverse().forEach((event) => {
2510
+ const time = new Date(event.ts).toLocaleTimeString();
2511
+ console.log(`[${time}] [${event.tag}] ${event.msg}`);
2512
+ });
2382
2513
  }
2383
- main();
2384
2514
  //# sourceMappingURL=index.js.map