4runr-os 1.0.98 → 1.0.99

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 (54) hide show
  1. package/dist/ui/v3/collectors/resources.d.ts +3 -3
  2. package/dist/ui/v3/collectors/resources.d.ts.map +1 -1
  3. package/dist/ui/v3/collectors/resources.js +13 -4
  4. package/dist/ui/v3/collectors/resources.js.map +1 -1
  5. package/dist/ui/v3/commands/router.js +3 -3
  6. package/dist/ui/v3/commands/router.js.map +1 -1
  7. package/dist/ui/v3/state/assertUiState.d.ts +27 -0
  8. package/dist/ui/v3/state/assertUiState.d.ts.map +1 -0
  9. package/dist/ui/v3/state/assertUiState.js +85 -0
  10. package/dist/ui/v3/state/assertUiState.js.map +1 -0
  11. package/dist/ui/v3/state/defaultState.d.ts +9 -2
  12. package/dist/ui/v3/state/defaultState.d.ts.map +1 -1
  13. package/dist/ui/v3/state/defaultState.js +15 -3
  14. package/dist/ui/v3/state/defaultState.js.map +1 -1
  15. package/dist/ui/v3/state/uiState.d.ts +13 -3
  16. package/dist/ui/v3/state/uiState.d.ts.map +1 -1
  17. package/dist/ui/v3/state/uiState.js +6 -1
  18. package/dist/ui/v3/state/uiState.js.map +1 -1
  19. package/dist/ui/v3/state/uiStateBuilder.d.ts +6 -1
  20. package/dist/ui/v3/state/uiStateBuilder.d.ts.map +1 -1
  21. package/dist/ui/v3/state/uiStateBuilder.js +18 -3
  22. package/dist/ui/v3/state/uiStateBuilder.js.map +1 -1
  23. package/dist/ui/v3/state/uiStateTypes.d.ts +52 -0
  24. package/dist/ui/v3/state/uiStateTypes.d.ts.map +1 -0
  25. package/dist/ui/v3/state/uiStateTypes.js +8 -0
  26. package/dist/ui/v3/state/uiStateTypes.js.map +1 -0
  27. package/dist/ui/v3/state/value.d.ts +40 -12
  28. package/dist/ui/v3/state/value.d.ts.map +1 -1
  29. package/dist/ui/v3/state/value.js +39 -6
  30. package/dist/ui/v3/state/value.js.map +1 -1
  31. package/dist/ui/v3/ui/panels/AssetsPanel.d.ts +16 -0
  32. package/dist/ui/v3/ui/panels/AssetsPanel.d.ts.map +1 -0
  33. package/dist/ui/v3/ui/panels/AssetsPanel.js +29 -0
  34. package/dist/ui/v3/ui/panels/AssetsPanel.js.map +1 -0
  35. package/dist/ui/v3/ui/panels/CapabilitiesPanel.d.ts +16 -0
  36. package/dist/ui/v3/ui/panels/CapabilitiesPanel.d.ts.map +1 -0
  37. package/dist/ui/v3/ui/panels/CapabilitiesPanel.js +27 -0
  38. package/dist/ui/v3/ui/panels/CapabilitiesPanel.js.map +1 -0
  39. package/dist/ui/v3/ui/panels/NetworkPanel.d.ts +16 -0
  40. package/dist/ui/v3/ui/panels/NetworkPanel.d.ts.map +1 -0
  41. package/dist/ui/v3/ui/panels/NetworkPanel.js +24 -0
  42. package/dist/ui/v3/ui/panels/NetworkPanel.js.map +1 -0
  43. package/dist/ui/v3/ui/panels/PosturePanel.d.ts +16 -0
  44. package/dist/ui/v3/ui/panels/PosturePanel.d.ts.map +1 -0
  45. package/dist/ui/v3/ui/panels/PosturePanel.js +24 -0
  46. package/dist/ui/v3/ui/panels/PosturePanel.js.map +1 -0
  47. package/dist/ui/v3/ui/panels/ResourcesPanel.d.ts +6 -3
  48. package/dist/ui/v3/ui/panels/ResourcesPanel.d.ts.map +1 -1
  49. package/dist/ui/v3/ui/panels/ResourcesPanel.js +25 -29
  50. package/dist/ui/v3/ui/panels/ResourcesPanel.js.map +1 -1
  51. package/dist/ui/v3/ui/phase1Runtime.d.ts.map +1 -1
  52. package/dist/ui/v3/ui/phase1Runtime.js +163 -18
  53. package/dist/ui/v3/ui/phase1Runtime.js.map +1 -1
  54. package/package.json +1 -1
