4runr-os 1.0.97 → 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.
- package/dist/ui/v3/collectors/resources.d.ts +3 -3
- package/dist/ui/v3/collectors/resources.d.ts.map +1 -1
- package/dist/ui/v3/collectors/resources.js +13 -4
- package/dist/ui/v3/collectors/resources.js.map +1 -1
- package/dist/ui/v3/commands/commandEngine.d.ts +75 -0
- package/dist/ui/v3/commands/commandEngine.d.ts.map +1 -0
- package/dist/ui/v3/commands/commandEngine.js +292 -0
- package/dist/ui/v3/commands/commandEngine.js.map +1 -0
- package/dist/ui/v3/commands/router.js +3 -3
- package/dist/ui/v3/commands/router.js.map +1 -1
- package/dist/ui/v3/state/assertUiState.d.ts +27 -0
- package/dist/ui/v3/state/assertUiState.d.ts.map +1 -0
- package/dist/ui/v3/state/assertUiState.js +85 -0
- package/dist/ui/v3/state/assertUiState.js.map +1 -0
- package/dist/ui/v3/state/defaultState.d.ts +9 -2
- package/dist/ui/v3/state/defaultState.d.ts.map +1 -1
- package/dist/ui/v3/state/defaultState.js +15 -3
- package/dist/ui/v3/state/defaultState.js.map +1 -1
- package/dist/ui/v3/state/uiState.d.ts +13 -3
- package/dist/ui/v3/state/uiState.d.ts.map +1 -1
- package/dist/ui/v3/state/uiState.js +6 -1
- package/dist/ui/v3/state/uiState.js.map +1 -1
- package/dist/ui/v3/state/uiStateBuilder.d.ts +6 -1
- package/dist/ui/v3/state/uiStateBuilder.d.ts.map +1 -1
- package/dist/ui/v3/state/uiStateBuilder.js +18 -3
- package/dist/ui/v3/state/uiStateBuilder.js.map +1 -1
- package/dist/ui/v3/state/uiStateTypes.d.ts +52 -0
- package/dist/ui/v3/state/uiStateTypes.d.ts.map +1 -0
- package/dist/ui/v3/state/uiStateTypes.js +8 -0
- package/dist/ui/v3/state/uiStateTypes.js.map +1 -0
- package/dist/ui/v3/state/value.d.ts +40 -12
- package/dist/ui/v3/state/value.d.ts.map +1 -1
- package/dist/ui/v3/state/value.js +39 -6
- package/dist/ui/v3/state/value.js.map +1 -1
- package/dist/ui/v3/ui/panels/AssetsPanel.d.ts +16 -0
- package/dist/ui/v3/ui/panels/AssetsPanel.d.ts.map +1 -0
- package/dist/ui/v3/ui/panels/AssetsPanel.js +29 -0
- package/dist/ui/v3/ui/panels/AssetsPanel.js.map +1 -0
- package/dist/ui/v3/ui/panels/CapabilitiesPanel.d.ts +16 -0
- package/dist/ui/v3/ui/panels/CapabilitiesPanel.d.ts.map +1 -0
- package/dist/ui/v3/ui/panels/CapabilitiesPanel.js +27 -0
- package/dist/ui/v3/ui/panels/CapabilitiesPanel.js.map +1 -0
- package/dist/ui/v3/ui/panels/NetworkPanel.d.ts +16 -0
- package/dist/ui/v3/ui/panels/NetworkPanel.d.ts.map +1 -0
- package/dist/ui/v3/ui/panels/NetworkPanel.js +24 -0
- package/dist/ui/v3/ui/panels/NetworkPanel.js.map +1 -0
- package/dist/ui/v3/ui/panels/PosturePanel.d.ts +16 -0
- package/dist/ui/v3/ui/panels/PosturePanel.d.ts.map +1 -0
- package/dist/ui/v3/ui/panels/PosturePanel.js +24 -0
- package/dist/ui/v3/ui/panels/PosturePanel.js.map +1 -0
- package/dist/ui/v3/ui/panels/ResourcesPanel.d.ts +6 -3
- package/dist/ui/v3/ui/panels/ResourcesPanel.d.ts.map +1 -1
- package/dist/ui/v3/ui/panels/ResourcesPanel.js +25 -29
- package/dist/ui/v3/ui/panels/ResourcesPanel.js.map +1 -1
- package/dist/ui/v3/ui/phase1Runtime.d.ts.map +1 -1
- package/dist/ui/v3/ui/phase1Runtime.js +186 -32
- package/dist/ui/v3/ui/phase1Runtime.js.map +1 -1
- 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 {
|
|
16
|
+
import type { ResourcesState } from '../state/uiStateTypes.js';
|
|
17
17
|
/**
|
|
18
18
|
* Collect system resources
|
|
19
19
|
*
|
|
20
|
-
* Returns Value<
|
|
20
|
+
* Returns Value<ResourcesState> - either AVAILABLE with data or UNAVAILABLE with reason
|
|
21
21
|
*/
|
|
22
|
-
export declare function collectResources(): Promise<Value<
|
|
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,
|
|
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<
|
|
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":"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;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,kBAAkB;IAClB,MAAM,cAAc,GAAG,IAAI,OAAO,
|
|
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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section 3: Command Engine (UI-Agnostic)
|
|
3
|
+
*
|
|
4
|
+
* Pure command engine that sits between command line and UI state.
|
|
5
|
+
*
|
|
6
|
+
* Rules:
|
|
7
|
+
* - Does not know about blessed
|
|
8
|
+
* - Does not render UI
|
|
9
|
+
* - Does not contain business logic
|
|
10
|
+
* - Only parses input, executes commands, and emits structured results
|
|
11
|
+
* - UI layer consumes results and mutates UiState
|
|
12
|
+
*
|
|
13
|
+
* Architectural Rule (Non-Negotiable):
|
|
14
|
+
* - UI-agnostic
|
|
15
|
+
* - Side-effect free
|
|
16
|
+
* - Deterministic
|
|
17
|
+
*/
|
|
18
|
+
import type { OpEvent } from '../core/opEvent.js';
|
|
19
|
+
/**
|
|
20
|
+
* Parsed command structure
|
|
21
|
+
*/
|
|
22
|
+
export interface ParsedCommand {
|
|
23
|
+
name: string;
|
|
24
|
+
args: string[];
|
|
25
|
+
raw: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Command execution context (lightweight, no UI objects)
|
|
29
|
+
*/
|
|
30
|
+
export interface CommandContext {
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* UI actions that the UI layer interprets
|
|
34
|
+
*/
|
|
35
|
+
export declare enum UiAction {
|
|
36
|
+
EXIT = "EXIT",
|
|
37
|
+
CLEAR_FEED = "CLEAR_FEED",
|
|
38
|
+
HOME = "HOME"
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Command execution result
|
|
42
|
+
*/
|
|
43
|
+
export interface CommandResult {
|
|
44
|
+
events: OpEvent[];
|
|
45
|
+
action?: UiAction;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parse command line input
|
|
49
|
+
*
|
|
50
|
+
* Responsibilities:
|
|
51
|
+
* - Trim leading/trailing whitespace
|
|
52
|
+
* - Support quoted arguments: "quoted value" and 'quoted value'
|
|
53
|
+
* - Preserve spaces inside quotes
|
|
54
|
+
* - Split unquoted tokens on whitespace
|
|
55
|
+
*
|
|
56
|
+
* Rules:
|
|
57
|
+
* - Empty input → return { name: "", args: [], raw }
|
|
58
|
+
* - Parsing never throws
|
|
59
|
+
* - Parsing never emits UI output
|
|
60
|
+
*/
|
|
61
|
+
export declare function parse(line: string): ParsedCommand;
|
|
62
|
+
/**
|
|
63
|
+
* Execute a parsed command
|
|
64
|
+
*
|
|
65
|
+
* Responsibilities:
|
|
66
|
+
* - Route to a command handler
|
|
67
|
+
* - Return a CommandResult object
|
|
68
|
+
* - Never mutate UI directly
|
|
69
|
+
*
|
|
70
|
+
* Rules:
|
|
71
|
+
* - Never emits UI output directly
|
|
72
|
+
* - Only side effects via returned data
|
|
73
|
+
*/
|
|
74
|
+
export declare function execute(parsed: ParsedCommand, ctx: CommandContext): CommandResult;
|
|
75
|
+
//# sourceMappingURL=commandEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandEngine.d.ts","sourceRoot":"","sources":["../../../../src/ui/v3/commands/commandEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;CAG9B;AAED;;GAEG;AACH,oBAAY,QAAQ;IAClB,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,IAAI,SAAS;CACd;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CA8EjD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,GAAG,aAAa,CA4BjF"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section 3: Command Engine (UI-Agnostic)
|
|
3
|
+
*
|
|
4
|
+
* Pure command engine that sits between command line and UI state.
|
|
5
|
+
*
|
|
6
|
+
* Rules:
|
|
7
|
+
* - Does not know about blessed
|
|
8
|
+
* - Does not render UI
|
|
9
|
+
* - Does not contain business logic
|
|
10
|
+
* - Only parses input, executes commands, and emits structured results
|
|
11
|
+
* - UI layer consumes results and mutates UiState
|
|
12
|
+
*
|
|
13
|
+
* Architectural Rule (Non-Negotiable):
|
|
14
|
+
* - UI-agnostic
|
|
15
|
+
* - Side-effect free
|
|
16
|
+
* - Deterministic
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* UI actions that the UI layer interprets
|
|
20
|
+
*/
|
|
21
|
+
export var UiAction;
|
|
22
|
+
(function (UiAction) {
|
|
23
|
+
UiAction["EXIT"] = "EXIT";
|
|
24
|
+
UiAction["CLEAR_FEED"] = "CLEAR_FEED";
|
|
25
|
+
UiAction["HOME"] = "HOME";
|
|
26
|
+
})(UiAction || (UiAction = {}));
|
|
27
|
+
/**
|
|
28
|
+
* Parse command line input
|
|
29
|
+
*
|
|
30
|
+
* Responsibilities:
|
|
31
|
+
* - Trim leading/trailing whitespace
|
|
32
|
+
* - Support quoted arguments: "quoted value" and 'quoted value'
|
|
33
|
+
* - Preserve spaces inside quotes
|
|
34
|
+
* - Split unquoted tokens on whitespace
|
|
35
|
+
*
|
|
36
|
+
* Rules:
|
|
37
|
+
* - Empty input → return { name: "", args: [], raw }
|
|
38
|
+
* - Parsing never throws
|
|
39
|
+
* - Parsing never emits UI output
|
|
40
|
+
*/
|
|
41
|
+
export function parse(line) {
|
|
42
|
+
const raw = line;
|
|
43
|
+
const trimmed = line.trim();
|
|
44
|
+
// Empty input
|
|
45
|
+
if (!trimmed) {
|
|
46
|
+
return { name: '', args: [], raw };
|
|
47
|
+
}
|
|
48
|
+
// Remove prompt if present
|
|
49
|
+
const withoutPrompt = trimmed.replace(/^4runr>\s*/, '').trim();
|
|
50
|
+
if (!withoutPrompt) {
|
|
51
|
+
return { name: '', args: [], raw };
|
|
52
|
+
}
|
|
53
|
+
// Parse with quoted argument support
|
|
54
|
+
const tokens = [];
|
|
55
|
+
let current = '';
|
|
56
|
+
let inDoubleQuote = false;
|
|
57
|
+
let inSingleQuote = false;
|
|
58
|
+
for (let i = 0; i < withoutPrompt.length; i++) {
|
|
59
|
+
const char = withoutPrompt[i];
|
|
60
|
+
if (char === '"' && !inSingleQuote) {
|
|
61
|
+
if (inDoubleQuote) {
|
|
62
|
+
// End of double-quoted string
|
|
63
|
+
tokens.push(current);
|
|
64
|
+
current = '';
|
|
65
|
+
inDoubleQuote = false;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// Start of double-quoted string
|
|
69
|
+
if (current.trim()) {
|
|
70
|
+
tokens.push(current.trim());
|
|
71
|
+
current = '';
|
|
72
|
+
}
|
|
73
|
+
inDoubleQuote = true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (char === "'" && !inDoubleQuote) {
|
|
77
|
+
if (inSingleQuote) {
|
|
78
|
+
// End of single-quoted string
|
|
79
|
+
tokens.push(current);
|
|
80
|
+
current = '';
|
|
81
|
+
inSingleQuote = false;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// Start of single-quoted string
|
|
85
|
+
if (current.trim()) {
|
|
86
|
+
tokens.push(current.trim());
|
|
87
|
+
current = '';
|
|
88
|
+
}
|
|
89
|
+
inSingleQuote = true;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else if ((char === ' ' || char === '\t') && !inDoubleQuote && !inSingleQuote) {
|
|
93
|
+
// Whitespace outside quotes - split token
|
|
94
|
+
if (current.trim()) {
|
|
95
|
+
tokens.push(current.trim());
|
|
96
|
+
current = '';
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// Regular character - add to current token
|
|
101
|
+
current += char;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Add final token if any
|
|
105
|
+
if (current.trim() || inDoubleQuote || inSingleQuote) {
|
|
106
|
+
tokens.push(current.trim());
|
|
107
|
+
}
|
|
108
|
+
if (tokens.length === 0) {
|
|
109
|
+
return { name: '', args: [], raw };
|
|
110
|
+
}
|
|
111
|
+
const name = tokens[0].toLowerCase();
|
|
112
|
+
const args = tokens.slice(1);
|
|
113
|
+
return { name, args, raw };
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Execute a parsed command
|
|
117
|
+
*
|
|
118
|
+
* Responsibilities:
|
|
119
|
+
* - Route to a command handler
|
|
120
|
+
* - Return a CommandResult object
|
|
121
|
+
* - Never mutate UI directly
|
|
122
|
+
*
|
|
123
|
+
* Rules:
|
|
124
|
+
* - Never emits UI output directly
|
|
125
|
+
* - Only side effects via returned data
|
|
126
|
+
*/
|
|
127
|
+
export function execute(parsed, ctx) {
|
|
128
|
+
// Empty command
|
|
129
|
+
if (!parsed.name) {
|
|
130
|
+
return { events: [] };
|
|
131
|
+
}
|
|
132
|
+
// Route to command handler
|
|
133
|
+
const handler = commands[parsed.name];
|
|
134
|
+
if (!handler) {
|
|
135
|
+
// Unknown command
|
|
136
|
+
return handleUnknown(parsed.name);
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
return handler(ctx, parsed.args);
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
// Handler error - emit error event
|
|
143
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
144
|
+
return {
|
|
145
|
+
events: [{
|
|
146
|
+
id: `err-${Date.now()}`,
|
|
147
|
+
ts: Date.now(),
|
|
148
|
+
tag: 'ERR',
|
|
149
|
+
msg: `Command error: ${errorMsg.substring(0, 50)}`,
|
|
150
|
+
}],
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Sanitize user input for display in error messages
|
|
156
|
+
*/
|
|
157
|
+
function sanitizeUserInput(input, maxLength = 50) {
|
|
158
|
+
// Remove control characters and newlines
|
|
159
|
+
let sanitized = input.replace(/[\x00-\x1F\x7F-\x9F\n\r\t]/g, '');
|
|
160
|
+
// Truncate to max length
|
|
161
|
+
if (sanitized.length > maxLength) {
|
|
162
|
+
sanitized = sanitized.substring(0, maxLength) + '...';
|
|
163
|
+
}
|
|
164
|
+
return sanitized;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Handle unknown command
|
|
168
|
+
*
|
|
169
|
+
* Rules:
|
|
170
|
+
* - Emit exactly one event
|
|
171
|
+
* - <command> must be capped (reuse Section 2.5 echo cap)
|
|
172
|
+
* - No stack traces
|
|
173
|
+
* - No extra lines
|
|
174
|
+
* - No duplicate emissions
|
|
175
|
+
*/
|
|
176
|
+
function handleUnknown(cmd) {
|
|
177
|
+
const sanitizedCmd = sanitizeUserInput(cmd, 50);
|
|
178
|
+
return {
|
|
179
|
+
events: [{
|
|
180
|
+
id: `err-${Date.now()}`,
|
|
181
|
+
ts: Date.now(),
|
|
182
|
+
tag: 'ERR',
|
|
183
|
+
msg: `UNKNOWN COMMAND: ${sanitizedCmd} (try: help)`,
|
|
184
|
+
}],
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Command registration map
|
|
189
|
+
*
|
|
190
|
+
* Explicit command map - no dynamic loading, no reflection, no plugin system
|
|
191
|
+
*/
|
|
192
|
+
const commands = {
|
|
193
|
+
help: handleHelp,
|
|
194
|
+
clear: handleClear,
|
|
195
|
+
home: handleHome,
|
|
196
|
+
exit: handleExit,
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* Handle help command
|
|
200
|
+
*
|
|
201
|
+
* Emits help text to Operations Feed
|
|
202
|
+
* Text must be static and explicit (no dynamic introspection)
|
|
203
|
+
*/
|
|
204
|
+
function handleHelp(ctx, args) {
|
|
205
|
+
return {
|
|
206
|
+
events: [
|
|
207
|
+
{
|
|
208
|
+
id: `help-1-${Date.now()}`,
|
|
209
|
+
ts: Date.now(),
|
|
210
|
+
tag: 'SYS',
|
|
211
|
+
msg: 'AVAILABLE COMMANDS:',
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
id: `help-2-${Date.now()}`,
|
|
215
|
+
ts: Date.now(),
|
|
216
|
+
tag: 'SYS',
|
|
217
|
+
msg: ' help',
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
id: `help-3-${Date.now()}`,
|
|
221
|
+
ts: Date.now(),
|
|
222
|
+
tag: 'SYS',
|
|
223
|
+
msg: ' clear',
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
id: `help-4-${Date.now()}`,
|
|
227
|
+
ts: Date.now(),
|
|
228
|
+
tag: 'SYS',
|
|
229
|
+
msg: ' home',
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
id: `help-5-${Date.now()}`,
|
|
233
|
+
ts: Date.now(),
|
|
234
|
+
tag: 'SYS',
|
|
235
|
+
msg: ' exit',
|
|
236
|
+
},
|
|
237
|
+
],
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Handle clear command
|
|
242
|
+
*
|
|
243
|
+
* Does not clear screen
|
|
244
|
+
* Does not reset panels
|
|
245
|
+
* Emits no output events
|
|
246
|
+
* Returns action: CLEAR_FEED
|
|
247
|
+
*/
|
|
248
|
+
function handleClear(ctx, args) {
|
|
249
|
+
return {
|
|
250
|
+
events: [], // No output events
|
|
251
|
+
action: UiAction.CLEAR_FEED,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Handle home command
|
|
256
|
+
*
|
|
257
|
+
* Emits a short status line
|
|
258
|
+
* Returns action: HOME
|
|
259
|
+
*/
|
|
260
|
+
function handleHome(ctx, args) {
|
|
261
|
+
return {
|
|
262
|
+
events: [
|
|
263
|
+
{
|
|
264
|
+
id: `home-${Date.now()}`,
|
|
265
|
+
ts: Date.now(),
|
|
266
|
+
tag: 'SYS',
|
|
267
|
+
msg: 'HOME VIEW',
|
|
268
|
+
},
|
|
269
|
+
],
|
|
270
|
+
action: UiAction.HOME,
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Handle exit command
|
|
275
|
+
*
|
|
276
|
+
* Emits optional confirmation event (optional but consistent)
|
|
277
|
+
* Returns action: EXIT
|
|
278
|
+
*/
|
|
279
|
+
function handleExit(ctx, args) {
|
|
280
|
+
return {
|
|
281
|
+
events: [
|
|
282
|
+
{
|
|
283
|
+
id: `exit-${Date.now()}`,
|
|
284
|
+
ts: Date.now(),
|
|
285
|
+
tag: 'SYS',
|
|
286
|
+
msg: 'Exiting...',
|
|
287
|
+
},
|
|
288
|
+
],
|
|
289
|
+
action: UiAction.EXIT,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=commandEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandEngine.js","sourceRoot":"","sources":["../../../../src/ui/v3/commands/commandEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -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.
|
|
79
|
-
eventBus.emitTag('SYS', `RESOURCES: CPU ${r.
|
|
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.
|
|
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":"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,
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../../src/ui/v3/commands/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 (
|
|
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
|
|
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"}
|