@legioncodeinc/hive 0.3.1 → 0.5.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.
Files changed (87) hide show
  1. package/README.md +1 -1
  2. package/dist/daemon/dashboard/app.js +11 -11
  3. package/dist/daemon/gate.d.ts +10 -6
  4. package/dist/daemon/gate.js +20 -8
  5. package/dist/daemon/gate.js.map +1 -1
  6. package/dist/daemon/installer/config.d.ts +2 -0
  7. package/dist/daemon/installer/config.js +5 -3
  8. package/dist/daemon/installer/config.js.map +1 -1
  9. package/dist/daemon/installer/funnel-telemetry.d.ts +17 -2
  10. package/dist/daemon/installer/funnel-telemetry.js +34 -3
  11. package/dist/daemon/installer/funnel-telemetry.js.map +1 -1
  12. package/dist/daemon/installer/routes.js +6 -2
  13. package/dist/daemon/installer/routes.js.map +1 -1
  14. package/dist/daemon/installer/security.d.ts +9 -2
  15. package/dist/daemon/installer/security.js +8 -0
  16. package/dist/daemon/installer/security.js.map +1 -1
  17. package/dist/daemon/installer/token.d.ts +8 -7
  18. package/dist/daemon/installer/token.js +40 -18
  19. package/dist/daemon/installer/token.js.map +1 -1
  20. package/dist/daemon/registry.d.ts +6 -0
  21. package/dist/daemon/registry.js +15 -17
  22. package/dist/daemon/registry.js.map +1 -1
  23. package/dist/daemon/server.d.ts +14 -0
  24. package/dist/daemon/server.js +19 -0
  25. package/dist/daemon/server.js.map +1 -1
  26. package/dist/daemon/setup-tenancy.d.ts +18 -0
  27. package/dist/daemon/setup-tenancy.js +37 -0
  28. package/dist/daemon/setup-tenancy.js.map +1 -0
  29. package/dist/dashboard/web/active-tenancy-display.d.ts +34 -0
  30. package/dist/dashboard/web/active-tenancy-display.js +84 -0
  31. package/dist/dashboard/web/active-tenancy-display.js.map +1 -0
  32. package/dist/dashboard/web/app.js +6 -2
  33. package/dist/dashboard/web/app.js.map +1 -1
  34. package/dist/dashboard/web/onboarding/contracts.d.ts +1 -1
  35. package/dist/dashboard/web/onboarding/contracts.js +9 -1
  36. package/dist/dashboard/web/onboarding/contracts.js.map +1 -1
  37. package/dist/dashboard/web/onboarding/login-step.d.ts +3 -4
  38. package/dist/dashboard/web/onboarding/login-step.js +12 -18
  39. package/dist/dashboard/web/onboarding/login-step.js.map +1 -1
  40. package/dist/dashboard/web/onboarding/onboarding-screen.d.ts +8 -4
  41. package/dist/dashboard/web/onboarding/onboarding-screen.js +90 -13
  42. package/dist/dashboard/web/onboarding/onboarding-screen.js.map +1 -1
  43. package/dist/dashboard/web/onboarding/tenancy-client.d.ts +19 -0
  44. package/dist/dashboard/web/onboarding/tenancy-client.js +84 -0
  45. package/dist/dashboard/web/onboarding/tenancy-client.js.map +1 -0
  46. package/dist/dashboard/web/onboarding/tenancy-contracts.d.ts +119 -0
  47. package/dist/dashboard/web/onboarding/tenancy-contracts.js +79 -0
  48. package/dist/dashboard/web/onboarding/tenancy-contracts.js.map +1 -0
  49. package/dist/dashboard/web/onboarding/tenancy-step.d.ts +32 -0
  50. package/dist/dashboard/web/onboarding/tenancy-step.js +223 -0
  51. package/dist/dashboard/web/onboarding/tenancy-step.js.map +1 -0
  52. package/dist/dashboard/web/pages/hive-graph.js +138 -43
  53. package/dist/dashboard/web/pages/hive-graph.js.map +1 -1
  54. package/dist/dashboard/web/wire.d.ts +111 -14
  55. package/dist/dashboard/web/wire.js +105 -0
  56. package/dist/dashboard/web/wire.js.map +1 -1
  57. package/dist/install/registry.d.ts +2 -2
  58. package/dist/install/registry.js +14 -7
  59. package/dist/install/registry.js.map +1 -1
  60. package/dist/lock.d.ts +5 -2
  61. package/dist/lock.js +36 -1
  62. package/dist/lock.js.map +1 -1
  63. package/dist/service/index.d.ts +5 -0
  64. package/dist/service/index.js +9 -1
  65. package/dist/service/index.js.map +1 -1
  66. package/dist/service/templates.d.ts +22 -3
  67. package/dist/service/templates.js +47 -10
  68. package/dist/service/templates.js.map +1 -1
  69. package/dist/shared/apiary-root.d.ts +28 -0
  70. package/dist/shared/apiary-root.js +71 -0
  71. package/dist/shared/apiary-root.js.map +1 -0
  72. package/dist/shared/constants.d.ts +0 -1
  73. package/dist/shared/constants.js +3 -5
  74. package/dist/shared/constants.js.map +1 -1
  75. package/dist/shared/legacy-paths.d.ts +22 -0
  76. package/dist/shared/legacy-paths.js +48 -0
  77. package/dist/shared/legacy-paths.js.map +1 -0
  78. package/dist/shared/registry-paths.d.ts +19 -0
  79. package/dist/shared/registry-paths.js +52 -0
  80. package/dist/shared/registry-paths.js.map +1 -0
  81. package/dist/shared/state-migration.d.ts +13 -0
  82. package/dist/shared/state-migration.js +92 -0
  83. package/dist/shared/state-migration.js.map +1 -0
  84. package/dist/telemetry/emit.d.ts +27 -14
  85. package/dist/telemetry/emit.js +20 -4
  86. package/dist/telemetry/emit.js.map +1 -1
  87. package/package.json +1 -1