@@ -13,11 +13,11 @@
13
13
  * - Uses Node APIs/libs only (no shell commands)
14
14
  */
15
15
  import type { Value } from '../state/value.js';
16
- import type { ResourcesData } from '../state/resourcesData.js';
16
+ import type { ResourcesState } from '../state/uiStateTypes.js';
17
17
  /**
18
18
  * Collect system resources
19
19
  *
20
- * Returns Value<ResourcesData> - either AVAILABLE with data or UNAVAILABLE with reason
20
+ * Returns Value<ResourcesState> - either AVAILABLE with data or UNAVAILABLE with reason
21
21
  */
22
- export declare function collectResources(): Promise<Value<ResourcesData>>;
22
+ export declare function collectResources(): Promise<Value<ResourcesState>>;
23
23
  //# sourceMappingURL=resources.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/collectors/resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI/D;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CA0HtE"}
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/collectors/resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAc/D;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CA0HvE"}
@@ -16,10 +16,19 @@ import si from 'systeminformation';
16
16
  import os from 'os';
17
17
  import { available, unavailable } from '../state/value.js';
18
18
  const COLLECTOR_TIMEOUT = 1500; // ms
19
+ /**
20
+ * Format uptime seconds to HH:MM:SS string
21
+ */
22
+ function formatUptime(seconds) {
23
+ const hours = Math.floor(seconds / 3600);
24
+ const minutes = Math.floor((seconds % 3600) / 60);
25
+ const secs = Math.floor(seconds % 60);
26
+ return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
27
+ }
19
28
  /**
20
29
  * Collect system resources
21
30
  *
22
- * Returns Value<ResourcesData> - either AVAILABLE with data or UNAVAILABLE with reason
31
+ * Returns Value<ResourcesState> - either AVAILABLE with data or UNAVAILABLE with reason
23
32
  */
