e7657792df
The desktop and the web dashboard each carried a private copy of the cyberpunk / ember / midnight / mono palettes and they had drifted: the dashboard's cyberpunk canvas was #040608 with a mint #9bffcf accent while the desktop's was #000a00 with #00ff41, ember and midnight disagreed on both canvas and accent, mono agreed only by luck. Move the raw palette table for every built-in preset into @hermes/shared (`THEME_PRESET_PALETTES`, apps/shared/src/theme-presets.ts) and make it the single source of truth: - apps/desktop/src/themes/presets.ts spreads its `colors` / `darkColors` from the shared table; the OKLCH synthesis, terminal palettes and typography stay in the desktop. Serialised BUILTIN_THEMES are byte-identical to before, so the existing `--dt-primary-solid` parity pins stay green untouched. - web/src/themes/presets.ts projects each shared preset onto its 3-slot model through one pure function, `webPresetFromShared` (background <- background, midground <- primary, warmGlow <- the midground/ring accent), so cyberpunk / ember / midnight / mono now render the desktop's palette. Web-only presets (default, default-large, nous-blue, rose) are untouched. - Invariant test (web): for every preset shared by both surfaces the dashboard canvas equals the shared background and the projected text colour keeps >= 3:1 contrast against it. Red on the previous hexes, green now. Why: one edit in one place should recolour a preset on every surface; two hand-maintained tables guarantee the drift the audit found.
220 lines
5.4 KiB
TypeScript
220 lines
5.4 KiB
TypeScript
export { hasAnsi, sanitizeAnsiForRender, stripAnsi } from './ansi'
|
|
export { backendScopeKey, backendScopePrefix, LOCAL_CONNECTION_ID, registryBackendScopeKey } from './backend-scope'
|
|
export {
|
|
BILLING_REFUSAL_POLICY,
|
|
type BillingRecovery,
|
|
type BillingRefusalPolicy,
|
|
refusalPolicy
|
|
} from './billing-policy'
|
|
export type {
|
|
BillingAutoReload,
|
|
BillingBlock,
|
|
BillingCardInfo,
|
|
BillingChargeResponse,
|
|
BillingChargeStatusResponse,
|
|
BillingErrorPayload,
|
|
BillingMonthlyCap,
|
|
BillingMutationResponse,
|
|
BillingPaymentMethod,
|
|
BillingRefusalCode,
|
|
BillingStateResponse,
|
|
ChargeFailureReason,
|
|
KnownBillingRefusalCode,
|
|
KnownChargeFailureReason,
|
|
SubscriptionPreviewResponse,
|
|
SubscriptionStateResponse,
|
|
SubscriptionTierOption,
|
|
SubscriptionUpgradeResponse,
|
|
UsageBarData,
|
|
UsageModelData
|
|
} from './billing-types'
|
|
export {
|
|
driveChargeSettlement,
|
|
SETTLEMENT_MAX_RETRY_AFTER_MS,
|
|
SETTLEMENT_POLL_CAP_MS,
|
|
SETTLEMENT_POLL_INTERVAL_MS,
|
|
type SettlementDeps,
|
|
type SettlementOutcome
|
|
} from './charge-settlement'
|
|
export {
|
|
contrastRatio,
|
|
darken,
|
|
ensureContrast,
|
|
lighten,
|
|
mix,
|
|
parseColor,
|
|
readableOn,
|
|
relativeLuminance,
|
|
type Rgb,
|
|
toHex
|
|
} from './color'
|
|
export {
|
|
createCronTriggerController,
|
|
type CronTriggerController,
|
|
type CronTriggerRunResult
|
|
} from './cron-trigger-controller'
|
|
export {
|
|
clampDataUrlReadMaxMb,
|
|
DATA_URL_READ_DEFAULT_MAX_MB,
|
|
DATA_URL_READ_MAX_MAX_MB,
|
|
DATA_URL_READ_MIN_MAX_MB
|
|
} from './data-url-read-max'
|
|
export { compactNumber } from './format'
|
|
export { type FuzzyMatch, fuzzyRank, fuzzyScore, fuzzyScoreMulti, type RankedItem } from './fuzzy'
|
|
export {
|
|
type ApprovalRequestPayload,
|
|
BACKEND_EVENT_NAMES,
|
|
type BackendGatewayEventMap,
|
|
type BackendGatewayEventName,
|
|
type ClarifyQuestion,
|
|
type ClarifyRequestPayload,
|
|
type ClientLocalGatewayEventMap,
|
|
type ErrorPayload,
|
|
type ErrorSurface,
|
|
type GatewayEvent,
|
|
type GatewayEventMap,
|
|
type GatewayEventName,
|
|
type GatewayReadyPayload,
|
|
type GatewayTranscriptMessage,
|
|
type McpSetupRequestPayload,
|
|
type MessageCompletePayload,
|
|
type MessageInterimPayload,
|
|
type ModelCapabilities,
|
|
type ModelOptionProvider,
|
|
type ModelOptionsResponse,
|
|
type ModelPricing,
|
|
type NotificationShowPayload,
|
|
type RequestExpirePayload,
|
|
type SecretRequestPayload,
|
|
type SessionInflightTurn,
|
|
type SessionListItem,
|
|
type SessionListResponse,
|
|
type SessionReclaimedPayload,
|
|
type SessionResumeResponse,
|
|
type SessionUsagePayload,
|
|
type StatusUpdatePayload,
|
|
type StreamDeltaPayload,
|
|
type SubagentEventPayload,
|
|
type SubagentStatus,
|
|
type TodoStatePayload,
|
|
type ToolCompletePayload,
|
|
type ToolStartPayload,
|
|
type Usage,
|
|
type VaultUnlockRequestPayload,
|
|
type WakeDetectedPayload
|
|
} from './gateway-events'
|
|
export {
|
|
applyDocumentLocale,
|
|
type EndonymLocale,
|
|
isRecord,
|
|
LOCALE_ENDONYMS,
|
|
mergeTranslations,
|
|
RTL_LOCALES,
|
|
type TranslationOverride
|
|
} from './i18n'
|
|
export {
|
|
DEFAULT_HEARTBEAT_DEADLINE_MS,
|
|
DEFAULT_HEARTBEAT_INTERVAL_MS,
|
|
type GatewayRequestId,
|
|
JSON_RPC_METHOD_NOT_FOUND,
|
|
jsonRpcErrorFromFrame,
|
|
type JsonRpcErrorPayload,
|
|
type JsonRpcFrame,
|
|
JsonRpcGatewayError,
|
|
JsonRpcRequestChannel,
|
|
type JsonRpcRequestChannelOptions,
|
|
type JsonRpcTransport,
|
|
wireFrameText
|
|
} from './json-rpc-channel'
|
|
export {
|
|
type ConnectionState,
|
|
type GatewayClientOptions,
|
|
GatewayEventHub,
|
|
isGatewayWebSocketUrl,
|
|
JsonRpcGatewayClient,
|
|
type WebSocketLike
|
|
} from './json-rpc-gateway'
|
|
export { modelSearchText } from './model-search-text'
|
|
export {
|
|
DEFAULT_REASONING_EFFORT,
|
|
isReasoningEffort,
|
|
REASONING_EFFORT_VALUES,
|
|
REASONING_EFFORTS,
|
|
type ReasoningEffort,
|
|
type ReasoningEffortValue
|
|
} from './reasoning-effort'
|
|
export { reconnectBackoffDelayMs, type ReconnectBackoffOptions } from './reconnect-backoff'
|
|
export { skillInvocationText } from './skill-scaffold'
|
|
export {
|
|
type HermesSkin,
|
|
SKIN_BRANDING_TOKENS,
|
|
SKIN_COLOR_TOKENS,
|
|
type SkinBranding,
|
|
type SkinBrandingToken,
|
|
type SkinColors,
|
|
type SkinColorToken
|
|
} from './skin'
|
|
export {
|
|
type AliasCommandDispatchResponse,
|
|
type CommandDispatchResponse,
|
|
type ExecCommandDispatchResponse,
|
|
looksLikeSlashCommand,
|
|
parseCommandDispatch,
|
|
type ParsedSlashCommand,
|
|
parseSlashCommand,
|
|
type PrefillCommandDispatchResponse,
|
|
type SendCommandDispatchResponse,
|
|
type SkillCommandDispatchResponse,
|
|
SLASH_COMMAND_RE
|
|
} from './slash'
|
|
export {
|
|
THEME_PRESET_PALETTES,
|
|
type ThemePresetColors,
|
|
type ThemePresetName,
|
|
type ThemePresetPalette
|
|
} from './theme-presets'
|
|
export {
|
|
backgroundMaterialFor,
|
|
clampIntensity,
|
|
DEFAULT_GLASS_MATERIAL,
|
|
DEFAULT_GLASS_SCOPE,
|
|
GLASS_MATERIALS,
|
|
GLASS_SCOPES,
|
|
glassActive,
|
|
type GlassMaterial,
|
|
glassMaterialForPicker,
|
|
glassMaterialsFor,
|
|
type GlassScope,
|
|
glassSupportedOn,
|
|
glassSurfaceKeep,
|
|
normalizeMaterial,
|
|
normalizeMode,
|
|
normalizeScope,
|
|
normalizeState,
|
|
TRANSLUCENCY_CURVE,
|
|
TRANSLUCENCY_MAX,
|
|
TRANSLUCENCY_MIN,
|
|
TRANSLUCENCY_OPACITY_FLOOR,
|
|
TRANSLUCENCY_STEP,
|
|
type TranslucencyMode,
|
|
type TranslucencyState,
|
|
translucencySupportedOn,
|
|
vibrancyFor,
|
|
windowOpacityFor,
|
|
WINDOWS_BACKGROUND_MATERIALS,
|
|
WINDOWS_GLASS_MIN_BUILD,
|
|
type WindowsBackgroundMaterial
|
|
} from './translucency'
|
|
export {
|
|
buildHermesWebSocketUrl,
|
|
type GatewayAuthMode,
|
|
GatewayReauthRequiredError,
|
|
type GatewayWsConnection,
|
|
type GatewayWsUrlResult,
|
|
type HermesWebSocketUrlOptions,
|
|
isGatewayReauthRequired,
|
|
resolveGatewayWsUrl,
|
|
type ResolveGatewayWsUrlDeps,
|
|
type WebSocketAuthParam
|
|
} from './websocket-url'
|