@@ -13,7 +13,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
13
  * └ Advanced → picker → installing(exactly the chosen subset) (ob-AC-7)
14
14
  * installing(queue, index) ── each card completes+dwells → advance → next index, else → health
15
15
  * health ── polls until ready → login
16
- * login ── device-code display, then a hard navigation to `/` on authenticated (ob-AC-14/15)
16
+ * login ── device-code display tenancy when authenticated (PRD-011a)
17
+ * tenancy ── org + workspace selection → hard navigation to `/` on `selected: true` (ts-AC-9)
17
18
  *
18
19
  * Resume honesty (ob-AC-16): the Standard/Advanced choice is persisted client-side
19
20
  * (onboarding-selection-store), so a resumed install uses `buildResumeQueue`, which excludes a
@@ -30,8 +31,10 @@ import { InstallCard } from "./install-card.js";
30
31
  import { LoginStep } from "./login-step.js";
31
32
  import { createOnboardingClient } from "./onboarding-client.js";
32
33
  import { OnboardingHero } from "./onboarding-hero.js";
34
+ import { consumeTenancyAutoComplete, TenancyStep } from "./tenancy-step.js";
33
35
  import { useOnboardingToken } from "./use-onboarding-token.js";
34
36
  import { Button } from "../primitives.js";
37
+ import { createWireClient } from "../wire.js";
35
38
  /** An empty install queue means nothing more to do, skip straight to the health gate. */
36
39
  function installingOrHealth(queue) {
37
40
  return queue.length === 0 ? { kind: "health" } : { kind: "installing", queue, index: 0 };
@@ -51,10 +54,13 @@ function ShortCircuitSummary({ onGoToDashboard }) {
51
54
  }, children: [_jsx("h1", { style: { fontSize: "var(--text-xl)", fontWeight: 700, color: "var(--text-primary)", margin: 0, letterSpacing: "-0.02em" }, children: "Your fleet is already up" }), _jsx("p", { style: { fontFamily: "var(--font-sans)", fontSize: "var(--text-sm)", color: "var(--text-secondary)", margin: 0, lineHeight: 1.5 }, children: "Every product is installed and the fleet reads healthy. Nothing to install here." }), _jsx(Button, { variant: "primary", size: "lg", "data-testid": "onboarding-go-to-dashboard", onClick: onGoToDashboard, children: "Go to dashboard" })] }) }));
52
55
  }
53
56
  /**
54
- * The terminal "no token" screen. The one-time token rides the opened URL (`/onboarding?t=...`) and
55
- * is held in memory only, so landing here without one (a refresh after the URL scrub, the printed
56
- * fallback link, a bookmark) can never recover on its own the operator re-runs the installer,
57
- * which mints a fresh token and reopens the portal.
57
+ * The terminal "no token" screen for a machine that is genuinely NOT installed/authenticated. The
58
+ * one-time token rides the opened URL (`/onboarding?t=...`) and is held in memory only, so landing
59
+ * here without one (a refresh after the URL scrub, the printed fallback link, a bookmark) cannot
60
+ * recover the INSTALLER flow on its own: the operator re-runs the installer, which mints a fresh
61
+ * token and reopens the portal. PRD-011c C-1: an installed + authenticated + tenancy-unselected
62
+ * machine never lands here; the tokenless probe below resumes it at the tenancy step instead,
63
+ * because the tenancy step's whole data plane is the token-free `/setup/*` surface (ts-AC-12).
58
64
  */