24
33
  export async function collectResources() {
25
34
  // Wrap in timeout
@@ -96,14 +105,14 @@ export async function collectResources() {
96
105
  return unavailable('Uptime unavailable', 'Ensure Node.js os module is functional');
97
106
  }
98
107
  // All metrics collected successfully
108
+ // Format uptime as HH:MM:SS string
99
109
  const data = {
100
- cpuPercent,
101
- load1,
110
+ cpuPct: cpuPercent,
102
111
  ramUsedMB,
103
112
  ramTotalMB,
104
113
  diskUsedGB,
105
114
  diskTotalGB,
106
- uptimeSeconds,
115
+ uptime: formatUptime(uptimeSeconds),
107
116
  };
108
117
  return available(data);
109
118
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../../src/ui/v3/collectors/resources.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../../src/ui/v3/collectors/resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACnC,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAG3D,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,KAAK;AAErC;;GAEG;AACH,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACtC,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC3H,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,kBAAkB;IAClB,MAAM,cAAc,GAAG,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAE,EAAE;QACpE,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,WAAW,CACjB,iBAAiB,EACjB,uCAAuC,CACxC,CAAC,CAAC;QACL,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,CAAC,KAAK,IAAoC,EAAE;QACpE,IAAI,CAAC;YACH,mBAAmB;YACnB,IAAI,UAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;gBACnC,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,WAAW,CAChB,yBAAyB,EACzB,8CAA8C,CAC/C,CAAC;YACJ,CAAC;YAED,kCAAkC;YAClC,IAAI,KAAa,CAAC;YAClB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;gBACzB,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;YAC1C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,WAAW,CAChB,0BAA0B,EAC1B,wCAAwC,CACzC,CAAC;YACJ,CAAC;YAED,iBAAiB;YACjB,IAAI,SAAiB,CAAC;YACtB,IAAI,UAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC;gBAC3B,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;gBACjD,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,WAAW,CAChB,yBAAyB,EACzB,iDAAiD,CAClD,CAAC;YACJ,CAAC;YAED,8BAA8B;YAC9B,IAAI,UAAkB,CAAC;YACvB,IAAI,WAAmB,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC;gBAMjC,wCAAwC;gBACxC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;gBACtF,IAAI,WAAW,EAAE,CAAC;oBAChB,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;oBACjE,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;gBACpE,CAAC;qBAAM,CAAC;oBACN,+BAA+B;oBAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE;wBACjE,OAAO,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;oBACzD,CAAC,CAAC,CAAC;oBACH,IAAI,OAAO,EAAE,CAAC;wBACZ,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;wBAC7D,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;oBAChE,CAAC;yBAAM,CAAC;wBACN,OAAO,WAAW,CAChB,wBAAwB,EACxB,4BAA4B,CAC7B,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,WAAW,CAChB,0BAA0B,EAC1B,4DAA4D,CAC7D,CAAC;YACJ,CAAC;YAED,iBAAiB;YACjB,IAAI,aAAqB,CAAC;YAC1B,IAAI,CAAC;gBACH,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,WAAW,CAChB,oBAAoB,EACpB,wCAAwC,CACzC,CAAC;YACJ,CAAC;YAED,qCAAqC;YACrC,mCAAmC;YACnC,MAAM,IAAI,GAAmB;gBAC3B,MAAM,EAAE,UAAU;gBAClB,SAAS;gBACT,UAAU;gBACV,UAAU;gBACV,WAAW;gBACX,MAAM,EAAE,YAAY,CAAC,aAAa,CAAC;aACpC,CAAC;YAEF,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QAEzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mBAAmB;YACnB,OAAO,WAAW,CAChB,qCAAqC,EACrC,2CAA2C,CAC5C,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -75,11 +75,11 @@ function handleStatus() {
75
75
  eventBus.emitTag('SYS', '=== UI STATE SUMMARY ===');
76
76
  // Resources status
77
77
  if (isAvailable(state.resources)) {
78
- const r = state.resources.data;
79
- eventBus.emitTag('SYS', `RESOURCES: CPU ${r.cpuPercent.toFixed(1)}% | RAM ${r.ramUsedMB}/${r.ramTotalMB}MB | Disk ${r.diskUsedGB}/${r.diskTotalGB}GB`);
78
+ const r = state.resources.value;
79
+ eventBus.emitTag('SYS', `RESOURCES: CPU ${r.cpuPct.toFixed(1)}% | RAM ${r.ramUsedMB}/${r.ramTotalMB}MB | Disk ${r.diskUsedGB}/${r.diskTotalGB}GB`);
80
80
  }
81
81
  else {
82
- eventBus.emitTag('SYS', `RESOURCES: ${state.resources.status} - ${state.resources.reason || 'Unknown'}`);
82
+ eventBus.emitTag('SYS', `RESOURCES: ${state.resources.availability} - ${state.resources.reason || 'Unknown'}`);
83
83
  }
84
84
  eventBus.emitTag('SYS', '=== END STATE SUMMARY ===');
85
85
  return noOpResult();
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../../src/ui/v3/commands/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../../src/ui/v3/commands/router.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,IAAc;IACtD,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAEzC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,UAAU,EAAE,CAAC;QAEtB,KAAK,OAAO;YACV,OAAO,WAAW,EAAE,CAAC;QAEvB,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,UAAU,EAAE,CAAC;QAEtB,KAAK,MAAM;YACT,OAAO,UAAU,EAAE,CAAC;QAEtB,KAAK,QAAQ;YACX,OAAO,YAAY,EAAE,CAAC;QAExB,KAAK,UAAU;YACb,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;QAE9B;YACE,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU;IACjB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,qDAAqD,CAAC,CAAC;IAC/E,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW;IAClB,SAAS,CAAC,KAAK,EAAE,CAAC;IAClB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACxC,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAS,UAAU;IACjB,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU;IACjB,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IAC5C,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY;IACnB,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAE7B,sBAAsB;IACtB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC;IAEpD,mBAAmB;IACnB,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;QAChC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,UAAU,aAAa,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;IACrJ,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,KAAK,CAAC,SAAS,CAAC,YAAY,MAAM,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;IACjH,CAAC;IAEC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;IACvD,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CAAC,IAAc;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,OAAO,CAAC;IAE/C,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAC3C,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;QACnD,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;IACjD,CAAC;SAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,kEAAkE,CAAC;QACtG,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,yDAAyD,CAAC;QAC7F,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,8DAA8D,CAAC;QAClG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,wBAAwB;QACxB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACzC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,kCAAkC,CAAC,CAAC;QAC9E,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACzC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,8BAA8B,CAAC,CAAC;QAC1E,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,0BAA0B,IAAI,+BAA+B,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,iBAAiB,CAAC,KAAa,EAAE,YAAoB,EAAE;IAC9D,yCAAyC;IACzC,IAAI,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;IAEjE,yBAAyB;IACzB,IAAI,SAAS,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QACjC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;IACxD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,0DAA0D;IAC1D,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAChD,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,oBAAoB,YAAY,cAAc,CAAC,CAAC;IACxE,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Section 4: UiState Validation (Runtime Contract)
3
+ *
4
+ * Catches illegal state mutations at runtime.
5
+ * Provides immediate, deterministic failure (no silent broken UI).
6
+ *
7
+ * Validation rules:
8
+ * - State must be an object
9
+ * - Must include all keys exactly
10
+ * - For each key:
11
+ * - Must have availability in allowed set
12
+ * - If AVAILABLE → must have value
13
+ * - If UNAVAILABLE/UNKNOWN → must not have value
14
+ */
15
+ import type { UiState } from './uiState.js';
16
+ /**
17
+ * Assert that state is a valid UiState
18
+ *
19
+ * Throws concise errors like:
20
+ * - UISTATE_INVALID: assets missing
21
+ * - UISTATE_INVALID: resources AVAILABLE missing value
22
+ *
23
+ * No stack dumps into the Operations Feed (this is internal).
24
+ * If you surface it, wrap it as a single [ERR] event with capped details.
25
+ */
26
+ export declare function assertUiState(state: any): asserts state is UiState;
27
+ //# sourceMappingURL=assertUiState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertUiState.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/state/assertUiState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAgD5C;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAuBlE"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Section 4: UiState Validation (Runtime Contract)
3
+ *
4
+ * Catches illegal state mutations at runtime.
5
+ * Provides immediate, deterministic failure (no silent broken UI).
6
+ *
7
+ * Validation rules:
8
+ * - State must be an object
9
+ * - Must include all keys exactly
10
+ * - For each key:
11
+ * - Must have availability in allowed set
12
+ * - If AVAILABLE → must have value
13
+ * - If UNAVAILABLE/UNKNOWN → must not have value
14
+ */
15
+ const REQUIRED_KEYS = [
16
+ 'posture',
17
+ 'resources',
18
+ 'assets',
19
+ 'network',
20
+ 'capabilities',
21
+ 'statusStrip',
22
+ ];
23
+ const VALID_AVAILABILITY = ["AVAILABLE", "UNAVAILABLE", "UNKNOWN"];
24
+ /**
25
+ * Assert that a value has valid structure
26
+ */
27
+ function assertValue(key, value) {
28
+ if (!value || typeof value !== 'object') {
29
+ throw new Error(`UISTATE_INVALID: ${key} is not an object`);
30
+ }
31
+ if (!('availability' in value)) {
32
+ throw new Error(`UISTATE_INVALID: ${key} missing availability`);
33
+ }
34
+ const availability = value.availability;
35
+ if (!VALID_AVAILABILITY.includes(availability)) {
36
+ throw new Error(`UISTATE_INVALID: ${key} has invalid availability: ${availability}`);
37
+ }
38
+ if (availability === "AVAILABLE") {
39
+ if (!('value' in value)) {
40
+ throw new Error(`UISTATE_INVALID: ${key} AVAILABLE missing value`);
41
+ }
42
+ // AVAILABLE must not have reason/nextAction (they're for UNAVAILABLE/UNKNOWN)
43
+ if ('reason' in value || 'nextAction' in value) {
44
+ throw new Error(`UISTATE_INVALID: ${key} AVAILABLE should not have reason/nextAction`);
45
+ }
46
+ }
47
+ else {
48
+ // UNAVAILABLE or UNKNOWN must not have value
49
+ if ('value' in value) {
50
+ throw new Error(`UISTATE_INVALID: ${key} ${availability} should not have value`);
51
+ }
52
+ }
53
+ }
54
+ /**
55
+ * Assert that state is a valid UiState
56
+ *
57
+ * Throws concise errors like:
58
+ * - UISTATE_INVALID: assets missing
59
+ * - UISTATE_INVALID: resources AVAILABLE missing value
60
+ *
61
+ * No stack dumps into the Operations Feed (this is internal).
62
+ * If you surface it, wrap it as a single [ERR] event with capped details.
63
+ */
64
+ export function assertUiState(state) {
65
+ if (!state || typeof state !== 'object') {
66
+ throw new Error('UISTATE_INVALID: state is not an object');
67
+ }
68
+ // Check all required keys are present
69
+ for (const key of REQUIRED_KEYS) {
70
+ if (!(key in state)) {
71
+ throw new Error(`UISTATE_INVALID: ${key} missing`);
72
+ }
73
+ }
74
+ // Check no extra keys (strict contract)
75
+ const stateKeys = Object.keys(state);
76
+ const extraKeys = stateKeys.filter(k => !REQUIRED_KEYS.includes(k));
77
+ if (extraKeys.length > 0) {
78
+ throw new Error(`UISTATE_INVALID: extra keys found: ${extraKeys.join(', ')}`);
79
+ }
80
+ // Validate each key's value structure
81
+ for (const key of REQUIRED_KEYS) {
82
+ assertValue(key, state[key]);
83
+ }
84
+ }
85
+ //# sourceMappingURL=assertUiState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertUiState.js","sourceRoot":"","sources":["../../../../src/ui/v3/state/assertUiState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,MAAM,aAAa,GAAsB;IACvC,SAAS;IACT,WAAW;IACX,QAAQ;IACR,SAAS;IACT,cAAc;IACd,aAAa;CACd,CAAC;AAEF,MAAM,kBAAkB,GAAmB,CAAC,WAAW,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;AAEnF;;GAEG;AACH,SAAS,WAAW,CAAI,GAAW,EAAE,KAAU;IAC7C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,mBAAmB,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,CAAC,cAAc,IAAI,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,uBAAuB,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACxC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,8BAA8B,YAAY,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,0BAA0B,CAAC,CAAC;QACrE,CAAC;QACD,8EAA8E;QAC9E,IAAI,QAAQ,IAAI,KAAK,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,8CAA8C,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;SAAM,CAAC;QACN,6CAA6C;QAC7C,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,IAAI,YAAY,wBAAwB,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,KAAU;IACtC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,sCAAsC;IACtC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,UAAU,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAkB,CAAC,CAAC,CAAC;IACrF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,sCAAsC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,sCAAsC;IACtC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC"}
@@ -1,8 +1,15 @@
1
1
  /**
2
- * Default UiState (Phase 4)
2
+ * Section 4: Default UiState (Cold Boot State)
3
3
  *
4
4
  * Initial state before collectors run.
5
- * All fields start as UNAVAILABLE.
5
+ * All fields start as UNAVAILABLE with:
6
+ * - reason stating why
7
+ * - nextAction telling operator what to do next
8
+ *
9
+ * Hard requirements:
10
+ * - No key may be AVAILABLE in the default state
11
+ * - No key may be missing
12
+ * - All panels must have meaningful reason + nextAction (do not leave empty)
6
13
  */
7
14
  import type { UiState } from './uiState.js';
8
15
  export declare const defaultUiState: UiState;
@@ -1 +1 @@
1
- {"version":3,"file":"defaultState.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/state/defaultState.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,eAAO,MAAM,cAAc,EAAE,OAK5B,CAAC"}
1
+ {"version":3,"file":"defaultState.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/state/defaultState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,eAAO,MAAM,cAAc,EAAE,OAyB5B,CAAC"}
@@ -1,11 +1,23 @@
1
1
  /**
2
- * Default UiState (Phase 4)
2
+ * Section 4: Default UiState (Cold Boot State)
3
3
  *
4
4
  * Initial state before collectors run.
5
- * All fields start as UNAVAILABLE.
5
+ * All fields start as UNAVAILABLE with:
6
+ * - reason stating why
7
+ * - nextAction telling operator what to do next
8
+ *
9
+ * Hard requirements:
10
+ * - No key may be AVAILABLE in the default state
11
+ * - No key may be missing
12
+ * - All panels must have meaningful reason + nextAction (do not leave empty)
6
13
  */
7
14
  import { unavailable } from './value.js';
8
15
  export const defaultUiState = {
9
- resources: unavailable('Not initialized', 'Waiting for first collection cycle'),
16
+ posture: unavailable('Posture not initialized', 'Run "status" to check system state'),
17
+ resources: unavailable('Resources not collected', 'Waiting for first collection cycle'),
18
+ assets: unavailable('Asset registry not initialized', 'Start agent registry'),
19
+ network: unavailable('Network state unknown', 'Run "connect" to initialize Gateway'),
20
+ capabilities: unavailable('Capabilities not loaded', 'Run "status" after connecting'),
21
+ statusStrip: unavailable('Status not initialized', 'System starting up'),
10
22
  };
11
23
  //# sourceMappingURL=defaultState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaultState.js","sourceRoot":"","sources":["../../../../src/ui/v3/state/defaultState.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,cAAc,GAAY;IACrC,SAAS,EAAE,WAAW,CACpB,iBAAiB,EACjB,oCAAoC,CACrC;CACF,CAAC"}
1
+ {"version":3,"file":"defaultState.js","sourceRoot":"","sources":["../../../../src/ui/v3/state/defaultState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,CAAC,MAAM,cAAc,GAAY;IACrC,OAAO,EAAE,WAAW,CAClB,yBAAyB,EACzB,oCAAoC,CACrC;IACD,SAAS,EAAE,WAAW,CACpB,yBAAyB,EACzB,oCAAoC,CACrC;IACD,MAAM,EAAE,WAAW,CACjB,gCAAgC,EAChC,sBAAsB,CACvB;IACD,OAAO,EAAE,WAAW,CAClB,uBAAuB,EACvB,qCAAqC,CACtC;IACD,YAAY,EAAE,WAAW,CACvB,yBAAyB,EACzB,+BAA+B,CAChC;IACD,WAAW,EAAE,WAAW,CACtB,wBAAwB,EACxB,oBAAoB,CACrB;CACF,CAAC"}
@@ -1,12 +1,22 @@
1
1
  /**
2
- * UiState (Phase 4)
2
+ * Section 4: UiState Contract
3
3
  *
4
4
  * Single source of truth for UI state.
5
5
  * All panels render from UiState only.
6
+ *
7
+ * Rule: UiState keys are locked. If a developer tries to add a key,
8
+ * it should require deliberate refactor (not accidental).
9
+ *
10
+ * All keys must use Value<T> with strict type T for that panel.
6
11
  */
7
12
  import type { Value } from './value.js';
8
- import type { ResourcesData } from './resourcesData.js';
13
+ import type { PostureState, ResourcesState, AssetsState, NetworkState, CapabilitiesState, StatusStripState } from './uiStateTypes.js';
9
14
  export interface UiState {
10
- resources: Value<ResourcesData>;
15
+ posture: Value<PostureState>;
16
+ resources: Value<ResourcesState>;
17
+ assets: Value<AssetsState>;
18
+ network: Value<NetworkState>;
19
+ capabilities: Value<CapabilitiesState>;
20
+ statusStrip: Value<StatusStripState>;
11
21
  }
12
22
  //# sourceMappingURL=uiState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uiState.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/state/uiState.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;CAKjC"}
1
+ {"version":3,"file":"uiState.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/state/uiState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC7B,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACjC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3B,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC7B,YAAY,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvC,WAAW,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;CACtC"}
@@ -1,8 +1,13 @@
1
1
  /**
2
- * UiState (Phase 4)
2
+ * Section 4: UiState Contract
3
3
  *
4
4
  * Single source of truth for UI state.
5
5
  * All panels render from UiState only.
6
+ *
7
+ * Rule: UiState keys are locked. If a developer tries to add a key,
8
+ * it should require deliberate refactor (not accidental).
9
+ *
10
+ * All keys must use Value<T> with strict type T for that panel.
6
11
  */
7
12
  export {};
8
13
  //# sourceMappingURL=uiState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"uiState.js","sourceRoot":"","sources":["../../../../src/ui/v3/state/uiState.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
1
+ {"version":3,"file":"uiState.js","sourceRoot":"","sources":["../../../../src/ui/v3/state/uiState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -1,12 +1,17 @@
1
1
  /**
2
- * UiState Builder (Phase 4)
2
+ * Section 4: UiState Builder
3
3
  *
4
4
  * Builds the complete UiState from collectors.
5
5
  * This is the single source of truth for UI data.
6
+ *
7
+ * All panels must have data - no missing keys.
6
8
  */
7
9
  import type { UiState } from './uiState.js';
8
10
  /**
9
11
  * Build the current UiState
12
+ *
13
+ * Section 4: Must include all required keys
14
+ * All keys must use Value<T> structure
10
15
  */
11
16
  export declare function buildUiState(): Promise<UiState>;
12
17
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"uiStateBuilder.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/state/uiStateBuilder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAa5C;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAWrD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}
1
+ {"version":3,"file":"uiStateBuilder.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/state/uiStateBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAe5C;;;;;GAKG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAoBrD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}
@@ -1,11 +1,15 @@
1
1
  /**
2
- * UiState Builder (Phase 4)
2
+ * Section 4: UiState Builder
3
3
  *
4
4
  * Builds the complete UiState from collectors.
5
5
  * This is the single source of truth for UI data.
6
+ *
7
+ * All panels must have data - no missing keys.
6
8
  */
7
9
  import { defaultUiState } from './defaultState.js';
10
+ import { assertUiState } from './assertUiState.js';
8
11
  import { collectResources } from '../collectors/resources.js';
12
+ import { unavailable } from './value.js';
9
13
  /**
10
14
  * Build UiState from collectors
11
15
  *
@@ -15,14 +19,25 @@ const COLLECTOR_INTERVAL = 1500; // ms
15
19
  let lastState = defaultUiState;
16
20
  /**
17
21
  * Build the current UiState
22
+ *
23
+ * Section 4: Must include all required keys
24
+ * All keys must use Value<T> structure
18
25
  */
19
26
  export async function buildUiState() {
20
- // Collect resources
27
+ // Collect resources (only one collector for now)
21
28
  const resources = await collectResources();
22
- // Build state
29
+ // Build state with all required keys
30
+ // For now, most panels are UNAVAILABLE (will be populated by collectors in future)
23
31
  const state = {
32
+ posture: unavailable('Posture not initialized', 'Run "status" to check system state'),
24
33
  resources,
34
+ assets: unavailable('Asset registry not initialized', 'Start agent registry'),
35
+ network: unavailable('Network state unknown', 'Run "connect" to initialize Gateway'),
36
+ capabilities: unavailable('Capabilities not loaded', 'Run "status" after connecting'),
37
+ statusStrip: unavailable('Status not initialized', 'System starting up'),
25
38
  };
39
+ // Section 4: Validate state contract at runtime
40
+ assertUiState(state);
26
41
  lastState = state;
27
42
  return state;
28
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"uiStateBuilder.js","sourceRoot":"","sources":["../../../../src/ui/v3/state/uiStateBuilder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,IAAI,CAAC,CAAC,KAAK;AAEtC,IAAI,SAAS,GAAY,cAAc,CAAC;AAExC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,oBAAoB;IACpB,MAAM,SAAS,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAE3C,cAAc;IACd,MAAM,KAAK,GAAY;QACrB,SAAS;KACV,CAAC;IAEF,SAAS,GAAG,KAAK,CAAC;IAClB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"uiStateBuilder.js","sourceRoot":"","sources":["../../../../src/ui/v3/state/uiStateBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,IAAI,CAAC,CAAC,KAAK;AAEtC,IAAI,SAAS,GAAY,cAAc,CAAC;AAExC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,iDAAiD;IACjD,MAAM,SAAS,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAE3C,qCAAqC;IACrC,mFAAmF;IACnF,MAAM,KAAK,GAAY;QACrB,OAAO,EAAE,WAAW,CAAC,yBAAyB,EAAE,oCAAoC,CAAC;QACrF,SAAS;QACT,MAAM,EAAE,WAAW,CAAC,gCAAgC,EAAE,sBAAsB,CAAC;QAC7E,OAAO,EAAE,WAAW,CAAC,uBAAuB,EAAE,qCAAqC,CAAC;QACpF,YAAY,EAAE,WAAW,CAAC,yBAAyB,EAAE,+BAA+B,CAAC;QACrF,WAAW,EAAE,WAAW,CAAC,wBAAwB,EAAE,oBAAoB,CAAC;KACzE,CAAC;IAEF,gDAAgD;IAChD,aAAa,CAAC,KAAK,CAAC,CAAC;IAErB,SAAS,GAAG,KAAK,CAAC;IAClB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Section 4: UiState Type Definitions
3
+ *
4
+ * Strict type definitions for each panel's data.
5
+ * These are the T in Value<T> for each panel.
6
+ */
7
+ /**
8
+ * Posture state (minimal for now)
9
+ */
10
+ export type PostureState = {
11
+ mode: "HUB" | "UNKNOWN";
12
+ };
13
+ /**
14
+ * Resources state (system metrics)
15
+ */
16
+ export type ResourcesState = {
17
+ cpuPct: number;
18
+ ramUsedMB: number;
19
+ ramTotalMB: number;
20
+ diskUsedGB: number;
21
+ diskTotalGB: number;
22
+ uptime: string;
23
+ };
24
+ /**
25
+ * Assets state
26
+ */
27
+ export type AssetsState = {
28
+ total: number;
29
+ active: number;
30
+ idle: number;
31
+ error: number;
32
+ };
33
+ /**
34
+ * Network state
35
+ */
36
+ export type NetworkState = {
37
+ gateway: "CONNECTED" | "DISCONNECTED";
38
+ };
39
+ /**
40
+ * Capabilities state
41
+ */
42
+ export type CapabilitiesState = {
43
+ items: string[];
44
+ };
45
+ /**
46
+ * Status strip state
47
+ */
48
+ export type StatusStripState = {
49
+ left: string;
50
+ right: string;
51
+ };
52
+ //# sourceMappingURL=uiStateTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uiStateTypes.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/state/uiStateTypes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Section 4: UiState Type Definitions
3
+ *
4
+ * Strict type definitions for each panel's data.
5
+ * These are the T in Value<T> for each panel.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=uiStateTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uiStateTypes.js","sourceRoot":"","sources":["../../../../src/ui/v3/state/uiStateTypes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -1,39 +1,67 @@
1
1
  /**
2
- * Value Protocol (Phase 4)
2
+ * Section 4: Value Protocol
3
3
  *
4
4
  * Explicit availability semantics for data.
5
5
  * Prevents fake values and blank panels.
6
+ *
7
+ * Hard rules:
8
+ * - AVAILABLE must include value
9
+ * - UNAVAILABLE/UNKNOWN must not include value
10
+ * - No other fields
6
11
  */
7
- export type ValueStatus = 'AVAILABLE' | 'UNAVAILABLE';
12
+ export type Availability = "AVAILABLE" | "UNAVAILABLE" | "UNKNOWN";
8
13
  export type Value<T> = {
9
- status: 'AVAILABLE';
10
- data: T;
14
+ availability: "AVAILABLE";
15
+ value: T;
16
+ } | {
17
+ availability: "UNAVAILABLE";
18
+ reason?: string;
19
+ nextAction?: string;
11
20
  } | {
12
- status: 'UNAVAILABLE';
13
- reason: string;
21
+ availability: "UNKNOWN";
22
+ reason?: string;
14
23
  nextAction?: string;
15
24
  };
16
25
  /**
17
26
  * Create an AVAILABLE value
18
27
  */
19
- export declare function available<T>(data: T): Value<T>;
28
+ export declare function available<T>(value: T): Value<T>;
20
29
  /**
21
30
  * Create an UNAVAILABLE value
22
31
  */
23
- export declare function unavailable<T>(reason: string, nextAction?: string): Value<T>;
32
+ export declare function unavailable<T>(reason?: string, nextAction?: string): Value<T>;
33
+ /**
34
+ * Create an UNKNOWN value
35
+ */
36
+ export declare function unknown<T>(reason?: string, nextAction?: string): Value<T>;
24
37
  /**
25
38
  * Type guard: check if value is AVAILABLE
26
39
  */
27
40
  export declare function isAvailable<T>(value: Value<T>): value is {
28
- status: 'AVAILABLE';
29
- data: T;
41
+ availability: "AVAILABLE";
42
+ value: T;
30
43
  };
31
44
  /**
32
45
  * Type guard: check if value is UNAVAILABLE
33
46
  */
34
47
  export declare function isUnavailable<T>(value: Value<T>): value is {
35
- status: 'UNAVAILABLE';
36
- reason: string;
48
+ availability: "UNAVAILABLE";
49
+ reason?: string;
50
+ nextAction?: string;
51
+ };
52
+ /**
53
+ * Type guard: check if value is UNKNOWN
54
+ */
55
+ export declare function isUnknown<T>(value: Value<T>): value is {
56
+ availability: "UNKNOWN";
57
+ reason?: string;
37
58
  nextAction?: string;
38
59
  };
60
+ /**
61
+ * Section 4: Shared helper to render Value<T>
62
+ *
63
+ * Handles AVAILABLE, UNAVAILABLE, and UNKNOWN states consistently
64
+ * Never renders empty string - always shows meaningful content
65
+ */
66
+ export declare function renderValue<T>(v: Value<T>, renderAvailable: (t: T) => string): string;
39
67
  //# sourceMappingURL=value.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/state/value.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC;AAEtD,MAAM,MAAM,KAAK,CAAC,CAAC,IACf;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAChC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAE9C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAE5E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,CAEzF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAEzH"}
1
+ {"version":3,"file":"value.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/state/value.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AAEnE,MAAM,MAAM,KAAK,CAAC,CAAC,IACf;IAAE,YAAY,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACvC;IAAE,YAAY,EAAE,aAAa,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,YAAY,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAE7E;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAEzE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI;IAAE,YAAY,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAEhG;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI;IAAE,YAAY,EAAE,aAAa,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAEhI;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI;IAAE,YAAY,EAAE,SAAS,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAExH;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAC3B,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EACX,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,GAChC,MAAM,CAWR"}