ApiProvider
AuthProvider
Related: AuthState
AuthState
Breakpoint
BreakpointState
Related: Breakpoint
CapabilityContextValue
Related: CapabilityState
CapabilityProvider
Related: CapabilityContextValue
CapabilityState
InteractionsStreamOptions
InteractionsStreamState
Related: StreamInteraction
StreamInteraction
answered flag.
SystemKindsProvider
isAuthenticated (the table is an authed read), so the login
screen never fires a doomed request; a fetch failure settles into failed
QUIETLY — no unauthorized routing, no loud error — because the consuming
affordance falls back to its reactive OFF handling.
Parameters
Related: SystemKindsState
SystemKindsState
Theme
ThemePreference
ThemeProvider
Related: ThemeState
ThemeState
Related: Theme, ThemePreference
ToolDisplayNamesContextValue
Related: ToolDisplayNamesState
ToolDisplayNamesProvider
isAuthenticated (the overlay is an authed
read), so the login screen never fires a doomed request; a fetch failure settles
into failed QUIETLY, because the consuming pickers fall back to the bare raw name.
reload re-fetches on demand, so an app-level display-name write refreshes every
picker without a remount.
Parameters
Related: ToolDisplayNamesContextValue
ToolDisplayNamesState
UnauthorizedProvider
coversAnyRoute
prefixes — the
declarative test behind nav filtering and plugin requiredCapabilities. A
concrete routes[].path covers a prefix when it is that prefix or a
segment-nested descendant of it; a dynamic route_patterns[].pattern covers a
prefix only when it is a simple anchored open-wildcard pattern (^<literal>.*$)
whose open literal overlaps the prefix at a segment boundary.
Under-showing is safe (projection is UX; the server is the authority);
over-showing is the bug. So any non-anchored or otherwise complex pattern
(alternation, char class, bounded quantifier) is conservatively treated as NOT
covering — its matched set is not a clean prefix, so we never infer reach from
it.
Parameters
coversRoute
path whose
admitted methods include method. This is the method-aware companion to
coversAnyRoute: a read/nav surface gates path-only (any method reaching a
prefix means the surface is navigable), but an action that issues method path
must gate on the method too, or a caller whose jq fence admits only GET on path
would be shown a control that 403s on submit (projection ⊆ gate).
Only concrete routes are consulted: dynamic route_patterns carry no method, so
no write capability can be soundly inferred from them, and a synthetic TOTAL
(admin) projection carries no concrete routes at all — callers short-circuit it
with isFullProjection before reaching here. Under-showing is safe (the
server stays the authority); over-showing an action the gate denies is the bug.
Parameters
coversWrite
true ONLY once the projection
is ready AND either it is a full (admin / gate-off) projection or it reaches
method path. While the projection is loading/failed it is false — a write control
never enables before the gate is known (fail closed; not-ready ⇒ disabled/read-only).
Only concrete routes carry methods, so a DYNAMIC (templated) write route — one the
projection can represent only as a method-less route_patterns row — reads false for
every non-admin caller and degrades that control to read-only. Under-showing is safe
(the server stays the authority); over-showing a write the gate denies is the bug.
Parameters
Related: CapabilityState
isFullProjection
"*" discriminator) and the gate-off local-dev
projection alike. This is projection.admin === true and NOTHING else: a
seeded editor/viewer carries ["*"] scopes PLUS a jq fence, so keying on "*"
scopes would hand every editor/viewer the unfiltered nav and a wall of 403s on
the admin routes their fence denies. Keying on admin makes editor/viewer
SCOPED sessions whose nav is filtered by their jq-exact routes, which is
exactly right — and the gate-off synthetic projection (admin: true, empty
routes) still reads as full, so an AC-disabled deployment shows everything.
Parameters
toolDisplayLabel
Display (raw) when
a display name maps the name and is non-empty AND differs from the raw name, else
the bare raw name. Shared so every tool picker labels identically.
Parameters
useApi
useAuth
useBreakpoint
useCanWrite
method path the caller’s
projection cannot reach. It reads the live capability state and folds it through
coversWrite: true only once the projection is ready AND it is a full
(admin / gate-off) projection or it reaches method path; while the projection is
loading/failed it is false (fail closed — no write control before the gate is
known). method defaults to POST, the common write verb; pass the exact verb for
a PUT/PATCH/DELETE control.
Parameters
useCapabilities
useFeatureOff
kind is reported OFF by the kind-status table — the single proactive
predicate a write affordance folds in to hide itself before a doomed write. It is
true ONLY once the table is ready AND that kind’s row carries state: 'off';
while the table is loading/failed, no provider is mounted, or the kind is unknown,
it is false (treat as not-off until known — under-hiding is safe, the reactive
501 backstop still catches a genuinely-off feature).
Parameters
useFeatureOffMessage
detail for kind — the proactive counterpart to a write
refusal’s message, so a proactively-hidden surface shows the SERVER’s own
remediation line rather than a client-composed env-var string. null whenever the
kind is not reported OFF (table loading/failed, no provider, unknown kind, or the
kind is on), mirroring useFeatureOff’s not-off-until-known default.
Parameters
useInteractionsStream
Related: InteractionsStreamOptions, InteractionsStreamState
useOnUnauthorized
useReloadToolDisplayNames
useSystemKinds
loading when no provider is mounted, so
a consumer rendered outside the shell reads every kind as not-off rather than
throwing — the fail-open default this proactive-hiding idiom relies on.
Related: SystemKindsState
useTheme
useToolDisplayNames
{} while the overlay is loading/failed, no
provider is mounted, or no row carries a display name. A tool picker folds this into
its option labels; an unmapped name reads the bare raw name.