59
65
  function MissingTokenNotice() {
60
66
  return (_jsx("div", { "data-testid": "onboarding-missing-token", style: { display: "flex", alignItems: "center", justifyContent: "center", minHeight: "100vh", padding: 32, background: "var(--bg-canvas)", textAlign: "center" }, children: _jsxs("div", { style: {
@@ -81,7 +87,7 @@ function MissingTokenNotice() {
81
87
  function LoadingPlaceholder() {
82
88
  return (_jsx("div", { "data-testid": "onboarding-loading", style: { display: "flex", alignItems: "center", justifyContent: "center", minHeight: "100vh", background: "var(--bg-canvas)" }, children: _jsx("p", { style: { fontFamily: "var(--font-mono)", fontSize: "var(--text-xs)", color: "var(--text-tertiary)" }, children: "Checking what is already installed\u2026" }) }));
83
89
  }
84
- export function OnboardingScreen({ assetBase = "assets", client: clientOverride, wire, minDwellMs, healthPollMs, loginPollMs, onShortCircuitNavigate, onAuthenticated, }) {
90
+ export function OnboardingScreen({ assetBase = "assets", client: clientOverride, wire, tenancyClient, minDwellMs, healthPollMs, loginPollMs, onShortCircuitNavigate, onAuthenticated, }) {
85
91
  const token = useOnboardingToken();
86
92
  // A test-injected client bypasses the token gate entirely (it never talks to the real token
87
93
  // wiring); real usage waits for `useOnboardingToken` to resolve the `?t=` query param first.
@@ -90,6 +96,7 @@ export function OnboardingScreen({ assetBase = "assets", client: clientOverride,
90
96
  const tokenReady = clientOverride !== undefined || (token !== null && token !== "");
91
97
  const tokenMissing = clientOverride === undefined && token === "";
92
98
  const client = React.useMemo(() => clientOverride ?? createOnboardingClient(token ?? ""), [clientOverride, token]);
99
+ const wireClient = React.useMemo(() => wire ?? createWireClient(), [wire]);
93
100
  const [phase, setPhase] = React.useState({ kind: "loading" });
94
101
  const [detection, setDetection] = React.useState(null);
95
102
  const startedEventFiredRef = React.useRef(false);
@@ -109,6 +116,14 @@ export function OnboardingScreen({ assetBase = "assets", client: clientOverride,
109
116
  return;
110
117
  setDetection(detectResult);
111
118
  if (isFleetFullyInstalled(detectResult) && healthResult.ready) {
119
+ const setupState = await wireClient.setupState();
120
+ if (setupState.authenticated) {
121
+ const tenancy = await wireClient.setupTenancy();
122
+ if (!tenancy.selected) {
123
+ setPhase({ kind: "tenancy" });
124
+ return;
125
+ }
126
+ }
112
127
  setPhase({ kind: "short-circuit" });
113
128
  }
114
129
  else if (hasResumableInstall(detectResult)) {
@@ -123,7 +138,7 @@ export function OnboardingScreen({ assetBase = "assets", client: clientOverride,
123
138
  return () => {
124
139
  alive = false;
125
140
  };
126
- }, [client, tokenReady]);
141
+ }, [client, tokenReady, wireClient]);
127
142
  const chooseMode = React.useCallback((mode) => {
128
143
  client.sendEvent("mode_selected", { mode });
129
144
  if (mode === "standard") {
@@ -157,15 +172,75 @@ export function OnboardingScreen({ assetBase = "assets", client: clientOverride,
157
172
  if (typeof window !== "undefined")
158
173
  window.location.assign("/");
159
174
  }, [onShortCircuitNavigate]);
160
- // Onboarding reached its terminal state (login complete): drop the persisted subset so a later
161
- // visit starts clean rather than resuming against a stale choice.
162
- const handleAuthenticated = React.useCallback(() => {
175
+ // ts-AC-9: terminal handoff after tenancy selection persists; drop the persisted install subset.
176
+ const handleTenancyComplete = React.useCallback(() => {
163
177
  clearSelection();
164
- if (onAuthenticated !== undefined)
178
+ if (onAuthenticated !== undefined) {
165
179
  onAuthenticated();
180
+ return;
181
+ }
182
+ if (typeof window !== "undefined")
183
+ window.location.assign("/");
166
184
  }, [onAuthenticated]);
167
- if (tokenMissing)
185
+ // ts-AC-1: login authenticates into the tenancy phase, not the dashboard.
186
+ const handleLoginAuthenticated = React.useCallback(() => {
187
+ setPhase({ kind: "tenancy" });
188
+ }, []);
189
+ // PRD-011c C-1 (tg-AC-8 / ts-AC-10): the gate's tenancy redirect navigates to `/onboarding`
190
+ // WITHOUT a `?t=` token, so a tokenless mount must not dead-end on the expired-link notice
191
+ // when the machine is actually installed, authenticated, and merely tenancy-unselected. The
192
+ // tenancy step's entire data plane is the token-free `/setup/*` surface (ts-AC-12), so probe
193
+ // `/setup/state` + `/setup/tenancy` (both token-free by design) and resume there directly:
194
+ // - authenticated + unselected -> the tenancy phase (the gated redirect's intended landing)
195
+ // - authenticated + selected -> straight back to `/` (nothing to resume; the gate serves it)
196
+ // - not authenticated -> the genuine expired-link notice (installer must re-run)
197
+ // An unreachable/failed probe reads as not-authenticated (fail-soft into the honest notice).
198
+ const [tokenlessResume, setTokenlessResume] = React.useState("probing");
199
+ React.useEffect(() => {
200
+ if (!tokenMissing)
201
+ return;
202
+ let alive = true;
203
+ void (async () => {
204
+ const [setupState, tenancy] = await Promise.all([wireClient.setupState(), wireClient.setupTenancy()]);
205
+ if (!alive)
206
+ return;
207
+ if (!setupState.authenticated) {
208
+ setTokenlessResume("expired");
209
+ return;
210
+ }
211
+ if (tenancy.selected) {
212
+ // Tenancy is already confirmed (e.g. a stale bookmark): hand back to the
213
+ // gate-served dashboard without firing any funnel event. This auto-navigation is
214
+ // bounded by the same W-4 lap counter as the tenancy step's short-circuit: in the
215
+ // split-brain fault (browser reads selected, the gate's read persistently fails)
216
+ // the gate bounces every navigation back here, so past the allowance the flow
217
+ // falls through to the tenancy step, whose terminal split-brain state stops the
218
+ // loop with manual affordances.
219
+ if (consumeTenancyAutoComplete()) {
220
+ handleTenancyComplete();
221
+ return;
222
+ }
223
+ }
224
+ setTokenlessResume("tenancy");
225
+ })().catch(() => {
226
+ // N-2: fail closed on a THROWN probe (not just a resolved failure). The wire client
227
+ // already never throws by contract, but the terminal-notice fallback must not depend
228
+ // on that guarantee: any unexpected throw reads as not-authenticated.
229
+ if (alive)
230
+ setTokenlessResume("expired");
231
+ });
232
+ return () => {
233
+ alive = false;
234
+ };
235
+ }, [tokenMissing, wireClient, handleTenancyComplete]);
236
+ if (tokenMissing) {
237
+ if (tokenlessResume === "probing")
238
+ return _jsx(LoadingPlaceholder, {});
239
+ if (tokenlessResume === "tenancy") {
240
+ return _jsx(TenancyStep, { onboardingClient: client, tenancyClient: tenancyClient, onComplete: handleTenancyComplete });
241
+ }
168
242
  return _jsx(MissingTokenNotice, {});
243
+ }
169
244
  switch (phase.kind) {
170
245
  case "loading":
171
246
  return _jsx(LoadingPlaceholder, {});
@@ -183,7 +258,9 @@ export function OnboardingScreen({ assetBase = "assets", client: clientOverride,
183
258
  case "health":
184
259
  return _jsx(HealthView, { client: client, onReady: goToLogin, pollMs: healthPollMs });
185
260
  case "login":
186
- return _jsx(LoginStep, { onboardingClient: client, wire: wire, onAuthenticated: handleAuthenticated, pollMs: loginPollMs });
261
+ return _jsx(LoginStep, { onboardingClient: client, wire: wire, onAuthenticated: handleLoginAuthenticated, pollMs: loginPollMs });
262
+ case "tenancy":
263
+ return _jsx(TenancyStep, { onboardingClient: client, tenancyClient: tenancyClient, onComplete: handleTenancyComplete });
187
264
  default: {
188
265
  const exhaustive = phase;
189
266
  return exhaustive;
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding-screen.js","sourceRoot":"","sources":["../../../../src/dashboard/web/onboarding/onboarding-screen.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onboarding-screen.js","sourceRoot":"","sources":["../../../../src/dashboard/web/onboarding/onboarding-screen.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * PRD-011a tenancy wire client: same-origin `/setup/tenancy/*` via hive's BFF proxy (no onboarding
3
+ * token). Mirrors `onboarding-client.ts` fail-soft discipline; lives beside it in the onboarding folder.
4
+ */
5
+ import { type SetupTenancyWire, type TenancyCreateResponseWire, type TenancyOrgsWire, type TenancySelectResponseWire, type TenancyWorkspacesWire } from "./tenancy-contracts.js";
6
+ type FetchLike = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
7
+ export interface TenancyClientOptions {
8
+ readonly origin?: string;
9
+ readonly fetchImpl?: FetchLike;
10
+ }
11
+ export interface TenancyClient {
12
+ setupTenancy(): Promise<SetupTenancyWire>;
13
+ listOrgs(): Promise<TenancyOrgsWire>;
14
+ listWorkspaces(orgId: string): Promise<TenancyWorkspacesWire>;
15
+ selectTenancy(orgId: string, workspaceId: string): Promise<TenancySelectResponseWire | null>;
16
+ createWorkspace(org: string, name: string): Promise<TenancyCreateResponseWire | null>;
17
+ }
18
+ export declare function createTenancyClient(options?: TenancyClientOptions): TenancyClient;
19
+ export {};
@@ -0,0 +1,84 @@
1
+ /**
2
+ * PRD-011a tenancy wire client: same-origin `/setup/tenancy/*` via hive's BFF proxy (no onboarding
3
+ * token). Mirrors `onboarding-client.ts` fail-soft discipline; lives beside it in the onboarding folder.
4
+ */
5
+ import { EMPTY_TENANCY_ORGS, EMPTY_TENANCY_WORKSPACES, SetupTenancySchema, TenancyCreateResponseSchema, TenancyOrgsSchema, TenancySelectResponseSchema, TenancyWorkspacesSchema, UNSELECTED_SETUP_TENANCY, } from "./tenancy-contracts.js";
6
+ export function createTenancyClient(options = {}) {
7
+ const origin = options.origin ?? "";
8
+ const fetchImpl = options.fetchImpl ?? fetch;
9
+ const url = (path) => `${origin}${path}`;
10
+ return {
11
+ async setupTenancy() {
12
+ try {
13
+ const res = await fetchImpl(url("/setup/tenancy"), { headers: { accept: "application/json" } });
14
+ if (!res.ok)
15
+ return UNSELECTED_SETUP_TENANCY;
16
+ const parsed = SetupTenancySchema.safeParse(await res.json());
17
+ return parsed.success ? parsed.data : UNSELECTED_SETUP_TENANCY;
18
+ }
19
+ catch {
20
+ return UNSELECTED_SETUP_TENANCY;
21
+ }
22
+ },
23
+ async listOrgs() {
24
+ try {
25
+ const res = await fetchImpl(url("/setup/tenancy/orgs"), { headers: { accept: "application/json" } });
26
+ if (!res.ok)
27
+ return EMPTY_TENANCY_ORGS;
28
+ const parsed = TenancyOrgsSchema.safeParse(await res.json());
29
+ return parsed.success ? parsed.data : EMPTY_TENANCY_ORGS;
30
+ }
31
+ catch {
32
+ return EMPTY_TENANCY_ORGS;
33
+ }
34
+ },
35
+ async listWorkspaces(orgId) {
36
+ try {
37
+ const qs = `?org=${encodeURIComponent(orgId)}`;
38
+ const res = await fetchImpl(url(`/setup/tenancy/workspaces${qs}`), {
39
+ headers: { accept: "application/json" },
40
+ });
41
+ if (!res.ok)
42
+ return { ...EMPTY_TENANCY_WORKSPACES, org: orgId };
43
+ const parsed = TenancyWorkspacesSchema.safeParse(await res.json());
44
+ return parsed.success ? parsed.data : { ...EMPTY_TENANCY_WORKSPACES, org: orgId };
45
+ }
46
+ catch {
47
+ return { ...EMPTY_TENANCY_WORKSPACES, org: orgId };
48
+ }
49
+ },
50
+ async selectTenancy(orgId, workspaceId) {
51
+ try {
52
+ const res = await fetchImpl(url("/setup/tenancy/select"), {
53
+ method: "POST",
54
+ headers: { "content-type": "application/json", accept: "application/json" },
55
+ body: JSON.stringify({ orgId, workspaceId }),
56
+ });
57
+ if (!res.ok)
58
+ return null;
59
+ const parsed = TenancySelectResponseSchema.safeParse(await res.json());
60
+ return parsed.success ? parsed.data : null;
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ },
66
+ async createWorkspace(org, name) {
67
+ try {
68
+ const res = await fetchImpl(url("/setup/tenancy/workspaces"), {
69
+ method: "POST",
70
+ headers: { "content-type": "application/json", accept: "application/json" },
71
+ body: JSON.stringify({ org, name }),
72
+ });
73
+ if (!res.ok)
74
+ return null;
75
+ const parsed = TenancyCreateResponseSchema.safeParse(await res.json());
76
+ return parsed.success ? parsed.data : null;
77
+ }
78
+ catch {
79
+ return null;
80
+ }
81
+ },
82
+ };
83
+ }
84
+ //# sourceMappingURL=tenancy-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenancy-client.js","sourceRoot":"","sources":["../../../../src/dashboard/web/onboarding/tenancy-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * PRD-011a tenancy wire contract: mirrors the honeycomb PRD-073c `/setup/tenancy` family
3
+ * field-for-field (pinned at implementation). Same discipline as `contracts.ts` for PRD-009b:
4
+ * local types at the onboarding boundary, zod with `.catch()` defaults, never throw into React.
5
+ */
6
+ import { z } from "zod";
7
+ /** `{ id, name }` pair returned by org/workspace enumeration and select acks. */
8
+ export declare const TenancyEntitySchema: z.ZodObject<{
9
+ id: z.ZodCatch<z.ZodString>;
10
+ name: z.ZodCatch<z.ZodString>;
11
+ }, z.core.$strip>;
12
+ export type TenancyEntityWire = z.infer<typeof TenancyEntitySchema>;
13
+ /**
14
+ * `GET /setup/tenancy`: the durable selected marker and current org/workspace read.
15
+ * `selected` is true ONLY after the daemon has persisted a confirmation. Reconciled against the
16
+ * honeycomb implementation (2026-07-04): the earlier proposed `autoSelected` field was REMOVED
17
+ * from the daemon contract (an auto-selection persists immediately and reads as `selected: true`,
18
+ * so no GET ever carries it); `confirmedBy` was ADDED and reports how the confirmation happened
19
+ * (`selection` = an explicit POST /setup/tenancy/select; `grandfathered` = a pre-PRD-073 credential
20
+ * whose existing tenancy was carried forward).
21
+ */
22
+ export declare const SetupTenancySchema: z.ZodObject<{
23
+ pending: z.ZodCatch<z.ZodBoolean>;
24
+ selected: z.ZodCatch<z.ZodBoolean>;
25
+ authenticated: z.ZodCatch<z.ZodBoolean>;
26
+ org: z.ZodCatch<z.ZodNullable<z.ZodObject<{
27
+ id: z.ZodCatch<z.ZodString>;
28
+ name: z.ZodCatch<z.ZodString>;
29
+ }, z.core.$strip>>>;
30
+ workspace: z.ZodCatch<z.ZodNullable<z.ZodObject<{
31
+ id: z.ZodCatch<z.ZodString>;
32
+ name: z.ZodCatch<z.ZodString>;
33
+ }, z.core.$strip>>>;
34
+ confirmedBy: z.ZodCatch<z.ZodOptional<z.ZodEnum<{
35
+ selection: "selection";
36
+ grandfathered: "grandfathered";
37
+ }>>>;
38
+ }, z.core.$strip>;
39
+ export type SetupTenancyWire = z.infer<typeof SetupTenancySchema>;
40
+ /** Honest default when the tenancy read fails or the body is malformed. */
41
+ export declare const UNSELECTED_SETUP_TENANCY: SetupTenancyWire;
42
+ /** `GET /setup/tenancy/orgs` body. */
43
+ export declare const TenancyOrgsSchema: z.ZodObject<{
44
+ orgs: z.ZodCatch<z.ZodArray<z.ZodObject<{
45
+ id: z.ZodCatch<z.ZodString>;
46
+ name: z.ZodCatch<z.ZodString>;
47
+ }, z.core.$strip>>>;
48
+ }, z.core.$strip>;
49
+ export type TenancyOrgsWire = z.infer<typeof TenancyOrgsSchema>;
50
+ export declare const EMPTY_TENANCY_ORGS: TenancyOrgsWire;
51
+ /** `GET /setup/tenancy/workspaces?org=` body. */
52
+ export declare const TenancyWorkspacesSchema: z.ZodObject<{
53
+ org: z.ZodCatch<z.ZodString>;
54
+ workspaces: z.ZodCatch<z.ZodArray<z.ZodObject<{
55
+ id: z.ZodCatch<z.ZodString>;
56
+ name: z.ZodCatch<z.ZodString>;
57
+ }, z.core.$strip>>>;
58
+ canCreate: z.ZodCatch<z.ZodBoolean>;
59
+ }, z.core.$strip>;
60
+ export type TenancyWorkspacesWire = z.infer<typeof TenancyWorkspacesSchema>;
61
+ export declare const EMPTY_TENANCY_WORKSPACES: TenancyWorkspacesWire;
62
+ /** Successful `POST /setup/tenancy/select` ack. */
63
+ export declare const TenancySelectOkSchema: z.ZodObject<{
64
+ selected: z.ZodLiteral<true>;
65
+ org: z.ZodObject<{
66
+ id: z.ZodCatch<z.ZodString>;
67
+ name: z.ZodCatch<z.ZodString>;
68
+ }, z.core.$strip>;
69
+ workspace: z.ZodObject<{
70
+ id: z.ZodCatch<z.ZodString>;
71
+ name: z.ZodCatch<z.ZodString>;
72
+ }, z.core.$strip>;
73
+ reminted: z.ZodCatch<z.ZodBoolean>;
74
+ }, z.core.$strip>;
75
+ /** Failed `POST /setup/tenancy/select` ack (redacted reason, no token). */
76
+ export declare const TenancySelectErrSchema: z.ZodObject<{
77
+ selected: z.ZodLiteral<false>;
78
+ error: z.ZodCatch<z.ZodString>;
79
+ }, z.core.$strip>;
80
+ export declare const TenancySelectResponseSchema: z.ZodUnion<readonly [z.ZodObject<{
81
+ selected: z.ZodLiteral<true>;
82
+ org: z.ZodObject<{
83
+ id: z.ZodCatch<z.ZodString>;
84
+ name: z.ZodCatch<z.ZodString>;
85
+ }, z.core.$strip>;
86
+ workspace: z.ZodObject<{
87
+ id: z.ZodCatch<z.ZodString>;
88
+ name: z.ZodCatch<z.ZodString>;
89
+ }, z.core.$strip>;
90
+ reminted: z.ZodCatch<z.ZodBoolean>;
91
+ }, z.core.$strip>, z.ZodObject<{
92
+ selected: z.ZodLiteral<false>;
93
+ error: z.ZodCatch<z.ZodString>;
94
+ }, z.core.$strip>]>;
95
+ export type TenancySelectResponseWire = z.infer<typeof TenancySelectResponseSchema>;
96
+ /** Successful `POST /setup/tenancy/workspaces` ack. */
97
+ export declare const TenancyCreateOkSchema: z.ZodObject<{
98
+ created: z.ZodLiteral<true>;
99
+ workspace: z.ZodObject<{
100
+ id: z.ZodCatch<z.ZodString>;
101
+ name: z.ZodCatch<z.ZodString>;
102
+ }, z.core.$strip>;
103
+ }, z.core.$strip>;
104
+ /** Failed `POST /setup/tenancy/workspaces` ack. */
105
+ export declare const TenancyCreateErrSchema: z.ZodObject<{
106
+ created: z.ZodLiteral<false>;
107
+ error: z.ZodCatch<z.ZodString>;
108
+ }, z.core.$strip>;
109
+ export declare const TenancyCreateResponseSchema: z.ZodUnion<readonly [z.ZodObject<{
110
+ created: z.ZodLiteral<true>;
111
+ workspace: z.ZodObject<{
112
+ id: z.ZodCatch<z.ZodString>;
113
+ name: z.ZodCatch<z.ZodString>;
114
+ }, z.core.$strip>;
115
+ }, z.core.$strip>, z.ZodObject<{
116
+ created: z.ZodLiteral<false>;
117
+ error: z.ZodCatch<z.ZodString>;
118
+ }, z.core.$strip>]>;
119
+ export type TenancyCreateResponseWire = z.infer<typeof TenancyCreateResponseSchema>;
@@ -0,0 +1,79 @@
1
+ /**
2
+ * PRD-011a tenancy wire contract: mirrors the honeycomb PRD-073c `/setup/tenancy` family
3
+ * field-for-field (pinned at implementation). Same discipline as `contracts.ts` for PRD-009b:
4
+ * local types at the onboarding boundary, zod with `.catch()` defaults, never throw into React.
5
+ */
6
+ import { z } from "zod";
7
+ /** `{ id, name }` pair returned by org/workspace enumeration and select acks. */
8
+ export const TenancyEntitySchema = z.object({
9
+ id: z.string().catch(""),
10
+ name: z.string().catch(""),
11
+ });
12
+ /**
13
+ * `GET /setup/tenancy`: the durable selected marker and current org/workspace read.
14
+ * `selected` is true ONLY after the daemon has persisted a confirmation. Reconciled against the
15
+ * honeycomb implementation (2026-07-04): the earlier proposed `autoSelected` field was REMOVED
16
+ * from the daemon contract (an auto-selection persists immediately and reads as `selected: true`,
17
+ * so no GET ever carries it); `confirmedBy` was ADDED and reports how the confirmation happened
18
+ * (`selection` = an explicit POST /setup/tenancy/select; `grandfathered` = a pre-PRD-073 credential
19
+ * whose existing tenancy was carried forward).
20
+ */
21
+ export const SetupTenancySchema = z.object({
22
+ pending: z.boolean().catch(true),
23
+ selected: z.boolean().catch(false),
24
+ authenticated: z.boolean().catch(false),
25
+ org: TenancyEntitySchema.nullable().catch(null),
26
+ workspace: TenancyEntitySchema.nullable().catch(null),
27
+ // `.catch(undefined)` keeps the module's fail-soft rule: a malformed confirmedBy value must
28
+ // degrade to "absent" (the field is cosmetic), never fail the whole tenancy read.
29
+ confirmedBy: z.enum(["selection", "grandfathered"]).optional().catch(undefined),
30
+ });
31
+ /** Honest default when the tenancy read fails or the body is malformed. */
32
+ export const UNSELECTED_SETUP_TENANCY = Object.freeze({
33
+ pending: true,
34
+ selected: false,
35
+ authenticated: false,
36
+ org: null,
37
+ workspace: null,
38
+ });
39
+ /** `GET /setup/tenancy/orgs` body. */
40
+ export const TenancyOrgsSchema = z.object({
41
+ orgs: z.array(TenancyEntitySchema).catch([]),
42
+ });
43
+ export const EMPTY_TENANCY_ORGS = Object.freeze({ orgs: [] });
44
+ /** `GET /setup/tenancy/workspaces?org=` body. */
45
+ export const TenancyWorkspacesSchema = z.object({
46
+ org: z.string().catch(""),
47
+ workspaces: z.array(TenancyEntitySchema).catch([]),
48
+ canCreate: z.boolean().catch(false),
49
+ });
50
+ export const EMPTY_TENANCY_WORKSPACES = Object.freeze({
51
+ org: "",
52
+ workspaces: [],
53
+ canCreate: false,
54
+ });
55
+ /** Successful `POST /setup/tenancy/select` ack. */
56
+ export const TenancySelectOkSchema = z.object({
57
+ selected: z.literal(true),
58
+ org: TenancyEntitySchema,
59
+ workspace: TenancyEntitySchema,
60
+ reminted: z.boolean().catch(false),
61
+ });
62
+ /** Failed `POST /setup/tenancy/select` ack (redacted reason, no token). */
63
+ export const TenancySelectErrSchema = z.object({
64
+ selected: z.literal(false),
65
+ error: z.string().catch("Selection could not be saved."),
66
+ });
67
+ export const TenancySelectResponseSchema = z.union([TenancySelectOkSchema, TenancySelectErrSchema]);
68
+ /** Successful `POST /setup/tenancy/workspaces` ack. */
69
+ export const TenancyCreateOkSchema = z.object({
70
+ created: z.literal(true),
71
+ workspace: TenancyEntitySchema,
72
+ });
73
+ /** Failed `POST /setup/tenancy/workspaces` ack. */
74
+ export const TenancyCreateErrSchema = z.object({
75
+ created: z.literal(false),
76
+ error: z.string().catch("Workspace could not be created."),
77
+ });
78
+ export const TenancyCreateResponseSchema = z.union([TenancyCreateOkSchema, TenancyCreateErrSchema]);
79
+ //# sourceMappingURL=tenancy-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenancy-contracts.js","sourceRoot":"","sources":["../../../../src/dashboard/web/onboarding/tenancy-contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * PRD-011a: the mandatory org + workspace selection step in the onboarding flow.
3
+ * Enters after device-code login succeeds; terminal handoff runs only after `selected: true`.
4
+ */
5
+ import React from "react";
6
+ import type { OnboardingClient } from "./onboarding-client.js";
7
+ import { type TenancyClient } from "./tenancy-client.js";
8
+ /**
9
+ * W-4 loop-breaker: how many CONSECUTIVE automatic short-circuits (hydrate reads `selected: true`
10
+ * and the step auto-navigates to `/`) are allowed before the step stops reloading and renders a
11
+ * terminal manual state. In the split-brain fault (the browser's proxied tenancy read says
12
+ * selected while the gate's server-side read persistently fails), each auto-navigation bounces
13
+ * off the gate straight back here; without a bound that is an infinite reload loop re-firing
14
+ * `dashboard_reached` and `POST /api/onboarding/complete` every lap.
15
+ */
16
+ export declare const TENANCY_AUTO_COMPLETE_LIMIT: 2;
17
+ /**
18
+ * Consume one lap of the bounded auto short-circuit allowance. Returns true (and records the lap)
19
+ * while within {@link TENANCY_AUTO_COMPLETE_LIMIT}; returns false once exceeded, at which point
20
+ * the caller must stop auto-navigating and surface the terminal split-brain state. Shared with
21
+ * the tokenless resume probe in `onboarding-screen.tsx`, the other automatic navigator on the
22
+ * split-brain lap.
23
+ */
24
+ export declare function consumeTenancyAutoComplete(): boolean;
25
+ /** Reset the auto short-circuit counter (a live picker flow or an explicit operator action). */
26
+ export declare function resetTenancyAutoComplete(): void;
27
+ export interface TenancyStepProps {
28
+ readonly onboardingClient: OnboardingClient;
29
+ readonly tenancyClient?: TenancyClient;
30
+ readonly onComplete?: () => void;
31
+ }
32
+ export declare function TenancyStep({ onboardingClient, tenancyClient: tenancyOverride, onComplete }: TenancyStepProps): React.JSX.Element;