@legioncodeinc/hive 0.1.0 → 0.2.0
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/LICENSE +661 -661
- package/README.md +262 -262
- package/dist/daemon/dashboard/app.js +25 -25
- package/dist/dashboard/web/hive-graph-projection.d.ts +46 -0
- package/dist/dashboard/web/hive-graph-projection.js +41 -0
- package/dist/dashboard/web/hive-graph-projection.js.map +1 -0
- package/dist/dashboard/web/pages/graph.d.ts +49 -3
- package/dist/dashboard/web/pages/graph.js +2 -2
- package/dist/dashboard/web/pages/graph.js.map +1 -1
- package/dist/dashboard/web/pages/hive-graph.d.ts +11 -0
- package/dist/dashboard/web/pages/hive-graph.js +241 -0
- package/dist/dashboard/web/pages/hive-graph.js.map +1 -0
- package/dist/dashboard/web/registry.js +6 -0
- package/dist/dashboard/web/registry.js.map +1 -1
- package/dist/dashboard/web/wire.d.ts +120 -0
- package/dist/dashboard/web/wire.js +187 -0
- package/dist/dashboard/web/wire.js.map +1 -1
- package/dist/service/templates.js +78 -78
- package/dist/telemetry/emit.js +2 -2
- package/package.json +54 -50
- package/dist/dashboard/web/readiness-splash.d.ts +0 -39
- package/dist/dashboard/web/readiness-splash.js +0 -201
- package/dist/dashboard/web/readiness-splash.js.map +0 -1
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Portal readiness splash — PRD-002b (rs-AC-1 through rs-AC-9) · PRD-003c (m-AC-7, now the
|
|
3
|
-
* content the `/buzzing` route mounts, per `main.tsx`).
|
|
4
|
-
*
|
|
5
|
-
* Polls `GET /api/fleet-status` until `isFleetReady()` passes, then mounts {@link LoginScreen}
|
|
6
|
-
* once. Before the gate passes, LoginScreen is not mounted at all, so its `/setup/state` poll
|
|
7
|
-
* cannot fire on a cold boot and misread a not-yet-ready honeycomb as "First time setup."
|
|
8
|
-
*
|
|
9
|
-
* PRD-003a's server-side gate is now the AUTHORITATIVE decision-maker for which URL an operator
|
|
10
|
-
* lands on (health, then auth, per `the-hive/src/daemon/gate.ts`) — `/buzzing` itself is
|
|
11
|
-
* gate-exempt, so this component's own ready→{@link LoginScreen} transition only matters for an
|
|
12
|
-
* operator who is SITTING on `/buzzing` while the fleet comes up (an interim convenience this PRD
|
|
13
|
-
* inherits from PRD-002b unchanged; PRD-004 will flesh out `/buzzing`'s full content and may revisit
|
|
14
|
-
* this transition).
|
|
15
|
-
*
|
|
16
|
-
* Visual polish pass (ux-ui-worker-bee, deferred by PRD-002b's non-goals): a calm bordered panel,
|
|
17
|
-
* a honey-tinted halo behind the brand mark, a distinct recessed treatment for the "hivedoctor
|
|
18
|
-
* unreachable" state, and a `role="status" aria-live="polite"` region so assistive tech announces
|
|
19
|
-
* state changes while the fleet boots. All values are existing design tokens; no poll/gate logic
|
|
20
|
-
* below is touched.
|
|
21
|
-
*/
|
|
22
|
-
import React from "react";
|
|
23
|
-
import { type FleetHealth } from "../../shared/fleet-readiness.js";
|
|
24
|
-
export { isFleetReady as isReady } from "../../shared/fleet-readiness.js";
|
|
25
|
-
export type { FleetStatusResponse } from "../../shared/fleet-readiness.js";
|
|
26
|
-
/** Per-daemon row state shown on the readiness splash (rs-AC-5). */
|
|
27
|
-
export type DaemonDisplayState = "up" | "degraded" | "unreachable" | "starting";
|
|
28
|
-
/** Maps hivedoctor `daemons[].health` to splash copy/state (rs-AC-5). */
|
|
29
|
-
export declare function deriveDaemonDisplayState(health: FleetHealth): DaemonDisplayState;
|
|
30
|
-
export interface ReadinessSplashProps {
|
|
31
|
-
readonly assetBase: string;
|
|
32
|
-
readonly pollMs?: number;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Top-level readiness gate (rs-AC-1). Polls `/api/fleet-status` and mounts {@link LoginScreen} only
|
|
36
|
-
* once the fleet is ready. The gate is sticky (rs-AC-9): after LoginScreen mounts, a later not-ready
|
|
37
|
-
* poll does not unmount it.
|
|
38
|
-
*/
|
|
39
|
-
export declare function ReadinessSplash({ assetBase, pollMs }: ReadinessSplashProps): React.JSX.Element;
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* Portal readiness splash — PRD-002b (rs-AC-1 through rs-AC-9) · PRD-003c (m-AC-7, now the
|
|
4
|
-
* content the `/buzzing` route mounts, per `main.tsx`).
|
|
5
|
-
*
|
|
6
|
-
* Polls `GET /api/fleet-status` until `isFleetReady()` passes, then mounts {@link LoginScreen}
|
|
7
|
-
* once. Before the gate passes, LoginScreen is not mounted at all, so its `/setup/state` poll
|
|
8
|
-
* cannot fire on a cold boot and misread a not-yet-ready honeycomb as "First time setup."
|
|
9
|
-
*
|
|
10
|
-
* PRD-003a's server-side gate is now the AUTHORITATIVE decision-maker for which URL an operator
|
|
11
|
-
* lands on (health, then auth, per `the-hive/src/daemon/gate.ts`) — `/buzzing` itself is
|
|
12
|
-
* gate-exempt, so this component's own ready→{@link LoginScreen} transition only matters for an
|
|
13
|
-
* operator who is SITTING on `/buzzing` while the fleet comes up (an interim convenience this PRD
|
|
14
|
-
* inherits from PRD-002b unchanged; PRD-004 will flesh out `/buzzing`'s full content and may revisit
|
|
15
|
-
* this transition).
|
|
16
|
-
*
|
|
17
|
-
* Visual polish pass (ux-ui-worker-bee, deferred by PRD-002b's non-goals): a calm bordered panel,
|
|
18
|
-
* a honey-tinted halo behind the brand mark, a distinct recessed treatment for the "hivedoctor
|
|
19
|
-
* unreachable" state, and a `role="status" aria-live="polite"` region so assistive tech announces
|
|
20
|
-
* state changes while the fleet boots. All values are existing design tokens; no poll/gate logic
|
|
21
|
-
* below is touched.
|
|
22
|
-
*/
|
|
23
|
-
import React from "react";
|
|
24
|
-
import { isFleetReady, } from "../../shared/fleet-readiness.js";
|
|
25
|
-
import { LoginScreen } from "./setup-gate.js";
|
|
26
|
-
export { isFleetReady as isReady } from "../../shared/fleet-readiness.js";
|
|
27
|
-
/** Maps hivedoctor `daemons[].health` to splash copy/state (rs-AC-5). */
|
|
28
|
-
export function deriveDaemonDisplayState(health) {
|
|
29
|
-
switch (health) {
|
|
30
|
-
case "ok":
|
|
31
|
-
return "up";
|
|
32
|
-
case "degraded":
|
|
33
|
-
return "degraded";
|
|
34
|
-
case "unreachable":
|
|
35
|
-
return "unreachable";
|
|
36
|
-
case "unknown":
|
|
37
|
-
return "starting";
|
|
38
|
-
default: {
|
|
39
|
-
const exhaustive = health;
|
|
40
|
-
return exhaustive;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
const DISPLAY_STATE_COLOR = {
|
|
45
|
-
up: "var(--verified)",
|
|
46
|
-
degraded: "var(--severity-warning)",
|
|
47
|
-
unreachable: "var(--severity-critical)",
|
|
48
|
-
starting: "var(--text-tertiary)",
|
|
49
|
-
};
|
|
50
|
-
function DaemonStatusDot({ displayState, name, }) {
|
|
51
|
-
const pulsing = displayState === "starting";
|
|
52
|
-
return (_jsx("span", { role: "img", "aria-label": `${name}: ${displayState}`, style: {
|
|
53
|
-
width: 8,
|
|
54
|
-
height: 8,
|
|
55
|
-
borderRadius: "50%",
|
|
56
|
-
flex: "none",
|
|
57
|
-
background: DISPLAY_STATE_COLOR[displayState],
|
|
58
|
-
animation: pulsing
|
|
59
|
-
? "hc-readiness-pulse var(--dur-pollinate) var(--ease-in-out) infinite alternate"
|
|
60
|
-
: "none",
|
|
61
|
-
} }));
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* The distinct "hivedoctor unreachable" indicator (rs-AC-6). A single muted, recessed block rather
|
|
65
|
-
* than a per-daemon row, so an operator can tell "the supervisor itself is down" apart from "the
|
|
66
|
-
* supervisor is up and the fleet is booting" at a glance. Reuses the `starting` display-state color
|
|
67
|
-
* (muted, not alarming) since a not-yet-reachable supervisor on a cold boot is expected, not an
|
|
68
|
-
* error state.
|
|
69
|
-
*/
|
|
70
|
-
function SupervisorUnreachableIndicator() {
|
|
71
|
-
return (_jsxs("div", { "data-testid": "readiness-hivedoctor-unreachable", style: {
|
|
72
|
-
display: "flex",
|
|
73
|
-
flexDirection: "column",
|
|
74
|
-
alignItems: "center",
|
|
75
|
-
gap: 12,
|
|
76
|
-
width: "100%",
|
|
77
|
-
padding: "16px 20px",
|
|
78
|
-
background: "var(--bg-inset)",
|
|
79
|
-
border: "1px solid var(--border-subtle)",
|
|
80
|
-
borderRadius: "var(--radius-lg)",
|
|
81
|
-
}, children: [_jsx("span", { role: "img", "aria-label": "hivedoctor supervisor: unreachable", style: {
|
|
82
|
-
width: 8,
|
|
83
|
-
height: 8,
|
|
84
|
-
borderRadius: "50%",
|
|
85
|
-
flex: "none",
|
|
86
|
-
background: DISPLAY_STATE_COLOR.starting,
|
|
87
|
-
animation: "hc-readiness-pulse var(--dur-pollinate) var(--ease-in-out) infinite alternate",
|
|
88
|
-
} }), _jsx("p", { style: { fontSize: "var(--text-sm)", color: "var(--text-secondary)", margin: 0, lineHeight: 1.5 }, children: "Waiting on hivedoctor. The fleet supervisor is not reachable yet." })] }));
|
|
89
|
-
}
|
|
90
|
-
function FleetSplashGrid({ status, assetBase, }) {
|
|
91
|
-
const supervisorUnreachable = status?.supervisor === "unreachable";
|
|
92
|
-
const daemons = status?.supervisor === "reachable" ? status.daemons : [];
|
|
93
|
-
return (_jsxs("div", { "data-testid": "readiness-splash", style: {
|
|
94
|
-
display: "flex",
|
|
95
|
-
alignItems: "center",
|
|
96
|
-
justifyContent: "center",
|
|
97
|
-
minHeight: "100vh",
|
|
98
|
-
padding: 32,
|
|
99
|
-
background: "var(--bg-canvas)",
|
|
100
|
-
textAlign: "center",
|
|
101
|
-
}, children: [_jsxs("div", { style: {
|
|
102
|
-
display: "flex",
|
|
103
|
-
flexDirection: "column",
|
|
104
|
-
alignItems: "center",
|
|
105
|
-
gap: 24,
|
|
106
|
-
width: "100%",
|
|
107
|
-
maxWidth: 420,
|
|
108
|
-
padding: "40px 32px",
|
|
109
|
-
background: "var(--bg-surface)",
|
|
110
|
-
border: "1px solid var(--border-default)",
|
|
111
|
-
borderRadius: "var(--radius-xl)",
|
|
112
|
-
}, children: [_jsx("span", { "aria-hidden": "true", style: {
|
|
113
|
-
display: "inline-flex",
|
|
114
|
-
alignItems: "center",
|
|
115
|
-
justifyContent: "center",
|
|
116
|
-
flex: "none",
|
|
117
|
-
width: 88,
|
|
118
|
-
height: 88,
|
|
119
|
-
borderRadius: "50%",
|
|
120
|
-
background: "var(--honey-subtle)",
|
|
121
|
-
border: "1px solid var(--honey-border)",
|
|
122
|
-
}, children: _jsx("img", { src: `${assetBase}/honeycomb-memory-cluster.svg`, width: 48, height: 48, alt: "" }) }), _jsx("h1", { className: "readiness-headline", style: {
|
|
123
|
-
fontSize: "var(--text-xl)",
|
|
124
|
-
fontWeight: 700,
|
|
125
|
-
color: "var(--text-primary)",
|
|
126
|
-
margin: 0,
|
|
127
|
-
letterSpacing: "-0.02em",
|
|
128
|
-
}, children: "Waiting for the hive\u2026" }), _jsxs("div", { "data-testid": "readiness-status-region", role: "status", "aria-live": "polite", style: { display: "flex", flexDirection: "column", alignItems: "center", gap: 20, width: "100%" }, children: [supervisorUnreachable ? (_jsx(SupervisorUnreachableIndicator, {})) : (_jsx("p", { style: { fontSize: "var(--text-sm)", color: "var(--text-secondary)", margin: 0, lineHeight: 1.5 }, children: "Starting required daemons. This usually takes a few seconds on a cold boot." })), daemons.length > 0 && (_jsx("ul", { "data-testid": "readiness-daemon-grid", style: {
|
|
129
|
-
listStyle: "none",
|
|
130
|
-
margin: 0,
|
|
131
|
-
padding: 0,
|
|
132
|
-
display: "flex",
|
|
133
|
-
flexDirection: "column",
|
|
134
|
-
gap: 10,
|
|
135
|
-
width: "100%",
|
|
136
|
-
textAlign: "left",
|
|
137
|
-
}, children: daemons.map((daemon) => {
|
|
138
|
-
const displayState = deriveDaemonDisplayState(daemon.health);
|
|
139
|
-
return (_jsxs("li", { "data-testid": `readiness-daemon-${daemon.name}`, style: {
|
|
140
|
-
display: "flex",
|
|
141
|
-
alignItems: "center",
|
|
142
|
-
gap: 10,
|
|
143
|
-
padding: "10px 12px",
|
|
144
|
-
borderRadius: "var(--radius-md)",
|
|
145
|
-
border: "1px solid var(--border-subtle)",
|
|
146
|
-
background: "var(--bg-elevated)",
|
|
147
|
-
}, children: [_jsx(DaemonStatusDot, { displayState: displayState, name: daemon.name }), _jsx("span", { style: {
|
|
148
|
-
flex: 1,
|
|
149
|
-
fontSize: "var(--text-sm)",
|
|
150
|
-
color: "var(--text-primary)",
|
|
151
|
-
fontFamily: "var(--font-sans)",
|
|
152
|
-
}, children: daemon.name }), _jsx("span", { style: {
|
|
153
|
-
fontSize: "var(--text-xs)",
|
|
154
|
-
color: "var(--text-secondary)",
|
|
155
|
-
fontFamily: "var(--font-mono)",
|
|
156
|
-
textTransform: "lowercase",
|
|
157
|
-
}, children: displayState })] }, daemon.name));
|
|
158
|
-
}) }))] })] }), _jsx("style", { children: "@keyframes hc-readiness-pulse { from { opacity: .45 } to { opacity: 1 } } " +
|
|
159
|
-
"@keyframes hc-readiness-glow { from { opacity: .85 } to { opacity: 1 } } " +
|
|
160
|
-
".readiness-headline { animation: hc-readiness-glow var(--dur-pollinate) var(--ease-in-out) infinite alternate; }" })] }));
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Top-level readiness gate (rs-AC-1). Polls `/api/fleet-status` and mounts {@link LoginScreen} only
|
|
164
|
-
* once the fleet is ready. The gate is sticky (rs-AC-9): after LoginScreen mounts, a later not-ready
|
|
165
|
-
* poll does not unmount it.
|
|
166
|
-
*/
|
|
167
|
-
export function ReadinessSplash({ assetBase, pollMs = 1500 }) {
|
|
168
|
-
const [status, setStatus] = React.useState(null);
|
|
169
|
-
const [fleetGated, setFleetGated] = React.useState(false);
|
|
170
|
-
React.useEffect(() => {
|
|
171
|
-
if (fleetGated)
|
|
172
|
-
return;
|
|
173
|
-
let alive = true;
|
|
174
|
-
const tick = async () => {
|
|
175
|
-
try {
|
|
176
|
-
const response = await fetch("/api/fleet-status");
|
|
177
|
-
const next = (await response.json());
|
|
178
|
-
if (!alive)
|
|
179
|
-
return;
|
|
180
|
-
setStatus(next);
|
|
181
|
-
if (isFleetReady(next)) {
|
|
182
|
-
setFleetGated(true);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
catch {
|
|
186
|
-
// Keep the splash visible; the next poll retries.
|
|
187
|
-
}
|
|
188
|
-
};
|
|
189
|
-
void tick();
|
|
190
|
-
const id = setInterval(() => void tick(), pollMs);
|
|
191
|
-
return () => {
|
|
192
|
-
alive = false;
|
|
193
|
-
clearInterval(id);
|
|
194
|
-
};
|
|
195
|
-
}, [fleetGated, pollMs]);
|
|
196
|
-
if (fleetGated) {
|
|
197
|
-
return _jsx(LoginScreen, { assetBase: assetBase });
|
|
198
|
-
}
|
|
199
|
-
return _jsx(FleetSplashGrid, { status: status, assetBase: assetBase });
|
|
200
|
-
}
|
|
201
|
-
//# sourceMappingURL=readiness-splash.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"readiness-splash.js","sourceRoot":"","sources":["../../../src/dashboard/web/readiness-splash.tsx"],"names":[],"mappings":"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"}
|