@yadsh/dsh-qa-surface 0.1.1 → 0.3.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/CHANGELOG.md +151 -0
- package/README.md +239 -16
- package/SPEC-dsh-qa-surface.md +600 -96
- package/capability-policy.json +5 -0
- package/compatibility.json +18 -4
- package/cordis.patch.yml +11 -0
- package/docs/ARCHITECTURE.md +50 -8
- package/docs/COMPATIBILITY.md +5 -4
- package/docs/CONFIGURATION.md +184 -3
- package/docs/SOURCES-MIGRATION.md +28 -0
- package/docs/SOURCES-PROVENANCE-AUDIT.md +88 -0
- package/docs/SPEC-dsh-qa-surface-accounts.md +219 -0
- package/docs/SPEC-dsh-qa-surface-sources-provenance.md +1692 -0
- package/lib/accounts/index.js +2 -0
- package/lib/accounts/index.js.map +1 -0
- package/lib/accounts/store.js +478 -0
- package/lib/accounts/store.js.map +1 -0
- package/lib/attestation.js +10 -0
- package/lib/attestation.js.map +1 -0
- package/lib/cli.js +143 -0
- package/lib/cli.js.map +1 -0
- package/lib/client/QaAccountsController.js +329 -0
- package/lib/client/QaAccountsController.js.map +1 -0
- package/lib/client/QaConfigController.js +111 -4
- package/lib/client/QaConfigController.js.map +1 -1
- package/lib/client/QaSessionController.js +621 -163
- package/lib/client/QaSessionController.js.map +1 -1
- package/lib/client/QaSurface.js +303 -24
- package/lib/client/QaSurface.js.map +1 -1
- package/lib/client/QaTranscriptAdapter.js +324 -49
- package/lib/client/QaTranscriptAdapter.js.map +1 -1
- package/lib/client/attestation.js +66 -0
- package/lib/client/attestation.js.map +1 -0
- package/lib/client/chat-index.js +86 -0
- package/lib/client/chat-index.js.map +1 -0
- package/lib/client/components/Markdown.js +124 -13
- package/lib/client/components/Markdown.js.map +1 -1
- package/lib/client/components/QaAgentsDrawer.js +40 -0
- package/lib/client/components/QaAgentsDrawer.js.map +1 -0
- package/lib/client/components/QaAuthGate.js +40 -0
- package/lib/client/components/QaAuthGate.js.map +1 -0
- package/lib/client/components/QaChangelog.js +112 -0
- package/lib/client/components/QaChangelog.js.map +1 -0
- package/lib/client/components/QaComposer.js +132 -15
- package/lib/client/components/QaComposer.js.map +1 -1
- package/lib/client/components/QaMessage.js +214 -10
- package/lib/client/components/QaMessage.js.map +1 -1
- package/lib/client/components/QaSidebar.js +167 -0
- package/lib/client/components/QaSidebar.js.map +1 -0
- package/lib/client/components/QaSourcesDrawer.js +127 -0
- package/lib/client/components/QaSourcesDrawer.js.map +1 -0
- package/lib/client/components/QaTurnRail.js +281 -0
- package/lib/client/components/QaTurnRail.js.map +1 -0
- package/lib/client/components/QaWelcomeNotice.js +125 -0
- package/lib/client/components/QaWelcomeNotice.js.map +1 -0
- package/lib/client/components/QaWidthHandle.js +142 -0
- package/lib/client/components/QaWidthHandle.js.map +1 -0
- package/lib/client/components/QaWorkGroup.js +135 -0
- package/lib/client/components/QaWorkGroup.js.map +1 -0
- package/lib/client/components/VariantSwitcher.js +29 -0
- package/lib/client/components/VariantSwitcher.js.map +1 -0
- package/lib/client/components/format.js +48 -0
- package/lib/client/components/format.js.map +1 -0
- package/lib/client/components/source-refs.js +78 -0
- package/lib/client/components/source-refs.js.map +1 -0
- package/lib/client/create-session.js +51 -0
- package/lib/client/create-session.js.map +1 -0
- package/lib/client/index.js +166 -35
- package/lib/client/index.js.map +1 -1
- package/lib/client/project-session-state.js +78 -0
- package/lib/client/project-session-state.js.map +1 -0
- package/lib/client/session-admission.js +38 -0
- package/lib/client/session-admission.js.map +1 -0
- package/lib/client/session-assets.js +52 -0
- package/lib/client/session-assets.js.map +1 -0
- package/lib/client/session-sources.js +61 -0
- package/lib/client/session-sources.js.map +1 -0
- package/lib/client/settlement.js +24 -0
- package/lib/client/settlement.js.map +1 -0
- package/lib/client/styles.js +450 -43
- package/lib/client/styles.js.map +1 -1
- package/lib/client/tool-presentation.js +102 -0
- package/lib/client/tool-presentation.js.map +1 -0
- package/lib/client/turn-sources.js +98 -0
- package/lib/client/turn-sources.js.map +1 -0
- package/lib/client/types.js +15 -0
- package/lib/client/types.js.map +1 -0
- package/lib/client/use-session-ui-state.js +68 -0
- package/lib/client/use-session-ui-state.js.map +1 -0
- package/lib/client/use-transcript-view.js +44 -0
- package/lib/client/use-transcript-view.js.map +1 -0
- package/lib/client/wait-for.js +49 -0
- package/lib/client/wait-for.js.map +1 -0
- package/lib/client.js +12551 -918
- package/lib/client.js.map +1 -1
- package/lib/config.js +226 -58
- package/lib/config.js.map +1 -1
- package/lib/entry-redirect.js +44 -0
- package/lib/entry-redirect.js.map +1 -0
- package/lib/host-route.js +25 -1
- package/lib/host-route.js.map +1 -1
- package/lib/index.js +354 -72
- package/lib/index.js.map +1 -1
- package/lib/launch-token.js +42 -0
- package/lib/launch-token.js.map +1 -0
- package/lib/lockdown-policy.js +20 -0
- package/lib/lockdown-policy.js.map +1 -0
- package/lib/provenance/collector.js +40 -0
- package/lib/provenance/collector.js.map +1 -0
- package/lib/provenance/connectors.js +147 -0
- package/lib/provenance/connectors.js.map +1 -0
- package/lib/provenance/dedupe.js +89 -0
- package/lib/provenance/dedupe.js.map +1 -0
- package/lib/provenance/extractors.js +340 -0
- package/lib/provenance/extractors.js.map +1 -0
- package/lib/provenance/file-preview.js +39 -0
- package/lib/provenance/file-preview.js.map +1 -0
- package/lib/provenance/host-store.js +387 -0
- package/lib/provenance/host-store.js.map +1 -0
- package/lib/provenance/index.js +9 -0
- package/lib/provenance/index.js.map +1 -0
- package/lib/provenance/normalize.js +128 -0
- package/lib/provenance/normalize.js.map +1 -0
- package/lib/provenance/reported.js +53 -0
- package/lib/provenance/reported.js.map +1 -0
- package/lib/provenance/types.js +2 -0
- package/lib/provenance/types.js.map +1 -0
- package/lib/resolve-config.js +283 -10
- package/lib/resolve-config.js.map +1 -1
- package/lib/secure-session.js +212 -0
- package/lib/secure-session.js.map +1 -0
- package/lib/typert.host.d.ts +3 -0
- package/lib/typert.host.js +784 -0
- package/lib/typert.remote-client.d.ts +40 -0
- package/lib/typert.remote-client.js +597 -0
- package/lib/types/accounts/index.d.ts +2 -0
- package/lib/types/accounts/store.d.ts +121 -0
- package/lib/types/attestation.d.ts +17 -0
- package/lib/types/cli.d.ts +9 -0
- package/lib/types/client/QaAccountsController.d.ts +95 -0
- package/lib/types/client/QaConfigController.d.ts +35 -3
- package/lib/types/client/QaSessionController.d.ts +146 -20
- package/lib/types/client/QaSurface.d.ts +11 -5
- package/lib/types/client/QaTranscriptAdapter.d.ts +13 -3
- package/lib/types/client/attestation.d.ts +25 -0
- package/lib/types/client/chat-index.d.ts +28 -0
- package/lib/types/client/components/Markdown.d.ts +17 -3
- package/lib/types/client/components/QaAgentsDrawer.d.ts +25 -0
- package/lib/types/client/components/QaAuthGate.d.ts +15 -0
- package/lib/types/client/components/QaChangelog.d.ts +21 -0
- package/lib/types/client/components/QaComposer.d.ts +12 -2
- package/lib/types/client/components/QaMessage.d.ts +22 -2
- package/lib/types/client/components/QaSidebar.d.ts +69 -0
- package/lib/types/client/components/QaSourcesDrawer.d.ts +20 -0
- package/lib/types/client/components/QaTurnRail.d.ts +59 -0
- package/lib/types/client/components/QaWelcomeNotice.d.ts +27 -0
- package/lib/types/client/components/QaWidthHandle.d.ts +36 -0
- package/lib/types/client/components/QaWorkGroup.d.ts +19 -0
- package/lib/types/client/components/VariantSwitcher.d.ts +19 -0
- package/lib/types/client/components/format.d.ts +9 -0
- package/lib/types/client/components/source-refs.d.ts +16 -0
- package/lib/types/client/create-session.d.ts +16 -0
- package/lib/types/client/index.d.ts +2 -5
- package/lib/types/client/project-session-state.d.ts +30 -0
- package/lib/types/client/session-admission.d.ts +23 -0
- package/lib/types/client/session-assets.d.ts +20 -0
- package/lib/types/client/session-sources.d.ts +28 -0
- package/lib/types/client/settlement.d.ts +6 -0
- package/lib/types/client/tool-presentation.d.ts +6 -0
- package/lib/types/client/turn-sources.d.ts +14 -0
- package/lib/types/client/types.d.ts +93 -0
- package/lib/types/client/use-session-ui-state.d.ts +35 -0
- package/lib/types/client/use-transcript-view.d.ts +20 -0
- package/lib/types/client/wait-for.d.ts +11 -0
- package/lib/types/entry-redirect.d.ts +20 -0
- package/lib/types/host-route.d.ts +14 -1
- package/lib/types/index.d.ts +67 -7
- package/lib/types/launch-token.d.ts +21 -0
- package/lib/types/lockdown-policy.d.ts +18 -0
- package/lib/types/provenance/collector.d.ts +26 -0
- package/lib/types/provenance/connectors.d.ts +11 -0
- package/lib/types/provenance/dedupe.d.ts +6 -0
- package/lib/types/provenance/extractors.d.ts +14 -0
- package/lib/types/provenance/file-preview.d.ts +10 -0
- package/lib/types/provenance/host-store.d.ts +54 -0
- package/lib/types/provenance/index.d.ts +10 -0
- package/lib/types/provenance/normalize.d.ts +13 -0
- package/lib/types/provenance/reported.d.ts +5 -0
- package/lib/types/provenance/types.d.ts +78 -0
- package/lib/types/secure-session.d.ts +31 -0
- package/lib/types/types.d.ts +304 -1
- package/package.json +70 -27
package/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":["useState","useRef","Fragment","useSyncExternalStore","useState","useRef"],"sources":["../src/resolve-config.ts","../src/client/QaConfigController.ts","../src/navigation-marker.ts","../src/client/QaRouteController.ts","../src/client/QaTranscriptAdapter.ts","../src/client/QaSessionController.ts","../src/client/components/QaComposer.tsx","../src/client/components/Markdown.tsx","../src/client/components/QaMessage.tsx","../src/client/QaSurface.tsx","../src/client/styles.ts","../src/client/index.tsx"],"sourcesContent":["import type { QaSurfaceConfig, ResolvedQaSurfaceConfig } from \"./types.js\";\n\nexport const DEFAULT_QA_SURFACE_CONFIG: ResolvedQaSurfaceConfig = Object.freeze(\n {\n enabled: true,\n route: Object.freeze({ path: \"/qa\", matchChildren: true }),\n branding: Object.freeze({\n title: \"Assistant\",\n subtitle: \"\",\n welcomeMessage: \"How can I help?\",\n placeholder: \"Ask a question...\",\n logoUrl: null,\n }),\n session: Object.freeze({\n policy: \"browser-persistent\",\n storageKey: \"dsh-qa-surface\",\n workspaceId: null,\n fixedSessionId: null,\n agentPreset: null,\n provider: null,\n model: null,\n reasoningEffort: null,\n }),\n ui: Object.freeze({\n showHeader: true,\n showReset: true,\n showStop: true,\n showTimestamps: false,\n showToolActivity: false,\n showReasoning: false,\n renderMarkdown: true,\n maxContentWidth: 900,\n }),\n suggestedQuestions: Object.freeze([]),\n interaction: Object.freeze({\n approvals: \"blocked\",\n questions: \"unsupported\",\n }),\n embedding: Object.freeze({ frameAncestors: null }),\n },\n);\n\nfunction optionalText(value: string | null | undefined): string | null {\n const trimmed = value?.trim() ?? \"\";\n return trimmed === \"\" ? null : trimmed;\n}\n\nexport function normalizeRoutePath(value: string): string {\n const trimmed = value.trim();\n if (trimmed === \"\" || !trimmed.startsWith(\"/\")) {\n throw new TypeError(\"dsh-qa-surface: route.path must start with /\");\n }\n const path = trimmed.length > 1 ? trimmed.replace(/\\/+$/u, \"\") : trimmed;\n if (path === \"/\") {\n throw new TypeError(\n \"dsh-qa-surface: route.path cannot replace the operator root\",\n );\n }\n if (path === \"/api\" || path.startsWith(\"/api/\")) {\n throw new TypeError(\"dsh-qa-surface: route.path cannot claim /api\");\n }\n if (path === \"/plugins\" || path.startsWith(\"/plugins/\")) {\n throw new TypeError(\"dsh-qa-surface: route.path cannot claim /plugins\");\n }\n return path;\n}\n\nfunction uniqueQuestions(values: readonly string[]): readonly string[] {\n const questions = [\n ...new Set(values.map((value) => value.trim()).filter(Boolean)),\n ];\n if (questions.some((value) => value.length > 500)) {\n throw new TypeError(\n \"dsh-qa-surface: suggested questions must be at most 500 characters\",\n );\n }\n return Object.freeze(questions);\n}\n\n/** Materialize defaults and enforce route/session/model safety constraints. */\nexport function resolveConfig(\n input: QaSurfaceConfig = {},\n): ResolvedQaSurfaceConfig {\n const routePath = normalizeRoutePath(\n input.route?.path ?? DEFAULT_QA_SURFACE_CONFIG.route.path,\n );\n const policy =\n input.session?.policy ?? DEFAULT_QA_SURFACE_CONFIG.session.policy;\n const fixedSessionId = optionalText(input.session?.fixedSessionId);\n if (policy === \"fixed\" && fixedSessionId === null) {\n throw new TypeError(\n \"dsh-qa-surface: session.fixedSessionId is required for fixed policy\",\n );\n }\n const provider = optionalText(input.session?.provider);\n const model = optionalText(input.session?.model);\n if ((provider === null) !== (model === null)) {\n throw new TypeError(\n \"dsh-qa-surface: session.provider and session.model must be set together\",\n );\n }\n const storageKey =\n input.session?.storageKey?.trim() ??\n DEFAULT_QA_SURFACE_CONFIG.session.storageKey;\n if (storageKey === \"\") {\n throw new TypeError(\"dsh-qa-surface: session.storageKey cannot be empty\");\n }\n const maxContentWidth =\n input.ui?.maxContentWidth ?? DEFAULT_QA_SURFACE_CONFIG.ui.maxContentWidth;\n if (\n !Number.isSafeInteger(maxContentWidth) ||\n maxContentWidth < 480 ||\n maxContentWidth > 1600\n ) {\n throw new TypeError(\n \"dsh-qa-surface: ui.maxContentWidth must be an integer from 480 to 1600\",\n );\n }\n if (input.ui?.showReasoning === true) {\n throw new TypeError(\n \"dsh-qa-surface: ui.showReasoning is not supported by the safe MVP surface\",\n );\n }\n\n return Object.freeze({\n enabled: input.enabled ?? DEFAULT_QA_SURFACE_CONFIG.enabled,\n route: Object.freeze({\n path: routePath,\n matchChildren:\n input.route?.matchChildren ??\n DEFAULT_QA_SURFACE_CONFIG.route.matchChildren,\n }),\n branding: Object.freeze({\n title:\n input.branding?.title?.trim() ||\n DEFAULT_QA_SURFACE_CONFIG.branding.title,\n subtitle: input.branding?.subtitle?.trim() ?? \"\",\n welcomeMessage:\n input.branding?.welcomeMessage?.trim() ??\n DEFAULT_QA_SURFACE_CONFIG.branding.welcomeMessage,\n placeholder:\n input.branding?.placeholder?.trim() ||\n DEFAULT_QA_SURFACE_CONFIG.branding.placeholder,\n logoUrl: optionalText(input.branding?.logoUrl),\n }),\n session: Object.freeze({\n policy,\n storageKey,\n workspaceId: optionalText(input.session?.workspaceId),\n fixedSessionId,\n agentPreset: optionalText(input.session?.agentPreset),\n provider,\n model,\n reasoningEffort: optionalText(input.session?.reasoningEffort),\n }),\n ui: Object.freeze({\n showHeader:\n input.ui?.showHeader ?? DEFAULT_QA_SURFACE_CONFIG.ui.showHeader,\n showReset: input.ui?.showReset ?? DEFAULT_QA_SURFACE_CONFIG.ui.showReset,\n showStop: input.ui?.showStop ?? DEFAULT_QA_SURFACE_CONFIG.ui.showStop,\n showTimestamps:\n input.ui?.showTimestamps ?? DEFAULT_QA_SURFACE_CONFIG.ui.showTimestamps,\n showToolActivity:\n input.ui?.showToolActivity ??\n DEFAULT_QA_SURFACE_CONFIG.ui.showToolActivity,\n showReasoning: false,\n renderMarkdown:\n input.ui?.renderMarkdown ?? DEFAULT_QA_SURFACE_CONFIG.ui.renderMarkdown,\n maxContentWidth,\n }),\n suggestedQuestions: uniqueQuestions(input.suggestedQuestions ?? []),\n interaction: Object.freeze({\n approvals: \"blocked\",\n questions: \"unsupported\",\n }),\n embedding: Object.freeze({\n frameAncestors: optionalText(input.embedding?.frameAncestors),\n }),\n });\n}\n","import type { SettingsScope } from \"@deepseek-ai/dsh-client-runtime/client\";\nimport { DEFAULT_QA_SURFACE_CONFIG, resolveConfig } from \"../resolve-config.js\";\nimport type { QaSurfaceConfig, ResolvedQaSurfaceConfig } from \"../types.js\";\n\nexport interface QaConfigSnapshot {\n readonly status: \"loading\" | \"ready\" | \"unavailable\" | \"error\";\n readonly config: ResolvedQaSurfaceConfig;\n readonly error: string | null;\n}\n\n/** Browser projection of the Host-owned qa-surface settings namespace. */\nexport class QaConfigController {\n private readonly listeners = new Set<() => void>();\n private snapshot: QaConfigSnapshot;\n private readonly unsubscribe: () => void;\n\n constructor(private readonly scope: SettingsScope<QaSurfaceConfig>) {\n this.snapshot = this.project();\n this.unsubscribe = scope.subscribe(() => this.refresh());\n }\n\n getSnapshot = (): QaConfigSnapshot => this.snapshot;\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n };\n\n dispose(): void {\n this.unsubscribe();\n this.listeners.clear();\n }\n\n private project(): QaConfigSnapshot {\n const settings = this.scope.getSnapshot();\n if (settings.status === \"loading\") {\n return {\n status: \"loading\",\n config: DEFAULT_QA_SURFACE_CONFIG,\n error: null,\n };\n }\n if (settings.status === \"unavailable\") {\n return {\n status: \"unavailable\",\n config: DEFAULT_QA_SURFACE_CONFIG,\n error: null,\n };\n }\n try {\n return {\n status: \"ready\",\n config: resolveConfig(settings.value ?? {}),\n error: null,\n };\n } catch {\n return {\n status: \"error\",\n config: DEFAULT_QA_SURFACE_CONFIG,\n error: \"The assistant configuration is unavailable.\",\n };\n }\n }\n\n private refresh(): void {\n const next = this.project();\n if (\n next.status === this.snapshot.status &&\n next.config === this.snapshot.config &&\n next.error === this.snapshot.error\n ) {\n return;\n }\n this.snapshot = next;\n for (const listener of this.listeners) listener();\n }\n}\n","/** Query hand-off used only by the Host navigation compatibility redirect. */\nexport const QA_NAVIGATION_MARKER = \"__dsh_qa_route\";\n","import type { ResolvedQaSurfaceConfig } from \"../types.js\";\nimport { QA_NAVIGATION_MARKER } from \"../navigation-marker.js\";\n\nexport interface QaRouteSnapshot {\n readonly pathname: string;\n readonly active: boolean;\n}\n\ninterface NavigationHistory {\n pushState(data: unknown, unused: string, url?: string | URL | null): void;\n replaceState(data: unknown, unused: string, url?: string | URL | null): void;\n}\n\ninterface NavigationWindow {\n readonly location: { readonly pathname: string; readonly search?: string };\n readonly history: NavigationHistory;\n addEventListener(type: \"popstate\", listener: () => void): void;\n removeEventListener(type: \"popstate\", listener: () => void): void;\n}\n\nexport function matchesQaRoute(\n pathname: string,\n route: ResolvedQaSurfaceConfig[\"route\"],\n): boolean {\n if (pathname === route.path || pathname === `${route.path}/`) return true;\n if (route.path === \"/\") return route.matchChildren;\n if (!route.matchChildren) return false;\n return pathname.startsWith(`${route.path}/`);\n}\n\n/** Observable route matcher with reversible History API instrumentation. */\nexport class QaRouteController {\n private readonly listeners = new Set<() => void>();\n private route: ResolvedQaSurfaceConfig[\"route\"] = {\n path: \"/qa\",\n matchChildren: true,\n };\n private enabled = false;\n private snapshot: QaRouteSnapshot;\n private readonly originalPushState: NavigationHistory[\"pushState\"];\n private readonly originalReplaceState: NavigationHistory[\"replaceState\"];\n private readonly wrappedPushState: NavigationHistory[\"pushState\"];\n private readonly wrappedReplaceState: NavigationHistory[\"replaceState\"];\n private disposed = false;\n\n constructor(private readonly target: NavigationWindow = window) {\n this.originalPushState = target.history.pushState;\n this.originalReplaceState = target.history.replaceState;\n this.restoreRedirectedPath();\n this.snapshot = this.project();\n const refresh = () => this.refresh();\n const history = target.history;\n const originalPushState = this.originalPushState;\n const originalReplaceState = this.originalReplaceState;\n this.wrappedPushState = function (\n ...args: Parameters<NavigationHistory[\"pushState\"]>\n ) {\n Reflect.apply(originalPushState, history, args);\n refresh();\n };\n this.wrappedReplaceState = function (\n ...args: Parameters<NavigationHistory[\"replaceState\"]>\n ) {\n Reflect.apply(originalReplaceState, history, args);\n refresh();\n };\n target.history.pushState = this.wrappedPushState;\n target.history.replaceState = this.wrappedReplaceState;\n target.addEventListener(\"popstate\", refresh);\n this.removePopstate = () => target.removeEventListener(\"popstate\", refresh);\n }\n\n private readonly removePopstate: () => void;\n\n getSnapshot = (): QaRouteSnapshot => this.snapshot;\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n };\n\n configure(config: ResolvedQaSurfaceConfig, ready = true): void {\n this.route = config.route;\n this.enabled = ready && config.enabled;\n this.refresh();\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.removePopstate();\n if (this.target.history.pushState === this.wrappedPushState) {\n this.target.history.pushState = this.originalPushState;\n }\n if (this.target.history.replaceState === this.wrappedReplaceState) {\n this.target.history.replaceState = this.originalReplaceState;\n }\n this.listeners.clear();\n }\n\n private project(): QaRouteSnapshot {\n const pathname = this.target.location.pathname;\n return {\n pathname,\n active: this.enabled && matchesQaRoute(pathname, this.route),\n };\n }\n\n private restoreRedirectedPath(): void {\n const search = this.target.location.search;\n if (search === undefined || search === \"\") return;\n const requested = new URLSearchParams(search).get(QA_NAVIGATION_MARKER);\n if (\n requested === null ||\n !requested.startsWith(\"/\") ||\n requested.startsWith(\"//\")\n ) {\n return;\n }\n Reflect.apply(this.originalReplaceState, this.target.history, [\n null,\n \"\",\n requested,\n ]);\n }\n\n private refresh(): void {\n if (this.disposed) return;\n const next = this.project();\n if (\n next.pathname === this.snapshot.pathname &&\n next.active === this.snapshot.active\n ) {\n return;\n }\n this.snapshot = next;\n for (const listener of this.listeners) listener();\n }\n}\n","import type { ConversationSnapshot } from \"@deepseek-ai/dsh-client-runtime/client\";\nimport type { QaMessage } from \"../types.js\";\n\nfunction visibleContentText(content: readonly unknown[]): string {\n return content\n .flatMap((block) => {\n if (typeof block !== \"object\" || block === null) return [];\n return Reflect.get(block, \"type\") === \"text\" &&\n typeof Reflect.get(block, \"text\") === \"string\"\n ? [Reflect.get(block, \"text\") as string]\n : [];\n })\n .join(\"\");\n}\n\nfunction visibleAssistantText(\n blocks: readonly { readonly kind: string; readonly text?: string }[],\n): string {\n return blocks\n .filter(\n (block): block is { readonly kind: \"text\"; readonly text: string } =>\n block.kind === \"text\" && typeof block.text === \"string\",\n )\n .map((block) => block.text)\n .join(\"\");\n}\n\n/** Project only end-user-safe text from the public DSH conversation snapshot. */\nexport function projectTranscript(\n snapshot: ConversationSnapshot,\n options: { readonly showToolActivity?: boolean } = {},\n): readonly QaMessage[] {\n const messages: QaMessage[] = [];\n for (const node of snapshot.nodes) {\n if (node.kind === \"user\" || node.kind === \"steering\") {\n const text = visibleContentText(node.content);\n if (text !== \"\") {\n messages.push({\n id: `${node.kind}:${node.seq}`,\n role: \"user\",\n text,\n status: \"committed\",\n timestamp: node.time,\n });\n }\n continue;\n }\n if (node.kind === \"assistant\") {\n const text = visibleAssistantText(node.blocks);\n if (text !== \"\") {\n messages.push({\n id: `assistant:${node.messageId ?? node.seq}`,\n role: \"assistant\",\n text,\n status: \"committed\",\n timestamp: node.time,\n });\n }\n continue;\n }\n if (node.kind === \"turn-error\") {\n messages.push({\n id: `turn-error:${node.seq}`,\n role: \"system\",\n text: \"The assistant could not complete this response.\",\n status: \"error\",\n timestamp: node.time,\n });\n continue;\n }\n if (node.kind === \"turn-max-tokens\") {\n messages.push({\n id: `turn-max-tokens:${node.seq}`,\n role: \"system\",\n text: \"The response reached its length limit.\",\n status: \"info\",\n timestamp: node.time,\n });\n }\n }\n\n if (snapshot.partial !== null) {\n const text = visibleAssistantText(snapshot.partial.blocks);\n if (text !== \"\") {\n messages.push({\n id: `assistant:partial:${snapshot.partial.turn}:${snapshot.partial.step}`,\n role: \"assistant\",\n text,\n status: \"streaming\",\n });\n }\n }\n if (\n options.showToolActivity === true &&\n snapshot.runningCalls.length > 0 &&\n snapshot.partial === null\n ) {\n messages.push({\n id: \"tool-activity\",\n role: \"system\",\n text: \"Working…\",\n status: \"info\",\n });\n }\n return messages;\n}\n","import type {\n HostDescriptionSource,\n IApiClient,\n SessionId,\n WorkspaceId,\n} from \"@deepseek-ai/dsh-client-connection/client\";\nimport type {\n ISessions,\n SessionFace,\n SessionListState,\n} from \"@deepseek-ai/dsh-client-runtime/client\";\nimport type { QaSessionState, ResolvedQaSurfaceConfig } from \"../types.js\";\nimport { projectTranscript } from \"./QaTranscriptAdapter.js\";\n\ntype QaSessionsApi = Pick<IApiClient[\"sessions\"], \"create\" | \"selectModel\">;\n\nexport interface StorageLike {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\nexport interface QaSessionControllerOptions {\n readonly sessions: ISessions;\n readonly api: QaSessionsApi;\n readonly connection: HostDescriptionSource;\n readonly config: ResolvedQaSurfaceConfig;\n readonly storage?: StorageLike;\n readonly timeoutMs?: number;\n}\n\nconst EMPTY_STATE: QaSessionState = Object.freeze({\n phase: \"idle\",\n sessionId: null,\n messages: Object.freeze([]),\n error: null,\n canSend: false,\n canStop: false,\n});\n\nfunction waitFor<T>(\n source: {\n getSnapshot(): T;\n subscribe(listener: () => void): () => void;\n },\n predicate: (value: T) => boolean,\n timeoutMs: number,\n): Promise<T> {\n const current = source.getSnapshot();\n if (predicate(current)) return Promise.resolve(current);\n return new Promise<T>((resolve, reject) => {\n let settled = false;\n const timeout: { id?: ReturnType<typeof setTimeout> } = {};\n let unsubscribe: () => void = () => undefined;\n const finish = (value: T) => {\n if (settled) return;\n settled = true;\n if (timeout.id !== undefined) clearTimeout(timeout.id);\n unsubscribe();\n resolve(value);\n };\n unsubscribe = source.subscribe(() => {\n const next = source.getSnapshot();\n if (predicate(next)) finish(next);\n });\n // Tolerate observable implementations that notify synchronously while a\n // subscriber is being installed, and close that subscription afterward.\n if (settled) {\n unsubscribe();\n return;\n }\n const afterSubscribe = source.getSnapshot();\n if (predicate(afterSubscribe)) {\n finish(afterSubscribe);\n return;\n }\n timeout.id = setTimeout(() => {\n if (settled) return;\n settled = true;\n unsubscribe();\n reject(new Error(\"Timed out waiting for the DSH runtime.\"));\n }, timeoutMs);\n });\n}\n\n/** The only module that couples QA behavior to DSH Session/client APIs. */\nexport class QaSessionController {\n private readonly listeners = new Set<() => void>();\n private readonly sessions: ISessions;\n private readonly api: QaSessionsApi;\n private readonly connection: HostDescriptionSource;\n private readonly config: ResolvedQaSurfaceConfig;\n private readonly storage: StorageLike | undefined;\n private readonly timeoutMs: number;\n private state: QaSessionState = EMPTY_STATE;\n private session: SessionFace | undefined;\n private unsubscribeSession: (() => void) | undefined;\n private readonly unsubscribeConnection: () => void;\n private ensuring: Promise<void> | undefined;\n private operationError: string | null = null;\n private admissionPending = false;\n private connectedOnce: boolean;\n private disposed = false;\n private generation = 0;\n\n constructor(options: QaSessionControllerOptions) {\n this.sessions = options.sessions;\n this.api = options.api;\n this.connection = options.connection;\n this.config = options.config;\n this.storage = options.storage;\n this.timeoutMs = options.timeoutMs ?? 15_000;\n this.connectedOnce = this.connection.getSnapshot() !== undefined;\n this.unsubscribeConnection = this.connection.subscribe(() => {\n if (this.connection.getSnapshot() !== undefined)\n this.connectedOnce = true;\n this.publish();\n });\n }\n\n getSnapshot = (): QaSessionState => this.state;\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n };\n\n ensureSession(): Promise<void> {\n if (this.ensuring !== undefined) return this.ensuring;\n const operation = this.ensureSessionNow().finally(() => {\n if (this.ensuring === operation) this.ensuring = undefined;\n });\n this.ensuring = operation;\n return operation;\n }\n\n async send(text: string): Promise<boolean> {\n const prompt = text.trim();\n if (prompt === \"\" || this.session === undefined || !this.state.canSend) {\n return false;\n }\n if (prompt.startsWith(\"/\")) {\n this.operationError =\n \"Slash commands are not available in this assistant view.\";\n this.publish();\n return false;\n }\n this.operationError = null;\n this.admissionPending = true;\n this.publish();\n try {\n const result = await this.session.prompt(\n [{ type: \"text\", text: prompt }],\n \"queue\",\n );\n if (!result.ok) {\n this.admissionPending = false;\n this.operationError = \"Your message could not be sent.\";\n this.publish();\n return false;\n }\n this.publish();\n return true;\n } catch (error) {\n this.admissionPending = false;\n console.error(\"dsh-qa-surface: prompt failed\", error);\n this.operationError = \"Your message could not be sent.\";\n this.publish();\n return false;\n }\n }\n\n async stop(): Promise<void> {\n if (this.session === undefined || !this.state.canStop) return;\n try {\n const result = await this.session.cancel();\n if (!result.ok)\n this.operationError = \"The response could not be stopped.\";\n } catch (error) {\n console.error(\"dsh-qa-surface: stop failed\", error);\n this.operationError = \"The response could not be stopped.\";\n }\n this.publish();\n }\n\n async reset(): Promise<void> {\n if (this.config.session.policy === \"fixed\") return;\n const previous = this.session;\n if (previous?.getSnapshot().running === true) {\n try {\n await previous.cancel();\n } catch (error) {\n console.error(\"dsh-qa-surface: stop before reset failed\", error);\n }\n }\n const operation = ++this.generation;\n this.unbind();\n this.operationError = null;\n this.admissionPending = false;\n this.state = { ...EMPTY_STATE, phase: \"creating\" };\n this.emit();\n try {\n await this.waitForConnection();\n const id = await this.createSession();\n if (this.disposed || operation !== this.generation) return;\n this.persist(id);\n await this.bind(id);\n } catch (error) {\n this.fail(\"Unable to start a new chat.\", error);\n }\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.generation += 1;\n this.unsubscribeConnection();\n this.unbind();\n this.listeners.clear();\n }\n\n private async ensureSessionNow(): Promise<void> {\n const operation = ++this.generation;\n this.state = { ...EMPTY_STATE, phase: \"creating\" };\n this.emit();\n try {\n await this.waitForConnection();\n const list = await waitFor(\n this.sessions.list,\n (snapshot) => snapshot.phase === \"ready\",\n this.timeoutMs,\n );\n let id: string | null = null;\n if (this.config.session.policy === \"fixed\") {\n id = this.config.session.fixedSessionId;\n if (id === null || !Object.hasOwn(list.byId, id)) {\n throw new Error(\"Configured fixed session is unavailable.\");\n }\n } else if (this.config.session.policy === \"browser-persistent\") {\n const stored = this.readPersisted();\n if (stored !== null && Object.hasOwn(list.byId, stored)) {\n id = stored;\n } else if (stored !== null) {\n this.clearPersisted();\n }\n }\n if (id === null) {\n id = await this.createSession();\n if (this.config.session.policy === \"browser-persistent\")\n this.persist(id);\n }\n if (this.disposed || operation !== this.generation) return;\n await this.bind(id);\n } catch (error) {\n this.fail(\"Unable to start a chat.\", error);\n }\n }\n\n private async createSession(): Promise<string> {\n const response = await this.api.create({\n ...(this.config.session.workspaceId === null\n ? {}\n : { workspaceId: this.config.session.workspaceId as WorkspaceId }),\n ...(this.config.session.agentPreset === null\n ? {}\n : { agentPreset: this.config.session.agentPreset }),\n });\n if (!response.result.ok) throw new Error(response.result.error.code);\n const id = String(response.result.value.sessionId);\n await waitFor(\n this.sessions.list,\n (snapshot) => Object.hasOwn(snapshot.byId, id),\n this.timeoutMs,\n );\n if (\n this.config.session.provider !== null &&\n this.config.session.model !== null\n ) {\n const selected = await this.api.selectModel({\n sessionId: id as SessionId,\n provider: this.config.session.provider,\n model: this.config.session.model,\n ...(this.config.session.reasoningEffort === null\n ? {}\n : { reasoningEffort: this.config.session.reasoningEffort }),\n });\n if (!selected.result.ok) throw new Error(selected.result.error.code);\n }\n return id;\n }\n\n private async bind(id: string): Promise<void> {\n this.sessions.open(id as SessionId);\n let binding = this.sessions.binding(id as SessionId);\n if (binding === undefined) {\n await waitFor(\n this.sessions.list,\n (snapshot) => Object.hasOwn(snapshot.byId, id),\n this.timeoutMs,\n );\n binding = this.sessions.binding(id as SessionId);\n }\n if (binding === undefined)\n throw new Error(\"Session binding is unavailable.\");\n this.unbind();\n this.session = binding.session;\n this.unsubscribeSession = binding.session.subscribe(() => {\n this.admissionPending = false;\n this.operationError = null;\n this.publish();\n });\n this.publish();\n }\n\n private unbind(): void {\n this.unsubscribeSession?.();\n this.unsubscribeSession = undefined;\n this.session = undefined;\n this.admissionPending = false;\n }\n\n private waitForConnection(): Promise<unknown> {\n return waitFor(\n this.connection,\n (description) => description !== undefined,\n this.timeoutMs,\n );\n }\n\n private publish(): void {\n if (this.disposed) return;\n const connected = this.connection.getSnapshot() !== undefined;\n if (this.session === undefined) {\n this.state = {\n ...this.state,\n phase:\n !connected && this.connectedOnce ? \"reconnecting\" : this.state.phase,\n error: this.operationError ?? this.state.error,\n };\n this.emit();\n return;\n }\n const snapshot = this.session.getSnapshot();\n const blocked = snapshot.pending.length > 0;\n const error =\n this.operationError ??\n (blocked\n ? \"This request requires an interaction that is not available in this assistant view.\"\n : snapshot.removed || snapshot.openState === \"error\"\n ? \"This chat is no longer available.\"\n : null);\n const phase = !connected\n ? \"reconnecting\"\n : blocked\n ? \"blocked\"\n : snapshot.removed || snapshot.openState === \"error\"\n ? \"error\"\n : snapshot.openState !== \"open\"\n ? \"creating\"\n : snapshot.running || this.admissionPending\n ? \"running\"\n : \"ready\";\n this.state = {\n phase,\n sessionId: String(this.session.sessionId),\n messages: projectTranscript(snapshot, {\n showToolActivity: this.config.ui.showToolActivity,\n }),\n error,\n canSend: connected && phase === \"ready\",\n canStop:\n connected && snapshot.running && this.config.ui.showStop && !blocked,\n };\n this.emit();\n }\n\n private fail(message: string, error: unknown): void {\n console.error(\"dsh-qa-surface: session operation failed\", error);\n if (this.disposed) return;\n this.operationError = message;\n this.state = {\n ...EMPTY_STATE,\n phase: \"error\",\n error: message,\n };\n this.emit();\n }\n\n private storageKey(): string {\n return `${this.config.session.storageKey}:v1:${this.config.route.path}:session`;\n }\n\n private readPersisted(): string | null {\n try {\n const value = this.storage?.getItem(this.storageKey())?.trim() ?? \"\";\n return value === \"\" ? null : value;\n } catch {\n return null;\n }\n }\n\n private persist(id: string): void {\n try {\n this.storage?.setItem(this.storageKey(), id);\n } catch {\n // A denied localStorage write must not prevent a real DSH session.\n }\n }\n\n private clearPersisted(): void {\n try {\n this.storage?.removeItem(this.storageKey());\n } catch {\n // A denied localStorage removal is harmless; the id is revalidated later.\n }\n }\n\n private emit(): void {\n for (const listener of this.listeners) listener();\n }\n}\n\nexport type { SessionListState };\n","import { useEffect, useRef, useState } from \"react\";\n\nexport interface QaComposerProps {\n readonly placeholder: string;\n readonly canSend: boolean;\n readonly canStop: boolean;\n readonly running: boolean;\n readonly showStop: boolean;\n readonly onSend: (text: string) => Promise<boolean>;\n readonly onStop: () => Promise<void>;\n}\n\nexport function QaComposer(props: QaComposerProps) {\n const [draft, setDraft] = useState(\"\");\n const [submitting, setSubmitting] = useState(false);\n const textarea = useRef<HTMLTextAreaElement>(null);\n const send = async () => {\n if (submitting || draft.trim() === \"\" || !props.canSend) return;\n setSubmitting(true);\n try {\n if (await props.onSend(draft)) setDraft(\"\");\n } finally {\n setSubmitting(false);\n textarea.current?.focus();\n }\n };\n\n useEffect(() => {\n if (!props.running) textarea.current?.focus();\n }, [props.running]);\n\n return (\n <div className=\"dsh-qa-composer\">\n <label className=\"dsh-qa-sr-only\" htmlFor=\"dsh-qa-prompt\">\n Ask a question\n </label>\n <textarea\n ref={textarea}\n id=\"dsh-qa-prompt\"\n rows={1}\n value={draft}\n placeholder={props.placeholder}\n disabled={!props.canSend && !props.running}\n onChange={(event) => setDraft(event.currentTarget.value)}\n onKeyDown={(event) => {\n if (\n event.key === \"Enter\" &&\n !event.shiftKey &&\n !event.nativeEvent.isComposing\n ) {\n event.preventDefault();\n void send();\n }\n }}\n />\n {props.running && props.showStop ? (\n <button\n type=\"button\"\n className=\"dsh-qa-button dsh-qa-button--stop\"\n disabled={!props.canStop}\n onClick={() => void props.onStop()}\n >\n Stop\n </button>\n ) : (\n <button\n type=\"button\"\n className=\"dsh-qa-button dsh-qa-button--send\"\n disabled={!props.canSend || submitting || draft.trim() === \"\"}\n onClick={() => void send()}\n >\n Send\n </button>\n )}\n </div>\n );\n}\n","import { Fragment, type ReactNode } from \"react\";\n\nconst INLINE = /(\\[[^\\]]+\\]\\([^\\s)]+\\)|`[^`]+`|\\*\\*[^*]+\\*\\*|\\*[^*]+\\*)/gu;\n\nfunction safeHref(value: string): string | undefined {\n try {\n const url = new URL(value, window.location.origin);\n return [\"http:\", \"https:\", \"mailto:\"].includes(url.protocol)\n ? value\n : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction inline(text: string, keyPrefix: string): ReactNode[] {\n const nodes: ReactNode[] = [];\n let offset = 0;\n for (const match of text.matchAll(INLINE)) {\n const index = match.index;\n if (index > offset) nodes.push(text.slice(offset, index));\n const token = match[0];\n const key = `${keyPrefix}:${index}`;\n if (token.startsWith(\"[\")) {\n const parts = /^\\[([^\\]]+)\\]\\(([^\\s)]+)\\)$/u.exec(token);\n const href = parts?.[2] === undefined ? undefined : safeHref(parts[2]);\n nodes.push(\n href === undefined ? (\n token\n ) : (\n <a key={key} href={href} target=\"_blank\" rel=\"noreferrer\">\n {parts?.[1]}\n </a>\n ),\n );\n } else if (token.startsWith(\"`\")) {\n nodes.push(<code key={key}>{token.slice(1, -1)}</code>);\n } else if (token.startsWith(\"**\")) {\n nodes.push(<strong key={key}>{token.slice(2, -2)}</strong>);\n } else {\n nodes.push(<em key={key}>{token.slice(1, -1)}</em>);\n }\n offset = index + token.length;\n }\n if (offset < text.length) nodes.push(text.slice(offset));\n return nodes;\n}\n\n/** Deliberately small, HTML-free Markdown renderer for assistant-visible text. */\nexport function Markdown({ text }: { readonly text: string }) {\n const lines = text.replace(/\\r\\n?/gu, \"\\n\").split(\"\\n\");\n const blocks: ReactNode[] = [];\n for (let index = 0; index < lines.length;) {\n const line = lines[index] ?? \"\";\n if (line.startsWith(\"```\")) {\n const language = line.slice(3).trim();\n const code: string[] = [];\n index += 1;\n while (index < lines.length && !(lines[index] ?? \"\").startsWith(\"```\")) {\n code.push(lines[index] ?? \"\");\n index += 1;\n }\n if (index < lines.length) index += 1;\n blocks.push(\n <pre key={`code:${index}`}>\n <code data-language={language || undefined}>{code.join(\"\\n\")}</code>\n </pre>,\n );\n continue;\n }\n const heading = /^(#{1,3})\\s+(.+)$/u.exec(line);\n if (heading !== null) {\n const content = inline(heading[2] ?? \"\", `heading:${index}`);\n const key = `heading:${index}`;\n blocks.push(\n heading[1]?.length === 1 ? (\n <h2 key={key}>{content}</h2>\n ) : heading[1]?.length === 2 ? (\n <h3 key={key}>{content}</h3>\n ) : (\n <h4 key={key}>{content}</h4>\n ),\n );\n index += 1;\n continue;\n }\n if (/^[-*]\\s+/u.test(line)) {\n const items: ReactNode[] = [];\n while (index < lines.length && /^[-*]\\s+/u.test(lines[index] ?? \"\")) {\n const content = (lines[index] ?? \"\").replace(/^[-*]\\s+/u, \"\");\n items.push(\n <li key={`item:${index}`}>{inline(content, `item:${index}`)}</li>,\n );\n index += 1;\n }\n blocks.push(<ul key={`list:${index}`}>{items}</ul>);\n continue;\n }\n if (line.startsWith(\"> \")) {\n blocks.push(\n <blockquote key={`quote:${index}`}>\n {inline(line.slice(2), `quote:${index}`)}\n </blockquote>,\n );\n index += 1;\n continue;\n }\n if (line.trim() === \"\") {\n index += 1;\n continue;\n }\n const paragraph = [line];\n index += 1;\n while (\n index < lines.length &&\n (lines[index] ?? \"\").trim() !== \"\" &&\n !/^(#{1,3})\\s+|^```|^[-*]\\s+|^>\\s/u.test(lines[index] ?? \"\")\n ) {\n paragraph.push(lines[index] ?? \"\");\n index += 1;\n }\n blocks.push(\n <p key={`paragraph:${index}`}>\n {paragraph.map((part, partIndex) => (\n <Fragment key={`line:${partIndex}`}>\n {partIndex === 0 ? null : <br />}\n {inline(part, `paragraph:${index}:${partIndex}`)}\n </Fragment>\n ))}\n </p>,\n );\n }\n return <>{blocks}</>;\n}\n","import type { QaMessage as QaMessageModel } from \"../../types.js\";\nimport { Markdown } from \"./Markdown.js\";\n\nexport interface QaMessageProps {\n readonly message: QaMessageModel;\n readonly renderMarkdown: boolean;\n readonly showTimestamp: boolean;\n}\n\nexport function QaMessage({\n message,\n renderMarkdown,\n showTimestamp,\n}: QaMessageProps) {\n const label =\n message.role === \"assistant\"\n ? \"Assistant\"\n : message.role === \"user\"\n ? \"You\"\n : \"Status\";\n return (\n <article\n className={`dsh-qa-message dsh-qa-message--${message.role}`}\n data-status={message.status}\n >\n <div className=\"dsh-qa-message__meta\">\n <span>{label}</span>\n {showTimestamp && message.timestamp !== undefined ? (\n <time dateTime={new Date(message.timestamp).toISOString()}>\n {new Date(message.timestamp).toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}\n </time>\n ) : null}\n </div>\n <div className=\"dsh-qa-message__content\">\n {message.role === \"assistant\" && renderMarkdown ? (\n <Markdown text={message.text} />\n ) : (\n message.text\n )}\n {message.status === \"streaming\" ? (\n <span className=\"dsh-qa-message__cursor\" aria-hidden=\"true\" />\n ) : null}\n </div>\n </article>\n );\n}\n","import {\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n useSyncExternalStore,\n type KeyboardEvent,\n} from \"react\";\nimport type {\n HostDescriptionSource,\n IApiClient,\n} from \"@deepseek-ai/dsh-client-connection/client\";\nimport type { ISessions } from \"@deepseek-ai/dsh-client-runtime/client\";\nimport type {\n InjectFace,\n PropsRuntime,\n} from \"@deepseek-ai/dsh-client-ui-slots\";\nimport type { QaSessionState } from \"../types.js\";\nimport type { QaConfigController } from \"./QaConfigController.js\";\nimport type { QaRouteController } from \"./QaRouteController.js\";\nimport { QaSessionController } from \"./QaSessionController.js\";\nimport { QaComposer } from \"./components/QaComposer.js\";\nimport { QaMessage } from \"./components/QaMessage.js\";\n\nconst INACTIVE_STATE: QaSessionState = Object.freeze({\n phase: \"idle\",\n sessionId: null,\n messages: Object.freeze([]),\n error: null,\n canSend: false,\n canStop: false,\n});\nconst noopSubscribe = () => () => undefined;\n\nexport interface QaSurfaceFace {\n readonly route: QaRouteController;\n readonly config: QaConfigController;\n readonly sessions: ISessions;\n readonly api: Pick<IApiClient[\"sessions\"], \"create\" | \"selectModel\">;\n readonly connection: HostDescriptionSource;\n}\n\ntype QaSurfaceProps = PropsRuntime<\"shell.overlay\"> & InjectFace<QaSurfaceFace>;\n\nfunction focusable(root: HTMLElement): HTMLElement[] {\n return [\n ...root.querySelectorAll<HTMLElement>(\n \"button:not([disabled]), textarea:not([disabled]), a[href], [tabindex]:not([tabindex='-1'])\",\n ),\n ].filter((element) => !element.hidden);\n}\n\nfunction trapKeys(event: KeyboardEvent<HTMLElement>): void {\n event.stopPropagation();\n if (event.key !== \"Tab\") return;\n const items = focusable(event.currentTarget);\n if (items.length === 0) {\n event.preventDefault();\n event.currentTarget.focus();\n return;\n }\n const first = items[0];\n const last = items.at(-1);\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last?.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first?.focus();\n }\n}\n\nfunction statusText(state: QaSessionState): string | null {\n if (state.phase === \"creating\") return \"Connecting…\";\n if (state.phase === \"reconnecting\") return \"Connection lost. Reconnecting…\";\n if (state.phase === \"running\") return \"Assistant is responding…\";\n return null;\n}\n\nexport function QaSurface(props: QaSurfaceProps) {\n const route = useSyncExternalStore(\n props.route.subscribe,\n props.route.getSnapshot,\n props.route.getSnapshot,\n );\n const configState = useSyncExternalStore(\n props.config.subscribe,\n props.config.getSnapshot,\n props.config.getSnapshot,\n );\n const config = configState.config;\n const [controller, setController] = useState<QaSessionController>();\n const transcript = useRef<HTMLDivElement>(null);\n const nearBottom = useRef(true);\n\n useEffect(() => {\n if (!route.active) {\n setController(undefined);\n return;\n }\n const next = new QaSessionController({\n sessions: props.sessions,\n api: props.api,\n connection: props.connection,\n config,\n storage: window.localStorage,\n });\n setController(next);\n void next.ensureSession();\n return () => next.dispose();\n }, [config, props.api, props.connection, props.sessions, route.active]);\n\n const state = useSyncExternalStore(\n controller?.subscribe ?? noopSubscribe,\n controller?.getSnapshot ?? (() => INACTIVE_STATE),\n controller?.getSnapshot ?? (() => INACTIVE_STATE),\n );\n\n useEffect(() => {\n if (!route.active) return;\n const previousBodyOverflow = document.body.style.overflow;\n const previousHtmlOverflow = document.documentElement.style.overflow;\n document.body.dataset.dshQaSurface = \"active\";\n document.body.style.overflow = \"hidden\";\n document.documentElement.style.overflow = \"hidden\";\n const frame = requestAnimationFrame(() => {\n document.querySelector<HTMLTextAreaElement>(\"#dsh-qa-prompt\")?.focus();\n });\n return () => {\n cancelAnimationFrame(frame);\n delete document.body.dataset.dshQaSurface;\n document.body.style.overflow = previousBodyOverflow;\n document.documentElement.style.overflow = previousHtmlOverflow;\n };\n }, [route.active]);\n\n useLayoutEffect(() => {\n const element = transcript.current;\n if (element !== null && nearBottom.current) {\n element.scrollTop = element.scrollHeight;\n }\n }, [state.messages]);\n\n if (!route.active) return null;\n\n const status = statusText(state);\n const empty = state.messages.length === 0;\n return (\n <main\n className=\"dsh-qa-surface\"\n aria-label={config.branding.title}\n tabIndex={-1}\n onKeyDown={trapKeys}\n >\n {config.ui.showHeader ? (\n <header className=\"dsh-qa-header\">\n <div\n className=\"dsh-qa-header__inner\"\n style={{ maxWidth: config.ui.maxContentWidth }}\n >\n {config.branding.logoUrl === null ? null : (\n <img\n className=\"dsh-qa-header__logo\"\n src={config.branding.logoUrl}\n alt=\"\"\n />\n )}\n <div className=\"dsh-qa-header__text\">\n <h1>{config.branding.title}</h1>\n {config.branding.subtitle === \"\" ? null : (\n <p>{config.branding.subtitle}</p>\n )}\n </div>\n {config.ui.showReset && config.session.policy !== \"fixed\" ? (\n <button\n type=\"button\"\n className=\"dsh-qa-button dsh-qa-button--secondary\"\n disabled={\n controller === undefined || state.phase === \"creating\"\n }\n onClick={() => void controller?.reset()}\n >\n New chat\n </button>\n ) : null}\n </div>\n </header>\n ) : null}\n\n <div\n ref={transcript}\n className=\"dsh-qa-transcript\"\n onScroll={(event) => {\n const element = event.currentTarget;\n nearBottom.current =\n element.scrollHeight - element.scrollTop - element.clientHeight <\n 96;\n }}\n >\n <div\n className=\"dsh-qa-transcript__inner\"\n style={{ maxWidth: config.ui.maxContentWidth }}\n >\n {empty ? (\n <section\n className=\"dsh-qa-welcome\"\n aria-labelledby=\"dsh-qa-welcome-title\"\n >\n <h2 id=\"dsh-qa-welcome-title\">\n {config.branding.welcomeMessage}\n </h2>\n {config.suggestedQuestions.length > 0 ? (\n <div\n className=\"dsh-qa-suggestions\"\n aria-label=\"Suggested questions\"\n >\n {config.suggestedQuestions.map((question) => (\n <button\n type=\"button\"\n key={question}\n disabled={!state.canSend}\n onClick={() => void controller?.send(question)}\n >\n {question}\n </button>\n ))}\n </div>\n ) : null}\n </section>\n ) : (\n state.messages.map((message) => (\n <QaMessage\n key={message.id}\n message={message}\n renderMarkdown={config.ui.renderMarkdown}\n showTimestamp={config.ui.showTimestamps}\n />\n ))\n )}\n {state.error === null ? null : (\n <div className=\"dsh-qa-error\" role=\"alert\">\n <span>{state.error}</span>\n {state.phase === \"error\" ? (\n <button\n type=\"button\"\n onClick={() => void controller?.ensureSession()}\n >\n Retry\n </button>\n ) : null}\n </div>\n )}\n </div>\n </div>\n\n <footer className=\"dsh-qa-footer\">\n <div\n className=\"dsh-qa-footer__inner\"\n style={{ maxWidth: config.ui.maxContentWidth }}\n >\n <div className=\"dsh-qa-status\" aria-live=\"polite\" aria-atomic=\"true\">\n {status}\n </div>\n <QaComposer\n placeholder={config.branding.placeholder}\n canSend={state.canSend}\n canStop={state.canStop}\n running={state.phase === \"running\"}\n showStop={config.ui.showStop}\n onSend={(text) => controller?.send(text) ?? Promise.resolve(false)}\n onStop={() => controller?.stop() ?? Promise.resolve()}\n />\n </div>\n </footer>\n </main>\n );\n}\n","export const QA_SURFACE_STYLES = String.raw`\n.dsh-qa-surface{position:fixed;inset:0;z-index:2147483000;pointer-events:auto;display:flex;flex-direction:column;min-width:0;height:100vh;height:100dvh;overflow:hidden;background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font-family:inherit}\n.dsh-qa-surface *{box-sizing:border-box}\n.dsh-qa-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n.dsh-qa-header{flex:none;border-bottom:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2)}\n.dsh-qa-header__inner,.dsh-qa-footer__inner,.dsh-qa-transcript__inner{width:100%;margin:0 auto}\n.dsh-qa-header__inner{min-height:72px;display:flex;align-items:center;gap:12px;padding:12px 24px}\n.dsh-qa-header__logo{width:36px;height:36px;object-fit:contain;border-radius:9px;flex:none}\n.dsh-qa-header__text{flex:1;min-width:0}\n.dsh-qa-header h1{margin:0;color:var(--dsw-alias-label-primary);font-size:17px;font-weight:650;line-height:1.35}\n.dsh-qa-header p{margin:2px 0 0;color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.4}\n.dsh-qa-transcript{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable}\n.dsh-qa-transcript__inner{min-height:100%;padding:32px 24px 24px}\n.dsh-qa-welcome{min-height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:40px 0}\n.dsh-qa-welcome h2{max-width:620px;margin:0;color:var(--dsw-alias-label-primary);font-size:clamp(24px,4vw,34px);font-weight:600;line-height:1.25}\n.dsh-qa-suggestions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:24px}\n.dsh-qa-suggestions button{max-width:360px;padding:9px 13px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;line-height:1.35;cursor:pointer}\n.dsh-qa-suggestions button:hover:not(:disabled){border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}\n.dsh-qa-suggestions button:disabled{opacity:.5;cursor:default}\n.dsh-qa-message{display:flex;flex-direction:column;max-width:min(82%,720px);margin:0 0 24px}\n.dsh-qa-message--user{align-items:flex-end;margin-left:auto}\n.dsh-qa-message--assistant{align-items:flex-start;margin-right:auto}\n.dsh-qa-message--system{align-items:center;max-width:100%;margin-left:auto;margin-right:auto}\n.dsh-qa-message__meta{display:flex;gap:8px;margin:0 4px 6px;color:var(--dsw-alias-label-tertiary);font-size:11px;font-weight:600;line-height:1.3}\n.dsh-qa-message__content{max-width:100%;white-space:pre-wrap;overflow-wrap:anywhere;border:1px solid var(--dsw-alias-border-l2);border-radius:14px;padding:11px 14px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);font-size:15px;line-height:1.62}\n.dsh-qa-message--user .dsh-qa-message__content{background:var(--dsw-alias-bg-module-platform)}\n.dsh-qa-message--system .dsh-qa-message__content{padding:7px 11px;border-radius:9px;color:var(--dsw-alias-label-secondary);font-size:13px}\n.dsh-qa-message[data-status=\"error\"] .dsh-qa-message__content{border-color:var(--dsw-alias-status-error)}\n.dsh-qa-message__content p,.dsh-qa-message__content ul,.dsh-qa-message__content blockquote,.dsh-qa-message__content pre{margin:0 0 10px}\n.dsh-qa-message__content :last-child{margin-bottom:0}\n.dsh-qa-message__content h2,.dsh-qa-message__content h3,.dsh-qa-message__content h4{margin:14px 0 7px;line-height:1.35}\n.dsh-qa-message__content h2{font-size:18px}.dsh-qa-message__content h3{font-size:16px}.dsh-qa-message__content h4{font-size:15px}\n.dsh-qa-message__content ul{padding-left:22px}.dsh-qa-message__content a{color:var(--dsw-alias-brand-primary)}\n.dsh-qa-message__content code{border-radius:5px;padding:1px 4px;background:var(--dsw-alias-bg-layer-2);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.9em}\n.dsh-qa-message__content pre{overflow-x:auto;border-radius:9px;padding:12px;background:var(--dsw-alias-bg-layer-2)}\n.dsh-qa-message__content pre code{padding:0;background:transparent}\n.dsh-qa-message__content blockquote{border-left:3px solid var(--dsw-alias-border-l2);padding-left:12px;color:var(--dsw-alias-label-secondary)}\n.dsh-qa-message__cursor{display:inline-block;width:7px;height:1em;margin-left:3px;vertical-align:-2px;background:var(--dsw-alias-label-secondary);animation:dsh-qa-blink 1s steps(2,start) infinite}\n@keyframes dsh-qa-blink{50%{opacity:0}}\n.dsh-qa-error{display:flex;align-items:center;justify-content:center;gap:10px;margin:16px auto;padding:10px 12px;border:1px solid var(--dsw-alias-status-error);border-radius:10px;color:var(--dsw-alias-label-primary);font-size:13px}\n.dsh-qa-error button{border:0;background:transparent;color:var(--dsw-alias-brand-primary);font:inherit;font-weight:600;cursor:pointer}\n.dsh-qa-footer{flex:none;border-top:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);padding:0 24px max(14px,env(safe-area-inset-bottom))}\n.dsh-qa-footer__inner{position:relative;padding-top:14px}\n.dsh-qa-status{min-height:18px;margin-bottom:5px;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}\n.dsh-qa-composer{display:flex;align-items:flex-end;gap:10px;border:1px solid var(--dsw-alias-border-l2);border-radius:14px;padding:7px;background:var(--dsw-alias-bg-layer-3);transition:border-color .16s}\n.dsh-qa-composer:focus-within{border-color:var(--dsw-alias-brand-primary)}\n.dsh-qa-composer textarea{flex:1;min-width:0;max-height:160px;resize:none;overflow-y:auto;border:0;outline:0;background:transparent;color:var(--dsw-alias-label-primary);font:inherit;font-size:15px;line-height:22px;padding:7px 9px}\n.dsh-qa-composer textarea::placeholder{color:var(--dsw-alias-label-tertiary)}\n.dsh-qa-button{appearance:none;flex:none;border:1px solid transparent;border-radius:9px;padding:8px 13px;font:inherit;font-size:13px;font-weight:600;line-height:18px;cursor:pointer}\n.dsh-qa-button:focus-visible,.dsh-qa-suggestions button:focus-visible,.dsh-qa-error button:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}\n.dsh-qa-button:disabled{opacity:.45;cursor:default}\n.dsh-qa-button--send{background:var(--dsw-alias-brand-primary);color:var(--dsw-alias-label-on-primary)}\n.dsh-qa-button--stop,.dsh-qa-button--secondary{border-color:var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-secondary)}\n@media (max-width:600px){.dsh-qa-header__inner{min-height:60px;padding:9px 14px}.dsh-qa-header__logo{width:32px;height:32px}.dsh-qa-header p{display:none}.dsh-qa-transcript__inner{padding:22px 14px 16px}.dsh-qa-message{max-width:90%;margin-bottom:18px}.dsh-qa-message__content{font-size:14px;padding:10px 12px}.dsh-qa-footer{padding-left:10px;padding-right:10px}.dsh-qa-button{padding-left:11px;padding-right:11px}}\n@media (max-height:480px) and (orientation:landscape){.dsh-qa-header__inner{min-height:48px;padding-top:6px;padding-bottom:6px}.dsh-qa-header p{display:none}.dsh-qa-transcript__inner{padding-top:14px}.dsh-qa-footer__inner{padding-top:7px}.dsh-qa-status{position:absolute;right:0;top:-18px}}\n@media (prefers-reduced-motion:reduce){.dsh-qa-message__cursor{animation:none}}\n`;\n","import type { Context } from \"@deepseek-ai/cordis\";\nimport type { ConnectionHandle } from \"@deepseek-ai/dsh-client-connection/client\";\nimport type { ISessions } from \"@deepseek-ai/dsh-client-runtime/client\";\nimport type { SettingsScopeBinder } from \"@deepseek-ai/dsh-client-ui-settings/client\";\nimport type {} from \"@deepseek-ai/dsh-client-ui-layout/client\";\nimport type {} from \"@deepseek-ai/dsh-client-ui-settings/client\";\nimport { QaConfigController } from \"./QaConfigController.js\";\nimport { QaRouteController } from \"./QaRouteController.js\";\nimport { QaSurface } from \"./QaSurface.js\";\nimport { QA_SURFACE_STYLES } from \"./styles.js\";\nimport type { QaSurfaceConfig } from \"../types.js\";\n\nconst SETTINGS_NAMESPACE = \"qa-surface\";\n\ndeclare module \"@deepseek-ai/cordis\" {\n interface Context {\n connection: ConnectionHandle;\n sessions: ISessions;\n settingsScope: SettingsScopeBinder;\n }\n}\n\nexport const inject = [\"slots\", \"sessions\", \"connection\", \"settingsScope\"];\n\n/** Register the route-aware, full-frame QA entry in the additive overlay slot. */\nexport function apply(ctx: Context): void {\n const route = new QaRouteController();\n const config = new QaConfigController(\n ctx.settingsScope.bind<QaSurfaceConfig>({ namespace: SETTINGS_NAMESPACE }),\n );\n const syncRoute = () => {\n const snapshot = config.getSnapshot();\n route.configure(\n snapshot.config,\n snapshot.status === \"ready\" || snapshot.status === \"unavailable\",\n );\n };\n syncRoute();\n const unsubscribeConfig = config.subscribe(syncRoute);\n\n ctx.effect(() => {\n const style = document.createElement(\"style\");\n style.dataset.dshQaSurface = \"styles\";\n style.textContent = QA_SURFACE_STYLES;\n document.head.append(style);\n return () => style.remove();\n }, \"dsh-qa-surface: styles\");\n\n ctx.effect(\n () => () => {\n unsubscribeConfig();\n config.dispose();\n route.dispose();\n },\n \"dsh-qa-surface: controllers\",\n );\n\n ctx.slots.inject(\"shell.overlay\", () =>\n ctx.slots.register(\n {\n name: \"shell.overlay\",\n id: \"dsh-qa-surface\",\n order: -10_000,\n inject: () => ({\n route,\n config,\n sessions: ctx.sessions,\n api: ctx.connection.api.sessions,\n connection: ctx.connection.hostDescription,\n }),\n },\n QaSurface,\n ),\n );\n}\n\nexport { QaConfigController } from \"./QaConfigController.js\";\nexport { QaRouteController, matchesQaRoute } from \"./QaRouteController.js\";\nexport { QaSessionController } from \"./QaSessionController.js\";\nexport { projectTranscript } from \"./QaTranscriptAdapter.js\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","names":["F","_a","_zodDesc","util.jsonStringifyReplacer","initializer","core.$ZodAsyncError","util.finalizeIssue","core.config","errors.$ZodError","safeParse","errors.$ZodRealError","safeParseAsync","_emoji","string","number","boolean","util.nullish","util.floatSafeRemainder","util.NUMBER_FORMAT_RANGES","regexes.integer","util.codePointLength","util.getLengthableOrigin","regexes.lowercase","regexes.uppercase","util.escapeRegex","content","util.aborted","util.explicitlyAborted","core.$ZodAsyncError","util.hide","safeParse","safeParseAsync","regexes.string","regexes.guid","regexes.uuid","regexes.email","regexes.emoji","regexes.nanoid","regexes.nanoidOfLength","regexes.cuid","regexes.cuid2","regexes.ulid","regexes.xid","regexes.ksuid","regexes.datetime","regexes.date","regexes.time","regexes.duration","regexes.ipv4","regexes.ipv6","regexes.cidrv4","regexes.cidrv6","regexes.base64","regexes.base64url","regexes.e164","regexes.number","regexes.boolean","util.prefixIssues","util.optionalKeys","util.cached","isObject","util.isObject","util.esc","allowsEval","util.allowsEval","util.finalizeIssue","core.config","util.cleanRegex","util.isPlainObject","util.getEnumValues","util.escapeRegex","core.$ZodEncodeError","util.issue","memo","util.parsedType","util.stringifyPrimitive","util.joinValues","util.normalizeParams","checks.$ZodCheckLessThan","checks.$ZodCheckGreaterThan","checks.$ZodCheckMultipleOf","checks.$ZodCheckMaxLength","checks.$ZodCheckMinLength","checks.$ZodCheckLengthEquals","checks.$ZodCheckRegex","checks.$ZodCheckLowerCase","checks.$ZodCheckUpperCase","checks.$ZodCheckIncludes","checks.$ZodCheckStartsWith","checks.$ZodCheckEndsWith","checks.$ZodCheckOverwrite","util.slugify","issue","util.issue","checks.$ZodCheck","core.formatError","core.flattenError","util.jsonStringifyReplacer","en","core.memoizer","util.mergeDefs","core.clone","checks.overwrite","util.hide","core.standardProps","parse.parse","parse.parseAsync","parse.safeParse","parse.safeParseAsync","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","processors.stringProcessor","checks.regex","checks.includes","checks.startsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","checks.lowercase","checks.uppercase","checks.trim","checks.normalize","checks.toLowerCase","checks.toUpperCase","checks.slugify","core._email","core._url","core._jwt","core._emoji","core._guid","core._uuid","core._uuidv4","core._uuidv6","core._uuidv7","core._nanoid","core._cuid","core._cuid2","core._ulid","core._base64","core._base64url","core._xid","core._ksuid","core._ipv4","core._ipv6","core._cidrv4","core._cidrv6","core._e164","core._isoDateTime","core._isoDate","core._isoTime","core._isoDuration","core._string","processors.numberProcessor","checks.gt","checks.gte","checks.lt","checks.lte","checks.multipleOf","core._number","core._int","processors.booleanProcessor","core._boolean","processors.unknownProcessor","core._unknown","processors.neverProcessor","core._never","processors.arrayProcessor","core._array","processors.objectProcessor","util.extend","util.safeExtend","util.merge","util.pick","util.omit","util.partial","util.required","util.normalizeParams","processors.unionProcessor","processors.intersectionProcessor","processors.recordProcessor","record","processors.enumProcessor","processors.literalProcessor","processors.transformProcessor","core.$ZodEncodeError","issue","util.issue","processors.optionalProcessor","processors.nullableProcessor","processors.defaultProcessor","util.shallowClone","processors.prefaultProcessor","processors.nonoptionalProcessor","processors.catchProcessor","core.util.constantCatch","processors.pipeProcessor","processors.readonlyProcessor","processors.lazyProcessor","processors.customProcessor","core._refine","core._superRefine","z.union","z.literal","z.string","z.number","z.array","z.lazy","z.record","z.object","z.boolean","record","basename","bytesToBase64","useState","memo","useState","useRef","useRef","useState","useMemo","memo","Fragment","memo","useState","useRef","useState","memo","useRef","useRef","memo","useState","useRef","useState","useId","useCallback","memo","useState","useRef","useCallback","focusable","useState","useRef","useCallback","createPortal","useMemo","useState","useRef","useCallback","useSyncExternalStore","useState","useRef","useMemo","useCallback","qaSurfaceRemote"],"sources":["../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/core/util.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/core/core.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/core/errors.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/core/parse.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/core/regexes.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/core/checks.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/core/doc.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/core/versions.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/core/schemas.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/core/memoizer.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/locales/en.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/core/registries.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/core/api.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/core/to-json-schema.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/core/json-schema-processors.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/classic/errors.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/classic/parse.js","../../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/classic/schemas.js","typert.remote-client.js","../src/resolve-config.ts","../src/client/QaConfigController.ts","../src/navigation-marker.ts","../src/client/QaRouteController.ts","../src/client/QaAccountsController.ts","../src/client/chat-index.ts","../src/client/attestation.ts","../src/client/session-assets.ts","../src/client/create-session.ts","../src/client/session-admission.ts","../src/client/session-sources.ts","../src/client/types.ts","../src/client/wait-for.ts","../src/provenance/normalize.ts","../src/provenance/dedupe.ts","../src/provenance/collector.ts","../src/provenance/connectors.ts","../src/provenance/extractors.ts","../src/client/turn-sources.ts","../src/client/settlement.ts","../src/client/tool-presentation.ts","../src/client/QaTranscriptAdapter.ts","../src/client/project-session-state.ts","../src/client/QaSessionController.ts","../src/client/components/QaAuthGate.tsx","../src/client/components/QaComposer.tsx","../src/client/components/format.ts","../src/client/components/QaSourcesDrawer.tsx","../src/client/components/source-refs.ts","../src/client/components/Markdown.tsx","../src/client/components/QaWorkGroup.tsx","../src/client/components/QaMessage.tsx","../src/client/components/QaChangelog.tsx","../src/client/components/QaSidebar.tsx","../src/client/components/QaAgentsDrawer.tsx","../src/client/components/QaTurnRail.tsx","../src/client/components/QaWidthHandle.tsx","../src/client/components/VariantSwitcher.tsx","../src/client/components/QaWelcomeNotice.tsx","../src/client/use-transcript-view.ts","../src/client/use-session-ui-state.ts","../src/client/QaSurface.tsx","../src/client/styles.ts","../src/client/index.tsx"],"sourcesContent":["import { globalConfig } from \"./core.js\";\n// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function toZod() {\n return (schema) => schema;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const ratio = val / step;\n const roundedRatio = Math.round(ratio);\n // `val` and `step` each round to a double before the division rounds again, so a true decimal multiple's quotient can sit up to 1.5 of these scaled epsilons from the integer. A 1x tolerance therefore rejected 2.03 as a multiple of 0.07; 4x covers the worst case with margin.\n const tolerance = 4 * Number.EPSILON * Math.max(Math.abs(ratio), 1);\n if (Math.abs(ratio - roundedRatio) < tolerance)\n return 0;\n return ratio - roundedRatio;\n}\nconst EVALUATING = /* @__PURE__*/ Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = /* @__PURE__*/ cached(() => {\n // Skip the probe under `jitless`: strict CSPs report the caught `new Function` as a `securitypolicyviolation` even though the throw is swallowed.\n if (globalConfig.jitless) {\n return false;\n }\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n if (o instanceof Map)\n return new Map(o);\n if (o instanceof Set)\n return new Set(o);\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = /* @__PURE__*/ new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = /* @__PURE__*/ new Set([\n \"string\",\n \"number\",\n \"bigint\",\n \"boolean\",\n \"symbol\",\n \"undefined\",\n]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin !== undefined && shape[k]._zod.optout === \"optional\";\n });\n}\n// Wrapped in a `@__PURE__` IIFE: esbuild never tree-shakes a top-level initializer that contains a member access on `Number`, so the bare object literal survived into every bundle.\nexport const NUMBER_FORMAT_RANGES = /*@__PURE__*/ (() => ({\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n}))();\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n // `for...in` skips symbols, so a symbol in the mask would select nothing\n for (const key of Reflect.ownKeys(mask)) {\n if (!Object.prototype.hasOwnProperty.call(currDef.shape, key)) {\n throw new Error(`Unrecognized key: \"${String(key)}\"`);\n }\n if (!mask[key])\n continue;\n assignProp(newShape, key, currDef.shape[key]);\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key of Reflect.ownKeys(mask)) {\n if (!Object.prototype.hasOwnProperty.call(currDef.shape, key)) {\n throw new Error(`Unrecognized key: \"${String(key)}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape. Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key of Reflect.ownKeys(shape)) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n if (!b?._zod?.def) {\n throw new Error(\"Invalid input to merge: expected an object schema. To merge a plain shape, use `.extend()`.\");\n }\n if (a._zod.def.checks?.length) {\n throw new Error(\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\");\n }\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: b._zod.def.checks ?? [],\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask, name = \"partial\") {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(`.${name}() cannot be used on object schemas containing refinements`);\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key of Reflect.ownKeys(mask)) {\n if (!Object.prototype.hasOwnProperty.call(oldShape, key)) {\n throw new Error(`Unrecognized key: \"${String(key)}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n // the spread copies symbol keys; `for...in` would not reach them\n for (const key of Reflect.ownKeys(oldShape)) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key of Reflect.ownKeys(mask)) {\n if (!Object.prototype.hasOwnProperty.call(shape, key)) {\n throw new Error(`Unrecognized key: \"${String(key)}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key of Reflect.ownKeys(oldShape)) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\n// Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined). Used to respect `abort: true` in .refine() even for checks that have a `when` function.\nexport function explicitlyAborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue === false) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\n/* A check holds no link back to the schema it is attached to — the same check instance is shared by every clone of that schema — so the owner is stamped onto the issues a check just raised, at the only point where both are in scope. Runs on the failure path only; `start` is the issue count from before the check ran. */\nexport function attachSchema(issues, start, inst) {\n var _a;\n for (let i = start; i < issues.length; i++) {\n (_a = issues[i]).schema ?? (_a.schema = inst);\n }\n}\nexport function finalizeIssue(iss, ctx, config) {\n var _a;\n // A schema that raised an issue itself owns it outright, and outranks any stamp an enclosing check left in `attachSchema`. String formats and z.custom() are schema and check at once, so when they act as a check they defer to that stamp instead.\n const traits = iss.inst?._zod?.traits;\n if (traits?.has(\"$ZodType\")) {\n if (traits.has(\"$ZodCheck\"))\n (_a = iss).schema ?? (_a.schema = iss.inst);\n else\n iss.schema = iss.inst;\n }\n // Decreasing specificity, first map to return a message wins. `inst` is whatever raised the issue, so a check's own map outranks the owning schema's.\n const schemaError = iss.schema !== iss.inst ? iss.schema?._zod.def?.error : undefined;\n const message = iss.message\n ? iss.message\n : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(schemaError?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\");\n const { inst: _inst, schema: _schema, continue: _continue, input: _input, ...rest } = iss;\n rest.path ?? (rest.path = []);\n rest.message = message;\n if (ctx?.reportInput) {\n rest.input = _input;\n }\n return rest;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nconst highSurrogate = /[\\uD800-\\uDBFF]/;\n// Code points in `str`: a surrogate pair counts once, a lone surrogate as itself. Hand-rolled because the string iterator allocates and runs ~250x slower on this path; the regex probe exits ~50x quicker for a string with no astral characters.\nexport function codePointLength(str) {\n const units = str.length;\n if (!highSurrogate.test(str))\n return units;\n let count = units;\n for (let i = 0; i < units - 1; i++) {\n if ((str.charCodeAt(i) & 0xfc00) === 0xd800 && (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\n count--;\n i++;\n }\n }\n return count;\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n////////// PROTOTYPE INSTALLERS //////////\n//\n// Members live on the prototype and materialize per instance on first read, which keeps own-property count under the step where V8 stops using inline slots. Changing anything here means re-measuring runtime, memory and bundle size together — see \"The three axes\" in AGENTS.md.\n/**\n * Installs a trait's members on its prototype. Each value builds that member for the instance on first read; the built value shadows the accessor as an own property, so a detached `const { parse } = schema` keeps working.\n *\n * Call this from a `proto` initializer, which runs once per prototype — never per instance.\n */\nexport function members(proto, table) {\n for (const key in table) {\n const desc = Object.getOwnPropertyDescriptor(table, key);\n // a getter installs as written, so it stays live: `description` reads through to the registry on every access. not enumerable: an object literal's is, and a prototype member never was\n if (desc.get)\n Object.defineProperty(proto, key, { ...desc, enumerable: false });\n // a method materializes bound on first read, which is what keeps a detached member working: `const opt = schema.optional; opt()`\n else\n defineBound(proto, key, desc.value);\n }\n}\n/** Shadows a prototype member with an own value, so a getter that builds from the instance runs once. */\nexport function own(inst, key, value, enumerable = true) {\n Object.defineProperty(inst, key, { configurable: true, writable: true, enumerable, value });\n return value;\n}\n/** Like {@link own}, for a member that was never an own data property and has to stay out of `Object.keys`. */\nexport function hide(inst, key, value) {\n return own(inst, key, value, false);\n}\nfunction defineBound(proto, key, fn) {\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n // vitest's spyOn calls a prototype getter bare to find the function it wraps, so a nullish receiver answers the raw method\n return this == null ? fn : own(this, key, fn.bind(this));\n },\n set(value) {\n own(this, key, value);\n },\n });\n}\n/** Returns the prototype to install on, or `undefined` if this group is already installed on it. */\nfunction claim(inst, sentinel) {\n const proto = Object.getPrototypeOf(inst);\n // Runs on every construction, so `in` rather than the costlier `hasOwnProperty.call`. Sentinels are keys the group itself defines.\n return sentinel in proto ? undefined : proto;\n}\n// The internals whose init chain is installing. A second call for the same one is a derived constructor overriding its base, so it must not construct another schema in between or the override is dropped.\nlet installing;\n// Set while a getter is running, so a value that resolved through a recursion break is not memoized. One shared descriptor shadows the key for the duration, which costs no per-key allocation.\nlet broke = false;\nconst breaker = {\n configurable: true,\n get() {\n broke = true;\n return undefined;\n },\n};\n/**\n * Installs a lazily-derived internal on the `_zod` prototype of `inst`'s\n * constructor, computed from the internals object itself and cached there on\n * first read. One accessor per constructor rather than one per instance.\n */\nexport function defineLazyInternal(inst, key, compute) {\n const proto = Object.getPrototypeOf(inst._zod);\n if (key in proto && installing !== inst._zod) {\n // A repeat construction: everything is installed already. Cleared here so the reference is not held past the first construction of every type.\n installing = undefined;\n return;\n }\n installing = inst._zod;\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n // Shadowed before computing so a re-entrant read from a recursive schema resolves to undefined instead of running the getter again.\n Object.defineProperty(this, key, breaker);\n const outer = broke;\n broke = false;\n try {\n const value = compute(this);\n // A result that resolved through a recursion break is recomputed once the graph is complete; everything else memoizes, undefined included.\n if (broke)\n delete this[key];\n else\n Object.defineProperty(this, key, { configurable: true, writable: true, value });\n broke = broke || outer;\n return value;\n }\n catch (err) {\n // A compute that threw memoizes nothing, so a later read runs it again and fails the same way. The shadow goes with it, since leaving it installed would answer undefined for every later read.\n delete this[key];\n broke = broke || outer;\n throw err;\n }\n },\n set(value) {\n Object.defineProperty(this, key, { configurable: true, writable: true, value });\n },\n });\n}\n/**\n * Installs `key` on `inst`'s prototype, computed by `make` on first read and cached there as an own\n * data property. One accessor per constructor rather than one per instance, because an own accessor\n * puts every instance after the first into v8 dictionary mode. The key doubles as the sentinel.\n */\nexport function installLazyProp(inst, key, make, enumerable) {\n const proto = claim(inst, key);\n if (!proto)\n return;\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n // Shadowed before computing, so a re-entrant read from a self-referential shape resolves to undefined instead of running the getter again. A data property rather than an accessor: an own accessor is the dictionary-mode transition this exists to avoid.\n const desc = { configurable: true, writable: true, enumerable, value: undefined };\n Object.defineProperty(this, key, desc);\n // a compute that throws leaves the shadow behind, so later reads answer undefined instead of re-throwing; `defineLazy` did the same, and `defineLazyInternal`'s delete-on-catch would cost bytes in every bundle for a case only a throwing user getter reaches\n desc.value = make(this);\n Object.defineProperty(this, key, desc);\n return desc.value;\n },\n set(value) {\n Object.defineProperty(this, key, { configurable: true, writable: true, enumerable, value });\n },\n });\n}\n/** Marks the thunk `_catch` synthesises for a constant catch value. `Function.length` cannot tell that thunk from a user callback — rest and defaulted parameters both report arity 0 — and a user callback reads `ctx.error`, whose issues only finalize correctly against the caller's per-parse error map. Provenance can say what arity cannot. A plain string key rather than `Symbol.for`, whose call at module scope no bundler can prove pure — the same shape that anchored `urlCanParse` into every build. */\nexport const CONSTANT_CATCH = \"~constantCatch\";\n/** Wraps a constant catch value in a thunk tagged with {@link CONSTANT_CATCH}. */\nexport function constantCatch(value) {\n const fn = () => value;\n fn[CONSTANT_CATCH] = true;\n return fn;\n}\n","var _a;\nimport { members as installMembers } from \"./util.js\";\n/** A special constant with type `never` */\nexport const NEVER = /*@__PURE__*/ Object.freeze({\n status: \"aborted\",\n});\n/* Shared descriptor for installing `_zod`; defineProperty reads it\n * synchronously, so reusing one object avoids a per-instance allocation. */\nconst _zodDesc = { value: undefined, enumerable: false };\n// null where suppressing the capture would be unrecoverable: `parse()` puts the frames back with `captureStackTrace`, so without it the throw would lose its stack. also latched to null once `stackTraceLimit` proves unassignable, which a realm can do at any point by hardening Error\nlet _E = \"captureStackTrace\" in Error ? Error : null;\n// v8 captures a stack trace inside the Error constructor, which dominates a failed parse; costs only the frames, and parse() restores those. the constructor must RUN: Object.create is cheaper and passes instanceof, but Error.isError and util.types.isNativeError check an internal slot\nfunction newError(Definition) {\n const E = _E;\n if (E) {\n const saved = E.stackTraceLimit;\n if (typeof saved === \"number\") {\n try {\n E.stackTraceLimit = 0;\n }\n catch {\n _E = null;\n return new Definition();\n }\n try {\n return new Definition();\n }\n finally {\n E.stackTraceLimit = saved;\n }\n }\n }\n return new Definition();\n}\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, \n/** This trait's members, installed once on every prototype that composes it. They cannot be declared in the initializer above: that runs per instance, and the prototype is shared. */\nproto, params) {\n // Prototype for this constructor's `_zod` internals. Lazily-derived fields (`values`, `pattern`, `optin`, …) install here once rather than as an accessor on every instance.\n const zodProto = {};\n // Assigning the fields in the constructor body is what gives instances in-object slots; building the object literally and reparenting it costs a second allocation and a generic property copy.\n function Internals(def) {\n this.def = def;\n this.constr = _;\n this.traits = new Set();\n }\n Internals.prototype = zodProto;\n const protoMembers = proto;\n // One trait's members land on every prototype whose chain composes it, so the answer is per prototype rather than per trait.\n const initialized = protoMembers && new WeakSet();\n function init(inst, def) {\n if (!inst._zod) {\n _zodDesc.value = new Internals(def);\n try {\n Object.defineProperty(inst, \"_zod\", _zodDesc);\n }\n finally {\n // Cleared even on throw, so the shared descriptor never leaks one instance's internals into the next.\n _zodDesc.value = undefined;\n }\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n if (initialized) {\n // `super(def)` from a user subclass gives `this` a prototype the subclass owns, and installing there would overwrite whatever the subclass declared. `constr` built the instance, so its prototype is the one below the subclass's that should carry the members. A receiver whose chain never reaches that prototype installs on its own, which for a plain object handed straight to `init` means `Object.prototype` — unchanged from before.\n const own = Object.getPrototypeOf(inst);\n const ctorProto = inst._zod.constr.prototype;\n let up = own;\n while (up && up !== ctorProto)\n up = Object.getPrototypeOf(up);\n const target = up ?? own;\n if (!initialized.has(target)) {\n initialized.add(target);\n installMembers(target, protoMembers);\n }\n }\n // support prototype modifications; for-in avoids the array allocation of Object.keys on the (usually empty) prototype\n const proto = _.prototype;\n for (const k in proto) {\n if (!Object.prototype.hasOwnProperty.call(proto, k))\n continue;\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n const inst = params?.Parent ? newError(Definition) : this;\n init(inst, def);\n const deferred = inst._zod.deferred;\n if (deferred) {\n for (const fn of deferred) {\n fn();\n }\n // Released: initializers run once, and the list would otherwise be retained for the schema's lifetime.\n inst._zod.deferred = undefined;\n }\n // Global post-processor hook. Internal: installed by `import \"zod/compile\"` to enable AOT compilation for every constructed schema. Runs last, once the instance is fully built, because it hands the instance to compile(). The post-processor is expected to be reentrancy-guarded by its own implementation.\n const pp = globalThis.__zod_globalConfig?.postProcessor;\n if (pp)\n pp(inst);\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = /*@__PURE__*/ Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\n(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {});\nexport const globalConfig = globalThis.__zod_globalConfig;\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\n/* Computing the message eagerly is expensive (pretty-printed JSON of all\n * issues), so defer it until first read. The accessor functions and\n * descriptors are shared across instances to keep error construction\n * cheap; the computed message is cached on the internals object. The\n * setter preserves plain assignment semantics for consumers that\n * overwrite `message`. */\nfunction _getMessage() {\n const internals = this._zod;\n internals.message ?? (internals.message = JSON.stringify(internals.def, util.jsonStringifyReplacer, 2));\n return internals.message;\n}\nfunction _setMessage(value) {\n this._zod.message = value;\n}\nconst _messageDesc = {\n get: _getMessage,\n set: _setMessage,\n enumerable: true,\n configurable: true,\n};\nconst _zodDesc = { value: undefined, enumerable: false };\nconst _issuesDesc = { value: undefined, enumerable: false };\n/* Prototypes that already carry the lazy `toString`. Seeded with the\n * intrinsics so that `init` on a foreign object — it accepts any object —\n * can never install an accessor onto a prototype we do not own. */\nconst _installedToString = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]);\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n _zodDesc.value = inst._zod;\n Object.defineProperty(inst, \"_zod\", _zodDesc);\n _issuesDesc.value = def;\n Object.defineProperty(inst, \"issues\", _issuesDesc);\n // Clear the shared slots; a retained `value` pins the last error's issues.\n _zodDesc.value = undefined;\n _issuesDesc.value = undefined;\n Object.defineProperty(inst, \"message\", _messageDesc);\n /* `toString` lives as a non-enumerable lazy getter on the shared\n * prototype; on first access it caches a per-instance closure so\n * detached usage still works. */\n const proto = Object.getPrototypeOf(inst);\n if (!_installedToString.has(proto)) {\n _installedToString.add(proto);\n Object.defineProperty(proto, \"toString\", {\n configurable: true,\n enumerable: false,\n get() {\n const value = () => this.message;\n Object.defineProperty(this, \"toString\", { value, configurable: true, writable: true });\n return value;\n },\n set(value) {\n Object.defineProperty(this, \"toString\", { value, configurable: true, writable: true });\n },\n });\n }\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, undefined, {\n Parent: Error,\n});\n/** Get-or-create `obj[key]` as an own data property. A path segment naming an inherited member\n * (\"toString\", \"constructor\") would otherwise read through to the prototype, and assigning\n * \"__proto__\" would hit the setter instead of creating a key. */\nfunction node(obj, key, make) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n if (key === \"__proto__\") {\n Object.defineProperty(obj, key, { value: make(), writable: true, enumerable: true, configurable: true });\n }\n else {\n obj[key] = make();\n }\n }\n return obj[key];\n}\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n node(fieldErrors, sub.path[0], () => []).push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error, path = []) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n // `_errors` is reserved by this legacy format, so merge a matching path segment into the current node instead of treating its array as a child.\n if (el === \"_errors\") {\n if (terminal)\n curr._errors.push(mapper(issue));\n i++;\n continue;\n }\n // A path element may collide with an inherited property name such as\n // \"__proto__\" or \"constructor\". Truthiness checks read the prototype\n // (so no node is created, then ._errors.push throws), and bracket\n // assignment of \"__proto__\" hits the setter instead of creating an\n // own key. Guard the read with hasOwnProperty and create the node\n // with defineProperty so any path element becomes a real own key.\n if (!Object.prototype.hasOwnProperty.call(curr, el)) {\n Object.defineProperty(curr, el, {\n value: { _errors: [] },\n enumerable: true,\n writable: true,\n configurable: true,\n });\n }\n const node = curr[el];\n if (terminal) {\n node._errors.push(mapper(issue));\n }\n curr = node;\n i++;\n }\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n // el may collide with an inherited property name (\"__proto__\",\n // \"constructor\", ...); ??= reads the prototype so the node is never\n // created and curr.errors.push throws. Guard with hasOwnProperty and\n // create the node with defineProperty so \"__proto__\" becomes a real\n // own key rather than invoking the prototype setter.\n if (!Object.prototype.hasOwnProperty.call(curr.properties, el)) {\n Object.defineProperty(curr.properties, el, {\n value: { errors: [] },\n enumerable: true,\n writable: true,\n configurable: true,\n });\n }\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_a = curr.items)[el] ?? (_a[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\n// Always both keys, so the `_params` read site in `_parse` sees one object shape rather than two.\nfunction finalizeParams(callee, params) {\n return { callee: params?.callee ?? callee, Err: params?.Err };\n}\nexport const _parse = (_Err) => {\n const fn = (schema, value, _ctx, _params) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee ?? fn);\n throw e;\n }\n return result.value;\n };\n return fn;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => {\n const fn = async (schema, value, _ctx, params) => {\n const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee ?? fn);\n throw e;\n }\n return result.value;\n };\n return fn;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\n// registry mirrors of the compiler's sentinels, so this module never imports the compiler\nconst COMPILE_INVALID = /* @__PURE__ */ Symbol.for(\"zod.compile.invalid\");\nconst COMPILE_FALLBACK = /* @__PURE__ */ Symbol.for(\"zod.compile.fallback\");\n// Deliberately tiny, because v8 will not inline a body carrying the fallback's object literals and throw. Everything that is not the compiled happy path lives in validateFallback, and that split is worth ~35% on a compiled schema.\nexport const validate = ((schema, value, _ctx) => {\n const validator = schema._zod.bag.validator;\n if (validator !== undefined && validator(value) !== COMPILE_INVALID)\n return true;\n return validateFallback(schema, value, _ctx);\n});\nfunction validateFallback(schema, value, _ctx) {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const fallbackRun = schema._zod.bag.fallbackRun;\n let result;\n if (fallbackRun) {\n // skip nested fast paths on the fallback, so user callbacks keep the at-most-twice bound\n ctx[COMPILE_FALLBACK] = true;\n result = fallbackRun({ value, issues: [] }, ctx);\n }\n else {\n result = schema._zod.run({ value, issues: [] }, ctx);\n }\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length === 0;\n}\n// no fast path: the compiler keeps async parses on the runtime, because a promise-returning callback that is not declared async compiles to a throw\nexport const validateAsync = async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length === 0;\n};\nexport const _encode = (_Err) => {\n const parse = _parse(_Err);\n const fn = (schema, value, _ctx, _params) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return parse(schema, value, ctx, finalizeParams(fn, _params));\n };\n return fn;\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => {\n const parse = _parse(_Err);\n const fn = (schema, value, _ctx, _params) => {\n return parse(schema, value, _ctx, finalizeParams(fn, _params));\n };\n return fn;\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => {\n const parseAsync = _parseAsync(_Err);\n const fn = async (schema, value, _ctx, _params) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return (await parseAsync(schema, value, ctx, finalizeParams(fn, _params)));\n };\n return fn;\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => {\n const parseAsync = _parseAsync(_Err);\n const fn = async (schema, value, _ctx, _params) => {\n return await parseAsync(schema, value, _ctx, finalizeParams(fn, _params));\n };\n return fn;\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const cuid = /^[cC][0-9a-z]{6,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\nexport function nanoidOfLength(length) {\n return new RegExp(`^[a-zA-Z0-9_-]{${length}}$`);\n}\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\n// Single character class, not an alternation: the two properties overlap (U+1F9B0-U+1F9B3), so `(A|B)+` backtracks exponentially on a failed match.\nconst _emoji = `^[\\\\p{Extended_Pictographic}\\\\p{Emoji_Component}]+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^(?=.{1,253}$)([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,63}$/;\nexport const httpProtocol = /^https?$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces) E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// Credit card shape: 12–19 digits, optionally separated by single spaces or single hyphens. ISO/IEC 7812 caps the PAN at 19 digits; 12 is the shortest issued length (Maestro).\nexport const creditCard = /^\\d(?:[ -]?\\d){11,18}$/;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\n/** Anchors a pattern source. The interpolation lives here rather than at the call site because\n * esbuild will not drop a `@__PURE__` call whose own argument interpolates a variable, but it\n * will drop `anchor(dateSource)`. Keeping it inline pinned `date` into every bundle. */\nfunction anchor(source) {\n return new RegExp(`^${source}$`);\n}\nexport const date = /*@__PURE__*/ anchor(dateSource);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : args.seconds\n ? `${hhmm}:[0-5]\\\\d(?:\\\\.\\\\d+)?`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const opts = [\"Z\"];\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n // RFC 3339 mandates seconds wherever the time carries a `Z` or an offset, so only the unqualified form `local` adds may omit them\n const qualified = `${timeSource({ precision: args.precision, seconds: true })}(?:${opts.join(\"|\")})`;\n const timeRegex = args.local ? `${qualified}|${timeSource({ precision: args.precision })}` : qualified;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\n/** Default `when` for size-based checks: run only on non-nullish values with a `size`. */\nconst _whenHasSize = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n};\n/** Default `when` for length-based checks: run only on non-nullish values with a `length`. */\nconst _whenHasLength = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n};\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin: numericOriginMap[typeof payload.value] ?? origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin: numericOriginMap[typeof payload.value] ?? origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? // `value % 0n` throws, and nothing is a multiple of zero — the number branch already fails this way via NaN\n def.value !== BigInt(0) && payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const units = input.length;\n // Strings are measured in Unicode code points, not UTF-16 units. A code point is at most two units, so a string that already fits in units fits in code points; only an overflow has to be counted.\n const length = typeof input === \"string\" && units > def.maximum ? util.codePointLength(input) : units;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const units = input.length;\n // A code point is one or two UTF-16 units, so fewer units than the floor can never reach it and twice the floor always clears it. Only in between is the exact count in doubt.\n const length = typeof input === \"string\" && units >= def.minimum && units < def.minimum * 2\n ? util.codePointLength(input)\n : units;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const units = input.length;\n // A code point is one or two UTF-16 units, so outside `[length, length * 2]` units the target is missed either way — and missed in the same direction in both measures.\n const length = typeof input === \"string\" && units >= def.length && units <= def.length * 2\n ? util.codePointLength(input)\n : units;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n // `String.prototype.includes(sub, position)` matches `sub` at `position`\n // OR LATER, so the pattern must allow at least `position` leading chars\n // (`{N,}`), not exactly `position` chars (`{N}`).\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position},}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n","export class Doc {\n constructor(args = [], closed = {}) {\n this.content = [];\n this.indent = 0;\n this.args = args;\n this.closed = closed;\n }\n indented(fn) {\n this.indent += 1;\n fn(this);\n this.indent -= 1;\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const content = this?.content ?? [``];\n const factory = new F(...Object.keys(this.closed), `return function (${this.args.join(\", \")}) {\\n${content.join(\"\\n\")}\\n};`);\n return factory(...Object.values(this.closed));\n }\n}\n","export const version = {\n major: 4,\n minor: 5,\n patch: 2,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const defChecks = inst._zod.def.checks;\n // if inst is itself a checks.$ZodCheck, run it as a check\n const checks = inst._zod.traits.has(\"$ZodCheck\")\n ? [inst, ...(defChecks ?? [])]\n : defChecks?.length\n ? [...defChecks]\n : [];\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n if (payload.memo)\n return payload;\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n if (util.explicitlyAborted(payload))\n continue;\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n util.attachSchema(payload.issues, currLen, inst);\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n util.attachSchema(payload.issues, currLen, inst);\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n}, {\n // Wrappers extend this by installing a richer factory over it; reading it eagerly would defeat the laziness.\n get \"~standard\"() {\n return util.hide(this, \"~standard\", standardProps(this));\n },\n set \"~standard\"(value) {\n util.own(this, \"~standard\", value);\n },\n});\n/** The Standard Schema surface for `inst`. Shared so wrappers can extend it without forcing it. */\nconst toStandardResult = (r) => r.success ? { value: r.data } : { issues: r.error?.issues };\nexport function standardProps(inst) {\n return {\n validate: (value) => {\n try {\n return toStandardResult(safeParse(inst, value));\n }\n catch (_) {\n return safeParseAsync(inst, value).then(toStandardResult);\n }\n },\n vendor: \"zod\",\n version: 1,\n };\n}\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\n/** The `://` guard rejected the input before the URL constructor saw it. */\nexport const URL_BAD_FORMAT = 1;\n/** The URL constructor rejected the input. */\nexport const URL_UNPARSEABLE = 2;\n/** Parses a URL for `$ZodURL`, applying the one guard the URL constructor cannot express. Returns the parsed URL, or a code naming the stage that rejected it — the runtime needs that distinction to pick an issue note, and compiled code only needs to know it is not a URL. */\nexport function parseURLObject(trimmed, def) {\n // When normalize is off, require :// for http/https URLs. This prevents strings like \"http:example.com\" or \"https:/path\" from being silently accepted\n if (!def.normalize && def.protocol?.source === regexes.httpProtocol.source && !/^https?:\\/\\//i.test(trimmed)) {\n return URL_BAD_FORMAT;\n }\n try {\n // @ts-ignore\n return new URL(trimmed);\n }\n catch {\n return URL_UNPARSEABLE;\n }\n}\nconst asciiTabOrNewline = /[\\t\\n\\r]/g;\n/** The URL parser deletes every ASCII tab, LF and CR from its input before it parses, so `new URL(\"https://exa\\nmple.com\")` reports on `example.com`. Applying the same deletion to the returned value closes the half of that divergence which can move the host; the parser's other rewrite, stripping C0 controls at the edges, cannot. */\nexport function stripTabAndNewline(value) {\n return value.replace(asciiTabOrNewline, \"\");\n}\nexport function urlHostnameOk(url, hostname) {\n hostname.lastIndex = 0;\n return hostname.test(url.hostname);\n}\nexport function urlProtocolOk(url, protocol) {\n protocol.lastIndex = 0;\n return protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol);\n}\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n const url = parseURLObject(trimmed, def);\n if (url === URL_BAD_FORMAT) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid URL format\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n return;\n }\n if (url === URL_UNPARSEABLE) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n return;\n }\n if (def.hostname && !urlHostnameOk(url, def.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n if (def.protocol && !urlProtocolOk(url, def.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n // Set the output value based on normalize flag\n payload.value = def.normalize ? url.href : stripTabAndNewline(trimmed);\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n if (def.length !== undefined && (!Number.isInteger(def.length) || def.length < 1))\n throw new Error(`Invalid nanoid length: ${def.length}`);\n def.pattern ?? (def.pattern = def.length === undefined ? regexes.nanoid : regexes.nanoidOfLength(def.length));\n $ZodStringFormat.init(inst, def);\n});\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link $ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n // these two drop the offset or seconds `date-time` requires — on the bag not the def, since `z.string().check(...)` lands the format on a different schema\n if (def.local || def.precision === -1) {\n inst._zod.bag.laxFormat = true;\n inst._zod.onattach.push((s) => {\n s._zod.bag.laxFormat = true;\n });\n }\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv4`;\n});\n/** An IPv6 address is written with hex digits, colons and dots, and nothing else. The guard is what makes the check below an IPv6 check: `new URL(\"http://[...]\")` parses an authority, not an address, so `@` and `\\` re-delimit it and `\"::@1\\\\\"` validates against the host `0.0.0.1`. The URL parser also deletes ASCII tab, LF and CR rather than failing, which is how `\"::1\\n\"` validated as `::1`. */\nconst ipv6Alphabet = /^[0-9a-fA-F:.]+$/;\nexport function isValidIPv6(value) {\n if (!ipv6Alphabet.test(value))\n return false;\n try {\n // @ts-ignore\n new URL(`http://[${value}]`);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n if (!isValidIPv6(payload.value)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport function isValidCIDRv6(value) {\n const parts = value.split(\"/\");\n if (parts.length !== 2)\n return false;\n const [address, prefix] = parts;\n if (!prefix)\n return false;\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n return false;\n if (prefixNum < 0 || prefixNum > 128)\n return false;\n return isValidIPv6(address);\n}\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (!isValidCIDRv6(payload.value)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n // atob ignores whitespace, so reject it up front.\n if (/\\s/.test(data))\n return false;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64\";\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64url\";\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodCreditCard //////////////////////////////\nconst CC_SANITIZE = /[- ]/g;\n/** Luhn checksum on a digit-only string. Adapted from valibot (MIT). */\nfunction isLuhnAlgo(digits) {\n let length = digits.length;\n let bit = 1;\n let sum = 0;\n while (length) {\n const value = +digits[--length];\n bit ^= 1;\n sum += bit ? [0, 2, 4, 6, 8, 1, 3, 5, 7, 9][value] : value;\n }\n return sum % 10 === 0;\n}\nexport function isValidCreditCard(input) {\n if (!regexes.creditCard.test(input))\n return false;\n return isLuhnAlgo(input.replace(CC_SANITIZE, \"\"));\n}\nexport const $ZodCreditCard = /*@__PURE__*/ core.$constructor(\"$ZodCreditCard\", (inst, def) => {\n // Shape only — the Luhn check below is not expressible as a pattern, so consumers of `pattern` (JSON Schema, template literals) get the length and separator rules alone.\n def.pattern ?? (def.pattern = regexes.creditCard);\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidCreditCard(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"credit_card\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? String(input)\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n const memo = core.globalConfig.memoizer;\n memo?.attach(inst);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = memo ? memo.alloc(inst, payload, Array(input.length), ctx) : Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handlePropertyResult(result, final, key, input, optin, optout) {\n const isPresent = key in input;\n const isOptionalOut = optout === \"optional\";\n // The middle rung means \"absence permitted, nothing supplied in its place\", so an absent key contributes nothing — whatever the schema made of `undefined` is invented, not substituted. Only `optional` reaches this with a value: `defaulted` substitutes, and a schema that isn't optional-out has to keep the key.\n if (!isPresent && isOptionalOut && optin === \"optional\") {\n return;\n }\n if (result.issues.length) {\n // For optional-in/out schemas, ignore errors on absent keys.\n if (optin !== undefined && isOptionalOut && !isPresent) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (!isPresent && optin === undefined) {\n if (!result.issues.length) {\n final.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: undefined,\n path: [key],\n });\n }\n return;\n }\n if (result.value === undefined) {\n if (isPresent) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\n// one shared instance; a fresh [] per schema cost 56 bytes retained\nconst NO_SYMBOL_KEYS = [];\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n const ownSymbols = Object.getOwnPropertySymbols(def.shape);\n const symbolKeys = ownSymbols.length ? ownSymbols : NO_SYMBOL_KEYS;\n // aliases `keys` when there are no symbols, so a string-only shape keeps one array\n const allKeys = symbolKeys.length ? [...keys, ...symbolKeys] : keys;\n for (const k of allKeys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${String(k)}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n allKeys,\n symbolKeys,\n // string-only: handleCatchall matches it against `for...in`, which never yields a symbol\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const optin = _catchall.optin;\n const optout = _catchall.optout;\n for (const key in input) {\n // Must precede the __proto__ branch: a declared key is not unrecognized, even though the shape loop deliberately strips __proto__ from the parsed output.\n if (keySet.has(key))\n continue;\n // Don't copy an undeclared __proto__ into the result; assignment to a plain {} would replace the result prototype. But in strict mode it is still an unknown key, so report it before skipping.\n if (key === \"__proto__\") {\n if (t === \"never\")\n unrecognized.push(key);\n continue;\n }\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, optin, optout)));\n }\n else {\n handlePropertyResult(r, payload, key, input, optin, optout);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n // Describes the shape of the input, not the validity of the parsed value, so it never aborts. The parse still fails; the schema's own checks just get to run first, and an enclosing intersection can reconcile the key against a sibling operand.\n continue: true,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\n// Whichever object a def's `shape` currently answers from: the one the caller passed until the first read, the frozen copy after it. Keyed by def, so a def rebuilt by a builder is simply absent rather than inheriting the source's. Read its keys with `Object.keys`, which does not invoke them — that is what lets a discriminated union check its discriminator without resolving an option whose getters reference the union being constructed.\nconst propShapes = new WeakMap();\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n // const sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n propShapes.set(def, sh);\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n propShapes.set(def, newSh);\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazyInternal(inst, \"propValues\", (zod) => {\n const shape = zod.def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n if (!Object.prototype.hasOwnProperty.call(propValues, key)) {\n util.assignProp(propValues, key, new Set());\n }\n for (const v of field.values)\n propValues[key].add(v);\n // An omittable slot reads back as undefined at a discriminator lookup, so it has to claim undefined: two options that can both omit the key are not discriminable on it.\n if (field.optin !== undefined)\n propValues[key].add(undefined);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\n const catchall = def.catchall;\n let value;\n const memo = core.globalConfig.memoizer;\n memo?.attach(inst);\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.allKeys) {\n if (key === \"__proto__\")\n continue;\n const el = shape[key];\n const optin = el._zod.optin;\n const optout = el._zod.optout;\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, optin, optout)));\n }\n else {\n handlePropertyResult(r, payload, key, input, optin, optout);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\n const memo = core.globalConfig.memoizer;\n const generateFastpass = (shape) => {\n const normalized = _normalized.value;\n const syms = normalized.symbolKeys;\n // a symbol has no source literal, so it is read as `syms[i]` off the closed-over scope\n const doc = new Doc([\"payload\", \"ctx\"], { shape, inst, memo, syms });\n const parseStr = (k) => `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n // Prefixes in place, like util.prefixIssues does for every interpreted path.\n const prefixStr = (id, k) => `\n for (let i = 0; i < ${id}.issues.length; i++) {\n const iss = ${id}.issues[i];\n iss.path = iss.path ? [${k}, ...iss.path] : [${k}];\n payload.issues.push(iss);\n }`;\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.allKeys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(memo ? `const newResult = memo.alloc(inst, payload, {}, ctx);` : `const newResult = {};`);\n for (const key of normalized.allKeys) {\n if (key === \"__proto__\")\n continue;\n const id = ids[key];\n const k = typeof key === \"symbol\" ? `syms[${syms.indexOf(key)}]` : util.esc(key);\n const isPresent = `${k} in input`;\n const schema = shape[key];\n const optin = schema?._zod?.optin;\n const isOptionalIn = optin !== undefined;\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(k)};`);\n if (isOptionalIn && isOptionalOut) {\n // For optional-in/out schemas, ignore errors on absent keys — and, like the interpreted path, drop the value produced alongside them. The middle rung goes further: it permits absence without supplying anything in its place, so an absent key contributes nothing at all.\n const assign = optin === \"optional\" ? `${id}_present` : `${id}.value !== undefined || ${id}_present`;\n doc.write(`\n const ${id}_present = ${isPresent};\n if (!${id}.issues.length || ${id}_present) {\n if (${id}.issues.length) {${prefixStr(id, k)}\n }\n\n if (${assign}) {\n newResult[${k}] = ${id}.value;\n }\n }\n\n `);\n }\n else if (!isOptionalIn) {\n doc.write(`\n const ${id}_present = ${isPresent};\n if (${id}.issues.length) {${prefixStr(id, k)}\n }\n if (!${id}_present && !${id}.issues.length) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: undefined,\n path: [${k}]\n });\n }\n\n if (${id}_present) {\n newResult[${k}] = ${id}.value;\n }\n\n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {${prefixStr(id, k)}\n }\n \n if (${id}.value === undefined) {\n if (${isPresent}) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n\n `);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n // closing `shape` in is what pays: turbofan specializes the parser against that one shape object, so every `shape[k]._zod.run` folds to a known callee. as a parameter it stays a generic load and measures 13% slower even with the forwarding frame gone\n return doc.compile();\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.options.some((o) => o._zod.optin === \"defaulted\")\n ? \"defaulted\"\n : zod.def.options.some((o) => o._zod.optin !== undefined)\n ? \"optional\"\n : undefined);\n util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazyInternal(inst, \"values\", (zod) => {\n if (zod.def.options.every((o) => o._zod.values)) {\n return new Set(zod.def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazyInternal(inst, \"pattern\", (zod) => {\n if (zod.def.options.every((o) => o._zod.pattern)) {\n const patterns = zod.def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n inst._zod.parse = (payload, ctx) => {\n if (first) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const matches = [];\n for (let i = 0; i < results.length; i++) {\n if (results[i].issues.length === 0)\n matches.push(i);\n }\n if (matches.length === 1) {\n final.value = results[matches[0]].value;\n return final;\n }\n if (matches.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n matches,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n inst._zod.parse = (payload, ctx) => {\n if (first) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\n/** Returns the option of `union` whose discriminator claims `value`. */\nexport function getDiscriminatedOption(union, value) {\n const internals = union._zod;\n let map = internals.bag.optionsMap;\n if (!map) {\n map = new Map();\n const { options, discriminator } = internals.def;\n for (const option of options) {\n // First declaration wins, matching the order the parse path resolves a duplicate in.\n for (const v of option._zod.propValues?.[discriminator] ?? [])\n if (!map.has(v))\n map.set(v, option);\n }\n internals.bag.optionsMap = map;\n }\n return map.get(value);\n}\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazyInternal(inst, \"propValues\", (zod) => {\n const propValues = {};\n for (const option of zod.def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${zod.def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!Object.prototype.hasOwnProperty.call(propValues, k)) {\n util.assignProp(propValues, k, new Set());\n }\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n // Checked now rather than in the lookup map below, so an option that lacks the discriminator fails at the `discriminatedUnion` call instead of on the first object parsed. Options whose shape cannot be enumerated without resolving it — pipes, lazies, and objects rebuilt by a builder such as `.extend()` — are left to the map.\n def.options.forEach((option, i) => {\n const propShape = propShapes.get(option._zod.def);\n if (propShape && !Object.prototype.hasOwnProperty.call(propShape, def.discriminator)) {\n throw new Error(`Invalid discriminated union option at index \"${i}\"`);\n }\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n // Fall back to union matching when the fast discriminator path fails:\n // - explicitly enabled via unionFallback, or\n // - during backward direction (encode), since codec-based discriminators have different values in forward vs backward directions\n if (def.unionFallback || ctx.direction === \"backward\") {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n options: Array.from(disc.value.keys()),\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nexport function mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n if (Object.prototype.hasOwnProperty.call(newObj, \"__proto__\"))\n delete newObj.__proto__;\n for (const key of sharedKeys) {\n if (key === \"__proto__\")\n continue;\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) reject each key. A key rejection is reported only when BOTH sides reject it, so a key owned by one branch survives the other's key schema. strictObject reports these as unrecognized_keys; a record with an open key schema reports one invalid_key per key.\n const unrecKeys = new Map();\n let unrecIssue;\n const keyIssues = new Map();\n const collect = (iss, side) => {\n let keys;\n if (iss.code === \"unrecognized_keys\" && !iss.path?.length) {\n unrecIssue ?? (unrecIssue = iss);\n keys = iss.keys;\n }\n else if (iss.code === \"invalid_key\" && iss.origin === \"record\" && iss.path?.length === 1) {\n const k = String(iss.path[0]);\n if (!keyIssues.has(k))\n keyIssues.set(k, iss);\n keys = [k];\n }\n else {\n return false;\n }\n for (const k of keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k)[side] = true;\n }\n return true;\n };\n for (const iss of left.issues) {\n if (!collect(iss, \"l\"))\n result.issues.push(iss);\n }\n for (const iss of right.issues) {\n if (!collect(iss, \"r\"))\n result.issues.push(iss);\n }\n // Report only keys rejected by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length) {\n const aggregated = unrecIssue ? bothKeys.filter((k) => unrecIssue.keys.includes(k)) : [];\n if (aggregated.length)\n result.issues.push({ ...unrecIssue, keys: aggregated });\n for (const k of bothKeys) {\n if (!aggregated.includes(k) && keyIssues.has(k))\n result.issues.push(keyIssues.get(k));\n }\n }\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n if (util.aborted(result))\n return result;\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n const memo = core.globalConfig.memoizer;\n memo?.attach(inst);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = memo ? memo.alloc(inst, payload, [], ctx) : [];\n const proms = [];\n const optinStart = getTupleOptStart(items, \"optin\");\n const optoutStart = getTupleOptStart(items, \"optout\");\n if (!def.rest) {\n if (input.length < optinStart) {\n payload.issues.push({\n code: \"too_small\",\n minimum: optinStart,\n inclusive: true,\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n if (input.length > items.length) {\n payload.issues.push({\n code: \"too_big\",\n maximum: items.length,\n inclusive: true,\n input,\n inst,\n origin: \"array\",\n });\n }\n }\n // Run every item in parallel, collecting results into an indexed array. The post-processing in `handleTupleResults` walks them in order so it can decide whether an absent optional-output error can truncate the tail or must be reported to preserve required output.\n const itemResults = new Array(items.length);\n for (let i = 0; i < items.length; i++) {\n const r = items[i]._zod.run({ value: input[i], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((rr) => {\n itemResults[i] = rr;\n }));\n }\n else {\n itemResults[i] = r;\n }\n }\n if (def.rest) {\n let i = items.length - 1;\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({ value: el, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((r) => handleTupleResult(r, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => handleTupleResults(itemResults, payload, items, input, optoutStart));\n }\n return handleTupleResults(itemResults, payload, items, input, optoutStart);\n };\n});\nfunction getTupleOptStart(items, key) {\n for (let i = items.length - 1; i >= 0; i--) {\n // optin is a three-rung ladder so any rung above `undefined` permits an absent slot; optout stays two-valued.\n const omittable = key === \"optin\" ? items[i]._zod.optin !== undefined : items[i]._zod.optout === \"optional\";\n if (!omittable)\n return i + 1;\n }\n return 0;\n}\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nfunction handleTupleResults(itemResults, final, items, input, optoutStart) {\n // Walk results in order. Mirror $ZodObject's swallow-on-absent-optional rule, but only after `optoutStart`: the first index where the output tuple tail can be absent.\n for (let i = 0; i < items.length; i++) {\n const r = itemResults[i];\n const isPresent = i < input.length;\n // The array analog of `handlePropertyResult`'s absent-key early return: the middle rung permits absence without supplying anything in its place, so the tail truncates here instead of materializing whatever the item made of `undefined`.\n if (!isPresent && i >= optoutStart && items[i]._zod.optin === \"optional\") {\n final.value.length = i;\n break;\n }\n if (r.issues.length) {\n if (!isPresent && i >= optoutStart) {\n final.value.length = i;\n break;\n }\n final.issues.push(...util.prefixIssues(i, r.issues));\n }\n final.value[i] = r.value;\n }\n // Drop trailing slots that produced `undefined` for absent input\n // (the array analog of an absent optional key on an object). The\n // `i >= input.length` floor is critical: an explicit `undefined`\n // *inside* the input must be preserved even when the schema is\n // optional-out (e.g. `z.string().or(z.undefined())` accepting an\n // explicit undefined value).\n for (let i = final.value.length - 1; i >= input.length; i--) {\n if (items[i]._zod.optout === \"optional\" && final.value[i] === undefined) {\n final.value.length = i;\n }\n else {\n break;\n }\n }\n return final;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n const memo = core.globalConfig.memoizer;\n memo?.attach(inst);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n const values = def.keyType._zod.values;\n if (values && !def.partial) {\n payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n // A declared __proto__ is stripped but is not an unrecognized key.\n if (key === \"__proto__\")\n continue;\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (keyResult.issues.length) {\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n continue;\n }\n const outKey = keyResult.value;\n if (outKey === \"__proto__\")\n continue;\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n if (def.mode === \"loose\") {\n // skip __proto__ so it can't replace the result prototype via the assignment setter on the plain {} we build into\n if (key === \"__proto__\")\n continue;\n payload.value[key] = input[key];\n }\n else {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n continue: true,\n });\n }\n }\n else {\n payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n // An enumerable key schema declares which keys the record owns, so a key outside the set is unrecognized. A non-enumerable one (regex, refine) is a constraint every key must satisfy, so a failing key is invalid. Only the former is reconcilable against the other side of an intersection.\n let unrecognized;\n // Reflect.ownKeys for Symbol-key support; filter non-enumerable to match z.object()\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n if (!Object.prototype.propertyIsEnumerable.call(input, key))\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key is a numeric string and failed, retry with Number(key). This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else if (values) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n // the guard above tests the raw input key, but the key schema can normalize an ordinary key into __proto__; re-check the key we actually write under\n const outKey = keyResult.value;\n if (outKey === \"__proto__\")\n continue;\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n continue: true,\n });\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n const memo = core.globalConfig.memoizer;\n memo?.attach(inst);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = memo ? memo.alloc(inst, payload, new Map(), ctx) : new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n const memo = core.globalConfig.memoizer;\n memo?.attach(inst);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = memo ? memo.alloc(inst, payload, new Set(), ctx) : new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n const patternValues = values.filter((k) => util.propertyKeyTypes.has(typeof k));\n // unmatchable fallback, RE2-safe: an empty alternation would compile to /^()$/, which matches \"\"\n inst._zod.pattern = new RegExp(patternValues.length ? `^(${patternValues.map((o) => util.escapeRegex(o.toString())).join(\"|\")})$` : \"^[^\\\\s\\\\S]$\");\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = new Set(def.values);\n inst._zod.values = values;\n // unmatchable fallback, RE2-safe: an empty alternation would compile to /^()$/, which matches \"\"\n inst._zod.pattern = new RegExp(def.values.length\n ? `^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`\n : \"^[^\\\\s\\\\S]$\");\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n core.globalConfig.memoizer?.guard(inst);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n return payload;\n };\n});\nfunction handleOptionalResult(payload, result) {\n // A substituting schema that still failed has no usable answer; yield undefined. Its issues are simply dropped: it ran on a payload of its own, so there is no shared array to truncate and nothing of the caller's to lose with it.\n payload.value = result.issues.length ? undefined : result.value;\n return payload;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n // .optional() propagates absence rather than substituting for it, so a defaulted inner keeps its rung.\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin === \"defaulted\" ? \"defaulted\" : \"optional\");\n inst._zod.optout = \"optional\";\n util.defineLazyInternal(inst, \"values\", (zod) => {\n const values = zod.def.innerType._zod.values;\n return values ? new Set([...values, undefined]) : undefined;\n });\n util.defineLazyInternal(inst, \"pattern\", (zod) => {\n const pattern = zod.def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (payload.value === undefined) {\n // Only the top rung substitutes a value for absence; everything else leaves it intact, which is what .optional() means.\n if (def.innerType._zod.optin !== \"defaulted\")\n return payload;\n // Its own payload, for the same reason $ZodCatch gets one: a pipe forwards an unrecognized key through the caller's issues array, and this must not read that as the substituting schema failing and drop it.\n const result = def.innerType._zod.run({ value: payload.value, issues: [] }, ctx);\n if (result instanceof Promise)\n return result.then((result) => handleOptionalResult(payload, result));\n return handleOptionalResult(payload, result);\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n util.defineLazyInternal(inst, \"pattern\", (zod) => zod.def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin);\n util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType._zod.optout);\n util.defineLazyInternal(inst, \"pattern\", (zod) => {\n const pattern = zod.def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazyInternal(inst, \"values\", (zod) => {\n return zod.def.innerType._zod.values ? new Set([...zod.def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"defaulted\";\n util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"defaulted\";\n util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazyInternal(inst, \"values\", (zod) => {\n const v = zod.def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nfunction handleCatchResult(payload, result, def, ctx) {\n if (!result.issues.length) {\n payload.value = result.value;\n // The value carries up, so the flag describing it has to carry with it: a back-edge into a node still being parsed must not be frozen by an enclosing readonly, and its checks belong to the node itself. Guarded so the ordinary case adds no own property.\n if (result.memo)\n payload.memo = true;\n return payload;\n }\n // Spread the inner's own payload, not ours: `value` has to stay the input the catch was handed, and the inner ran on a payload of its own so its issues are already private to this call.\n payload.value = def.catchValue({\n ...result,\n value: payload.value,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n return payload;\n}\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin === \"defaulted\" ? \"defaulted\" : \"optional\");\n util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType._zod.optout);\n util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run({ value: payload.value, issues: [] }, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleCatchResult(payload, result, def, ctx));\n }\n return handleCatchResult(payload, result, def, ctx);\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazyInternal(inst, \"values\", (zod) => zod.def.in._zod.values);\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.in._zod.optin);\n util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.out._zod.optout);\n util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n // Any issue stops the pipe, so a failing refinement never feeds its transform. An unrecognized key is the exception: it describes the input's extra properties, not the value being piped, and an enclosing intersection may yet reconcile it.\n if (left.issues.some((iss) => iss.code !== \"unrecognized_keys\")) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazyInternal(inst, \"values\", (zod) => zod.def.in._zod.values);\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.in._zod.optin);\n util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.out._zod.optout);\n util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodPreprocess = /*@__PURE__*/ core.$constructor(\"$ZodPreprocess\", (inst, def) => {\n $ZodPipe.init(inst, def);\n});\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.innerType._zod.propValues);\n util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType?._zod?.optin);\n util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n // A repeat visit hands back a node that is still being built; freezing it here would make the rest of its keys fail to assign.\n if (!payload.memo)\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n // Defined, not assigned: the classic prototype exposes `_def` as a getter with no setter.\n Object.defineProperty(inst, \"_def\", { value: def });\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n // Defined inline so the closure stays anonymous: binding it to a `const` first names it, which costs 256 bytes per implemented function.\n return Object.defineProperty(function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n }, \"_zod\", { value: inst._zod, enumerable: false });\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return Object.defineProperty(async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n }, \"_zod\", { value: inst._zod, enumerable: false });\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // Cache the resolved inner type on the shared `def` so all clones of this lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance, preserving identity for cycle detection on recursive schemas.\n util.defineLazy(inst._zod, \"innerType\", () => {\n const d = def;\n if (!d._cachedInner)\n d._cachedInner = def.getter();\n return d._cachedInner;\n });\n util.defineLazyInternal(inst, \"pattern\", (zod) => zod.innerType?._zod?.pattern);\n util.defineLazyInternal(inst, \"propValues\", (zod) => zod.innerType?._zod?.propValues);\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.innerType?._zod?.optin ?? undefined);\n util.defineLazyInternal(inst, \"optout\", (zod) => zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","export class $ZodCyclicError extends Error {\n constructor() {\n super(`Cannot parse a reference cycle that closes through a transform`);\n this.name = \"ZodCyclicError\";\n }\n}\n/** Keyed off the context object every schema in one parse call already shares. */\nconst STATE = \"~memo\";\nconst NO_ISSUES = [];\n// Receivers prefix paths in place, so the cache and every hand-out need their own copies.\nfunction cloneIssues(issues) {\n return issues.map((iss) => (iss.path ? { ...iss, path: iss.path.slice() } : { ...iss }));\n}\nconst recursive = /*@__PURE__*/ new WeakMap();\n/** Whether this schema's subtree contains a cycle, so one parse can re-enter it. */\nfunction isRecursive(inst, stack) {\n const cached = recursive.get(inst);\n if (cached !== undefined)\n return cached;\n // Relative to the walk in progress, so not cached.\n if (stack.has(inst))\n return true;\n stack.add(inst);\n let result = false;\n const check = (child) => {\n if (!result && child?._zod && isRecursive(child, stack))\n result = true;\n };\n const def = inst._zod.def;\n if (def.type === \"lazy\") {\n check(inst._zod.innerType);\n }\n else {\n // $ZodObject redefines `shape` as a non-enumerable accessor, so `for...in` misses it.\n const shape = def.shape;\n // `for...in` skips symbols, so a cycle through a declared symbol key would read as non-recursive\n if (shape)\n for (const key of Reflect.ownKeys(shape))\n check(shape[key]);\n for (const key in def) {\n const value = def[key];\n if (!value || typeof value !== \"object\")\n continue;\n if (value._zod)\n check(value);\n else if (Array.isArray(value))\n for (const el of value)\n check(el);\n }\n }\n stack.delete(inst);\n recursive.set(inst, result);\n return result;\n}\n/**\n * Whether one parse can re-enter this schema, i.e. its subtree contains a cycle.\n * Exported for `z.compile`, which refuses to compile such a schema: cycle\n * breaking is driven from here off state keyed on the parse context, and a\n * generated fast path has no context to key on.\n */\nexport function isRecursiveSchema(inst) {\n return isRecursive(inst, new Set());\n}\nfunction bucketFor(state, inst) {\n let bucket = state.buckets.get(inst);\n if (!bucket) {\n bucket = new Map();\n state.buckets.set(inst, bucket);\n }\n return bucket;\n}\n// Set immediately before delegating to core and cleared immediately after, so `alloc` registers only for a visit this module is driving.\nlet handoff;\n// Allocated but unfinished entries. `alloc` and the matching pop both happen in the synchronous part of a parse, so they nest even when children are async, and one stack serves every schema.\nconst open = [];\nconst memo = {\n alloc(_inst, payload, empty) {\n const bucket = handoff;\n if (!bucket)\n return empty;\n handoff = undefined;\n const entry = { value: empty, issues: null };\n bucket.set(payload.value, entry);\n open.push(entry);\n return empty;\n },\n guard(inst) {\n var _a;\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred.push(() => {\n const base = inst._zod.parse;\n const wrapped = (payload, ctx) => {\n // The value is a placeholder a back-edge is still waiting on, so the cycle closes through this transform. Its output can't exist in time to bind.\n if (ctx.direction !== \"backward\" && isBackEdge(ctx, payload.value))\n throw new $ZodCyclicError();\n return base(payload, ctx);\n };\n inst._zod.parse = wrapped;\n if (inst._zod.run === base)\n inst._zod.run = wrapped;\n });\n },\n attach(inst) {\n var _a;\n let isRecursiveInst;\n // `bucket` memoized for one parse; a recursive schema is re-entered many times and its bucket never changes\n let lastCtx;\n let lastBucket;\n // Wraps `parse` in a deferred so it sees the container's final parse. Core's own deferred copies `parse` into `run` when there are no checks, and it ran first, so `run` is patched to match; with checks, `run` reads `parse` dynamically.\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred.push(() => {\n const base = inst._zod.parse;\n const wrapped = (payload, ctx) => {\n if (isRecursiveInst === undefined) {\n isRecursiveInst = isRecursive(inst, new Set());\n if (!isRecursiveInst) {\n // Nothing here can ever fire, so take it back out.\n inst._zod.parse = base;\n if (inst._zod.run === wrapped)\n inst._zod.run = base;\n return base(payload, ctx);\n }\n }\n const input = payload.value;\n if (input === null || typeof input !== \"object\")\n return base(payload, ctx);\n let state = ctx[STATE];\n if (!state) {\n state = { buckets: new Map(), backEdges: undefined };\n ctx[STATE] = state;\n }\n let bucket;\n if (lastCtx === ctx) {\n bucket = lastBucket;\n }\n else {\n bucket = bucketFor(state, inst);\n lastCtx = ctx;\n lastBucket = bucket;\n }\n const hit = bucket.get(input);\n if (hit) {\n payload.value = hit.value;\n if (hit.issues) {\n if (hit.issues.length)\n payload.issues.push(...cloneIssues(hit.issues));\n }\n else {\n // Still being parsed: its own checks cover it, so skip them here.\n payload.memo = true;\n state.backEdges ?? (state.backEdges = new Set());\n state.backEdges.add(hit.value);\n }\n return payload;\n }\n handoff = bucket;\n const depth = open.length;\n const result = base(payload, ctx);\n handoff = undefined;\n // A container that rejected its input outright allocated nothing.\n const entry = open.length > depth ? open.pop() : undefined;\n // Both paths written out so the sync one allocates no closure. It runs once per node, and capturing here cost more than everything else combined.\n if (result instanceof Promise) {\n return result.then((r) => {\n if (entry)\n entry.issues = r.issues.length ? cloneIssues(r.issues) : NO_ISSUES;\n return r;\n });\n }\n if (entry)\n entry.issues = result.issues.length ? cloneIssues(result.issues) : NO_ISSUES;\n return result;\n };\n inst._zod.parse = wrapped;\n if (inst._zod.run === base)\n inst._zod.run = wrapped;\n });\n },\n};\n/** The memoizer that gives containers cycle support. `zod` installs it by default; `zod/mini` opts in with `config({ memoizer: memoizer() })`. */\nexport function memoizer() {\n return memo;\n}\n/** Whether this value is a node a back-edge resolved to before it finished. */\nexport function isBackEdge(ctx, value) {\n const backEdges = ctx[STATE]?.backEdges;\n return backEdges !== undefined && value !== null && typeof value === \"object\" && backEdges.has(value);\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"characters\", verb: \"to have\" },\n file: { unit: \"bytes\", verb: \"to have\" },\n array: { unit: \"items\", verb: \"to have\" },\n set: { unit: \"items\", verb: \"to have\" },\n map: { unit: \"entries\", verb: \"to have\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"email address\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO datetime\",\n date: \"ISO date\",\n time: \"ISO time\",\n duration: \"ISO duration\",\n ipv4: \"IPv4 address\",\n ipv6: \"IPv6 address\",\n mac: \"MAC address\",\n cidrv4: \"IPv4 range\",\n cidrv6: \"IPv6 range\",\n base64: \"base64-encoded string\",\n base64url: \"base64url-encoded string\",\n json_string: \"JSON string\",\n e164: \"E.164 number\",\n credit_card: \"credit card number\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n // type names: missing keys = do not translate (use raw value via ?? fallback)\n const TypeDictionary = {\n // Compatibility: \"nan\" -> \"NaN\" for display\n nan: \"NaN\",\n // All other type names omitted - they fall back to raw values via ?? operator\n };\n function getTypeName(type, input) {\n if (type === \"number\" && typeof input === \"number\" && !Number.isFinite(input)) {\n return String(input);\n }\n return TypeDictionary[type] ?? type;\n }\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = getTypeName(issue.expected);\n const receivedType = util.parsedType(issue.input);\n const received = getTypeName(receivedType, issue.input);\n return `Invalid input: expected ${expected}, received ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.exact ? \"exactly \" : issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.exact ? \"exactly \" : issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Invalid string: must start with \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Invalid string: must end with \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Invalid string: must include \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Invalid string: must match pattern ${_issue.pattern}`;\n return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Invalid number: must be a multiple of ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Invalid key in ${issue.origin}`;\n case \"invalid_union\":\n if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n return `Invalid discriminator value. Expected ${opts}`;\n }\n if (issue.inclusive === false) {\n return \"Invalid input: more than one option matched\";\n }\n return \"Invalid input\";\n case \"invalid_element\":\n return `Invalid value in ${issue.origin}`;\n default:\n return `Invalid input`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n","var _a;\nexport const $output = /*@__PURE__*/ Symbol(\"ZodOutput\");\nexport const $input = /*@__PURE__*/ Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link _cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _creditCard(Class, params) {\n return new Class({\n type: \"string\",\n format: \"credit_card\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _properties(shape) {\n return Object.entries(shape).map(([property, schema]) => new checks.$ZodCheckProperty({ check: \"property\", property, schema }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options: options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : util.constantCatch(catchValue)),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn, params) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n if (!(\"input\" in _issue))\n _issue.input = payload.value;\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n }, params);\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n codec._zod.bag.truthy = truthyArray;\n codec._zod.bag.falsy = falsyArray;\n codec._zod.bag.case = params.case ?? \"insensitive\";\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n","import { globalRegistry } from \"./registries.js\";\nimport { assignProp } from \"./util.js\";\nfunction assignProps(target, ...sources) {\n for (const source of sources) {\n for (const key of Reflect.ownKeys(source)) {\n if (Object.prototype.propertyIsEnumerable.call(source, key)) {\n assignProp(target, key, source[key]);\n }\n }\n }\n return target;\n}\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n sharedDefsExtractedFor: undefined,\n sharedEmitDoneFor: undefined,\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n intersections: [],\n external: params?.external ?? undefined,\n };\n}\n/**\n * Applies the `unrepresentable` setting at a site that has no JSON Schema equivalent. Throws\n * `message` unless the setting (or the handler's return value) says otherwise. Returns `true` if a\n * custom JSON Schema was written into `json`, in which case the caller must not write its own.\n */\nexport function handleUnrepresentable(schema, ctx, json, params, message) {\n const result = typeof ctx.unrepresentable === \"function\"\n ? ctx.unrepresentable({ zodSchema: schema, path: params.path, message })\n : ctx.unrepresentable;\n if (result === \"any\")\n return false;\n if (result === undefined || result === \"throw\")\n throw new Error(message);\n Object.assign(json, result);\n return true;\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n ctx.sharedDefsExtractedFor = undefined;\n ctx.sharedEmitDoneFor = undefined;\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n assignProps(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && \"_prefault\" in result.schema)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\n// Escape a reference token for use in a JSON Pointer fragment (RFC 6901): `~` becomes `~0` and `/` becomes `~1`. The `~` replacement must run first.\nfunction encodeJSONPointerSegment(segment) {\n return segment.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // With `external` set, every registered schema resolves through the external branch of `makeURI`, so the root branch below produces the same ref the external branch would — this pass is identical whichever schema it is called with, and only needs to run once.\n if (ctx.external && ctx.sharedDefsExtractedFor === ctx.external)\n return;\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes multiple schemas map to the same seen object. e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${encodeJSONPointerSegment(id)}` };\n }\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n // an id-less root has nowhere to be extracted to, so it stays inline and self-references as `#`\n if (entry[1] === root && !entry[1].schema.id) {\n return { ref: uriPrefix };\n }\n // self-contained schema\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + encodeJSONPointerSegment(defId) };\n };\n // stored cached version in `def` property remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/<root>` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n if (ctx.external)\n ctx.sharedDefsExtractedFor = ctx.external;\n}\n/** Rewrites `anyOf: [{type: \"a\"}, {type: \"b\"}]` to `type: [\"a\", \"b\"]`, which every JSON Schema draft treats as equivalent and most consumers render far better for the nullable case. Only branches that are a bare type assertion qualify — anything carrying a constraint, `$ref`, `const` or metadata is left alone. Runs after `flattenRef`, so a branch an override decorated or `$defs` extraction turned into a `$ref` is no longer bare and correctly stays in `anyOf`. `oneOf` is excluded: `integer` and `number` overlap, so \"exactly one\" and \"at least one\" are not the same there. OpenAPI 3.0 is excluded: its `type` must be a single string. */\nfunction compactTypeUnion(schema) {\n const options = schema.anyOf;\n if (!Array.isArray(options) || options.length === 0 || schema.type !== undefined)\n return;\n const types = [];\n for (const option of options) {\n if (!option || typeof option !== \"object\")\n return;\n // A branch that is itself a compactible union folds into this one — nested `anyOf` and a flat `type` array say the same thing. Compacting it first also makes the result independent of the order this pass walks the seen map in.\n compactTypeUnion(option);\n const keys = Object.keys(option);\n if (keys.length !== 1 || keys[0] !== \"type\")\n return;\n const type = option.type;\n for (const member of Array.isArray(type) ? type : [type]) {\n if (typeof member !== \"string\")\n return;\n if (!types.includes(member))\n types.push(member);\n }\n }\n delete schema.anyOf;\n // A `type` array must be non-empty and unique (metaschema); a single member is spelled as a bare string.\n schema.type = types.length === 1 ? types[0] : types;\n}\n/** Keywords `foldIntersection` knows how to combine. Anything else — `$ref`, `patternProperties`,\n * an annotation like `description` — makes a member unfoldable, so a constraint this does not\n * understand leaves the `allOf` alone instead of being silently dropped or misattributed. */\nconst FOLDABLE_KEYS = new Set([\"type\", \"properties\", \"required\", \"additionalProperties\"]);\nconst UNION_KEYS = [\"oneOf\", \"anyOf\"];\n/** A member's constraint on a key it does not declare itself. A `catchall` states one; `false`, an absent `additionalProperties`, and the empty schema a loose object emits state nothing. */\nfunction undeclaredConstraint(member) {\n const extra = member.additionalProperties;\n if (extra === undefined || extra === false || typeof extra !== \"object\" || extra === null)\n return null;\n return Object.keys(extra).length ? extra : null;\n}\n/** Combines object members into the single object they describe together, or returns `null` if any of them carries a keyword outside {@link FOLDABLE_KEYS}. */\nfunction foldObjects(members) {\n const objects = [];\n for (const member of members) {\n // A boolean subschema is legal JSON Schema and carries no keywords to fold.\n if (typeof member !== \"object\" || member.type !== \"object\")\n return null;\n for (const key in member) {\n if (!FOLDABLE_KEYS.has(key))\n return null;\n }\n objects.push(member);\n }\n const properties = {};\n const required = new Set();\n for (const object of objects) {\n for (const key in object.properties) {\n // `in` would report a `__proto__` key as already present via the prototype chain and skip it.\n if (Object.prototype.hasOwnProperty.call(properties, key))\n continue;\n // Every member constrains this key: the ones that declare it say how, and a `catchall` member constrains it too even though it does not name it. The key has to satisfy all of them, which is the same intersection one level down.\n const parts = [];\n for (const other of objects) {\n const part = other.properties?.[key] ?? undeclaredConstraint(other);\n if (part === null || part === undefined)\n continue;\n if (!parts.some((seen) => JSON.stringify(seen) === JSON.stringify(part)))\n parts.push(part);\n }\n const merged = parts.length === 1\n ? parts[0]\n : (foldObjects(parts) ?? { allOf: parts });\n assignProp(properties, key, merged);\n }\n for (const key of object.required ?? [])\n required.add(key);\n }\n const folded = { type: \"object\", properties };\n if (required.size)\n folded.required = [...required];\n // A key no member declares is rejected only when every member rejects it, so the fold is closed only when every member is. Otherwise it carries whatever the `catchall` members demand of such a key.\n if (objects.every((object) => object.additionalProperties === false)) {\n folded.additionalProperties = false;\n }\n else {\n const constraints = [];\n for (const object of objects) {\n const constraint = undeclaredConstraint(object);\n if (constraint && !constraints.some((seen) => JSON.stringify(seen) === JSON.stringify(constraint)))\n constraints.push(constraint);\n }\n if (constraints.length === 1)\n folded.additionalProperties = constraints[0];\n else if (constraints.length > 1)\n folded.additionalProperties = { allOf: constraints };\n }\n return folded;\n}\n/** `additionalProperties` in an `allOf` member sees only that member's own `properties`, so two\n * closed object members reject each other's keys and the schema validates nothing. Zod's parser\n * pools the key sets instead — `handleIntersectionResults` reports a key as unrecognized only when\n * *every* side rejects it — so the emitted schema has to pool them too, and folding the members\n * into one object is the encoding that says so on every target.\n *\n * This runs from `finalize`, after `extractDefs`, which is what keeps it clear of the `$ref`\n * machinery: a member extracted into `$defs` is already a `$ref` by now and declines to fold, so it\n * keeps its reference and its own closedness rather than being inlined as a stale copy. */\nfunction foldIntersection(json) {\n const allOf = json.allOf;\n if (!Array.isArray(allOf) || allOf.length < 2)\n return;\n // An `override` runs before this pass and may have written object keywords onto the intersection itself. Those are deliberate, so decline rather than overwrite them.\n for (const key of FOLDABLE_KEYS)\n if (key in json)\n return;\n // An intersection distributes over a union: `A & (X | Y)` is `(A & X) | (A & Y)`. Only the first union is distributed over; a second one stays among the members every branch folds against, where it fails the object check and declines the whole intersection rather than multiplying out.\n const unions = allOf.filter((m) => UNION_KEYS.some((k) => Array.isArray(m[k])));\n let folded = null;\n if (!unions.length) {\n folded = foldObjects(allOf);\n }\n else {\n const union = unions[0];\n const keyword = UNION_KEYS.find((k) => Array.isArray(union[k]));\n if (Object.keys(union).length !== 1)\n return;\n const rest = allOf.filter((m) => m !== union);\n const branches = union[keyword].map((branch) => foldObjects([...rest, branch]));\n if (branches.some((b) => !b))\n return;\n folded = { [keyword]: branches };\n }\n if (!folded)\n return;\n delete json.allOf;\n assignProps(json, folded);\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n assignProps(schema, refSchema);\n }\n // restore child's own properties (child wins)\n assignProps(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema. This handles cases like: readonly().meta({id}).describe() where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n // Flattening walks the whole map and clears each `ref` as it goes, so a second call over the same map is a no-op scan. Skip it outright once it has run for a registry conversion.\n if (!ctx.external || ctx.sharedEmitDoneFor !== ctx.external) {\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n if (ctx.target !== \"openapi-3.0\") {\n for (const entry of ctx.seen.entries()) {\n compactTypeUnion(entry[1].def ?? entry[1].schema);\n }\n }\n // After flattening, every member that was extracted is a `$ref`, so the fold sees the final shape. A schema that inherits an intersection — through `z.lazy`, or any `ref` chain — holds the same `allOf` array, so fold by array identity to catch every copy.\n if (ctx.intersections.length) {\n const carriers = new Map();\n for (const seen of ctx.seen.values()) {\n for (const json of [seen.schema, seen.def]) {\n const allOf = json?.allOf;\n if (!Array.isArray(allOf))\n continue;\n const existing = carriers.get(allOf);\n if (existing)\n existing.push(json);\n else\n carriers.set(allOf, [json]);\n }\n }\n for (const allOf of ctx.intersections) {\n for (const json of carriers.get(allOf) ?? [])\n foldIntersection(json);\n }\n }\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n // when the root was extracted into $defs, `root.schema` is the `$ref` wrapper and `root.def` is the body that now lives under $defs\n assignProps(result, root.defId ? root.schema : (root.def ?? root.schema));\n // The `id` in `.meta()` is a Zod-specific registration tag used to extract schemas into $defs — it is not user-facing JSON Schema metadata. Strip it from the output body where it would otherwise leak. The id is preserved implicitly via the $defs key (and via $ref paths).\n const rootMetaId = ctx.metadataRegistry.get(schema)?.id;\n if (rootMetaId !== undefined && result.id === rootMetaId)\n delete result.id;\n // build defs object. With `external`, `defs` is the shared object every schema writes into, so the same entries are reassigned on every call. Without it, `defs` is fresh per call and must be rebuilt.\n const defs = ctx.external?.defs ?? {};\n if (!ctx.external || ctx.sharedEmitDoneFor !== ctx.external) {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n if (seen.def.id === seen.defId)\n delete seen.def.id;\n assignProp(defs, seen.defId, seen.def);\n }\n }\n }\n if (ctx.external)\n ctx.sharedEmitDoneFor = ctx.external;\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed each call to finalize() is functionally independent though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\" ||\n def.type === \"catch\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n if (_schema._zod.traits.has(\"$ZodCodec\"))\n return true;\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n","import { extractDefs, finalize, handleUnrepresentable, initializeContext, process, } from \"./to-json-schema.js\";\nimport { assignProp, getEnumValues } from \"./util.js\";\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding, laxFormat } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // `z.iso.time()` is never full-time, and `laxFormat` carries the datetime shapes that also accept what their keyword forbids\n if (format === \"time\" || laxFormat) {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n // when both minimum and exclusiveMinimum exist, pick the more restrictive one\n const exMin = typeof exclusiveMinimum === \"number\" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY);\n const exMax = typeof exclusiveMaximum === \"number\" && exclusiveMaximum <= (maximum ?? Number.POSITIVE_INFINITY);\n const legacy = ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\";\n if (exMin) {\n if (legacy) {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n else if (typeof minimum === \"number\") {\n json.minimum = minimum;\n }\n if (exMax) {\n if (legacy) {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n else if (typeof maximum === \"number\") {\n json.maximum = maximum;\n }\n if (typeof multipleOf === \"number\") {\n // JSON Schema requires a divisor strictly greater than zero, and a non-finite one does not survive JSON at all. A negative divisor accepts exactly what its absolute value accepts, so it still maps; zero, NaN and Infinity have no keyword form.\n if (Number.isFinite(multipleOf) && multipleOf !== 0)\n json.multipleOf = Math.abs(multipleOf);\n else\n handleUnrepresentable(schema, ctx, json, params, `A multipleOf divisor of ${multipleOf} cannot be represented in JSON Schema`);\n }\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"BigInt cannot be represented in JSON Schema\");\n};\nexport const symbolProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Symbols cannot be represented in JSON Schema\");\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Undefined cannot be represented in JSON Schema\");\n};\nexport const voidProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Void cannot be represented in JSON Schema\");\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Date cannot be represented in JSON Schema\");\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // an empty enum accepts nothing, same as z.never()\n if (values.length === 0) {\n json.not = {};\n return;\n }\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // a literal with no values accepts nothing, same as z.never()\n if (def.values.length === 0) {\n json.not = {};\n return;\n }\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n // a custom schema replaces the whole literal, so there is nothing left to accumulate\n if (handleUnrepresentable(schema, ctx, json, params, \"Literal `undefined` cannot be represented in JSON Schema\"))\n return;\n // otherwise do not add to vals\n }\n else if (typeof val === \"bigint\") {\n if (handleUnrepresentable(schema, ctx, json, params, \"BigInt literals cannot be represented in JSON Schema\"))\n return;\n vals.push(Number(val));\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"NaN cannot be represented in JSON Schema\");\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Custom types cannot be represented in JSON Schema\");\n};\nexport const functionProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Function types cannot be represented in JSON Schema\");\n};\nexport const transformProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Transforms cannot be represented in JSON Schema\");\n};\nexport const mapProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Map cannot be represented in JSON Schema\");\n};\nexport const setProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Set cannot be represented in JSON Schema\");\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = process(def.element, ctx, {\n ...params,\n path: [...params.path, \"items\"],\n });\n};\n// Transform and catch set `optin = \"optional\"` at runtime so the parser lets them observe an\n// absent key, but their declared input type stays required. An input JSON Schema describes the\n// declared type, so resolve past them to the schema that actually carries the optionality.\n// Used by both `objectProcessor` (for `required`) and `tupleProcessor` (for `minItems`); see\n// wiki/optionality.md, \"The JSON Schema emitter reads the *static* value\".\nfunction inputOptin(schema) {\n const def = schema._zod.def;\n if (def.type === \"pipe\" && def.in._zod.traits.has(\"$ZodTransform\")) {\n return inputOptin(def.out);\n }\n if (def.type === \"catch\") {\n return inputOptin(def.innerType);\n }\n return schema._zod.optin;\n}\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const shape = def.shape;\n // dropping it while still emitting `additionalProperties: false` would emit a schema that rejects data this one requires\n const symbolKeys = Object.getOwnPropertySymbols(shape);\n if (symbolKeys.length &&\n handleUnrepresentable(schema, ctx, json, params, \"Symbol keys cannot be represented in JSON Schema\")) {\n return;\n }\n json.type = \"object\";\n json.properties = {};\n for (const key in shape) {\n // assignProp so a __proto__ key becomes an own property instead of hitting the inherited setter on the plain {} we build into\n assignProp(json.properties, key, process(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n }));\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const field = def.shape[key];\n if (ctx.io === \"input\") {\n return inputOptin(field) === undefined;\n }\n else {\n return field._zod.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = process(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches). This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = process(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = process(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n // Recorded innermost first, so a nested intersection has already folded by the time this one is considered. The array is the handle rather than the schema, because a wrapper that inherits this schema shares the same array; `finalize` folds every object holding it. See `foldIntersection`.\n ctx.intersections.push(allOf);\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? process(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n let minItems = def.items.length;\n while (minItems > 0) {\n const item = def.items[minItems - 1];\n const optional = ctx.io === \"input\" ? inputOptin(item) !== undefined : item._zod.optout === \"optional\";\n if (!optional)\n break;\n minItems--;\n }\n const maxItems = def.items.length;\n const isClosed = !def.rest;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (isClosed) {\n json.items = false;\n }\n else if (rest) {\n json.items = rest;\n }\n if (minItems > 0)\n json.minItems = minItems;\n if (isClosed)\n json.maxItems = maxItems;\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n if (minItems > 0)\n json.minItems = minItems;\n if (isClosed)\n json.maxItems = maxItems;\n }\n else {\n json.items = prefixItems;\n if (isClosed) {\n json.additionalItems = false;\n }\n else if (rest) {\n json.additionalItems = rest;\n }\n if (minItems > 0)\n json.minItems = minItems;\n if (isClosed)\n json.maxItems = maxItems;\n }\n // explicit user-defined length checks take precedence\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties. This correctly represents \"only validate keys matching the pattern\" semantics and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n assignProp(json.patternProperties, pattern.source, valueSchema);\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = process(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n // Every key shares one value schema, so an optional-in value makes the whole key set omittable on input. Output keeps them: the exhaustive branch assigns every key, even one whose value came back undefined.\n const omittableOnInput = ctx.io === \"input\" && inputOptin(def.valueType) !== undefined;\n if (keyValues && !def.partial && !omittableOnInput) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\n/** Round-trips a default value through JSON so the emitted schema is guaranteed to be valid JSON.\n * A BigInt has no reliable encoding, so it goes through `unrepresentable` like any other\n * unrepresentable value. Returns a sentinel when the caller must not write a default of its own. */\nconst UNREPRESENTABLE_DEFAULT = Symbol();\nfunction serializeDefaultValue(value, schema, ctx, json, params) {\n let unrepresentable = false;\n const serialized = JSON.stringify(value, (_, val) => {\n if (typeof val !== \"bigint\")\n return val;\n unrepresentable = true;\n return null;\n });\n if (!unrepresentable)\n return JSON.parse(serialized);\n handleUnrepresentable(schema, ctx, json, params, \"BigInt defaults cannot be represented in JSON Schema\");\n return UNREPRESENTABLE_DEFAULT;\n}\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n const value = serializeDefaultValue(def.defaultValue, schema, ctx, json, params);\n if (value !== UNREPRESENTABLE_DEFAULT)\n json.default = value;\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io !== \"input\")\n return;\n const value = serializeDefaultValue(def.defaultValue, schema, ctx, json, params);\n if (value !== UNREPRESENTABLE_DEFAULT)\n json._prefault = value;\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n handleUnrepresentable(schema, ctx, json, params, \"Dynamic catch values are not supported in JSON Schema\");\n return;\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const inIsTransform = def.in._zod.traits.has(\"$ZodTransform\");\n const innerType = ctx.io === \"input\" ? (inIsTransform ? def.out : def.in) : def.out;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n process(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n assignProp(schemas, key, finalize(ctx, schema));\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n process(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\n/* Prototypes that already carry the lazy helper methods. Seeded with the\n * intrinsics so that `init` on a foreign object — it accepts any object —\n * can never install an accessor onto a prototype we do not own. */\nconst _installedErrorProtos = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]);\n/* Helper methods live as non-enumerable lazy getters on the shared\n * prototype instead of own properties on every instance. On first\n * access the getter allocates the per-instance closure and caches it\n * as a non-enumerable own property, so detached usage still works and\n * the allocation only happens for methods actually touched. */\nfunction _lazyMethod(proto, key, make) {\n Object.defineProperty(proto, key, {\n configurable: true,\n enumerable: false,\n get() {\n const value = make(this);\n Object.defineProperty(this, key, { value, configurable: true, writable: true });\n return value;\n },\n set(value) {\n Object.defineProperty(this, key, { value, configurable: true, writable: true });\n },\n });\n}\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n const proto = Object.getPrototypeOf(inst);\n if (_installedErrorProtos.has(proto))\n return;\n _installedErrorProtos.add(proto);\n _lazyMethod(proto, \"format\", (self) => (mapper) => core.formatError(self, mapper));\n _lazyMethod(proto, \"flatten\", (self) => (mapper) => core.flattenError(self, mapper));\n _lazyMethod(proto, \"addIssue\", (self) => (issue) => {\n self.issues.push(issue);\n self.message = JSON.stringify(self.issues, util.jsonStringifyReplacer, 2);\n });\n _lazyMethod(proto, \"addIssues\", (self) => (issues) => {\n self.issues.push(...issues);\n self.message = JSON.stringify(self.issues, util.jsonStringifyReplacer, 2);\n });\n Object.defineProperty(proto, \"isEmpty\", {\n configurable: true,\n enumerable: false,\n get() {\n return this.issues.length === 0;\n },\n });\n};\nexport const ZodError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer, undefined, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\nexport { validate, validateAsync } from \"../core/index.js\";\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport en from \"../locales/en.js\";\nimport * as checks from \"./checks.js\";\nimport * as parse from \"./parse.js\";\n// Register English as the default locale on first ZodType construction. Hooked into the `ZodType` `$constructor` (rather than a top-level `config(en())` in `external.ts`) so bundlers honoring `sideEffects: false` can't tree-shake it out — see #5953, #5725. An explicit `z.config(z.locales.xx())` call wins regardless of order, since this only sets the default when none is present.\nfunction _ensureDefaultLocale() {\n if (!core.globalConfig.localeError)\n core.config(en());\n}\n// the default memoizer is read by the core container init, which runs before `ZodType.init`, so each container calls this first\nfunction _ensureDefaultMemoizer() {\n if (!core.globalConfig.memoizer)\n core.config({ memoizer: core.memoizer() });\n}\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n _ensureDefaultLocale();\n core.$ZodType.init(inst, def);\n inst.def = def;\n inst.type = def.type;\n return inst;\n}, {\n check(...chks) {\n const def = this.def;\n return this.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...chks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), { parent: true });\n },\n with(...chks) {\n return this.check(...chks);\n },\n clone(def, params) {\n return core.clone(this, def, params);\n },\n brand() {\n return this;\n },\n register(reg, meta) {\n reg.add(this, meta);\n return this;\n },\n refine(check, params) {\n return this.check(refine(check, params));\n },\n superRefine(refinement, params) {\n return this.check(superRefine(refinement, params));\n },\n overwrite(fn) {\n return this.check(checks.overwrite(fn));\n },\n optional() {\n return optional(this);\n },\n exactOptional() {\n return exactOptional(this);\n },\n nullable() {\n return nullable(this);\n },\n nullish() {\n return optional(nullable(this));\n },\n nonoptional(params) {\n return nonoptional(this, params);\n },\n array() {\n return array(this);\n },\n or(arg) {\n return union([this, arg]);\n },\n and(arg) {\n return intersection(this, arg);\n },\n transform(tx) {\n return pipe(this, transform(tx));\n },\n default(d) {\n return _default(this, d);\n },\n prefault(d) {\n return prefault(this, d);\n },\n catch(params) {\n return _catch(this, params);\n },\n pipe(target) {\n return pipe(this, target);\n },\n readonly() {\n return readonly(this);\n },\n describe(description) {\n const cl = this.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n },\n meta(...args) {\n // overloaded: meta() returns the registered metadata, meta(data) returns a clone with `data` registered. The mapped type picks up the second overload, so we accept variadic any-args and return `any` to satisfy both at runtime.\n if (args.length === 0)\n return core.globalRegistry.get(this);\n const cl = this.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n },\n isOptional() {\n return this.safeParse(undefined).success;\n },\n isNullable() {\n return this.safeParse(null).success;\n },\n apply(fn, ...args) {\n return args.length === 0 ? fn(this) : fn(this, ...args);\n },\n // Overrides core's `~standard` to add `jsonSchema`. Must stay a prototype entry: redefining it per instance demotes instances to dictionary mode.\n get \"~standard\"() {\n return util.hide(this, \"~standard\", {\n ...core.standardProps(this),\n jsonSchema: {\n input: createStandardJSONSchemaMethod(this, \"input\"),\n output: createStandardJSONSchemaMethod(this, \"output\"),\n },\n });\n },\n set \"~standard\"(value) {\n util.own(this, \"~standard\", value);\n },\n parse: function _parse(data, params) {\n return parse.parse(this, data, params, { callee: _parse });\n },\n parseAsync: async function _parseAsync(data, params) {\n return await parse.parseAsync(this, data, params, { callee: _parseAsync });\n },\n safeParse(data, params) {\n return parse.safeParse(this, data, params);\n },\n async safeParseAsync(data, params) {\n return parse.safeParseAsync(this, data, params);\n },\n // `spa` is an alias: same function object as `safeParseAsync`, as before.\n get spa() {\n return this?.safeParseAsync;\n },\n set spa(value) {\n util.own(this, \"spa\", value);\n },\n encode: function _encode(data, params) {\n return parse.encode(this, data, params, { callee: _encode });\n },\n decode: function _decode(data, params) {\n return parse.decode(this, data, params, { callee: _decode });\n },\n encodeAsync: async function _encodeAsync(data, params) {\n return await parse.encodeAsync(this, data, params, { callee: _encodeAsync });\n },\n decodeAsync: async function _decodeAsync(data, params) {\n return await parse.decodeAsync(this, data, params, { callee: _decodeAsync });\n },\n safeEncode(data, params) {\n return parse.safeEncode(this, data, params);\n },\n safeDecode(data, params) {\n return parse.safeDecode(this, data, params);\n },\n async safeEncodeAsync(data, params) {\n return parse.safeEncodeAsync(this, data, params);\n },\n async safeDecodeAsync(data, params) {\n return parse.safeDecodeAsync(this, data, params);\n },\n toJSONSchema(params) {\n return createToJSONSchemaMethod(this, {})(params);\n },\n // Reads through to the registry on every access, so it must not cache.\n get description() {\n return core.globalRegistry.get(this)?.description;\n },\n // No setter: `schema._def = x` throws, as it did when `_def` was a non-writable own property.\n get _def() {\n return this._zod.def;\n },\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n}, {\n regex(...args) {\n return this.check(checks.regex(...args));\n },\n includes(...args) {\n return this.check(checks.includes(...args));\n },\n startsWith(...args) {\n return this.check(checks.startsWith(...args));\n },\n endsWith(...args) {\n return this.check(checks.endsWith(...args));\n },\n min(...args) {\n return this.check(checks.minLength(...args));\n },\n max(...args) {\n return this.check(checks.maxLength(...args));\n },\n length(...args) {\n return this.check(checks.length(...args));\n },\n nonempty(...args) {\n return this.check(checks.minLength(1, ...args));\n },\n lowercase(params) {\n return this.check(checks.lowercase(params));\n },\n uppercase(params) {\n return this.check(checks.uppercase(params));\n },\n trim() {\n return this.check(checks.trim());\n },\n normalize(...args) {\n return this.check(checks.normalize(...args));\n },\n toLowerCase() {\n return this.check(checks.toLowerCase());\n },\n toUpperCase() {\n return this.check(checks.toUpperCase());\n },\n slugify() {\n return this.check(checks.slugify());\n },\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n}, {\n email(params) {\n return this.check(core._email(ZodEmail, params));\n },\n url(params) {\n return this.check(core._url(ZodURL, params));\n },\n jwt(params) {\n return this.check(core._jwt(ZodJWT, params));\n },\n emoji(params) {\n return this.check(core._emoji(ZodEmoji, params));\n },\n guid(params) {\n return this.check(core._guid(ZodGUID, params));\n },\n uuid(params) {\n return this.check(core._uuid(ZodUUID, params));\n },\n uuidv4(params) {\n return this.check(core._uuidv4(ZodUUID, params));\n },\n uuidv6(params) {\n return this.check(core._uuidv6(ZodUUID, params));\n },\n uuidv7(params) {\n return this.check(core._uuidv7(ZodUUID, params));\n },\n nanoid(params) {\n return this.check(core._nanoid(ZodNanoID, params));\n },\n cuid(params) {\n return this.check(core._cuid(ZodCUID, params));\n },\n cuid2(params) {\n return this.check(core._cuid2(ZodCUID2, params));\n },\n ulid(params) {\n return this.check(core._ulid(ZodULID, params));\n },\n base64(params) {\n return this.check(core._base64(ZodBase64, params));\n },\n base64url(params) {\n return this.check(core._base64url(ZodBase64URL, params));\n },\n xid(params) {\n return this.check(core._xid(ZodXID, params));\n },\n ksuid(params) {\n return this.check(core._ksuid(ZodKSUID, params));\n },\n ipv4(params) {\n return this.check(core._ipv4(ZodIPv4, params));\n },\n ipv6(params) {\n return this.check(core._ipv6(ZodIPv6, params));\n },\n cidrv4(params) {\n return this.check(core._cidrv4(ZodCIDRv4, params));\n },\n cidrv6(params) {\n return this.check(core._cidrv6(ZodCIDRv6, params));\n },\n e164(params) {\n return this.check(core._e164(ZodE164, params));\n },\n datetime(params) {\n return this.check(core._isoDateTime(ZodISODateTime, params));\n },\n date(params) {\n return this.check(core._isoDate(ZodISODate, params));\n },\n time(params) {\n return this.check(core._isoTime(ZodISOTime, params));\n },\n duration(params) {\n return this.check(core._isoDuration(ZodISODuration, params));\n },\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: core.regexes.httpProtocol,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\n/**\n * Validates a CUID v1 string.\n *\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2 | `z.cuid2()`} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodCreditCard = /*@__PURE__*/ core.$constructor(\"ZodCreditCard\", (inst, def) => {\n core.$ZodCreditCard.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function creditCard(params) {\n return core._creditCard(ZodCreditCard, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n}, {\n gt(value, params) {\n return this.check(checks.gt(value, params));\n },\n gte(value, params) {\n return this.check(checks.gte(value, params));\n },\n min(value, params) {\n return this.check(checks.gte(value, params));\n },\n lt(value, params) {\n return this.check(checks.lt(value, params));\n },\n lte(value, params) {\n return this.check(checks.lte(value, params));\n },\n max(value, params) {\n return this.check(checks.lte(value, params));\n },\n int(params) {\n return this.check(int(params));\n },\n safe(params) {\n return this.check(int(params));\n },\n positive(params) {\n return this.check(checks.gt(0, params));\n },\n nonnegative(params) {\n return this.check(checks.gte(0, params));\n },\n negative(params) {\n return this.check(checks.lt(0, params));\n },\n nonpositive(params) {\n return this.check(checks.lte(0, params));\n },\n multipleOf(value, params) {\n return this.check(checks.multipleOf(value, params));\n },\n step(value, params) {\n return this.check(checks.multipleOf(value, params));\n },\n finite() {\n return this;\n },\n});\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n}, {\n gte(value, params) {\n return this.check(checks.gte(value, params));\n },\n min(value, params) {\n return this.check(checks.gte(value, params));\n },\n gt(value, params) {\n return this.check(checks.gt(value, params));\n },\n lt(value, params) {\n return this.check(checks.lt(value, params));\n },\n lte(value, params) {\n return this.check(checks.lte(value, params));\n },\n max(value, params) {\n return this.check(checks.lte(value, params));\n },\n positive(params) {\n return this.check(checks.gt(BigInt(0), params));\n },\n negative(params) {\n return this.check(checks.lt(BigInt(0), params));\n },\n nonpositive(params) {\n return this.check(checks.lte(BigInt(0), params));\n },\n nonnegative(params) {\n return this.check(checks.gte(BigInt(0), params));\n },\n multipleOf(value, params) {\n return this.check(checks.multipleOf(value, params));\n },\n});\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n _ensureDefaultMemoizer();\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n}, {\n min(n, params) {\n return this.check(checks.minLength(n, params));\n },\n nonempty(params) {\n return this.check(checks.minLength(1, params));\n },\n max(n, params) {\n return this.check(checks.maxLength(n, params));\n },\n length(n, params) {\n return this.check(checks.length(n, params));\n },\n unwrap() {\n return this.element;\n },\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n _ensureDefaultMemoizer();\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n util.installLazyProp(inst, \"shape\", (self) => self._zod.def.shape, false);\n}, {\n keyof() {\n return _enum(Object.keys(this._zod.def.shape));\n },\n catchall(catchall) {\n return this.clone({ ...this._zod.def, catchall: catchall });\n },\n passthrough() {\n return this.clone({ ...this._zod.def, catchall: unknown() });\n },\n loose() {\n return this.clone({ ...this._zod.def, catchall: unknown() });\n },\n strict() {\n return this.clone({ ...this._zod.def, catchall: never() });\n },\n strip() {\n return this.clone({ ...this._zod.def, catchall: undefined });\n },\n extend(incoming) {\n return util.extend(this, incoming);\n },\n safeExtend(incoming) {\n return util.safeExtend(this, incoming);\n },\n merge(other) {\n return util.merge(this, other);\n },\n pick(mask) {\n return util.pick(this, mask);\n },\n omit(mask) {\n return util.omit(this, mask);\n },\n partial(...args) {\n return util.partial(ZodOptional, this, args[0]);\n },\n exactPartial(...args) {\n return util.partial(ZodExactOptional, this, args[0], \"exactPartial\");\n },\n required(...args) {\n return util.required(ZodNonOptional, this, args[0]);\n },\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options: options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n _ensureDefaultMemoizer();\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n}, {\n rest(rest) {\n return this.clone({\n ...this._zod.def,\n rest: rest,\n });\n },\n partial() {\n const def = this._zod.def;\n // a refinement was authored against the full arity; partialing would run it on a shorter array\n if (def.checks?.length)\n throw new Error(\".partial() cannot be used on tuple schemas containing refinements\");\n return this.clone({\n ...def,\n items: def.items.map((item) => new ZodOptional({ type: \"optional\", innerType: item })),\n });\n },\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n _ensureDefaultMemoizer();\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n // v3-compat: z.record(valueType, params?) — defaults keyType to z.string()\n if (!valueType || !valueType._zod) {\n return new ZodRecord({\n type: \"record\",\n keyType: string(),\n valueType: keyType,\n ...util.normalizeParams(valueType),\n });\n }\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n partial: true,\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n _ensureDefaultMemoizer();\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n _ensureDefaultMemoizer();\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n _ensureDefaultMemoizer();\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n if (!(\"input\" in _issue))\n _issue.input = payload.value;\n _issue.inst ?? (_issue.inst = inst);\n // _issue.continue ??= true;\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n payload.value = output;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n return new ZodExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : core.util.constantCatch(catchValue)),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport function invertCodec(codec) {\n const def = codec._zod.def;\n return new ZodCodec({\n type: \"pipe\",\n in: def.out,\n out: def.in,\n transform: def.reverseTransform,\n reverseTransform: def.transform,\n });\n}\nexport const ZodPreprocess = /*@__PURE__*/ core.$constructor(\"ZodPreprocess\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodPreprocess.init(inst, def);\n});\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn, params) {\n return core._superRefine(fn, params);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\nexport function preprocess(fn, schema) {\n return new ZodPreprocess({\n type: \"pipe\",\n in: transform(fn),\n out: schema,\n });\n}\n","/* Generated by @deepseek-ai/dsh-typert-generator from the Host FaceModel — do not edit. */\nimport { z } from 'zod'\n\nconst QaSourceMetadataValueRemoteCodec$schema = z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => QaSourceMetadataValueRemoteCodec$schema)), z.record(z.string(), z.lazy(() => QaSourceMetadataValueRemoteCodec$schema)).readonly()])\nconst _yadsh_dsh_qa_surface_qaSurface_accountsClaimSessions_parameter_0$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_accountsClaimSessions_parameter_1$schema = z.array(z.string())\nconst _yadsh_dsh_qa_surface_qaSurface_accountsClaimSessions_result$schema = z.object({\n 'claimed': z.number().readonly(),\n 'conflicts': z.array(z.string()).readonly(),\n})\nconst _yadsh_dsh_qa_surface_qaSurface_accountsListOwnership_parameter_0$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_accountsListOwnership_result$schema = z.object({\n 'entries': z.array(z.object({\n 'sessionId': z.string().readonly(),\n 'userId': z.string().readonly(),\n 'displayName': z.string().readonly(),\n 'claimedAt': z.string().readonly(),\n})).readonly(),\n})\nconst _yadsh_dsh_qa_surface_qaSurface_accountsLogin_parameter_0$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_accountsLogin_parameter_1$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_accountsLogin_result$schema = z.object({\n 'token': z.string().readonly(),\n 'user': z.object({\n 'id': z.string().readonly(),\n 'email': z.string().readonly(),\n 'displayName': z.string().readonly(),\n 'role': z.union([z.literal(\"user\"), z.literal(\"admin\")]).readonly(),\n 'createdAt': z.string().readonly(),\n 'lastLoginAt': z.union([z.literal(null), z.string()]).readonly(),\n 'disabled': z.boolean().readonly(),\n}).readonly(),\n})\nconst _yadsh_dsh_qa_surface_qaSurface_accountsOwnedSessions_parameter_0$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_accountsOwnedSessions_result$schema = z.object({\n 'ids': z.array(z.string()).readonly(),\n})\nconst _yadsh_dsh_qa_surface_qaSurface_accountsRegister_parameter_0$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_accountsRegister_parameter_1$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_accountsRegister_result$schema = z.object({\n 'token': z.string().readonly(),\n 'user': z.object({\n 'id': z.string().readonly(),\n 'email': z.string().readonly(),\n 'displayName': z.string().readonly(),\n 'role': z.union([z.literal(\"user\"), z.literal(\"admin\")]).readonly(),\n 'createdAt': z.string().readonly(),\n 'lastLoginAt': z.union([z.literal(null), z.string()]).readonly(),\n 'disabled': z.boolean().readonly(),\n}).readonly(),\n})\nconst _yadsh_dsh_qa_surface_qaSurface_accountsWhoami_parameter_0$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_accountsWhoami_result$schema = z.union([z.object({\n 'authenticated': z.literal(false).readonly(),\n}), z.object({\n 'authenticated': z.literal(true).readonly(),\n 'user': z.object({\n 'id': z.string().readonly(),\n 'email': z.string().readonly(),\n 'displayName': z.string().readonly(),\n 'role': z.union([z.literal(\"user\"), z.literal(\"admin\")]).readonly(),\n 'createdAt': z.string().readonly(),\n 'lastLoginAt': z.union([z.literal(null), z.string()]).readonly(),\n 'disabled': z.boolean().readonly(),\n}).readonly(),\n})])\nconst _yadsh_dsh_qa_surface_qaSurface_describe_result$schema = z.object({\n 'enabled': z.boolean().readonly(),\n 'route': z.object({\n 'path': z.string().readonly(),\n 'matchChildren': z.boolean().readonly(),\n}).readonly(),\n 'branding': z.object({\n 'title': z.string().readonly(),\n 'subtitle': z.string().readonly(),\n 'welcomeMessage': z.string().readonly(),\n 'placeholder': z.string().readonly(),\n 'logoUrl': z.union([z.literal(null), z.string()]).readonly(),\n 'disclaimer': z.string().readonly(),\n}).readonly(),\n 'session': z.object({\n 'policy': z.union([z.literal(\"browser-persistent\"), z.literal(\"new-on-load\"), z.literal(\"fixed\")]).readonly(),\n 'storageKey': z.string().readonly(),\n 'cwd': z.union([z.literal(null), z.string()]).readonly(),\n 'workspaceId': z.union([z.literal(null), z.string()]).readonly(),\n 'fixedSessionId': z.union([z.literal(null), z.string()]).readonly(),\n 'agentPreset': z.union([z.literal(null), z.string()]).readonly(),\n 'provider': z.union([z.literal(null), z.string()]).readonly(),\n 'model': z.union([z.literal(null), z.string()]).readonly(),\n 'reasoningEffort': z.union([z.literal(null), z.string()]).readonly(),\n}).readonly(),\n 'ui': z.object({\n 'showHeader': z.boolean().readonly(),\n 'showReset': z.boolean().readonly(),\n 'showStop': z.boolean().readonly(),\n 'showTimestamps': z.boolean().readonly(),\n 'showToolActivity': z.boolean().readonly(),\n 'showReasoning': z.boolean().readonly(),\n 'renderMarkdown': z.boolean().readonly(),\n 'maxContentWidth': z.number().readonly(),\n 'showSessionList': z.boolean().readonly(),\n}).readonly(),\n 'suggestedQuestions': z.array(z.string()).readonly(),\n 'interaction': z.object({\n 'approvals': z.literal(\"blocked\").readonly(),\n 'questions': z.literal(\"unsupported\").readonly(),\n}).readonly(),\n 'lockdown': z.object({\n 'enabled': z.boolean().readonly(),\n 'enforceFixedAgentPreset': z.boolean().readonly(),\n 'enforceFixedWorkspace': z.boolean().readonly(),\n 'enforceFixedModel': z.boolean().readonly(),\n 'sandboxMode': z.literal(\"read-only\").readonly(),\n 'approvalPolicy': z.literal(\"never\").readonly(),\n 'permissionPreset': z.string().readonly(),\n 'allowPermissionChanges': z.literal(false).readonly(),\n 'allowSlashCommands': z.literal(false).readonly(),\n 'allowSettingsMutation': z.literal(false).readonly(),\n 'allowSessionReset': z.boolean().readonly(),\n 'allowSessionRename': z.literal(false).readonly(),\n 'allowSessionDelete': z.literal(false).readonly(),\n 'allowArbitrarySessionOpen': z.literal(false).readonly(),\n 'toolPolicy': z.object({\n 'mode': z.literal(\"allow-list\").readonly(),\n 'allow': z.array(z.string()).readonly(),\n}).readonly(),\n}).readonly(),\n 'embedding': z.object({\n 'frameAncestors': z.union([z.literal(null), z.string()]).readonly(),\n}).readonly(),\n 'accounts': z.object({\n 'enabled': z.boolean().readonly(),\n 'allowRegistration': z.boolean().readonly(),\n 'sessionTtlDays': z.number().readonly(),\n 'showOtherUsersChats': z.boolean().readonly(),\n}).readonly(),\n 'entry': z.object({\n 'redirectNonLoopback': z.boolean().readonly(),\n 'cookieBootstrap': z.boolean().readonly(),\n}).readonly(),\n 'sources': z.object({\n 'enabled': z.boolean().readonly(),\n 'collect': z.object({\n 'parentAgent': z.boolean().readonly(),\n 'subagents': z.boolean().readonly(),\n 'persistTurnEvent': z.boolean().readonly(),\n}).readonly(),\n 'display': z.object({\n 'sidebar': z.boolean().readonly(),\n 'footer': z.boolean().readonly(),\n 'groupByKind': z.boolean().readonly(),\n 'showDiscovered': z.boolean().readonly(),\n 'showOriginBadges': z.boolean().readonly(),\n 'maxInitiallyVisiblePerGroup': z.number().readonly(),\n}).readonly(),\n 'webSearch': z.object({\n 'promoteSearchResultsWithoutFetch': z.boolean().readonly(),\n 'maxPromotedPerSearch': z.number().readonly(),\n}).readonly(),\n 'dedupe': z.object({\n 'normalizeUrls': z.boolean().readonly(),\n 'stripTrackingParams': z.boolean().readonly(),\n 'mergeFileRanges': z.boolean().readonly(),\n}).readonly(),\n 'filePreview': z.object({\n 'enabled': z.boolean().readonly(),\n 'markdownRenderedByDefault': z.boolean().readonly(),\n 'allowRawToggle': z.boolean().readonly(),\n 'maxBytes': z.number().readonly(),\n 'maxMarkdownRenderBytes': z.number().readonly(),\n}).readonly(),\n 'subagents': z.object({\n 'inheritSources': z.boolean().readonly(),\n 'enableReportToolFallback': z.boolean().readonly(),\n 'markIncompleteOpaqueRuns': z.boolean().readonly(),\n}).readonly(),\n 'legacy': z.object({\n 'parseAssistantSourcesBlock': z.boolean().readonly(),\n}).readonly(),\n}).readonly(),\n})\nconst _yadsh_dsh_qa_surface_qaSurface_readSourceFile_parameter_0$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_readSourceFile_parameter_1$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_readSourceFile_parameter_2$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_readSourceFile_result$schema = z.object({\n 'path': z.string().readonly(),\n 'content': z.string().readonly(),\n 'size': z.number().readonly(),\n 'truncated': z.boolean().readonly(),\n 'markdown': z.boolean().readonly(),\n 'renderableMarkdown': z.boolean().readonly(),\n})\nconst _yadsh_dsh_qa_surface_qaSurface_secureSession_parameter_0$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_secureSession_parameter_1$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_secureSession_result$schema = z.object({\n 'sessionId': z.string().readonly(),\n 'enabled': z.boolean().readonly(),\n 'agentPresetMatches': z.boolean().readonly(),\n 'workspaceMatches': z.boolean().readonly(),\n 'modelMatches': z.boolean().readonly(),\n 'sandboxIsReadOnly': z.boolean().readonly(),\n 'approvalIsNever': z.boolean().readonly(),\n 'permissionPreset': z.string().readonly(),\n 'toolPolicyLoaded': z.boolean().readonly(),\n 'toolAllowList': z.array(z.string()).readonly(),\n})\nconst _yadsh_dsh_qa_surface_qaSurface_sources_parameter_0$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_sources_parameter_1$schema = z.string()\nconst _yadsh_dsh_qa_surface_qaSurface_sources_result$schema = z.array(z.object({\n 'version': z.literal(1).readonly(),\n 'sessionId': z.string().readonly(),\n 'turn': z.number().readonly(),\n 'sources': z.array(z.object({\n 'id': z.string().readonly(),\n 'kind': z.union([z.literal(\"file\"), z.literal(\"code\"), z.literal(\"web\"), z.literal(\"jira\"), z.literal(\"confluence\"), z.literal(\"knowledge\"), z.literal(\"other\")]).readonly(),\n 'title': z.string().readonly(),\n 'uri': z.string().readonly().optional(),\n 'path': z.string().readonly().optional(),\n 'snippet': z.string().readonly().optional(),\n 'locations': z.array(z.object({\n 'path': z.string().readonly().optional(),\n 'lineStart': z.number().readonly().optional(),\n 'lineEnd': z.number().readonly().optional(),\n 'anchor': z.string().readonly().optional(),\n 'jiraKey': z.string().readonly().optional(),\n 'confluencePageId': z.string().readonly().optional(),\n})).readonly(),\n 'evidence': z.union([z.literal(\"read\"), z.literal(\"fetched\"), z.literal(\"queried\"), z.literal(\"reported\"), z.literal(\"inherited\"), z.literal(\"discovered\")]).readonly(),\n 'origins': z.array(z.object({\n 'sessionId': z.string().readonly(),\n 'turn': z.number().readonly(),\n 'step': z.number().readonly().optional(),\n 'toolCallId': z.string().readonly().optional(),\n 'toolName': z.string().readonly().optional(),\n 'agentId': z.string().readonly().optional(),\n 'role': z.union([z.literal(\"parent\"), z.literal(\"subagent\")]).readonly(),\n 'subagentRunId': z.string().readonly().optional(),\n 'subagentSessionId': z.string().readonly().optional(),\n})).readonly(),\n 'score': z.number().readonly(),\n 'metadata': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => QaSourceMetadataValueRemoteCodec$schema)), z.record(z.string(), z.lazy(() => QaSourceMetadataValueRemoteCodec$schema)).readonly()])).readonly().readonly().optional(),\n})).readonly(),\n 'discovered': z.array(z.object({\n 'id': z.string().readonly(),\n 'kind': z.union([z.literal(\"file\"), z.literal(\"code\"), z.literal(\"web\"), z.literal(\"jira\"), z.literal(\"confluence\"), z.literal(\"knowledge\"), z.literal(\"other\")]).readonly(),\n 'title': z.string().readonly(),\n 'uri': z.string().readonly().optional(),\n 'path': z.string().readonly().optional(),\n 'snippet': z.string().readonly().optional(),\n 'locations': z.array(z.object({\n 'path': z.string().readonly().optional(),\n 'lineStart': z.number().readonly().optional(),\n 'lineEnd': z.number().readonly().optional(),\n 'anchor': z.string().readonly().optional(),\n 'jiraKey': z.string().readonly().optional(),\n 'confluencePageId': z.string().readonly().optional(),\n})).readonly(),\n 'evidence': z.union([z.literal(\"read\"), z.literal(\"fetched\"), z.literal(\"queried\"), z.literal(\"reported\"), z.literal(\"inherited\"), z.literal(\"discovered\")]).readonly(),\n 'origins': z.array(z.object({\n 'sessionId': z.string().readonly(),\n 'turn': z.number().readonly(),\n 'step': z.number().readonly().optional(),\n 'toolCallId': z.string().readonly().optional(),\n 'toolName': z.string().readonly().optional(),\n 'agentId': z.string().readonly().optional(),\n 'role': z.union([z.literal(\"parent\"), z.literal(\"subagent\")]).readonly(),\n 'subagentRunId': z.string().readonly().optional(),\n 'subagentSessionId': z.string().readonly().optional(),\n})).readonly(),\n 'score': z.number().readonly(),\n 'metadata': z.record(z.string(), z.union([z.literal(null), z.string(), z.number(), z.literal(false), z.literal(true), z.array(z.lazy(() => QaSourceMetadataValueRemoteCodec$schema)), z.record(z.string(), z.lazy(() => QaSourceMetadataValueRemoteCodec$schema)).readonly()])).readonly().readonly().optional(),\n})).readonly().optional(),\n 'complete': z.boolean().readonly(),\n 'incompleteOrigins': z.array(z.object({\n 'subagentRunId': z.string().readonly().optional(),\n 'provider': z.string().readonly().optional(),\n 'reason': z.string().readonly(),\n})).readonly().optional(),\n}))\n\nexport const TYPERT_REMOTE = {\n package: '@yadsh/dsh-qa-surface',\n descriptors: [\n {\n id: '@yadsh/dsh-qa-surface#qaSurface/accountsClaimSessions',\n service: 'qaSurface',\n namespace: 'qaSurface',\n method: 'accountsClaimSessions',\n invocation: { kind: 'direct' },\n parameters: [\n {\n name: 'token',\n wire: 'token',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/accountsClaimSessions:token',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsClaimSessions_parameter_0$schema,\n },\n },\n {\n name: 'sessionIds',\n wire: 'sessionIds',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/accountsClaimSessions:sessionIds',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsClaimSessions_parameter_1$schema,\n },\n },\n ],\n result: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface/types#QaClaimResult',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsClaimSessions_result$schema,\n },\n sourceLocation: {\"file\":\"packages/dsh-qa-surface/src/index.ts\",\"line\":256,\"column\":3},\n },\n {\n id: '@yadsh/dsh-qa-surface#qaSurface/accountsListOwnership',\n service: 'qaSurface',\n namespace: 'qaSurface',\n method: 'accountsListOwnership',\n invocation: { kind: 'direct' },\n parameters: [\n {\n name: 'token',\n wire: 'token',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/accountsListOwnership:token',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsListOwnership_parameter_0$schema,\n },\n },\n ],\n result: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/accountsListOwnership:result',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsListOwnership_result$schema,\n },\n sourceLocation: {\"file\":\"packages/dsh-qa-surface/src/index.ts\",\"line\":280,\"column\":3},\n },\n {\n id: '@yadsh/dsh-qa-surface#qaSurface/accountsLogin',\n service: 'qaSurface',\n namespace: 'qaSurface',\n method: 'accountsLogin',\n invocation: { kind: 'direct' },\n parameters: [\n {\n name: 'email',\n wire: 'email',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/accountsLogin:email',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsLogin_parameter_0$schema,\n },\n },\n {\n name: 'password',\n wire: 'password',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/accountsLogin:password',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsLogin_parameter_1$schema,\n },\n },\n ],\n result: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface/types#QaAccountSession',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsLogin_result$schema,\n },\n sourceLocation: {\"file\":\"packages/dsh-qa-surface/src/index.ts\",\"line\":241,\"column\":3},\n },\n {\n id: '@yadsh/dsh-qa-surface#qaSurface/accountsOwnedSessions',\n service: 'qaSurface',\n namespace: 'qaSurface',\n method: 'accountsOwnedSessions',\n invocation: { kind: 'direct' },\n parameters: [\n {\n name: 'token',\n wire: 'token',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/accountsOwnedSessions:token',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsOwnedSessions_parameter_0$schema,\n },\n },\n ],\n result: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/accountsOwnedSessions:result',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsOwnedSessions_result$schema,\n },\n sourceLocation: {\"file\":\"packages/dsh-qa-surface/src/index.ts\",\"line\":266,\"column\":3},\n },\n {\n id: '@yadsh/dsh-qa-surface#qaSurface/accountsRegister',\n service: 'qaSurface',\n namespace: 'qaSurface',\n method: 'accountsRegister',\n invocation: { kind: 'direct' },\n parameters: [\n {\n name: 'email',\n wire: 'email',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/accountsRegister:email',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsRegister_parameter_0$schema,\n },\n },\n {\n name: 'password',\n wire: 'password',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/accountsRegister:password',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsRegister_parameter_1$schema,\n },\n },\n ],\n result: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface/types#QaAccountSession',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsRegister_result$schema,\n },\n sourceLocation: {\"file\":\"packages/dsh-qa-surface/src/index.ts\",\"line\":235,\"column\":3},\n },\n {\n id: '@yadsh/dsh-qa-surface#qaSurface/accountsWhoami',\n service: 'qaSurface',\n namespace: 'qaSurface',\n method: 'accountsWhoami',\n invocation: { kind: 'direct' },\n parameters: [\n {\n name: 'token',\n wire: 'token',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/accountsWhoami:token',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsWhoami_parameter_0$schema,\n },\n },\n ],\n result: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface/types#QaWhoamiResult',\n schema: _yadsh_dsh_qa_surface_qaSurface_accountsWhoami_result$schema,\n },\n sourceLocation: {\"file\":\"packages/dsh-qa-surface/src/index.ts\",\"line\":248,\"column\":3},\n },\n {\n id: '@yadsh/dsh-qa-surface#qaSurface/describe',\n service: 'qaSurface',\n namespace: 'qaSurface',\n method: 'describe',\n invocation: { kind: 'direct' },\n parameters: [\n ],\n result: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface/types#ResolvedQaSurfaceConfig',\n schema: _yadsh_dsh_qa_surface_qaSurface_describe_result$schema,\n },\n sourceLocation: {\"file\":\"packages/dsh-qa-surface/src/index.ts\",\"line\":298,\"column\":3},\n },\n {\n id: '@yadsh/dsh-qa-surface#qaSurface/readSourceFile',\n service: 'qaSurface',\n namespace: 'qaSurface',\n method: 'readSourceFile',\n invocation: { kind: 'direct' },\n parameters: [\n {\n name: 'token',\n wire: 'token',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/readSourceFile:token',\n schema: _yadsh_dsh_qa_surface_qaSurface_readSourceFile_parameter_0$schema,\n },\n },\n {\n name: 'sessionId',\n wire: 'sessionId',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/readSourceFile:sessionId',\n schema: _yadsh_dsh_qa_surface_qaSurface_readSourceFile_parameter_1$schema,\n },\n },\n {\n name: 'sourcePath',\n wire: 'sourcePath',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/readSourceFile:sourcePath',\n schema: _yadsh_dsh_qa_surface_qaSurface_readSourceFile_parameter_2$schema,\n },\n },\n ],\n result: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface/types#QaSourceFilePreview',\n schema: _yadsh_dsh_qa_surface_qaSurface_readSourceFile_result$schema,\n },\n sourceLocation: {\"file\":\"packages/dsh-qa-surface/src/index.ts\",\"line\":337,\"column\":9},\n },\n {\n id: '@yadsh/dsh-qa-surface#qaSurface/secureSession',\n service: 'qaSurface',\n namespace: 'qaSurface',\n method: 'secureSession',\n invocation: { kind: 'direct' },\n parameters: [\n {\n name: 'token',\n wire: 'token',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/secureSession:token',\n schema: _yadsh_dsh_qa_surface_qaSurface_secureSession_parameter_0$schema,\n },\n },\n {\n name: 'sessionId',\n wire: 'sessionId',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/secureSession:sessionId',\n schema: _yadsh_dsh_qa_surface_qaSurface_secureSession_parameter_1$schema,\n },\n },\n ],\n result: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface/types#QaLockdownProof',\n schema: _yadsh_dsh_qa_surface_qaSurface_secureSession_result$schema,\n },\n sourceLocation: {\"file\":\"packages/dsh-qa-surface/src/index.ts\",\"line\":304,\"column\":3},\n },\n {\n id: '@yadsh/dsh-qa-surface#qaSurface/sources',\n service: 'qaSurface',\n namespace: 'qaSurface',\n method: 'sources',\n invocation: { kind: 'direct' },\n parameters: [\n {\n name: 'token',\n wire: 'token',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/sources:token',\n schema: _yadsh_dsh_qa_surface_qaSurface_sources_parameter_0$schema,\n },\n },\n {\n name: 'sessionId',\n wire: 'sessionId',\n source: 'json',\n codec: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/sources:sessionId',\n schema: _yadsh_dsh_qa_surface_qaSurface_sources_parameter_1$schema,\n },\n },\n ],\n result: {\n mode: 'strict',\n typeSymbol: '@yadsh/dsh-qa-surface#qaSurface/sources:result',\n schema: _yadsh_dsh_qa_surface_qaSurface_sources_result$schema,\n },\n sourceLocation: {\"file\":\"packages/dsh-qa-surface/src/index.ts\",\"line\":330,\"column\":3},\n },\n ],\n}\n\nexport default TYPERT_REMOTE\n","import type { QaSurfaceConfig, ResolvedQaSurfaceConfig } from \"./types.js\";\n\nexport const DEFAULT_QA_SURFACE_CONFIG: ResolvedQaSurfaceConfig = Object.freeze(\n {\n enabled: true,\n route: Object.freeze({ path: \"/qa\", matchChildren: true }),\n branding: Object.freeze({\n title: \"Помощник\",\n subtitle: \"\",\n welcomeMessage: \"Чем могу помочь?\",\n placeholder: \"Задайте вопрос…\",\n logoUrl: null,\n disclaimer:\n \"Диалоги могут быть видны другим пользователям сервера и используются для улучшения качества ответов.\",\n }),\n session: Object.freeze({\n policy: \"browser-persistent\",\n storageKey: \"dsh-qa-surface.session\",\n cwd: null,\n workspaceId: null,\n fixedSessionId: null,\n agentPreset: null,\n provider: null,\n model: null,\n reasoningEffort: null,\n }),\n ui: Object.freeze({\n showHeader: true,\n showReset: false,\n showStop: true,\n showTimestamps: false,\n showToolActivity: false,\n showReasoning: false,\n renderMarkdown: true,\n maxContentWidth: 900,\n showSessionList: false,\n }),\n suggestedQuestions: Object.freeze([\n \"Что ты умеешь?\",\n \"С чего начать?\",\n \"Помоги разобраться с ошибкой\",\n ]),\n interaction: Object.freeze({\n approvals: \"blocked\",\n questions: \"unsupported\",\n }),\n lockdown: Object.freeze({\n enabled: true,\n enforceFixedAgentPreset: true,\n enforceFixedWorkspace: true,\n enforceFixedModel: true,\n sandboxMode: \"read-only\",\n approvalPolicy: \"never\",\n permissionPreset: \"qa-read-only\",\n allowPermissionChanges: false,\n allowSlashCommands: false,\n allowSettingsMutation: false,\n allowSessionReset: false,\n allowSessionRename: false,\n allowSessionDelete: false,\n allowArbitrarySessionOpen: false,\n toolPolicy: Object.freeze({\n mode: \"allow-list\",\n allow: Object.freeze([]),\n }),\n }),\n embedding: Object.freeze({ frameAncestors: null }),\n accounts: Object.freeze({\n enabled: false,\n allowRegistration: true,\n sessionTtlDays: 30,\n showOtherUsersChats: false,\n }),\n entry: Object.freeze({\n redirectNonLoopback: true,\n cookieBootstrap: true,\n }),\n sources: Object.freeze({\n enabled: true,\n collect: Object.freeze({\n parentAgent: true,\n subagents: true,\n persistTurnEvent: true,\n }),\n display: Object.freeze({\n sidebar: true,\n footer: true,\n groupByKind: true,\n showDiscovered: false,\n showOriginBadges: false,\n maxInitiallyVisiblePerGroup: 8,\n }),\n webSearch: Object.freeze({\n promoteSearchResultsWithoutFetch: true,\n maxPromotedPerSearch: 5,\n }),\n dedupe: Object.freeze({\n normalizeUrls: true,\n stripTrackingParams: true,\n mergeFileRanges: true,\n }),\n filePreview: Object.freeze({\n enabled: true,\n markdownRenderedByDefault: true,\n allowRawToggle: true,\n maxBytes: 2_000_000,\n maxMarkdownRenderBytes: 1_000_000,\n }),\n subagents: Object.freeze({\n inheritSources: true,\n enableReportToolFallback: true,\n markIncompleteOpaqueRuns: true,\n }),\n legacy: Object.freeze({ parseAssistantSourcesBlock: false }),\n }),\n },\n);\n\nfunction optionalText(value: string | null | undefined): string | null {\n const trimmed = value?.trim() ?? \"\";\n return trimmed === \"\" ? null : trimmed;\n}\n\nexport function normalizeRoutePath(value: string): string {\n const trimmed = value.trim();\n if (trimmed === \"\" || !trimmed.startsWith(\"/\")) {\n throw new TypeError(\"dsh-qa-surface: route.path must start with /\");\n }\n const path = trimmed.length > 1 ? trimmed.replace(/\\/+$/u, \"\") : trimmed;\n if (path === \"/\") {\n throw new TypeError(\n \"dsh-qa-surface: route.path cannot replace the operator root\",\n );\n }\n if (path === \"/api\" || path.startsWith(\"/api/\")) {\n throw new TypeError(\"dsh-qa-surface: route.path cannot claim /api\");\n }\n if (path === \"/plugins\" || path.startsWith(\"/plugins/\")) {\n throw new TypeError(\"dsh-qa-surface: route.path cannot claim /plugins\");\n }\n return path;\n}\n\nfunction uniqueQuestions(values: readonly string[]): readonly string[] {\n const questions = [\n ...new Set(values.map((value) => value.trim()).filter(Boolean)),\n ];\n if (questions.some((value) => value.length > 500)) {\n throw new TypeError(\n \"dsh-qa-surface: suggested questions must be at most 500 characters\",\n );\n }\n return Object.freeze(questions);\n}\n\nfunction uniqueToolNames(values: readonly string[]): readonly string[] {\n const names = [\n ...new Set(values.map((value) => value.trim()).filter(Boolean)),\n ];\n if (names.some((value) => value.length > 200)) {\n throw new TypeError(\n \"dsh-qa-surface: lockdown.toolPolicy.allow names must be at most 200 characters\",\n );\n }\n return Object.freeze(names);\n}\n\n/** Materialize defaults and enforce route/session/model safety constraints. */\nexport function resolveConfig(\n input: QaSurfaceConfig = {},\n): ResolvedQaSurfaceConfig {\n const routePath = normalizeRoutePath(\n input.route?.path ?? DEFAULT_QA_SURFACE_CONFIG.route.path,\n );\n const policy =\n input.session?.policy ?? DEFAULT_QA_SURFACE_CONFIG.session.policy;\n const fixedSessionId = optionalText(input.session?.fixedSessionId);\n if (policy === \"fixed\" && fixedSessionId === null) {\n throw new TypeError(\n \"dsh-qa-surface: session.fixedSessionId is required for fixed policy\",\n );\n }\n // The cwd pin is the no-registry alternative to workspaceId; both pin the\n // session to one directory, so together they are a configuration error.\n const cwd = optionalText(input.session?.cwd);\n if (cwd !== null && !/^([a-zA-Z]:[/\\\\]|\\/)/u.test(cwd)) {\n throw new TypeError(\n \"dsh-qa-surface: session.cwd must be an absolute directory path\",\n );\n }\n const workspaceId = optionalText(input.session?.workspaceId);\n if (workspaceId !== null && cwd !== null) {\n throw new TypeError(\n \"dsh-qa-surface: session.workspaceId and session.cwd are mutually exclusive\",\n );\n }\n const provider = optionalText(input.session?.provider);\n const model = optionalText(input.session?.model);\n if ((provider === null) !== (model === null)) {\n throw new TypeError(\n \"dsh-qa-surface: session.provider and session.model must be set together\",\n );\n }\n const storageKey =\n input.session?.storageKey?.trim() ??\n DEFAULT_QA_SURFACE_CONFIG.session.storageKey;\n if (storageKey === \"\") {\n throw new TypeError(\"dsh-qa-surface: session.storageKey cannot be empty\");\n }\n const maxContentWidth =\n input.ui?.maxContentWidth ?? DEFAULT_QA_SURFACE_CONFIG.ui.maxContentWidth;\n if (\n !Number.isSafeInteger(maxContentWidth) ||\n maxContentWidth < 480 ||\n maxContentWidth > 1600\n ) {\n throw new TypeError(\n \"dsh-qa-surface: ui.maxContentWidth must be an integer from 480 to 1600\",\n );\n }\n const lockdownEnabled =\n input.lockdown?.enabled ?? DEFAULT_QA_SURFACE_CONFIG.lockdown.enabled;\n const rawLockdown = input.lockdown as\n Readonly<Record<string, unknown>> | undefined;\n const forbiddenCapabilityFlags = [\n [\"allowPermissionChanges\", rawLockdown?.allowPermissionChanges],\n [\"allowSlashCommands\", rawLockdown?.allowSlashCommands],\n [\"allowSettingsMutation\", rawLockdown?.allowSettingsMutation],\n [\"allowSessionRename\", rawLockdown?.allowSessionRename],\n [\"allowSessionDelete\", rawLockdown?.allowSessionDelete],\n [\"allowArbitrarySessionOpen\", rawLockdown?.allowArbitrarySessionOpen],\n ] as const;\n const weakenedFlag = forbiddenCapabilityFlags.find(\n ([, value]) => value === true,\n );\n if (weakenedFlag !== undefined) {\n throw new TypeError(\n `dsh-qa-surface: lockdown.${weakenedFlag[0]} cannot be enabled`,\n );\n }\n if (\n input.lockdown?.sandboxMode !== undefined &&\n input.lockdown.sandboxMode !== \"read-only\"\n ) {\n throw new TypeError(\n \"dsh-qa-surface: lockdown.sandboxMode must be read-only\",\n );\n }\n if (\n input.lockdown?.approvalPolicy !== undefined &&\n input.lockdown.approvalPolicy !== \"never\"\n ) {\n throw new TypeError(\n \"dsh-qa-surface: lockdown.approvalPolicy must be never\",\n );\n }\n if (\n input.lockdown?.toolPolicy?.mode !== undefined &&\n input.lockdown.toolPolicy.mode !== \"allow-list\"\n ) {\n throw new TypeError(\n \"dsh-qa-surface: lockdown.toolPolicy.mode must be allow-list\",\n );\n }\n const permissionPreset =\n input.lockdown?.permissionPreset?.trim() ??\n DEFAULT_QA_SURFACE_CONFIG.lockdown.permissionPreset;\n if (lockdownEnabled && permissionPreset === \"\") {\n throw new TypeError(\n \"dsh-qa-surface: lockdown.permissionPreset is required when lockdown is enabled\",\n );\n }\n const allowSessionReset =\n input.lockdown?.allowSessionReset ??\n DEFAULT_QA_SURFACE_CONFIG.lockdown.allowSessionReset;\n if (\n lockdownEnabled &&\n (input.ui?.showReset ?? DEFAULT_QA_SURFACE_CONFIG.ui.showReset) &&\n !allowSessionReset\n ) {\n throw new TypeError(\n \"dsh-qa-surface: ui.showReset requires lockdown.allowSessionReset\",\n );\n }\n const maxInitiallyVisiblePerGroup =\n input.sources?.display?.maxInitiallyVisiblePerGroup ??\n DEFAULT_QA_SURFACE_CONFIG.sources.display.maxInitiallyVisiblePerGroup;\n const maxPromotedPerSearch =\n input.sources?.webSearch?.maxPromotedPerSearch ??\n DEFAULT_QA_SURFACE_CONFIG.sources.webSearch.maxPromotedPerSearch;\n const maxBytes =\n input.sources?.filePreview?.maxBytes ??\n DEFAULT_QA_SURFACE_CONFIG.sources.filePreview.maxBytes;\n const maxMarkdownRenderBytes =\n input.sources?.filePreview?.maxMarkdownRenderBytes ??\n DEFAULT_QA_SURFACE_CONFIG.sources.filePreview.maxMarkdownRenderBytes;\n for (const [name, value, min, max] of [\n [\n \"sources.display.maxInitiallyVisiblePerGroup\",\n maxInitiallyVisiblePerGroup,\n 1,\n 100,\n ],\n [\"sources.webSearch.maxPromotedPerSearch\", maxPromotedPerSearch, 0, 50],\n [\"sources.filePreview.maxBytes\", maxBytes, 1_024, 20_000_000],\n [\n \"sources.filePreview.maxMarkdownRenderBytes\",\n maxMarkdownRenderBytes,\n 1_024,\n 10_000_000,\n ],\n ] as const) {\n if (!Number.isSafeInteger(value) || value < min || value > max) {\n throw new TypeError(\n `dsh-qa-surface: ${name} must be an integer from ${min} to ${max}`,\n );\n }\n }\n if (maxMarkdownRenderBytes > maxBytes) {\n throw new TypeError(\n \"dsh-qa-surface: sources.filePreview.maxMarkdownRenderBytes cannot exceed maxBytes\",\n );\n }\n const sessionTtlDays =\n input.accounts?.sessionTtlDays ??\n DEFAULT_QA_SURFACE_CONFIG.accounts.sessionTtlDays;\n if (\n !Number.isSafeInteger(sessionTtlDays) ||\n sessionTtlDays < 1 ||\n sessionTtlDays > 365\n ) {\n throw new TypeError(\n \"dsh-qa-surface: accounts.sessionTtlDays must be an integer from 1 to 365\",\n );\n }\n\n return Object.freeze({\n enabled: input.enabled ?? DEFAULT_QA_SURFACE_CONFIG.enabled,\n route: Object.freeze({\n path: routePath,\n matchChildren:\n input.route?.matchChildren ??\n DEFAULT_QA_SURFACE_CONFIG.route.matchChildren,\n }),\n branding: Object.freeze({\n title:\n input.branding?.title?.trim() ||\n DEFAULT_QA_SURFACE_CONFIG.branding.title,\n subtitle: input.branding?.subtitle?.trim() ?? \"\",\n welcomeMessage:\n input.branding?.welcomeMessage?.trim() ??\n DEFAULT_QA_SURFACE_CONFIG.branding.welcomeMessage,\n placeholder:\n input.branding?.placeholder?.trim() ||\n DEFAULT_QA_SURFACE_CONFIG.branding.placeholder,\n logoUrl: optionalText(input.branding?.logoUrl),\n // Undefined falls back to the default notice; an explicit null or\n // empty string hides the plate entirely.\n disclaimer:\n input.branding?.disclaimer === undefined\n ? DEFAULT_QA_SURFACE_CONFIG.branding.disclaimer\n : (optionalText(input.branding.disclaimer) ?? \"\"),\n }),\n session: Object.freeze({\n policy,\n storageKey,\n cwd,\n workspaceId: optionalText(input.session?.workspaceId),\n fixedSessionId,\n agentPreset: optionalText(input.session?.agentPreset),\n provider,\n model,\n reasoningEffort: optionalText(input.session?.reasoningEffort),\n }),\n ui: Object.freeze({\n showHeader:\n input.ui?.showHeader ?? DEFAULT_QA_SURFACE_CONFIG.ui.showHeader,\n showReset: input.ui?.showReset ?? DEFAULT_QA_SURFACE_CONFIG.ui.showReset,\n showStop: input.ui?.showStop ?? DEFAULT_QA_SURFACE_CONFIG.ui.showStop,\n showTimestamps:\n input.ui?.showTimestamps ?? DEFAULT_QA_SURFACE_CONFIG.ui.showTimestamps,\n showToolActivity:\n input.ui?.showToolActivity ??\n DEFAULT_QA_SURFACE_CONFIG.ui.showToolActivity,\n showReasoning:\n input.ui?.showReasoning ?? DEFAULT_QA_SURFACE_CONFIG.ui.showReasoning,\n renderMarkdown:\n input.ui?.renderMarkdown ?? DEFAULT_QA_SURFACE_CONFIG.ui.renderMarkdown,\n maxContentWidth,\n showSessionList:\n input.ui?.showSessionList ??\n DEFAULT_QA_SURFACE_CONFIG.ui.showSessionList,\n }),\n suggestedQuestions: uniqueQuestions(\n input.suggestedQuestions ?? DEFAULT_QA_SURFACE_CONFIG.suggestedQuestions,\n ),\n interaction: Object.freeze({\n approvals: \"blocked\",\n questions: \"unsupported\",\n }),\n lockdown: Object.freeze({\n enabled: lockdownEnabled,\n enforceFixedAgentPreset:\n input.lockdown?.enforceFixedAgentPreset ??\n DEFAULT_QA_SURFACE_CONFIG.lockdown.enforceFixedAgentPreset,\n enforceFixedWorkspace:\n input.lockdown?.enforceFixedWorkspace ??\n DEFAULT_QA_SURFACE_CONFIG.lockdown.enforceFixedWorkspace,\n enforceFixedModel:\n input.lockdown?.enforceFixedModel ??\n DEFAULT_QA_SURFACE_CONFIG.lockdown.enforceFixedModel,\n sandboxMode: \"read-only\",\n approvalPolicy: \"never\",\n permissionPreset,\n allowPermissionChanges: false,\n allowSlashCommands: false,\n allowSettingsMutation: false,\n allowSessionReset,\n allowSessionRename: false,\n allowSessionDelete: false,\n allowArbitrarySessionOpen: false,\n toolPolicy: Object.freeze({\n mode: \"allow-list\",\n allow: uniqueToolNames(input.lockdown?.toolPolicy?.allow ?? []),\n }),\n }),\n embedding: Object.freeze({\n frameAncestors: optionalText(input.embedding?.frameAncestors),\n }),\n accounts: Object.freeze({\n enabled:\n input.accounts?.enabled ?? DEFAULT_QA_SURFACE_CONFIG.accounts.enabled,\n allowRegistration:\n input.accounts?.allowRegistration ??\n DEFAULT_QA_SURFACE_CONFIG.accounts.allowRegistration,\n sessionTtlDays,\n showOtherUsersChats:\n input.accounts?.showOtherUsersChats ??\n DEFAULT_QA_SURFACE_CONFIG.accounts.showOtherUsersChats,\n }),\n entry: Object.freeze({\n redirectNonLoopback:\n input.entry?.redirectNonLoopback ??\n DEFAULT_QA_SURFACE_CONFIG.entry.redirectNonLoopback,\n cookieBootstrap:\n input.entry?.cookieBootstrap ??\n DEFAULT_QA_SURFACE_CONFIG.entry.cookieBootstrap,\n }),\n sources: Object.freeze({\n enabled:\n input.sources?.enabled ?? DEFAULT_QA_SURFACE_CONFIG.sources.enabled,\n collect: Object.freeze({\n parentAgent:\n input.sources?.collect?.parentAgent ??\n DEFAULT_QA_SURFACE_CONFIG.sources.collect.parentAgent,\n subagents:\n input.sources?.collect?.subagents ??\n DEFAULT_QA_SURFACE_CONFIG.sources.collect.subagents,\n persistTurnEvent:\n input.sources?.collect?.persistTurnEvent ??\n DEFAULT_QA_SURFACE_CONFIG.sources.collect.persistTurnEvent,\n }),\n display: Object.freeze({\n sidebar:\n input.sources?.display?.sidebar ??\n DEFAULT_QA_SURFACE_CONFIG.sources.display.sidebar,\n footer:\n input.sources?.display?.footer ??\n DEFAULT_QA_SURFACE_CONFIG.sources.display.footer,\n groupByKind:\n input.sources?.display?.groupByKind ??\n DEFAULT_QA_SURFACE_CONFIG.sources.display.groupByKind,\n showDiscovered:\n input.sources?.display?.showDiscovered ??\n DEFAULT_QA_SURFACE_CONFIG.sources.display.showDiscovered,\n showOriginBadges:\n input.sources?.display?.showOriginBadges ??\n DEFAULT_QA_SURFACE_CONFIG.sources.display.showOriginBadges,\n maxInitiallyVisiblePerGroup,\n }),\n webSearch: Object.freeze({\n promoteSearchResultsWithoutFetch:\n input.sources?.webSearch?.promoteSearchResultsWithoutFetch ??\n DEFAULT_QA_SURFACE_CONFIG.sources.webSearch\n .promoteSearchResultsWithoutFetch,\n maxPromotedPerSearch,\n }),\n dedupe: Object.freeze({\n normalizeUrls:\n input.sources?.dedupe?.normalizeUrls ??\n DEFAULT_QA_SURFACE_CONFIG.sources.dedupe.normalizeUrls,\n stripTrackingParams:\n input.sources?.dedupe?.stripTrackingParams ??\n DEFAULT_QA_SURFACE_CONFIG.sources.dedupe.stripTrackingParams,\n mergeFileRanges:\n input.sources?.dedupe?.mergeFileRanges ??\n DEFAULT_QA_SURFACE_CONFIG.sources.dedupe.mergeFileRanges,\n }),\n filePreview: Object.freeze({\n enabled:\n input.sources?.filePreview?.enabled ??\n DEFAULT_QA_SURFACE_CONFIG.sources.filePreview.enabled,\n markdownRenderedByDefault:\n input.sources?.filePreview?.markdownRenderedByDefault ??\n DEFAULT_QA_SURFACE_CONFIG.sources.filePreview\n .markdownRenderedByDefault,\n allowRawToggle:\n input.sources?.filePreview?.allowRawToggle ??\n DEFAULT_QA_SURFACE_CONFIG.sources.filePreview.allowRawToggle,\n maxBytes,\n maxMarkdownRenderBytes,\n }),\n subagents: Object.freeze({\n inheritSources:\n input.sources?.subagents?.inheritSources ??\n DEFAULT_QA_SURFACE_CONFIG.sources.subagents.inheritSources,\n enableReportToolFallback:\n input.sources?.subagents?.enableReportToolFallback ??\n DEFAULT_QA_SURFACE_CONFIG.sources.subagents.enableReportToolFallback,\n markIncompleteOpaqueRuns:\n input.sources?.subagents?.markIncompleteOpaqueRuns ??\n DEFAULT_QA_SURFACE_CONFIG.sources.subagents.markIncompleteOpaqueRuns,\n }),\n legacy: Object.freeze({\n parseAssistantSourcesBlock:\n input.sources?.legacy?.parseAssistantSourcesBlock ??\n DEFAULT_QA_SURFACE_CONFIG.sources.legacy.parseAssistantSourcesBlock,\n }),\n }),\n });\n}\n","import type { SettingsScope } from \"@deepseek-ai/dsh-client-ui-settings/client\";\nimport { DEFAULT_QA_SURFACE_CONFIG, resolveConfig } from \"../resolve-config.js\";\nimport type { QaSurfaceConfig, ResolvedQaSurfaceConfig } from \"../types.js\";\n\nexport interface QaConfigSnapshot {\n readonly status: \"loading\" | \"ready\" | \"unavailable\" | \"error\";\n readonly config: ResolvedQaSurfaceConfig;\n readonly error: string | null;\n}\n\n/** Reads the effective Host configuration when the settings namespace cannot. */\nexport type QaConfigFallback = () => Promise<ResolvedQaSurfaceConfig>;\n\n/**\n * Browser projection of the Host-owned qa-surface settings namespace.\n *\n * The DSH gateway pins settings RPCs to loopback, so a browser served over the\n * LAN always sees the namespace as `unavailable`. When the caller supplies the\n * `qaSurface/describe` Remote as a fallback, that channel answers instead: the\n * projection waits in `loading` until it settles, then reports the Host-owned\n * configuration as `ready`. A rejected fallback returns the projection to\n * `unavailable`, exactly as when no fallback exists.\n */\nexport class QaConfigController {\n private readonly listeners = new Set<() => void>();\n private snapshot: QaConfigSnapshot;\n private readonly unsubscribe: () => void;\n private readonly fallback: QaConfigFallback | undefined;\n private fallbackState:\n \"idle\" | \"pending\" | \"ready\" | \"refreshing\" | \"failed\" = \"idle\";\n private fallbackConfig: ResolvedQaSurfaceConfig | undefined;\n private disposed = false;\n\n constructor(\n private readonly scope: SettingsScope<QaSurfaceConfig>,\n fallback?: QaConfigFallback,\n ) {\n this.fallback = fallback;\n this.snapshot = this.project();\n this.unsubscribe = scope.subscribe(() => this.refresh());\n this.refresh();\n }\n\n getSnapshot = (): QaConfigSnapshot => this.snapshot;\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n };\n\n dispose(): void {\n this.disposed = true;\n this.unsubscribe();\n this.listeners.clear();\n }\n\n private project(): QaConfigSnapshot {\n const settings = this.scope.getSnapshot();\n if (settings.status === \"loading\") {\n return {\n status: \"loading\",\n config: DEFAULT_QA_SURFACE_CONFIG,\n error: null,\n };\n }\n if (settings.status === \"unavailable\") {\n if (\n (this.fallbackState === \"ready\" ||\n this.fallbackState === \"refreshing\") &&\n this.fallbackConfig !== undefined\n ) {\n return {\n status: \"ready\",\n config: this.fallbackConfig,\n error: null,\n };\n }\n if (this.fallbackState === \"pending\") {\n return {\n status: \"loading\",\n config: DEFAULT_QA_SURFACE_CONFIG,\n error: null,\n };\n }\n return {\n status: \"unavailable\",\n config: DEFAULT_QA_SURFACE_CONFIG,\n error: null,\n };\n }\n try {\n return {\n status: \"ready\",\n config: resolveConfig(settings.value ?? {}),\n error: null,\n };\n } catch {\n return {\n status: \"error\",\n config: DEFAULT_QA_SURFACE_CONFIG,\n error: \"Настройки помощника недоступны.\",\n };\n }\n }\n\n private refresh(): void {\n this.requestFallbackIfNeeded();\n const projected = this.project();\n const next: QaConfigSnapshot =\n JSON.stringify(projected.config) === JSON.stringify(this.snapshot.config)\n ? { ...projected, config: this.snapshot.config }\n : projected;\n if (\n next.status === this.snapshot.status &&\n next.config === this.snapshot.config &&\n next.error === this.snapshot.error\n ) {\n return;\n }\n this.snapshot = next;\n for (const listener of this.listeners) listener();\n }\n\n /**\n * Re-read the Host configuration after a Host reconnect. Without this, an\n * open page keeps the configuration it fetched at load time: after the Host\n * restarts with a changed deployment config, the next attestation compares\n * its proof against the stale client copy and refuses. While re-reading,\n * the previous answer stays projected — no loading flicker; the snapshot\n * updates only when the answer actually changed.\n */\n refreshFallback(): void {\n if (\n this.disposed ||\n this.fallback === undefined ||\n this.fallbackState === \"idle\" ||\n this.fallbackState === \"pending\" ||\n this.scope.getSnapshot().status === \"ready\"\n ) {\n return;\n }\n this.fallbackState = \"refreshing\";\n void this.fallback().then(\n (config) => {\n if (this.disposed) return;\n try {\n this.fallbackConfig = resolveConfig(config);\n } catch {\n // A malformed answer must not wipe a working previous one.\n }\n this.fallbackState = \"ready\";\n // refresh() keeps the old projection when the answer is unchanged.\n this.refresh();\n },\n (error: unknown) => {\n if (this.disposed) return;\n console.warn(\n \"dsh-qa-surface: Host configuration refresh failed\",\n error,\n );\n this.fallbackState = \"ready\";\n },\n );\n }\n\n /**\n * The fallback trigger rides every refresh: the scope flips to\n * `unavailable` whenever the browser is served over the LAN, which a\n * constructor-time check can miss. The state guard makes repeats a no-op,\n * so one fetch runs per controller lifetime; the recursive refresh lets the\n * pending state surface before the first notification pass.\n */\n private requestFallbackIfNeeded(): void {\n if (\n this.disposed ||\n this.fallback === undefined ||\n this.fallbackState !== \"idle\" ||\n this.scope.getSnapshot().status !== \"unavailable\"\n ) {\n return;\n }\n this.fallbackState = \"pending\";\n this.refresh();\n void this.fallback().then(\n (config) => {\n if (this.disposed) return;\n try {\n this.fallbackConfig = resolveConfig(config);\n this.fallbackState = \"ready\";\n } catch {\n this.fallbackState = \"failed\";\n }\n this.refresh();\n },\n (error: unknown) => {\n if (this.disposed) return;\n console.warn(\n \"dsh-qa-surface: Host configuration is unavailable\",\n error,\n );\n this.fallbackState = \"failed\";\n this.refresh();\n },\n );\n }\n}\n","/** Query hand-off used only by the Host navigation compatibility redirect. */\nexport const QA_NAVIGATION_MARKER = \"__dsh_qa_route\";\n","import type { ResolvedQaSurfaceConfig } from \"../types.js\";\nimport { QA_NAVIGATION_MARKER } from \"../navigation-marker.js\";\n\nexport interface QaRouteSnapshot {\n readonly pathname: string;\n readonly active: boolean;\n}\n\ninterface NavigationHistory {\n pushState(data: unknown, unused: string, url?: string | URL | null): void;\n replaceState(data: unknown, unused: string, url?: string | URL | null): void;\n}\n\ninterface NavigationWindow {\n readonly location: { readonly pathname: string; readonly search?: string };\n readonly history: NavigationHistory;\n addEventListener(type: \"popstate\", listener: () => void): void;\n removeEventListener(type: \"popstate\", listener: () => void): void;\n}\n\nexport function matchesQaRoute(\n pathname: string,\n route: ResolvedQaSurfaceConfig[\"route\"],\n): boolean {\n if (pathname === route.path || pathname === `${route.path}/`) return true;\n if (route.path === \"/\") return route.matchChildren;\n if (!route.matchChildren) return false;\n return pathname.startsWith(`${route.path}/`);\n}\n\n/** Observable route matcher with reversible History API instrumentation. */\nexport class QaRouteController {\n private readonly listeners = new Set<() => void>();\n private route: ResolvedQaSurfaceConfig[\"route\"] = {\n path: \"/qa\",\n matchChildren: true,\n };\n private enabled = false;\n private snapshot: QaRouteSnapshot;\n private readonly originalPushState: NavigationHistory[\"pushState\"];\n private readonly originalReplaceState: NavigationHistory[\"replaceState\"];\n private readonly wrappedPushState: NavigationHistory[\"pushState\"];\n private readonly wrappedReplaceState: NavigationHistory[\"replaceState\"];\n private disposed = false;\n\n constructor(private readonly target: NavigationWindow = window) {\n this.originalPushState = target.history.pushState;\n this.originalReplaceState = target.history.replaceState;\n this.restoreRedirectedPath();\n this.snapshot = this.project();\n const refresh = () => this.refresh();\n const history = target.history;\n const originalPushState = this.originalPushState;\n const originalReplaceState = this.originalReplaceState;\n this.wrappedPushState = function (\n ...args: Parameters<NavigationHistory[\"pushState\"]>\n ) {\n Reflect.apply(originalPushState, history, args);\n refresh();\n };\n this.wrappedReplaceState = function (\n ...args: Parameters<NavigationHistory[\"replaceState\"]>\n ) {\n Reflect.apply(originalReplaceState, history, args);\n refresh();\n };\n target.history.pushState = this.wrappedPushState;\n target.history.replaceState = this.wrappedReplaceState;\n target.addEventListener(\"popstate\", refresh);\n this.removePopstate = () => target.removeEventListener(\"popstate\", refresh);\n }\n\n private readonly removePopstate: () => void;\n\n getSnapshot = (): QaRouteSnapshot => this.snapshot;\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n };\n\n configure(config: ResolvedQaSurfaceConfig, ready = true): void {\n this.route = config.route;\n this.enabled = ready && config.enabled;\n this.refresh();\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.removePopstate();\n if (this.target.history.pushState === this.wrappedPushState) {\n this.target.history.pushState = this.originalPushState;\n }\n if (this.target.history.replaceState === this.wrappedReplaceState) {\n this.target.history.replaceState = this.originalReplaceState;\n }\n this.listeners.clear();\n }\n\n private project(): QaRouteSnapshot {\n const pathname = this.target.location.pathname;\n return {\n pathname,\n active: this.enabled && matchesQaRoute(pathname, this.route),\n };\n }\n\n private restoreRedirectedPath(): void {\n const search = this.target.location.search;\n if (search === undefined || search === \"\") return;\n const requested = new URLSearchParams(search).get(QA_NAVIGATION_MARKER);\n if (\n requested === null ||\n !requested.startsWith(\"/\") ||\n requested.startsWith(\"//\")\n ) {\n return;\n }\n Reflect.apply(this.originalReplaceState, this.target.history, [\n null,\n \"\",\n requested,\n ]);\n }\n\n private refresh(): void {\n if (this.disposed) return;\n const next = this.project();\n if (\n next.pathname === this.snapshot.pathname &&\n next.active === this.snapshot.active\n ) {\n return;\n }\n this.snapshot = next;\n for (const listener of this.listeners) listener();\n }\n}\n","import type {\n QaAccountSession,\n QaAccountUserPublic,\n QaOwnershipEntry,\n ResolvedQaSurfaceConfig,\n} from \"../types.js\";\nimport type { QaAccountsApi, StorageLike } from \"./types.js\";\n\n/** The `(reason: <code>)` marker the Host folds into account wire failures. */\nconst ACCOUNTS_REASON_MARKER = /\\(reason: ([a-z-]+)\\)/u;\n\nexport type QaAccountsSnapshot =\n | { readonly stage: \"checking\" }\n | {\n readonly stage: \"gate\";\n readonly mode: \"login\" | \"register\";\n readonly busy: boolean;\n readonly error: string | null;\n }\n | {\n readonly stage: \"authed\";\n readonly user: QaAccountUserPublic;\n /**\n * Server-known chat ids; the sidebar list authority. Own chats always,\n * plus every mapped chat for an admin (the cross-user grouping view).\n */\n readonly ownedIds: readonly string[];\n /**\n * The full ownership map; admins only, empty for ordinary accounts and\n * whenever the admin listing was refused or unavailable.\n */\n readonly ownership: readonly QaOwnershipEntry[];\n /** Bumped whenever ownedIds or ownership changes; re-projects lists. */\n readonly ownedRevision: number;\n };\n\n/** Union of the own chat ids and every mapped one, own ids first. */\nfunction mergeOwnershipIds(\n ownedIds: readonly string[],\n ownership: readonly QaOwnershipEntry[],\n): readonly string[] {\n if (ownership.length === 0) return ownedIds;\n return [\n ...new Set([...ownedIds, ...ownership.map((entry) => entry.sessionId)]),\n ];\n}\n\n/**\n * Audience-safe copy for the coarse account refusal codes; anything unknown\n * falls back to the generic line.\n */\nexport function accountsErrorMessage(code: string | null): string {\n switch (code) {\n case \"invalid-credentials\":\n return \"Неверный email или пароль.\";\n case \"admin-required\":\n return \"Недостаточно прав: действие доступно администратору.\";\n case \"account-disabled\":\n return \"Аккаунт отключён администратором.\";\n case \"email-taken\":\n return \"Этот email уже зарегистрирован.\";\n case \"invalid-email\":\n return \"Введите корректный email.\";\n case \"weak-password\":\n return \"Пароль должен быть не короче 8 символов.\";\n case \"invalid-display-name\":\n return \"Слишком длинное имя.\";\n case \"registration-disabled\":\n return \"Регистрация на этом сервере отключена.\";\n case \"rate-limited\":\n return \"Слишком много попыток. Подождите минуту.\";\n default:\n return \"Не удалось войти. Попробуйте ещё раз.\";\n }\n}\n\n/** Extract the coarse account reason code from a Host wire failure. */\nexport function accountsReasonOf(failure: unknown): string | null {\n const message =\n typeof failure === \"object\" && failure !== null && \"message\" in failure\n ? String((failure as { message?: unknown }).message ?? \"\")\n : \"\";\n return ACCOUNTS_REASON_MARKER.exec(message)?.at(1) ?? null;\n}\n\nexport interface QaAccountsControllerOptions {\n readonly remote: QaAccountsApi;\n readonly storage: StorageLike | undefined;\n /** Config snapshot getter; the token key follows the deployment identity. */\n readonly config: () => ResolvedQaSurfaceConfig;\n /**\n * The legacy per-browser chat index at login time, for the one-shot\n * ownership migration; conflicts are dropped through {@link forgetChat}.\n */\n readonly legacyChatIds?: () => readonly string[];\n readonly forgetChat?: (sessionId: string) => void;\n}\n\n/**\n * Browser-side account lifecycle: token persistence, the checking → gate →\n * authed state machine, and the ownership bookkeeping the sidebar list is\n * built from. Anonymous/failed identity never blocks a deployment with\n * accounts disabled — the caller simply does not mount this controller.\n */\nexport class QaAccountsController {\n private readonly listeners = new Set<() => void>();\n private snapshot: QaAccountsSnapshot = { stage: \"checking\" };\n private tokenValue: string | null = null;\n private disposed = false;\n\n constructor(private readonly options: QaAccountsControllerOptions) {}\n\n getSnapshot = (): QaAccountsSnapshot => this.snapshot;\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n };\n\n dispose(): void {\n this.disposed = true;\n this.listeners.clear();\n }\n\n /** The bearer token threaded into gated remotes; null while anonymous. */\n /** The bearer token threaded into gated remotes; null while anonymous. */\n token(): string | null {\n return this.tokenValue;\n }\n\n /** Server-owned chat ids (empty until authed); falls back to nothing. */\n ownedIds(): readonly string[] {\n return this.snapshot.stage === \"authed\" ? this.snapshot.ownedIds : [];\n }\n\n /** Boot probe: restore the stored token and ask the Host who it is. */\n async start(): Promise<void> {\n if (this.disposed || this.snapshot.stage !== \"checking\") return;\n this.tokenValue = this.readStoredToken();\n if (this.tokenValue === null) {\n this.publish({ stage: \"gate\", mode: \"login\", busy: false, error: null });\n return;\n }\n try {\n const result = await this.options.remote.accountsWhoami(this.tokenValue);\n if (this.disposed) return;\n if (result.ok && result.value.authenticated) {\n await this.enterSession(this.tokenValue, result.value.user);\n return;\n }\n if (result.ok) {\n // A definite \"not authenticated\": the token is stale or rotated.\n this.tokenValue = null;\n this.clearStoredToken();\n }\n } catch (error) {\n // The connection is down or the Host refused the round trip; keep the\n // token and the checking stage so a reconnect retries the probe.\n console.warn(\"dsh-qa-surface: accounts whoami failed\", error);\n return;\n }\n if (this.disposed) return;\n this.publish({ stage: \"gate\", mode: \"login\", busy: false, error: null });\n }\n\n async login(email: string, password: string): Promise<void> {\n await this.authenticate(\"login\", () =>\n this.options.remote.accountsLogin(email, password),\n );\n }\n\n async register(email: string, password: string): Promise<void> {\n if (this.snapshot.stage !== \"gate\") return;\n await this.authenticate(\"register\", () =>\n this.options.remote.accountsRegister(email, password),\n );\n }\n\n setMode(mode: \"login\" | \"register\"): void {\n if (this.snapshot.stage !== \"gate\" || this.snapshot.busy) return;\n this.publish({ ...this.snapshot, mode, error: null });\n }\n\n /** Drop the token and return to the gate (logout or expired identity). */\n signOut(): void {\n this.tokenValue = null;\n this.clearStoredToken();\n this.publish({ stage: \"gate\", mode: \"login\", busy: false, error: null });\n }\n\n /** Claim one freshly created chat so the ownership map stays current. */\n async claimNewSession(sessionId: string): Promise<void> {\n if (this.tokenValue === null || this.disposed) return;\n try {\n await this.options.remote.accountsClaimSessions(this.tokenValue, [\n sessionId,\n ]);\n } catch (error) {\n console.warn(\"dsh-qa-surface: session claim failed\", error);\n }\n }\n\n private async authenticate(\n mode: \"login\" | \"register\",\n call: () => Promise<\n | { readonly ok: true; readonly value: QaAccountSession }\n | { readonly ok: false; readonly error: unknown }\n >,\n ): Promise<void> {\n if (this.snapshot.stage !== \"gate\" || this.snapshot.busy || this.disposed) {\n return;\n }\n this.publish({ ...this.snapshot, mode, busy: true, error: null });\n try {\n const result = await call();\n if (this.disposed) return;\n if (!result.ok) {\n const reason = accountsReasonOf(result.error);\n // The gate keeps its inputs on a rejection; the copy is coarse.\n this.publish({\n stage: \"gate\",\n mode,\n busy: false,\n error: accountsErrorMessage(reason),\n });\n return;\n }\n const { token, user } = result.value;\n this.tokenValue = token;\n this.saveStoredToken(token);\n await this.enterSession(token, user);\n } catch (error) {\n if (this.disposed) return;\n console.warn(\"dsh-qa-surface: account operation failed\", error);\n this.publish({\n stage: \"gate\",\n mode,\n busy: false,\n error: accountsErrorMessage(null),\n });\n }\n }\n\n /** Own the account, migrate the legacy index, then project authed. */\n private async enterSession(\n token: string,\n user: QaAccountUserPublic,\n ): Promise<void> {\n const migration = this.options.legacyChatIds?.() ?? [];\n let ownedIds: readonly string[] = [];\n let ownership: readonly QaOwnershipEntry[] = [];\n try {\n const claimed = await this.options.remote.accountsClaimSessions(\n token,\n migration,\n );\n // Foreign chats disappear from this browser's index on purpose: their\n // owner claimed them first.\n for (const conflict of claimed.ok ? claimed.value.conflicts : []) {\n this.options.forgetChat?.(conflict);\n }\n const ids = await this.options.remote.accountsOwnedSessions(token);\n ownedIds = ids.ok ? ids.value.ids : [];\n // The cross-user ownership view is a separate operator opt-in. A\n // refusal only costs the grouping, never the admin's own chats.\n if (\n user.role === \"admin\" &&\n this.options.config().accounts.showOtherUsersChats\n ) {\n ownership = await this.fetchOwnership(token);\n }\n } catch (error) {\n console.warn(\"dsh-qa-surface: chat migration claim failed\", error);\n }\n if (this.disposed) return;\n this.publish({\n stage: \"authed\",\n user,\n ownedIds: mergeOwnershipIds(ownedIds, ownership),\n ownership,\n ownedRevision: 1,\n });\n }\n\n /** Refresh the owned list after index changes; cheap enough to re-pull. */\n async refreshOwned(): Promise<void> {\n if (\n this.tokenValue === null ||\n this.disposed ||\n this.snapshot.stage !== \"authed\"\n ) {\n return;\n }\n try {\n const ids = await this.options.remote.accountsOwnedSessions(\n this.tokenValue,\n );\n if (this.disposed || !ids.ok || this.snapshot.stage !== \"authed\") return;\n let ownership = this.snapshot.ownership;\n if (\n this.snapshot.user.role === \"admin\" &&\n this.options.config().accounts.showOtherUsersChats\n ) {\n ownership = await this.fetchOwnership(this.tokenValue);\n if (this.disposed || this.snapshot.stage !== \"authed\") return;\n } else {\n ownership = [];\n }\n const ownedIds = mergeOwnershipIds(ids.value.ids, ownership);\n if (\n JSON.stringify(ownedIds) === JSON.stringify(this.snapshot.ownedIds) &&\n JSON.stringify(ownership) === JSON.stringify(this.snapshot.ownership)\n ) {\n return;\n }\n this.publish({\n ...this.snapshot,\n ownedIds,\n ownership,\n ownedRevision: this.snapshot.ownedRevision + 1,\n });\n } catch (error) {\n console.warn(\"dsh-qa-surface: owned sessions refresh failed\", error);\n }\n }\n\n /** The admin cross-user ownership view; failures degrade to an empty map. */\n private async fetchOwnership(\n token: string,\n ): Promise<readonly QaOwnershipEntry[]> {\n try {\n const listed = await this.options.remote.accountsListOwnership(token);\n return listed.ok ? listed.value.entries : [];\n } catch (error) {\n console.warn(\"dsh-qa-surface: ownership list failed\", error);\n return [];\n }\n }\n\n /** Session id → owner display name; empty unless an admin is signed in. */\n ownerNames(): ReadonlyMap<string, string> {\n if (\n this.snapshot.stage !== \"authed\" ||\n this.snapshot.user.role !== \"admin\" ||\n !this.options.config().accounts.showOtherUsersChats\n ) {\n return new Map();\n }\n return new Map(\n this.snapshot.ownership.map((entry) => [\n entry.sessionId,\n entry.displayName,\n ]),\n );\n }\n\n /**\n * The chat owner's display name for author labels: admins see it on\n * foreign chats only; the owner themself and ordinary accounts see none.\n */\n messageAuthorOf(sessionId: string): string | undefined {\n if (\n this.snapshot.stage !== \"authed\" ||\n this.snapshot.user.role !== \"admin\" ||\n !this.options.config().accounts.showOtherUsersChats\n ) {\n return undefined;\n }\n const entry = this.snapshot.ownership.find(\n (candidate) => candidate.sessionId === sessionId,\n );\n if (entry === undefined || entry.userId === this.snapshot.user.id) {\n return undefined;\n }\n return entry.displayName;\n }\n\n private readStoredToken(): string | null {\n try {\n const key = this.tokenKey();\n const value = this.options.storage?.getItem(key)?.trim() ?? \"\";\n return value === \"\" ? null : value;\n } catch {\n return null;\n }\n }\n\n private saveStoredToken(token: string): void {\n try {\n this.options.storage?.setItem(this.tokenKey(), token);\n } catch {\n // A denied write only costs the browser its stay-logged-in state.\n }\n }\n\n private clearStoredToken(): void {\n try {\n this.options.storage?.removeItem(this.tokenKey());\n } catch {\n // Harmless: the next whoami reports anonymous.\n }\n }\n\n private tokenKey(): string {\n const config = this.options.config();\n return `${config.session.storageKey}:v1:${config.route.path}:account-token`;\n }\n\n private publish(snapshot: QaAccountsSnapshot): void {\n if (this.disposed) return;\n this.snapshot = snapshot;\n for (const listener of this.listeners) listener();\n }\n}\n","import type { StorageLike } from \"./types.js\";\n\n/** Cap on the per-browser chat index so localStorage cannot grow unbounded. */\nconst MAX_INDEXED_CHATS = 50;\n\n/**\n * Browser-local chat bookkeeping: a most-recently-used index of chat ids for\n * the sidebar plus the id of the chat this browser reopens on load. Both live\n * under the deployment's storage key and route path, and every access\n * tolerates a denied or broken store — persistence must never prevent a real\n * DSH session.\n */\nexport class QaChatIndex {\n private readonly storage: StorageLike | undefined;\n private readonly sessionKey: string;\n private readonly chatKey: string;\n\n constructor(storage: StorageLike | undefined, prefix: string) {\n this.storage = storage;\n this.sessionKey = `${prefix}:session`;\n this.chatKey = `${prefix}:chats`;\n }\n\n /** This browser's indexed chat ids, most recently used first. */\n chatIds(): readonly string[] {\n try {\n const raw = this.storage?.getItem(this.chatKey) ?? \"[]\";\n const parsed: unknown = JSON.parse(raw);\n if (!Array.isArray(parsed)) return [];\n return [\n ...new Set(parsed.filter((id): id is string => typeof id === \"string\")),\n ].slice(0, MAX_INDEXED_CHATS);\n } catch {\n return [];\n }\n }\n\n /**\n * Add one chat to the index without reordering anything. Display order is\n * the host's `updatedAt`, so merely opening a chat must not move it — the\n * index is membership only.\n */\n addChat(sessionId: string): void {\n try {\n if (this.chatIds().includes(sessionId)) return;\n const next = [sessionId, ...this.chatIds()].slice(0, MAX_INDEXED_CHATS);\n this.storage?.setItem(this.chatKey, JSON.stringify(next));\n } catch {\n // A denied localStorage write must not prevent the bound chat.\n }\n }\n\n forgetChat(sessionId: string): void {\n try {\n const next = this.chatIds().filter((id) => id !== sessionId);\n this.storage?.setItem(this.chatKey, JSON.stringify(next));\n } catch {\n // A denied localStorage removal is harmless; the id is revalidated later.\n }\n }\n\n /** The persisted chat id this browser reopens on load, or null. */\n activeId(): string | null {\n try {\n const value = this.storage?.getItem(this.sessionKey)?.trim() ?? \"\";\n return value === \"\" ? null : value;\n } catch {\n return null;\n }\n }\n\n saveActive(sessionId: string): void {\n try {\n this.storage?.setItem(this.sessionKey, sessionId);\n } catch {\n // A denied localStorage write must not prevent a real DSH session.\n }\n }\n\n clearActive(): void {\n try {\n this.storage?.removeItem(this.sessionKey);\n } catch {\n // A denied localStorage removal is harmless; the id is revalidated later.\n }\n }\n}\n","import type { QaLockdownProof, ResolvedQaSurfaceConfig } from \"../types.js\";\n\n/** The `(reason: <code>)` marker the Host folds into attestation wire failures. */\nconst ATTESTATION_REASON_MARKER = /\\(reason: ([a-z-]+)\\)/u;\n\n/**\n * Browser-side reading of Host policy attestation: one error type the session\n * lifecycle branches on, plus pure diagnostics for the console. The specific\n * mismatch facts stay in the Host logs; a refusal only reveals the coarse\n * reason class and an operator hint.\n */\nexport class QaPolicyAttestationError extends Error {\n constructor() {\n super(\"QA session policy could not be attested.\");\n this.name = \"QaPolicyAttestationError\";\n }\n}\n\n/**\n * Extract the coarse attestation reason code from a Host wire failure, if the\n * failure carries the marker.\n */\nexport function attestationReasonOf(\n failure:\n | {\n readonly message?: string;\n }\n | undefined\n | null,\n): string | null {\n const match = ATTESTATION_REASON_MARKER.exec(failure?.message ?? \"\");\n const reason = match?.[1];\n return reason === undefined ? null : reason;\n}\n\nexport function attestationHint(reason: string | null): string {\n if (reason === \"unknown-tools\") {\n return \"A lockdown.toolPolicy name is not mounted in this session's tool catalog — check the deployment agent preset and the tool's server availability.\";\n }\n if (reason === \"workspace-unavailable\") {\n return \"The configured session.workspaceId does not match a registered workspace - create the workspace or fix the id (session.cwd is the no-registry alternative).\";\n }\n if (reason === \"composition-mismatch\") {\n return \"The session's agent preset, workspace or model no longer matches the deployment QA config.\";\n }\n if (reason === \"permission-preset\") {\n return \"The configured permission preset did not resolve to the pinned sandbox/approval policy.\";\n }\n if (reason === \"adoption-refused\") {\n return \"This browser tried to adopt a session created outside the current QA policy.\";\n }\n if (reason === \"session-owned-elsewhere\") {\n return \"The session belongs to another QA account; the deployment's ownership map refused this browser.\";\n }\n if (reason === \"auth-required\") {\n return \"The account token is absent, expired or rotated - sign in again through the QA gate.\";\n }\n return \"The specific mismatch facts are written to the Host logs.\";\n}\n\n/**\n * Whether a Host proof answers the deployment lockdown config this browser\n * holds. Every field must match; the allow-list is compared as exact JSON so\n * order differences refuse too, mirroring the Host's pinned list.\n */\nexport function proofMatchesConfig(\n proof: QaLockdownProof,\n lockdown: ResolvedQaSurfaceConfig[\"lockdown\"],\n sessionId: string,\n): boolean {\n return (\n proof.sessionId === sessionId &&\n proof.enabled &&\n proof.agentPresetMatches &&\n proof.workspaceMatches &&\n proof.modelMatches &&\n proof.sandboxIsReadOnly &&\n proof.approvalIsNever &&\n proof.permissionPreset === lockdown.permissionPreset &&\n proof.toolPolicyLoaded &&\n JSON.stringify(proof.toolAllowList) ===\n JSON.stringify(lockdown.toolPolicy.allow)\n );\n}\n","/**\n * Per-chat cache of resolved attachment URLs. Attachment reads are\n * session-scoped (the loader reads the bound session's durable store), and\n * attachment ids are only unique within a chat, so both the cache and the\n * blob lifetime are keyed by chat, not by the page.\n */\nexport class SessionAssetRepository {\n private readonly bySession = new Map<string, Map<string, Promise<string>>>();\n\n /** Resolve one attachment of one chat, deduplicating concurrent reads. */\n resolve(\n sessionId: string,\n attachmentId: string,\n load: (attachmentId: string) => Promise<string>,\n ): Promise<string> {\n const byAttachment =\n this.bySession.get(sessionId) ?? new Map<string, Promise<string>>();\n this.bySession.set(sessionId, byAttachment);\n let pending = byAttachment.get(attachmentId);\n if (pending === undefined) {\n pending = load(attachmentId);\n byAttachment.set(attachmentId, pending);\n // A failed read must not poison the slot: the broken view retries by\n // re-resolving on demand.\n pending.catch(() => {\n if (byAttachment.get(attachmentId) === pending)\n byAttachment.delete(attachmentId);\n });\n }\n return pending;\n }\n\n /**\n * Revoke the chat's blob URLs and drop its cache. Data URLs need no\n * revocation; a failed resolution never produced a URL at all.\n */\n release(sessionId: string): void {\n const byAttachment = this.bySession.get(sessionId);\n if (byAttachment === undefined) return;\n this.bySession.delete(sessionId);\n for (const pending of byAttachment.values())\n void pending.then(revokeIfBlob, () => undefined);\n }\n\n dispose(): void {\n for (const sessionId of [...this.bySession.keys()]) this.release(sessionId);\n }\n}\n\nfunction revokeIfBlob(url: string): void {\n revokeObjectUrlIfBlob(url);\n}\n\n/** Revoke one blob URL; data URLs (and other runtimes) need nothing. */\nexport function revokeObjectUrlIfBlob(url: string): void {\n if (url.startsWith(\"blob:\") && typeof URL.revokeObjectURL === \"function\") {\n URL.revokeObjectURL(url);\n }\n}\n","import type { SessionId } from \"@deepseek-ai/dsh-client-connection/client\";\nimport type { WorkspaceId } from \"@deepseek-ai/dsh-workspace/types\";\nimport type { ResolvedQaSurfaceConfig } from \"../types.js\";\nimport type { QaSessions, QaSessionsApi } from \"./types.js\";\n\n/** The wire failure's code plus its message — preset composition reasons (a\n * broken loader entry, a missing tool) ride the message and never anywhere\n * else, so collapsing to the code costs the operator the whole diagnosis. */\nfunction wireFailure(error: unknown): string {\n const code =\n typeof error === \"object\" && error !== null && \"code\" in error\n ? String((error as { code?: unknown }).code ?? \"\")\n : \"\";\n const message =\n typeof error === \"object\" && error !== null && \"message\" in error\n ? String((error as { message?: unknown }).message ?? \"\")\n : \"\";\n return message === \"\" ? code : `${code}: ${message}`;\n}\n\n/**\n * Create one Host session and pin the configured preset and model onto the\n * still-blank session. The creation wire takes no preset, so\n * agentPresets/select recomposes the agent and durably logs\n * `agent-preset/selected`, which the client projection replays. The session\n * is addressed only here — no prompt can run before the caller attests the\n * composed preset.\n */\nexport async function createQaSession(args: {\n readonly sessions: QaSessions;\n readonly api: QaSessionsApi;\n readonly config: ResolvedQaSurfaceConfig;\n}): Promise<string> {\n const { sessions, api, config } = args;\n const created = await sessions.create({\n ...(config.session.workspaceId !== null\n ? { workspaceId: config.session.workspaceId as WorkspaceId }\n : config.session.cwd !== null\n ? { cwd: config.session.cwd }\n : {}),\n });\n const id = String(created);\n if (config.session.agentPreset !== null) {\n const selectedPreset = await api.selectAgentPreset(\n id as SessionId,\n config.session.agentPreset,\n );\n if (!selectedPreset.ok) {\n throw new Error(wireFailure(selectedPreset.error));\n }\n }\n if (config.session.provider !== null && config.session.model !== null) {\n const selected = await api.selectModel({\n sessionId: id as SessionId,\n provider: config.session.provider,\n model: config.session.model,\n ...(config.session.reasoningEffort === null\n ? {}\n : { reasoningEffort: config.session.reasoningEffort }),\n });\n if (!selected.ok) throw new Error(wireFailure(selected.error));\n }\n return id;\n}\n","import {\n attestationHint,\n attestationReasonOf,\n proofMatchesConfig,\n} from \"./attestation.js\";\nimport type { QaSecureSession } from \"./types.js\";\nimport type { ResolvedQaSurfaceConfig } from \"../types.js\";\n\nexport type QaAttestationOutcome =\n | { readonly ok: true }\n | {\n readonly ok: false;\n /** The identity is absent or expired; the caller returns to the gate. */\n readonly authRequired: boolean;\n readonly reason: string | null;\n };\n\n/**\n * One send-time policy attestation against the Host admission gate. The\n * QA-facing message stays generic by design; the coarse reason plus an\n * operator hint go to the console once per refusal.\n */\nexport async function attestQaPolicy(args: {\n readonly secureSession: QaSecureSession;\n readonly token: string;\n readonly sessionId: string;\n readonly lockdown: ResolvedQaSurfaceConfig[\"lockdown\"];\n readonly report: boolean;\n}): Promise<QaAttestationOutcome> {\n try {\n const result = await args.secureSession(args.token, args.sessionId);\n if (!result.ok) {\n const reason = attestationReasonOf(\n result.error as { readonly message?: string },\n );\n if (reason === \"auth-required\") {\n if (args.report) {\n console.error(\n \"dsh-qa-surface: policy attestation failed (reason: auth-required). The account token is absent or expired.\",\n );\n }\n return { ok: false, authRequired: true, reason };\n }\n return reject(args, reason);\n }\n if (!proofMatchesConfig(result.value, args.lockdown, args.sessionId)) {\n return reject(args, \"proof-mismatch\");\n }\n return { ok: true };\n } catch (error) {\n if (args.report) {\n console.error(\"dsh-qa-surface: policy attestation request failed\", error);\n }\n return { ok: false, authRequired: false, reason: null };\n }\n}\n\nfunction reject(\n args: { readonly report: boolean },\n reason: string | null,\n): QaAttestationOutcome {\n if (args.report) {\n console.error(\n `dsh-qa-surface: policy attestation failed (reason: ${reason ?? \"unknown\"}). ${attestationHint(reason)}`,\n );\n }\n return { ok: false, authRequired: false, reason };\n}\n","import type { QaTurnSources } from \"../types.js\";\nimport type { QaSourceApi } from \"./types.js\";\n\n/**\n * Host-side provenance of the bound chat. The client projects turn sources\n * from durable conversation events; the Host bundle (which also carries\n * subagent-inherited evidence) is fetched on the side and merged by turn,\n * Host data winning over the projection.\n */\nexport class QaHostSourceBridge {\n private bundles: readonly QaTurnSources[] = [];\n private signature = \"\";\n private refreshing = false;\n /** Bumped on reset so a stale in-flight fetch never lands. */\n private generation = 0;\n\n constructor(\n private readonly sourceApi: QaSourceApi,\n private readonly token: () => string,\n ) {}\n\n /** Leave the chat: drop its bundles; merging degrades to the projection. */\n reset(): void {\n this.generation += 1;\n this.bundles = [];\n this.signature = \"\";\n this.refreshing = false;\n }\n\n merge(projected: readonly QaTurnSources[]): readonly QaTurnSources[] {\n const merged = new Map<number, QaTurnSources>();\n for (const bundle of projected) merged.set(bundle.turn, bundle);\n for (const bundle of this.bundles) merged.set(bundle.turn, bundle);\n return [...merged.values()].sort((left, right) => left.turn - right.turn);\n }\n\n /**\n * Fetch the Host bundles of one chat; a changed payload republishes through\n * the callback. Repeated calls coalesce while one is in flight, and a\n * response that outlives the chat is dropped.\n */\n async refresh(sessionId: string, onChanged: () => void): Promise<void> {\n if (this.refreshing) return;\n const generation = this.generation;\n this.refreshing = true;\n try {\n const result = await this.sourceApi.sources(this.token(), sessionId);\n if (!result.ok || generation !== this.generation) return;\n const signature = JSON.stringify(result.value);\n if (signature === this.signature) return;\n this.signature = signature;\n this.bundles = result.value;\n onChanged();\n } finally {\n if (generation === this.generation) this.refreshing = false;\n }\n }\n}\n","import type { ClientRemote } from \"@deepseek-ai/dsh-api-gateway/client\";\nimport type {\n ISessions,\n SessionFace,\n} from \"@deepseek-ai/dsh-api-session-controller/client\";\nimport type {} from \"@deepseek-ai/dsh-api-session-controller/remote\";\nimport type {} from \"@deepseek-ai/dsh-agent-presets/remote\";\nimport type { UiConversation } from \"@deepseek-ai/dsh-client-ui-conversation/client\";\nimport type {\n QaAccountSession,\n QaClaimResult,\n QaLockdownProof,\n QaOwnershipEntry,\n QaSessionState,\n QaSourceFilePreview,\n QaTurnSources,\n QaWhoamiResult,\n} from \"../types.js\";\n\n/** Wire content one prompt carries: text plus base64 image uploads. */\nexport type QaPromptContent = Parameters<SessionFace[\"prompt\"]>[0];\n\n/** DSH session runtime surface the QA controller is allowed to touch. */\nexport type QaSessions = ISessions;\n\n/** Narrow client API slice used to pin the preset and model of a fresh chat. */\nexport type QaSessionsApi = {\n selectModel: ClientRemote[\"session\"][\"selectModel\"];\n selectAgentPreset: ClientRemote[\"agentPresets\"][\"select\"];\n};\n\n/**\n * Conversation assembly the QA transcript is projected from: the per-Session\n * binding carries the assembled Chat view (nodes, partials, tool calls).\n */\nexport type QaConversation = Pick<UiConversation, \"binding\">;\n\n/**\n * Attestation channel to the Host admission boundary\n * (`qaSurface/secureSession`). The account token rides as the first argument\n * when accounts are enabled; an empty string is the anonymous caller.\n */\nexport type QaSecureSession = (\n token: string,\n sessionId: string,\n) => Promise<\n | { readonly ok: true; readonly value: QaLockdownProof }\n | { readonly ok: false; readonly error: unknown }\n>;\n\nexport interface QaSourceApi {\n sources(\n token: string,\n sessionId: string,\n ): Promise<\n | { readonly ok: true; readonly value: readonly QaTurnSources[] }\n | { readonly ok: false; readonly error: unknown }\n >;\n readSourceFile(\n token: string,\n sessionId: string,\n sourcePath: string,\n ): Promise<\n | { readonly ok: true; readonly value: QaSourceFilePreview }\n | { readonly ok: false; readonly error: unknown }\n >;\n}\n\n/** A source API with the account token already bound at the call site. */\nexport type QaBoundSourceApi = {\n sources(\n sessionId: string,\n ): Promise<\n | { readonly ok: true; readonly value: readonly QaTurnSources[] }\n | { readonly ok: false; readonly error: unknown }\n >;\n readSourceFile(\n sessionId: string,\n sourcePath: string,\n ): Promise<\n | { readonly ok: true; readonly value: QaSourceFilePreview }\n | { readonly ok: false; readonly error: unknown }\n >;\n};\n\n/** Account remotes exposed by the plugin's own typert namespace. */\nexport interface QaAccountsApi {\n accountsWhoami(token: string): Promise<RemoteResult<QaWhoamiResult>>;\n accountsLogin(\n email: string,\n password: string,\n ): Promise<RemoteResult<QaAccountSession>>;\n accountsRegister(\n email: string,\n password: string,\n ): Promise<RemoteResult<QaAccountSession>>;\n accountsClaimSessions(\n token: string,\n sessionIds: readonly string[],\n ): Promise<RemoteResult<QaClaimResult>>;\n accountsOwnedSessions(\n token: string,\n ): Promise<RemoteResult<{ readonly ids: readonly string[] }>>;\n accountsListOwnership(\n token: string,\n ): Promise<RemoteResult<{ readonly entries: readonly QaOwnershipEntry[] }>>;\n}\n\ntype RemoteResult<Value> =\n | { readonly ok: true; readonly value: Value }\n | { readonly ok: false; readonly error: unknown };\n\n/** Minimal persistence contract; backed by `window.localStorage` in the app. */\nexport interface StorageLike {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\n/** The state projected while no QA chat is bound (route inactive or booting). */\nexport const QA_SESSION_IDLE_STATE: QaSessionState = Object.freeze({\n phase: \"idle\",\n sessionId: null,\n messages: Object.freeze([]),\n error: null,\n canSend: false,\n canStop: false,\n chatsRevision: 0,\n sources: Object.freeze([]),\n sourcesComplete: true,\n incompleteSourceOrigins: undefined,\n viewingSubagent: null,\n});\n","/**\n * Resolve with the first snapshot of an observable source that satisfies\n * `predicate`, or reject after `timeoutMs`. This is the DSH-runtime glue the\n * QA surface needs instead of ad-hoc sleeps; the source only has to expose\n * the getSnapshot/subscribe store pair used across the client bundle.\n */\nexport function waitFor<T>(\n source: {\n getSnapshot(): T;\n subscribe(listener: () => void): () => void;\n },\n predicate: (value: T) => boolean,\n timeoutMs: number,\n): Promise<T> {\n const current = source.getSnapshot();\n if (predicate(current)) return Promise.resolve(current);\n return new Promise<T>((resolve, reject) => {\n let settled = false;\n const timeout: { id?: ReturnType<typeof setTimeout> } = {};\n let unsubscribe: () => void = () => undefined;\n const finish = (value: T) => {\n if (settled) return;\n settled = true;\n if (timeout.id !== undefined) clearTimeout(timeout.id);\n unsubscribe();\n resolve(value);\n };\n unsubscribe = source.subscribe(() => {\n const next = source.getSnapshot();\n if (predicate(next)) finish(next);\n });\n // Tolerate observable implementations that notify synchronously while a\n // subscriber is being installed, and close that subscription afterward.\n if (settled) {\n unsubscribe();\n return;\n }\n const afterSubscribe = source.getSnapshot();\n if (predicate(afterSubscribe)) {\n finish(afterSubscribe);\n return;\n }\n timeout.id = setTimeout(() => {\n if (settled) return;\n settled = true;\n unsubscribe();\n reject(new Error(\"Timed out waiting for the DSH runtime.\"));\n }, timeoutMs);\n });\n}\n","import type { QaSourceLocation } from \"./types.js\";\n\nconst TRACKING_PARAMETERS = new Set([\n \"fbclid\",\n \"gclid\",\n \"mc_cid\",\n \"mc_eid\",\n \"msclkid\",\n]);\n\n/** Strip model-added XML-like wrappers without interpreting arbitrary prose. */\nexport function unwrapSourceTarget(value: string): string {\n return value.replace(/<\\/?[a-zA-Z][^>]*>/gu, \"\").trim();\n}\n\n/** Canonical HTTP(S) identity while retaining business-relevant parameters. */\nexport function canonicalizeUrl(\n value: string,\n options: {\n readonly normalize?: boolean;\n readonly stripTrackingParams?: boolean;\n } = {},\n): string | null {\n try {\n const url = new URL(unwrapSourceTarget(value));\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return null;\n const normalize = options.normalize ?? true;\n const stripTrackingParams = options.stripTrackingParams ?? true;\n if (normalize) url.hash = \"\";\n url.username = \"\";\n url.password = \"\";\n if (stripTrackingParams) {\n for (const key of [...url.searchParams.keys()]) {\n if (\n key.toLowerCase().startsWith(\"utm_\") ||\n TRACKING_PARAMETERS.has(key.toLowerCase())\n ) {\n url.searchParams.delete(key);\n }\n }\n }\n if (normalize) {\n url.searchParams.sort();\n if (url.pathname !== \"/\")\n url.pathname = url.pathname.replace(/\\/+$/u, \"\");\n }\n return url.toString();\n } catch {\n return null;\n }\n}\n\nfunction lexicalPath(value: string): string {\n const normalized = unwrapSourceTarget(value).replaceAll(\"\\\\\", \"/\");\n const drive = /^[a-zA-Z]:/u.exec(normalized)?.[0];\n const absolute = normalized.startsWith(\"/\") || drive !== undefined;\n const body =\n drive === undefined ? normalized : normalized.slice(drive.length);\n const parts: string[] = [];\n for (const part of body.split(\"/\")) {\n if (part === \"\" || part === \".\") continue;\n if (part === \"..\") {\n if (parts.length > 0 && parts.at(-1) !== \"..\") parts.pop();\n else if (!absolute) parts.push(part);\n continue;\n }\n parts.push(part);\n }\n const prefix =\n drive === undefined ? (absolute ? \"/\" : \"\") : `${drive[0]?.toLowerCase()}:`;\n return `${prefix}${prefix !== \"\" && parts.length > 0 ? \"/\" : \"\"}${parts.join(\"/\")}`;\n}\n\n/** Normalize separators and, when possible, make a path workspace-relative. */\nexport function canonicalizeWorkspacePath(\n value: string,\n workspaceRoot?: string,\n): string {\n const path = lexicalPath(value);\n if (workspaceRoot === undefined || workspaceRoot.trim() === \"\") return path;\n const root = lexicalPath(workspaceRoot).replace(/\\/$/u, \"\");\n const caseInsensitive = /^[a-z]:/iu.test(root);\n const comparedPath = caseInsensitive ? path.toLowerCase() : path;\n const comparedRoot = caseInsensitive ? root.toLowerCase() : root;\n if (comparedPath === comparedRoot) return \".\";\n if (comparedPath.startsWith(`${comparedRoot}/`))\n return path.slice(root.length + 1);\n return path;\n}\n\nfunction locationKey(location: QaSourceLocation): string {\n return [\n location.path ?? \"\",\n location.anchor ?? \"\",\n location.jiraKey ?? \"\",\n location.confluencePageId ?? \"\",\n ].join(\"\\u0000\");\n}\n\n/** Union exact anchors and compact overlapping or adjacent ranges. */\nexport function compactLocations(\n locations: readonly QaSourceLocation[],\n): readonly QaSourceLocation[] {\n const groups = new Map<string, QaSourceLocation[]>();\n for (const location of locations) {\n const key = locationKey(location);\n const group = groups.get(key) ?? [];\n group.push(location);\n groups.set(key, group);\n }\n const output: QaSourceLocation[] = [];\n for (const group of groups.values()) {\n const ranged = group\n .flatMap((item) => {\n const lineStart = item.lineStart ?? item.lineEnd;\n const lineEnd = item.lineEnd ?? item.lineStart;\n return lineStart === undefined || lineEnd === undefined\n ? []\n : [{ ...item, lineStart, lineEnd }];\n })\n .sort((left, right) => left.lineStart - right.lineStart);\n const plain = group.find(\n (item) => item.lineStart === undefined && item.lineEnd === undefined,\n );\n if (plain !== undefined && ranged.length === 0) output.push(plain);\n for (const range of ranged) {\n const previous = output.at(-1);\n if (\n previous !== undefined &&\n locationKey(previous) === locationKey(range) &&\n previous.lineEnd !== undefined &&\n range.lineStart <= previous.lineEnd + 1\n ) {\n output[output.length - 1] = {\n ...previous,\n lineEnd: Math.max(previous.lineEnd, range.lineEnd),\n };\n } else {\n output.push(range);\n }\n }\n }\n return output;\n}\n","import { compactLocations } from \"./normalize.js\";\nimport type {\n QaSourceEvidence,\n QaSourceOrigin,\n QaSourceReference,\n} from \"./types.js\";\n\nconst EVIDENCE_STRENGTH: Readonly<Record<QaSourceEvidence, number>> = {\n discovered: 0,\n inherited: 1,\n reported: 2,\n queried: 3,\n read: 4,\n fetched: 4,\n};\n\nfunction originKey(origin: QaSourceOrigin): string {\n return [\n origin.sessionId,\n origin.turn,\n origin.step ?? \"\",\n origin.toolCallId ?? \"\",\n origin.agentId ?? \"\",\n origin.subagentRunId ?? \"\",\n ].join(\"\\u0000\");\n}\n\nfunction mergeOrigins(\n left: readonly QaSourceOrigin[],\n right: readonly QaSourceOrigin[],\n): readonly QaSourceOrigin[] {\n const seen = new Set<string>();\n return [...left, ...right].filter((origin) => {\n const key = originKey(origin);\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n}\n\nfunction bestText(\n left: string | undefined,\n right: string | undefined,\n): string | undefined {\n if (left === undefined || left === \"\") return right;\n if (right === undefined || right === \"\") return left;\n return right.length > left.length ? right : left;\n}\n\nfunction mergePair(\n left: QaSourceReference,\n right: QaSourceReference,\n mergeFileRanges: boolean,\n): QaSourceReference {\n const stronger =\n EVIDENCE_STRENGTH[right.evidence] > EVIDENCE_STRENGTH[left.evidence]\n ? right\n : left;\n const leftTitleExplicit = left.metadata?.titleExplicit === true;\n const rightTitleExplicit = right.metadata?.titleExplicit === true;\n const uri = bestText(left.uri, right.uri);\n const path = bestText(left.path, right.path);\n const snippet = bestText(left.snippet, right.snippet);\n return {\n ...left,\n kind: stronger.kind,\n title: rightTitleExplicit\n ? right.title\n : leftTitleExplicit\n ? left.title\n : right.score > left.score\n ? right.title\n : (bestText(left.title, right.title) ?? left.title),\n ...(uri === undefined ? {} : { uri }),\n ...(path === undefined ? {} : { path }),\n ...(snippet === undefined ? {} : { snippet }),\n locations: mergeFileRanges\n ? compactLocations([...left.locations, ...right.locations])\n : [\n ...new Map(\n [...left.locations, ...right.locations].map((location) => [\n JSON.stringify(location),\n location,\n ]),\n ).values(),\n ],\n evidence: stronger.evidence,\n origins: mergeOrigins(left.origins, right.origins),\n score: Math.max(left.score, right.score),\n metadata: { ...left.metadata, ...right.metadata },\n };\n}\n\n/** Merge by canonical id and rank by score, preserving first-use order on ties. */\nexport function dedupeAndRankSources(\n sources: readonly QaSourceReference[],\n options: { readonly mergeFileRanges?: boolean } = {},\n): readonly QaSourceReference[] {\n const merged = new Map<\n string,\n { source: QaSourceReference; order: number }\n >();\n sources.forEach((source, order) => {\n const previous = merged.get(source.id);\n merged.set(source.id, {\n source:\n previous === undefined\n ? source\n : mergePair(previous.source, source, options.mergeFileRanges ?? true),\n order: previous?.order ?? order,\n });\n });\n return [...merged.values()]\n .sort(\n (left, right) =>\n right.source.score - left.source.score || left.order - right.order,\n )\n .map(({ source }) => source);\n}\n","import { dedupeAndRankSources } from \"./dedupe.js\";\nimport type {\n QaSourceReference,\n QaTurnSources,\n SourceExtractorContext,\n} from \"./types.js\";\nimport type { SourceExtractorRegistry } from \"./extractors.js\";\n\nexport interface QaSourceCollectorOptions {\n readonly sessionId: string;\n readonly turn: number;\n readonly registry: SourceExtractorRegistry;\n readonly displayScoreThreshold?: number;\n readonly mergeFileRanges?: boolean;\n}\n\n/** Mutable turn-local accumulator; snapshots are immutable plain data. */\nexport class QaSourceCollector {\n private readonly collected: QaSourceReference[] = [];\n private readonly incompleteOrigins: {\n subagentRunId?: string;\n provider?: string;\n reason: string;\n }[] = [];\n private readonly threshold: number;\n\n constructor(private readonly options: QaSourceCollectorOptions) {\n this.threshold = options.displayScoreThreshold ?? 50;\n }\n\n observe(context: SourceExtractorContext): void {\n this.collected.push(...this.options.registry.extract(context));\n }\n\n add(sources: readonly QaSourceReference[]): void {\n this.collected.push(...sources);\n }\n\n markIncomplete(origin: {\n readonly subagentRunId?: string;\n readonly provider?: string;\n readonly reason: string;\n }): void {\n this.incompleteOrigins.push({ ...origin });\n }\n\n snapshot(): QaTurnSources {\n const ranked = dedupeAndRankSources(\n this.collected,\n this.options.mergeFileRanges === undefined\n ? {}\n : { mergeFileRanges: this.options.mergeFileRanges },\n );\n const sources = ranked.filter(\n (source) =>\n source.evidence !== \"discovered\" && source.score >= this.threshold,\n );\n const discovered = ranked.filter((source) => !sources.includes(source));\n return {\n version: 1,\n sessionId: this.options.sessionId,\n turn: this.options.turn,\n sources,\n ...(discovered.length === 0 ? {} : { discovered }),\n complete: this.incompleteOrigins.length === 0,\n ...(this.incompleteOrigins.length === 0\n ? {}\n : { incompleteOrigins: [...this.incompleteOrigins] }),\n };\n }\n}\n","import { canonicalizeUrl } from \"./normalize.js\";\nimport type {\n QaSourceReference,\n SourceExtractor,\n SourceExtractorContext,\n} from \"./types.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nfunction record(value: unknown): UnknownRecord | undefined {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as UnknownRecord)\n : undefined;\n}\n\nfunction records(value: unknown, depth = 0): UnknownRecord[] {\n if (depth > 4) return [];\n if (Array.isArray(value))\n return value.flatMap((item) => records(item, depth + 1));\n const item = record(value);\n if (item === undefined) return [];\n return [\n item,\n ...Object.values(item).flatMap((child) => records(child, depth + 1)),\n ];\n}\n\nfunction text(item: UnknownRecord, ...keys: string[]): string | undefined {\n for (const key of keys) {\n const value = item[key];\n if (typeof value === \"string\" && value.trim() !== \"\") return value.trim();\n }\n return undefined;\n}\n\nfunction contextRecords(context: SourceExtractorContext): UnknownRecord[] {\n return [...records(context.presentation), ...records(context.result)];\n}\n\ntype UrlOptions = Parameters<typeof canonicalizeUrl>[1];\n\nfunction canonicalUri(\n item: UnknownRecord,\n urlOptions: UrlOptions,\n): string | undefined {\n const raw = text(item, \"url\", \"uri\", \"webUrl\", \"browseUrl\", \"self\");\n if (raw === undefined) return undefined;\n return canonicalizeUrl(raw, urlOptions) ?? undefined;\n}\n\nexport function createJiraExtractor(\n urlOptions: UrlOptions = {},\n): SourceExtractor {\n return {\n id: \"structured-jira\",\n matches(context) {\n return context.toolName.toLowerCase().includes(\"jira\");\n },\n extract(context) {\n const seen = new Set<string>();\n return contextRecords(context).flatMap((item): QaSourceReference[] => {\n const rawKey = text(item, \"key\", \"issueKey\", \"issue_key\");\n const key = rawKey?.toUpperCase();\n if (\n key === undefined ||\n !/^[A-Z][A-Z0-9]+-\\d+$/u.test(key) ||\n seen.has(key)\n )\n return [];\n seen.add(key);\n const fields = record(item.fields);\n const summary =\n text(item, \"summary\", \"title\") ??\n (fields === undefined ? undefined : text(fields, \"summary\"));\n const uri = canonicalUri(item, urlOptions);\n return [\n {\n id: `jira:${key}`,\n kind: \"jira\",\n title: summary === undefined ? key : `${key} — ${summary}`,\n ...(uri === undefined ? {} : { uri }),\n locations: [{ jiraKey: key }],\n evidence: \"queried\",\n origins: [context.origin],\n score: 90,\n },\n ];\n });\n },\n };\n}\n\nexport function createConfluenceExtractor(\n urlOptions: UrlOptions = {},\n): SourceExtractor {\n return {\n id: \"structured-confluence\",\n matches(context) {\n return context.toolName.toLowerCase().includes(\"confluence\");\n },\n extract(context) {\n const seen = new Set<string>();\n return contextRecords(context).flatMap((item): QaSourceReference[] => {\n const id =\n text(item, \"pageId\", \"page_id\", \"contentId\", \"content_id\") ??\n (text(item, \"type\") === \"page\" ? text(item, \"id\") : undefined);\n const title = text(item, \"title\", \"name\");\n if (id === undefined || title === undefined || seen.has(id)) return [];\n seen.add(id);\n const uri = canonicalUri(item, urlOptions);\n return [\n {\n id: `confluence:${id}`,\n kind: \"confluence\",\n title,\n ...(uri === undefined ? {} : { uri }),\n locations: [{ confluencePageId: id }],\n evidence: \"queried\",\n origins: [context.origin],\n score: 90,\n metadata: {\n ...(text(item, \"spaceKey\", \"space_key\") === undefined\n ? {}\n : { spaceKey: text(item, \"spaceKey\", \"space_key\") ?? \"\" }),\n },\n },\n ];\n });\n },\n };\n}\n\nexport function createKnowledgeExtractor(\n urlOptions: UrlOptions = {},\n): SourceExtractor {\n return {\n id: \"structured-knowledge\",\n matches(context) {\n const name = context.toolName.toLowerCase();\n return (\n name.includes(\"knowledge\") || /(?:^|[_:/.-])kb(?:$|[_:/.-])/u.test(name)\n );\n },\n extract(context) {\n const seen = new Set<string>();\n return contextRecords(context).flatMap((item): QaSourceReference[] => {\n const id = text(item, \"documentId\", \"document_id\", \"docId\", \"doc_id\");\n const title = text(item, \"title\", \"name\");\n if (id === undefined || title === undefined || seen.has(id)) return [];\n seen.add(id);\n const backend = text(item, \"backend\", \"provider\") ?? context.toolName;\n const uri = canonicalUri(item, urlOptions);\n return [\n {\n id: `knowledge:${backend}:${id}`,\n kind: \"knowledge\",\n title,\n ...(uri === undefined ? {} : { uri }),\n locations: [],\n evidence: \"queried\",\n origins: [context.origin],\n score: 85,\n metadata: { backend, documentId: id },\n },\n ];\n });\n },\n };\n}\n\nexport const jiraExtractor: SourceExtractor = createJiraExtractor();\nexport const confluenceExtractor: SourceExtractor = createConfluenceExtractor();\nexport const knowledgeExtractor: SourceExtractor = createKnowledgeExtractor();\n","import { canonicalizeUrl, canonicalizeWorkspacePath } from \"./normalize.js\";\nimport type {\n QaSourceKind,\n QaSourceReference,\n SourceExtractor,\n SourceExtractorContext,\n} from \"./types.js\";\nimport {\n createConfluenceExtractor,\n createJiraExtractor,\n createKnowledgeExtractor,\n} from \"./connectors.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nfunction record(value: unknown): UnknownRecord | undefined {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? (value as UnknownRecord)\n : undefined;\n}\n\nfunction parsedArgs(value: unknown): UnknownRecord {\n if (typeof value !== \"string\") return record(value) ?? {};\n try {\n return record(JSON.parse(value)) ?? {};\n } catch {\n return {};\n }\n}\n\nfunction presentationRecord(value: unknown): UnknownRecord | undefined {\n const direct = record(value);\n if (direct === undefined) return undefined;\n if (\n typeof direct.path === \"string\" ||\n typeof direct.url === \"string\" ||\n typeof direct.shape === \"string\" ||\n Array.isArray(direct.lines) ||\n Array.isArray(direct.sources) ||\n Array.isArray(direct.files)\n ) {\n return direct;\n }\n for (const key of [\"presentation\", \"presentationMeta\", \"result\", \"data\"]) {\n const nested = record(direct[key]);\n if (nested !== undefined) return nested;\n }\n return direct;\n}\n\nfunction sourceTitleFromUrl(url: string): string {\n try {\n const parsed = new URL(url);\n const path =\n parsed.pathname === \"/\" ? \"\" : parsed.pathname.replace(/\\/$/u, \"\");\n return `${parsed.hostname}${path}`;\n } catch {\n return url;\n }\n}\n\nconst CODE_EXTENSIONS = new Set([\n \"c\",\n \"cc\",\n \"cpp\",\n \"cs\",\n \"css\",\n \"go\",\n \"h\",\n \"hpp\",\n \"html\",\n \"java\",\n \"js\",\n \"jsx\",\n \"kt\",\n \"php\",\n \"py\",\n \"rb\",\n \"rs\",\n \"scala\",\n \"sh\",\n \"sql\",\n \"swift\",\n \"ts\",\n \"tsx\",\n \"vue\",\n]);\n\nfunction fileKind(path: string): QaSourceKind {\n const extension = path.split(\".\").at(-1)?.toLowerCase();\n return extension !== undefined && CODE_EXTENSIONS.has(extension)\n ? \"code\"\n : \"file\";\n}\n\nfunction basename(path: string): string {\n return path.split(\"/\").at(-1) || path;\n}\n\nfunction firstText(result: unknown): string | undefined {\n if (typeof result === \"string\") return result;\n if (!Array.isArray(result)) return undefined;\n for (const block of result) {\n const item = record(block);\n if (item?.type === \"text\" && typeof item.text === \"string\")\n return item.text;\n }\n return undefined;\n}\n\nfunction snippet(value: string | undefined): string | undefined {\n const line = value\n ?.split(/\\r?\\n/u)\n .find((part) => part.trim() !== \"\")\n ?.trim();\n if (line === undefined || line === \"\") return undefined;\n const compact = line.replace(/\\s+/gu, \" \");\n return compact.length <= 240 ? compact : `${compact.slice(0, 239)}…`;\n}\n\nexport const readFileExtractor: SourceExtractor = {\n id: \"dsh-read-file\",\n matches(context) {\n const meta = presentationRecord(context.presentation);\n return (\n context.toolName === \"read\" ||\n context.toolName === \"read_file\" ||\n (typeof meta?.path === \"string\" && Array.isArray(meta.lines))\n );\n },\n extract(context) {\n const args = parsedArgs(context.args);\n const meta = presentationRecord(context.presentation);\n const rawPath =\n typeof meta?.path === \"string\"\n ? meta.path\n : typeof args.file_path === \"string\"\n ? args.file_path\n : typeof args.path === \"string\"\n ? args.path\n : undefined;\n if (rawPath === undefined || rawPath.trim() === \"\") return [];\n const path = canonicalizeWorkspacePath(rawPath, context.workspaceRoot);\n const lines = Array.isArray(meta?.lines)\n ? meta.lines\n .map(record)\n .filter((line): line is UnknownRecord => line !== undefined)\n : [];\n const numbers = lines\n .map((line) => line.number)\n .filter(\n (number): number is number =>\n Number.isSafeInteger(number) && Number(number) > 0,\n );\n const lineStart = numbers.length > 0 ? Math.min(...numbers) : undefined;\n const lineEnd = numbers.length > 0 ? Math.max(...numbers) : undefined;\n const sourceSnippet = snippet(\n lines.length > 0\n ? lines\n .map((line) => (typeof line.text === \"string\" ? line.text : \"\"))\n .join(\"\\n\")\n : firstText(context.result),\n );\n return [\n {\n id: `file:${path}`,\n kind: fileKind(path),\n title: basename(path),\n path,\n ...(sourceSnippet === undefined ? {} : { snippet: sourceSnippet }),\n locations: [\n {\n path,\n ...(lineStart === undefined ? {} : { lineStart }),\n ...(lineEnd === undefined ? {} : { lineEnd }),\n },\n ],\n evidence: \"read\",\n origins: [context.origin],\n score: 100,\n metadata: {\n ...(typeof meta?.totalLines === \"number\"\n ? { totalLines: meta.totalLines }\n : {}),\n ...(typeof meta?.lang === \"string\" ? { lang: meta.lang } : {}),\n },\n },\n ];\n },\n};\n\nfunction webSources(meta: UnknownRecord | undefined): UnknownRecord[] {\n return Array.isArray(meta?.sources)\n ? meta.sources\n .map(record)\n .filter((item): item is UnknownRecord => item !== undefined)\n : [];\n}\n\nexport function createWebSearchExtractor(\n maxPromotedPerSearch = 5,\n urlOptions: Parameters<typeof canonicalizeUrl>[1] = {},\n): SourceExtractor {\n return {\n id: \"dsh-web-search\",\n matches(context) {\n const meta = presentationRecord(context.presentation);\n return context.toolName === \"web_search\" || webSources(meta).length > 0;\n },\n extract(context) {\n const meta = presentationRecord(context.presentation);\n return webSources(meta).flatMap((item, index): QaSourceReference[] => {\n if (typeof item.url !== \"string\") return [];\n const uri = canonicalizeUrl(item.url, urlOptions);\n if (uri === null) return [];\n const promoted = index < maxPromotedPerSearch;\n const explicitTitle =\n typeof item.title === \"string\" && item.title.trim() !== \"\"\n ? item.title.trim()\n : undefined;\n const titleExplicit = explicitTitle !== undefined;\n const sourceSnippet = snippet(\n typeof item.snippet === \"string\" ? item.snippet : undefined,\n );\n return [\n {\n id: `web:${uri}`,\n kind: \"web\",\n title: explicitTitle ?? sourceTitleFromUrl(uri),\n uri,\n ...(sourceSnippet === undefined ? {} : { snippet: sourceSnippet }),\n locations: [],\n evidence: promoted ? \"queried\" : \"discovered\",\n origins: [context.origin],\n score: promoted ? 55 : 20,\n metadata: {\n searchResult: true,\n titleExplicit,\n ...(typeof item.publishedAt === \"string\"\n ? { publishedAt: item.publishedAt }\n : {}),\n },\n },\n ];\n });\n },\n };\n}\n\nexport function createWebFetchExtractor(\n urlOptions: Parameters<typeof canonicalizeUrl>[1] = {},\n): SourceExtractor {\n return {\n id: \"dsh-web-fetch\",\n matches(context) {\n const meta = presentationRecord(context.presentation);\n return (\n context.toolName === \"web_fetch\" ||\n (typeof meta?.url === \"string\" && typeof meta.statusCode === \"number\")\n );\n },\n extract(context) {\n const args = parsedArgs(context.args);\n const meta = presentationRecord(context.presentation);\n const rawUrl =\n typeof meta?.url === \"string\"\n ? meta.url\n : typeof args.url === \"string\"\n ? args.url\n : undefined;\n const uri =\n rawUrl === undefined ? null : canonicalizeUrl(rawUrl, urlOptions);\n if (uri === null) return [];\n const explicitTitle =\n typeof meta?.title === \"string\" && meta.title.trim() !== \"\"\n ? meta.title.trim()\n : undefined;\n const titleExplicit = explicitTitle !== undefined;\n const sourceSnippet = snippet(firstText(context.result));\n return [\n {\n id: `web:${uri}`,\n kind: \"web\",\n title: explicitTitle ?? sourceTitleFromUrl(uri),\n uri,\n ...(sourceSnippet === undefined ? {} : { snippet: sourceSnippet }),\n locations: [],\n evidence: \"fetched\",\n origins: [context.origin],\n score: 100,\n metadata: {\n titleExplicit,\n ...(typeof meta?.statusCode === \"number\"\n ? { statusCode: meta.statusCode }\n : {}),\n ...(typeof meta?.truncated === \"boolean\"\n ? { truncated: meta.truncated }\n : {}),\n },\n },\n ];\n },\n };\n}\n\nexport const webFetchExtractor: SourceExtractor = createWebFetchExtractor();\n\nexport const fileSearchExtractor: SourceExtractor = {\n id: \"dsh-file-search\",\n matches(context) {\n const meta = presentationRecord(context.presentation);\n return meta?.shape === \"matches\" && Array.isArray(meta.files);\n },\n extract(context) {\n const meta = presentationRecord(context.presentation);\n if (!Array.isArray(meta?.files)) return [];\n return meta.files.flatMap((candidate): QaSourceReference[] => {\n const file = record(candidate);\n if (typeof file?.path !== \"string\") return [];\n const path = canonicalizeWorkspacePath(file.path, context.workspaceRoot);\n const matches = Array.isArray(file.matches)\n ? file.matches\n .map(record)\n .filter((item): item is UnknownRecord => item !== undefined)\n : [];\n const numbers = matches\n .map((item) => item.lineNumber)\n .filter(\n (number): number is number =>\n Number.isSafeInteger(number) && Number(number) > 0,\n );\n const sourceSnippet = snippet(\n matches.find((item) => typeof item.line === \"string\")?.line as\n string | undefined,\n );\n return [\n {\n id: `file:${path}`,\n kind: fileKind(path),\n title: basename(path),\n path,\n ...(sourceSnippet === undefined ? {} : { snippet: sourceSnippet }),\n locations: numbers.map((lineStart) => ({\n path,\n lineStart,\n lineEnd: lineStart,\n })),\n evidence: \"discovered\",\n origins: [context.origin],\n score: 30,\n metadata: { searchMatch: true },\n },\n ];\n });\n },\n};\n\nexport class SourceExtractorRegistry {\n private readonly extractors: SourceExtractor[] = [];\n\n register(extractor: SourceExtractor): () => void {\n this.extractors.push(extractor);\n return () => {\n const index = this.extractors.indexOf(extractor);\n if (index !== -1) this.extractors.splice(index, 1);\n };\n }\n\n extract(context: SourceExtractorContext): readonly QaSourceReference[] {\n return this.extractors.flatMap((extractor) =>\n extractor.matches(context) ? [...extractor.extract(context)] : [],\n );\n }\n}\n\nexport function createDefaultSourceExtractorRegistry(\n maxPromotedPerSearch = 5,\n urlOptions: Parameters<typeof canonicalizeUrl>[1] = {},\n): SourceExtractorRegistry {\n const registry = new SourceExtractorRegistry();\n // Strong consumers go first; dedupe promotes them over discovery candidates.\n registry.register(readFileExtractor);\n registry.register(createWebFetchExtractor(urlOptions));\n registry.register(createWebSearchExtractor(maxPromotedPerSearch, urlOptions));\n registry.register(fileSearchExtractor);\n registry.register(createJiraExtractor(urlOptions));\n registry.register(createConfluenceExtractor(urlOptions));\n registry.register(createKnowledgeExtractor(urlOptions));\n return registry;\n}\n","import type { ConversationSnapshot } from \"@deepseek-ai/dsh-client-ui-conversation/client\";\nimport type { LegacyConversationSlice } from \"@deepseek-ai/dsh-client-ui-chat/client\";\nimport type { QaSource, QaTurnSources } from \"../types.js\";\nimport { QaSourceCollector } from \"../provenance/collector.js\";\nimport { createDefaultSourceExtractorRegistry } from \"../provenance/extractors.js\";\n\n/** Empty Chat slice matching the host's EMPTY_CHAT_SNAPSHOT, without a value import. */\nconst EMPTY_LEGACY: LegacyConversationSlice = Object.freeze({\n nodes: Object.freeze([]),\n turnTimings: new Map(),\n turnEnds: new Map(),\n partial: null,\n runningCalls: Object.freeze([]),\n});\n\n/** The transcript-bearing Chat slice of one Conversation snapshot (absent before the view activates). */\nexport function chatLegacyOf(\n snapshot: ConversationSnapshot | undefined,\n): LegacyConversationSlice {\n return snapshot?.views.get(\"chat\")?.legacy ?? EMPTY_LEGACY;\n}\n\nconst DEFAULT_SOURCE_EXTRACTORS = createDefaultSourceExtractorRegistry();\n\ninterface SourceCallHead {\n readonly turn: number;\n readonly step: number;\n readonly name: string;\n readonly argsRaw: string;\n}\n\n/**\n * Rebuild canonical turn bundles from durable tool-result metadata. Since the\n * metadata is persisted by DSH, this projection is identical on live updates\n * and replay and requires no assistant-authored bibliography.\n */\nexport function projectTurnSources(\n snapshot: ConversationSnapshot | undefined,\n sessionId = \"unknown\",\n workspaceRoot?: string,\n): readonly QaTurnSources[] {\n const legacy = chatLegacyOf(snapshot);\n const heads = new Map<string, SourceCallHead>();\n for (const node of legacy.nodes) {\n if (node.kind !== \"assistant\") continue;\n for (const block of node.blocks) {\n if (block.kind !== \"tool-call\" || block.callId === \"\") continue;\n heads.set(block.callId, {\n turn: node.turn,\n step: node.step,\n name: block.name,\n argsRaw: block.argsRaw,\n });\n }\n }\n\n const collectors = new Map<number, QaSourceCollector>();\n const collectorFor = (turn: number) => {\n let collector = collectors.get(turn);\n if (collector === undefined) {\n collector = new QaSourceCollector({\n sessionId,\n turn,\n registry: DEFAULT_SOURCE_EXTRACTORS,\n });\n collectors.set(turn, collector);\n }\n return collector;\n };\n for (const node of legacy.nodes) {\n if (node.kind === \"assistant\") collectorFor(node.turn);\n }\n\n let nearestTurn: number | undefined;\n let nearestStep: number | undefined;\n for (const node of legacy.nodes) {\n if (node.kind === \"assistant\") {\n nearestTurn = node.turn;\n nearestStep = node.step;\n continue;\n }\n if (node.kind !== \"tool-result\" || node.isError) continue;\n const head = heads.get(node.callId);\n // A truncated event window can retain a result after its assistant call\n // head. Keep it addressable in the synthetic turn 0 instead of dropping\n // durable evidence altogether.\n const turn = head?.turn ?? nearestTurn ?? 0;\n const name = head?.name ?? node.call?.name ?? node.callId;\n const argsRaw = head?.argsRaw ?? node.call?.argsRaw ?? \"\";\n collectorFor(turn).observe({\n toolName: name,\n args: argsRaw,\n result: node.content,\n presentation: node.meta,\n origin: {\n sessionId,\n turn,\n ...((head?.step ?? nearestStep) === undefined\n ? {}\n : { step: head?.step ?? nearestStep }),\n toolCallId: node.callId,\n toolName: name,\n role: \"parent\",\n },\n ...(workspaceRoot === undefined ? {} : { workspaceRoot }),\n });\n }\n return [...collectors.entries()]\n .sort(([left], [right]) => left - right)\n .map(([, collector]) => collector.snapshot());\n}\n\n/** Visible evidence sources for the latest turn, shared by the drawer/footer. */\nexport function projectSources(\n snapshot: ConversationSnapshot | undefined,\n sessionId = \"unknown\",\n workspaceRoot?: string,\n): readonly QaSource[] {\n return (\n projectTurnSources(snapshot, sessionId, workspaceRoot).at(-1)?.sources ?? []\n );\n}\n","const SETTLED_HEAD =\n /^Background subagent ([0-9a-f][0-9a-f-]*) (finished|was stopped|ran out of room|declined the task|failed)/u;\nconst SETTLED_CLOSING = \"Its closing message:\";\nconst SETTLED_TITLES: Readonly<Record<string, string>> = Object.freeze({\n finished: \"завершён\",\n \"was stopped\": \"остановлен\",\n \"ran out of room\": \"упёрся в лимит длины\",\n \"declined the task\": \"отклонил задачу\",\n failed: \"завершился ошибкой\",\n});\n\n/** Fold the host settlement wording into a title plus the closing message. */\nexport function parseSettlement(\n text: string,\n): { title: string; body: string } | undefined {\n const head = SETTLED_HEAD.exec(text);\n if (head === null) return undefined;\n const id = (head[1] ?? \"\").slice(0, 8);\n const title = `Субагент ${id} ${SETTLED_TITLES[head[2] ?? \"finished\"] ?? \"завершён\"}`;\n const closeAt = text.indexOf(SETTLED_CLOSING);\n const body =\n closeAt === -1 ? \"\" : text.slice(closeAt + SETTLED_CLOSING.length).trim();\n return {\n title,\n body: body.length <= 4_000 ? body : `${body.slice(0, 3_999)}…`,\n };\n}\n","import type { ToolResultNode } from \"@deepseek-ai/dsh-client-ui-conversation/client\";\nimport type { QaWorkItem } from \"../types.js\";\n\nfunction firstLine(value: string): string {\n return value.split(/\\r?\\n/u, 1)[0]?.trim() ?? \"\";\n}\n\nfunction truncate(value: string, length = 140): string {\n return value.length <= length ? value : `${value.slice(0, length - 3)}...`;\n}\n\nexport function flattenToolOutput(node: ToolResultNode): string | null {\n const parts = node.content.map((block) =>\n block.type === \"text\" ? block.text : JSON.stringify(block, null, 2),\n );\n if (parts.length === 0 && node.error !== undefined) {\n parts.push(`${node.error.name}: ${node.error.code}`);\n }\n return parts.join(\"\\n\") || null;\n}\n\nfunction formatToolInput(argsRaw: string): string | null {\n if (argsRaw === \"\") return null;\n try {\n return JSON.stringify(JSON.parse(argsRaw), null, 2);\n } catch {\n return argsRaw;\n }\n}\n\nfunction toolSummary(name: string, argsRaw: string): string {\n try {\n const parsed = JSON.parse(argsRaw) as unknown;\n if (typeof parsed === \"object\" && parsed !== null) {\n const values = parsed as Record<string, unknown>;\n for (const key of [\n \"description\",\n \"path\",\n \"file_path\",\n \"query\",\n \"pattern\",\n \"url\",\n \"command\",\n ]) {\n const value = values[key];\n if (typeof value === \"string\" && value.trim() !== \"\") {\n return truncate(firstLine(value));\n }\n }\n const fallback = Object.values(values).find(\n (value): value is string =>\n typeof value === \"string\" && value.trim() !== \"\",\n );\n if (fallback !== undefined) return truncate(firstLine(fallback));\n }\n } catch {\n const raw = firstLine(argsRaw);\n if (raw !== \"\") return truncate(raw);\n }\n return name;\n}\n\nconst TOOL_LABELS: Readonly<Record<string, string>> = Object.freeze({\n bash: \"Bash\",\n pwsh: \"PowerShell\",\n read: \"Чтение\",\n web_fetch: \"Загрузка\",\n web_search: \"Поиск\",\n grep: \"Поиск\",\n glob: \"Поиск\",\n write: \"Запись\",\n edit: \"Правка\",\n str_replace_editor: \"Правка\",\n run_code: \"Код\",\n subagent: \"Субагент\",\n subagent_fork: \"Субагент (форк)\",\n send_message: \"Сообщение агенту\",\n list_agents: \"Список агентов\",\n interrupt_agent: \"Остановка агента\",\n});\n\n/** The durable id a continuable launch reports back (\"started subagent <id>\"). */\nconst SUBAGENT_STARTED = /started subagent ([0-9a-f][0-9a-f-]*)/iu;\n\nfunction toolLabel(name: string): string {\n return (TOOL_LABELS[name] ?? name.replaceAll(\"_\", \" \")) || \"Инструмент\";\n}\n\nexport function toolStatus(node: ToolResultNode): \"ok\" | \"error\" | \"stopped\" {\n if (node.error?.code === \"interrupted\") return \"stopped\";\n return node.isError ? \"error\" : \"ok\";\n}\n\nexport function workTool(\n callId: string,\n name: string,\n argsRaw: string,\n status: \"running\" | \"ok\" | \"error\" | \"stopped\",\n startedAt: number | undefined,\n endedAt: number | undefined,\n output: string | null,\n): QaWorkItem {\n const launched =\n name === \"subagent\" || name === \"subagent_fork\"\n ? (SUBAGENT_STARTED.exec(output ?? \"\")?.[1] ??\n SUBAGENT_STARTED.exec(argsRaw)?.[1])\n : undefined;\n return {\n id: `tool:${callId}`,\n kind: \"tool\",\n name,\n label: toolLabel(name),\n summary: toolSummary(name, argsRaw),\n input: formatToolInput(argsRaw),\n output,\n status,\n ...(launched === undefined ? {} : { subagentId: launched }),\n ...(startedAt === undefined ? {} : { startedAt }),\n ...(endedAt === undefined ? {} : { endedAt }),\n };\n}\n","import type {\n AssistantMessageNode,\n ConversationNode,\n ConversationSnapshot,\n RunningToolCall,\n} from \"@deepseek-ai/dsh-client-ui-conversation/client\";\nimport type { LegacyConversationSlice } from \"@deepseek-ai/dsh-client-ui-chat/client\";\nimport type {\n QaImageMediaType,\n QaImageView,\n QaMessage,\n QaWorkItem,\n} from \"../types.js\";\nimport { chatLegacyOf } from \"./turn-sources.js\";\nimport { parseSettlement } from \"./settlement.js\";\nimport {\n flattenToolOutput,\n toolStatus,\n workTool,\n} from \"./tool-presentation.js\";\n\n/**\n * The hidden regeneration prompt. Regenerate sends this as an ordinary\n * prompt — the session has no truncation seam, so a \"variant\" is a real\n * follow-up turn — and the projection drops it from the visible transcript,\n * leaving the consecutive answer turns to read as variants of one question.\n */\nexport const QA_REGENERATE_MARKER =\n \"Перегенерируй свой предыдущий ответ — дай новый вариант, не повторяя предыдущий.\";\n\ninterface OrderedWorkItem {\n readonly order: number;\n readonly item: QaWorkItem;\n}\n\ninterface QaMessageStats {\n readonly durationMs: number;\n readonly ttftMs: number | null;\n readonly tokensPerSecond: number | null;\n}\n\ninterface TextMessage {\n readonly id: string;\n readonly order: number;\n readonly text: string;\n readonly status: \"streaming\" | \"committed\";\n readonly timestamp?: number;\n readonly turn?: number;\n readonly stats?: QaMessageStats;\n}\n\ninterface TurnBuffer {\n readonly turn: number;\n readonly text: TextMessage[];\n readonly work: OrderedWorkItem[];\n}\n\ninterface ToolHead {\n readonly turn: number;\n readonly order: number;\n readonly name: string;\n readonly argsRaw: string;\n readonly time: number;\n}\n\ninterface OrderedMessage {\n readonly order: number;\n readonly message: QaMessage;\n}\n\n/**\n * Durable image references carried by user content. The core ContentBlock\n * vocabulary is not installed client-side, so the shape is matched\n * structurally against the host contract ({type:\"image\", attachment:{...}}).\n */\nfunction visibleContentImages(\n content: readonly unknown[],\n): readonly QaImageView[] {\n const images: QaImageView[] = [];\n for (const block of content) {\n if (typeof block !== \"object\" || block === null) continue;\n const record = block as Record<string, unknown>;\n if (record.type !== \"image\") continue;\n const attachment = record.attachment as Record<string, unknown> | undefined;\n const attachmentId = attachment?.attachmentId;\n const mediaType = attachment?.mediaType;\n if (typeof attachmentId !== \"string\" || attachmentId === \"\") continue;\n images.push({\n attachmentId,\n mediaType: (typeof mediaType === \"string\"\n ? mediaType\n : \"image/png\") as QaImageMediaType,\n });\n }\n return images;\n}\n\nfunction visibleContentText(content: readonly unknown[]): string {\n return content\n .flatMap((block) => {\n if (typeof block !== \"object\" || block === null) return [];\n return Reflect.get(block, \"type\") === \"text\" &&\n typeof Reflect.get(block, \"text\") === \"string\"\n ? [Reflect.get(block, \"text\") as string]\n : [];\n })\n .join(\"\");\n}\n\nfunction visibleAssistantText(\n blocks: readonly { readonly kind: string; readonly text?: string }[],\n): string {\n return blocks\n .filter(\n (block): block is { readonly kind: \"text\"; readonly text: string } =>\n block.kind === \"text\" && typeof block.text === \"string\",\n )\n .map((block) => block.text)\n .join(\"\");\n}\n\n/**\n * Response timing for the message row, straight from the host-recorded step\n * boundaries. Tokens per second is an estimate — the client never sees a\n * token-count contract, so visible text is measured at the usual ≈4\n * characters per token over the generation window (first token → completed).\n */\nfunction messageStats(\n text: string,\n timing: AssistantMessageNode[\"timing\"],\n): QaMessageStats | undefined {\n if (timing === undefined) return undefined;\n const start = timing.stepStartTime;\n const first = timing.firstTokenTime;\n const end = timing.completedTime;\n if (start === null && first === null) return undefined;\n const durationMs =\n start === null\n ? Math.max(0, end - (first ?? end))\n : Math.max(0, end - start);\n const ttftMs =\n start === null || first === null ? null : Math.max(0, first - start);\n let tokensPerSecond: number | null = null;\n if (first !== null && end > first && text.length > 0) {\n tokensPerSecond = Math.round(text.length / 4 / ((end - first) / 1_000));\n }\n return { durationMs, ttftMs, tokensPerSecond };\n}\n\nfunction getTurn(turns: Map<number, TurnBuffer>, turn: number): TurnBuffer {\n let buffer = turns.get(turn);\n if (buffer === undefined) {\n buffer = { turn, text: [], work: [] };\n turns.set(turn, buffer);\n }\n return buffer;\n}\n\nfunction collectAssistant(\n node: AssistantMessageNode,\n turns: Map<number, TurnBuffer>,\n toolHeads: Map<string, ToolHead>,\n showReasoning: boolean,\n): void {\n const turn = getTurn(turns, node.turn);\n const text = visibleAssistantText(node.blocks);\n if (text !== \"\") {\n turn.text.push({\n id: `assistant:${node.messageId ?? node.seq}`,\n order: node.seq,\n text,\n status: \"committed\",\n timestamp: node.time,\n turn: node.turn,\n stats: messageStats(text, node.timing),\n });\n }\n node.blocks.forEach((block, index) => {\n const order = node.seq + index / 1_000;\n if (block.kind === \"reasoning\" && showReasoning && block.text.trim()) {\n turn.work.push({\n order,\n item: {\n id: `reasoning:${node.messageId ?? node.seq}:${index}`,\n kind: \"reasoning\",\n text: block.text,\n status: \"complete\",\n },\n });\n } else if (block.kind === \"tool-call\" && block.callId !== \"\") {\n toolHeads.set(block.callId, {\n turn: node.turn,\n order,\n name: block.name,\n argsRaw: block.argsRaw,\n time: node.time,\n });\n }\n });\n}\n\nfunction collectSettledTools(\n nodes: readonly ConversationNode[],\n turns: Map<number, TurnBuffer>,\n toolHeads: Map<string, ToolHead>,\n): Set<string> {\n const settled = new Set<string>();\n let nearestTurn: number | undefined;\n for (const node of nodes) {\n if (node.kind === \"assistant\") nearestTurn = node.turn;\n // Errored results render as failed rows (toolStatus maps them) so the\n // work view does not silently drop activity; source collection keeps\n // skipping them — a failed tool produced no evidence.\n if (node.kind !== \"tool-result\") continue;\n const head = toolHeads.get(node.callId);\n const turnNumber = head?.turn ?? nearestTurn;\n if (turnNumber === undefined) continue;\n const name = head?.name ?? node.call?.name ?? node.callId;\n const argsRaw = head?.argsRaw ?? node.call?.argsRaw ?? \"\";\n getTurn(turns, turnNumber).work.push({\n order: head?.order ?? node.seq,\n item: workTool(\n node.callId,\n name,\n argsRaw,\n toolStatus(node),\n node.callTime ?? head?.time,\n node.time,\n flattenToolOutput(node),\n ),\n });\n settled.add(node.callId);\n }\n return settled;\n}\n\nfunction collectRunningTool(\n call: RunningToolCall,\n turns: Map<number, TurnBuffer>,\n toolHeads: Map<string, ToolHead>,\n): void {\n const head = toolHeads.get(call.callId);\n getTurn(turns, call.turn).work.push({\n order: head?.order ?? Number.MAX_SAFE_INTEGER - call.time,\n item: workTool(\n call.callId,\n call.name,\n call.argsRaw,\n \"running\",\n call.time,\n undefined,\n null,\n ),\n });\n}\n\nfunction emitTurn(\n legacy: LegacyConversationSlice,\n running: boolean,\n turn: TurnBuffer,\n output: OrderedMessage[],\n): void {\n const timing = legacy.turnTimings.get(turn.turn);\n const completed =\n timing?.endTime !== undefined || legacy.turnEnds.has(turn.turn);\n const sortedText = [...turn.text].sort(\n (left, right) => left.order - right.order,\n );\n const partial = sortedText.find((message) => message.status === \"streaming\");\n const committed = sortedText.filter(\n (message) => message.status === \"committed\",\n );\n const hasVisibleActiveWork =\n running &&\n !completed &&\n turn.work.some(({ item }) => item.status === \"running\");\n const finalText =\n partial ?? (hasVisibleActiveWork ? undefined : committed.at(-1));\n const progress =\n finalText === undefined\n ? committed\n : committed.filter((message) => message !== finalText);\n for (const message of progress) {\n turn.work.push({\n order: message.order,\n item: {\n id: `progress:${message.id}`,\n kind: \"progress\",\n text: message.text,\n status: \"complete\",\n },\n });\n }\n\n if (turn.work.length > 0) {\n const items = [...turn.work]\n .sort((left, right) => left.order - right.order)\n .map(({ item }) => item);\n const workOrder = Math.min(\n ...turn.work.map(({ order }) => order),\n (finalText?.order ?? Number.MAX_SAFE_INTEGER) - 0.001,\n );\n output.push({\n order: workOrder,\n message: {\n id: `work:${turn.turn}`,\n role: \"work\",\n turn: turn.turn,\n status: completed || !running ? \"complete\" : \"running\",\n ...(timing?.startTime === undefined\n ? {}\n : { startedAt: timing.startTime }),\n ...(timing?.endTime === undefined ? {} : { endedAt: timing.endTime }),\n items,\n },\n });\n } else {\n for (const message of progress) {\n output.push({\n order: message.order,\n message: {\n id: message.id,\n role: \"assistant\",\n text: message.text,\n status: message.status,\n turn: turn.turn,\n ...(message.timestamp === undefined\n ? {}\n : { timestamp: message.timestamp }),\n ...(message.stats === undefined ? {} : { stats: message.stats }),\n },\n });\n }\n }\n\n if (finalText !== undefined) {\n output.push({\n order: finalText.order,\n message: {\n id: finalText.id,\n role: \"assistant\",\n text: finalText.text,\n status: finalText.status,\n turn: turn.turn,\n ...(finalText.timestamp === undefined\n ? {}\n : { timestamp: finalText.timestamp }),\n ...(finalText.stats === undefined ? {} : { stats: finalText.stats }),\n },\n });\n }\n}\n\n/** Project end-user messages plus optional operator-approved work detail. */\nexport function projectTranscript(\n snapshot: ConversationSnapshot | undefined,\n options: {\n /** Live turn lifecycle from the bound Session (drives running-row status). */\n readonly running?: boolean;\n readonly showToolActivity?: boolean;\n readonly showReasoning?: boolean;\n } = {},\n): readonly QaMessage[] {\n const legacy = chatLegacyOf(snapshot);\n const running = options.running === true;\n const output: OrderedMessage[] = [];\n const turns = new Map<number, TurnBuffer>();\n const toolHeads = new Map<string, ToolHead>();\n\n for (const node of legacy.nodes) {\n if (node.kind === \"user\" || node.kind === \"steering\") {\n const text = visibleContentText(node.content);\n const images = visibleContentImages(node.content);\n if (text === QA_REGENERATE_MARKER) continue;\n if (text === \"\" && images.length === 0) continue;\n output.push({\n order: node.seq,\n message: {\n id: `${node.kind}:${node.seq}`,\n role: \"user\",\n text,\n status: \"committed\",\n timestamp: node.time,\n ...(images.length === 0 ? {} : { images }),\n },\n });\n } else if (node.kind === \"assistant\") {\n collectAssistant(node, turns, toolHeads, options.showReasoning === true);\n } else if (node.kind === \"context\") {\n // Subagent settlement notices (the host injects them when a background\n // child finishes) read as status rows; other context injections stay\n // hidden — they are operator plumbing, not QA-facing content.\n const label = node.provenance.label ?? \"\";\n if (!label.toLowerCase().startsWith(\"subagent\")) continue;\n const text = visibleContentText(node.content);\n if (text.trim() === \"\") continue;\n const notice = parseSettlement(text);\n output.push({\n order: node.seq,\n message: {\n id: `context:${node.seq}`,\n role: \"system\",\n text:\n notice === undefined\n ? text.replace(/\\s+/gu, \" \").trim().slice(0, 280)\n : notice.title,\n status: \"info\",\n timestamp: node.time,\n ...(notice === undefined ? {} : { notice }),\n },\n });\n } else if (node.kind === \"turn-error\") {\n output.push({\n order: node.seq,\n message: {\n id: `turn-error:${node.seq}`,\n role: \"system\",\n text: \"Помощнику не удалось завершить ответ.\",\n status: \"error\",\n timestamp: node.time,\n },\n });\n } else if (node.kind === \"turn-max-tokens\") {\n output.push({\n order: node.seq,\n message: {\n id: `turn-max-tokens:${node.seq}`,\n role: \"system\",\n text: \"Ответ достиг предельной длины.\",\n status: \"info\",\n timestamp: node.time,\n },\n });\n }\n }\n\n if (options.showToolActivity === true) {\n const settled = collectSettledTools(legacy.nodes, turns, toolHeads);\n for (const call of legacy.runningCalls) {\n if (!settled.has(call.callId)) {\n collectRunningTool(call, turns, toolHeads);\n }\n }\n }\n\n if (legacy.partial !== null) {\n const partialTurn = getTurn(turns, legacy.partial.turn);\n const text = visibleAssistantText(legacy.partial.blocks);\n if (text !== \"\") {\n partialTurn.text.push({\n id: `assistant:partial:${legacy.partial.turn}:${legacy.partial.step}`,\n order: Number.MAX_SAFE_INTEGER - 1,\n text,\n status: \"streaming\",\n });\n }\n legacy.partial.blocks.forEach((block, index) => {\n if (\n block.kind === \"reasoning\" &&\n options.showReasoning === true &&\n block.text.trim()\n ) {\n partialTurn.work.push({\n order: Number.MAX_SAFE_INTEGER - 10 + index / 1_000,\n item: {\n id: `reasoning:partial:${legacy.partial?.turn}:${legacy.partial?.step}:${index}`,\n kind: \"reasoning\",\n text: block.text,\n status: \"running\",\n },\n });\n } else if (\n block.kind === \"tool-call\" &&\n options.showToolActivity === true &&\n block.callId !== \"\" &&\n !legacy.runningCalls.some((call) => call.callId === block.callId)\n ) {\n partialTurn.work.push({\n order: Number.MAX_SAFE_INTEGER - 9 + index / 1_000,\n item: workTool(\n block.callId,\n block.name,\n block.argsRaw,\n \"running\",\n undefined,\n undefined,\n null,\n ),\n });\n }\n });\n }\n\n for (const turn of turns.values()) emitTurn(legacy, running, turn, output);\n return output\n .sort((left, right) => left.order - right.order)\n .map(({ message }) => message);\n}\n","import type { SessionFace } from \"@deepseek-ai/dsh-api-session-controller/client\";\nimport type { ConversationSnapshot } from \"@deepseek-ai/dsh-client-ui-conversation/client\";\nimport type {\n QaSessionState,\n QaSubagentView,\n QaTurnSources,\n ResolvedQaSurfaceConfig,\n} from \"../types.js\";\nimport { projectTranscript } from \"./QaTranscriptAdapter.js\";\n\n/** Everything the bound-chat projection reads; the computation is pure. */\nexport interface QaBoundProjectionInput {\n readonly connected: boolean;\n readonly sessionId: string;\n readonly sessionSnapshot: ReturnType<SessionFace[\"getSnapshot\"]>;\n readonly conversationSnapshot: ConversationSnapshot | undefined;\n /** Turn bundles with the Host provenance already merged in (Host wins). */\n readonly sourceBundles: readonly QaTurnSources[];\n readonly operationError: string | null;\n readonly policyReady: boolean;\n readonly admissionPending: boolean;\n readonly chatsRevision: number;\n readonly viewingSubagent: QaSubagentView | null;\n readonly config: ResolvedQaSurfaceConfig;\n /**\n * The chat owner's display name for author labels; present only when an\n * admin reads a foreign chat (chat-level, not per-message).\n */\n readonly author?: string;\n}\n\n/**\n * Project one bound chat into the observable surface state: phase, transcript\n * with per-turn sources, footer sources, and the composer's capabilities.\n * Side effects (host-bundle refresh, notifications) live in the controller.\n */\nexport function projectBoundSessionState(\n input: QaBoundProjectionInput,\n): QaSessionState {\n const { config, sessionSnapshot: snapshot } = input;\n // A pending approval interaction is invisible to this snapshot in 0.1.5;\n // the QA lockdown pins approval=never and strips escalation-requiring\n // tools, so no interaction the surface cannot answer should ever arise.\n const error =\n input.operationError ??\n (snapshot.removed || snapshot.openState === \"error\"\n ? \"Этот чат больше недоступен.\"\n : null);\n const phase = !input.connected\n ? \"reconnecting\"\n : snapshot.removed || snapshot.openState === \"error\"\n ? \"error\"\n : snapshot.openState !== \"open\"\n ? \"creating\"\n : snapshot.running || input.admissionPending\n ? \"running\"\n : \"ready\";\n const sourcesByTurn = new Map(\n input.sourceBundles.map((bundle) => [bundle.turn, bundle] as const),\n );\n const messages = projectTranscript(input.conversationSnapshot, {\n running: snapshot.running,\n showToolActivity: config.ui.showToolActivity,\n showReasoning: config.ui.showReasoning,\n }).map((message) => {\n if (message.role === \"user\" && input.author !== undefined) {\n return { ...message, author: input.author };\n }\n if (message.role !== \"assistant\" || message.turn === undefined)\n return message;\n const bundle = sourcesByTurn.get(message.turn);\n const sources =\n bundle === undefined\n ? undefined\n : [\n ...bundle.sources,\n ...(config.sources.display.showDiscovered\n ? (bundle.discovered ?? [])\n : []),\n ];\n return sources === undefined || sources.length === 0\n ? message\n : {\n ...message,\n sources,\n sourcesComplete: bundle?.complete ?? true,\n ...(bundle?.incompleteOrigins === undefined\n ? {}\n : { incompleteSourceOrigins: bundle.incompleteOrigins }),\n };\n });\n const latest = input.sourceBundles.at(-1);\n return {\n phase,\n sessionId: input.sessionId,\n messages,\n error,\n canSend: input.connected && phase === \"ready\" && input.policyReady,\n canStop: input.connected && snapshot.running && config.ui.showStop,\n chatsRevision: input.chatsRevision,\n sources:\n latest === undefined\n ? []\n : [\n ...latest.sources,\n ...(config.sources.display.showDiscovered\n ? (latest.discovered ?? [])\n : []),\n ],\n sourcesComplete: latest?.complete ?? true,\n incompleteSourceOrigins: latest?.incompleteOrigins,\n viewingSubagent: input.viewingSubagent,\n };\n}\n","import type {\n ConnectionGenerationState,\n SessionId,\n} from \"@deepseek-ai/dsh-client-connection/client\";\nimport type { SessionFace } from \"@deepseek-ai/dsh-api-session-controller/client\";\nimport type { ConversationBinding } from \"@deepseek-ai/dsh-client-ui-conversation/client\";\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (let index = 0; index < bytes.length; index += 0x8000) {\n binary += String.fromCharCode(...bytes.subarray(index, index + 0x8000));\n }\n return btoa(binary);\n}\nimport type {\n QaImageDraft,\n QaSessionState,\n QaSubagentView,\n ResolvedQaSurfaceConfig,\n} from \"../types.js\";\nimport { QaPolicyAttestationError } from \"./attestation.js\";\nimport { QaChatIndex } from \"./chat-index.js\";\nimport { SessionAssetRepository } from \"./session-assets.js\";\nimport { createQaSession } from \"./create-session.js\";\nimport { attestQaPolicy } from \"./session-admission.js\";\nimport { QaHostSourceBridge } from \"./session-sources.js\";\nimport type {\n QaConversation,\n QaPromptContent,\n QaSecureSession,\n QaSessions,\n QaSessionsApi,\n QaSourceApi,\n StorageLike,\n} from \"./types.js\";\nimport { QA_SESSION_IDLE_STATE } from \"./types.js\";\nimport { waitFor } from \"./wait-for.js\";\nimport { QA_REGENERATE_MARKER } from \"./QaTranscriptAdapter.js\";\nimport { projectBoundSessionState } from \"./project-session-state.js\";\nimport { projectTurnSources } from \"./turn-sources.js\";\n\nexport interface QaAccountsFacade {\n /** The account bearer token, or null while anonymous. */\n readonly token: () => string | null;\n /** Server-owned chat ids; the list authority while accounts are on. */\n readonly ownedIds: () => readonly string[];\n /**\n * The chat owner's display name for author labels; admins see it on\n * foreign chats only, everyone else gets undefined.\n */\n readonly messageAuthorOf: (sessionId: string) => string | undefined;\n /** Called after a new chat binds, so ownership stays current. */\n readonly onSessionCreated: (sessionId: string) => void;\n /** Called when the Host refuses with auth-required (expired/rotated). */\n readonly onAuthRequired: () => void;\n}\n\nexport interface QaSessionControllerOptions {\n readonly sessions: QaSessions;\n readonly api: QaSessionsApi;\n /** Conversation assembly feeding the transcript projection. */\n readonly conversation: QaConversation;\n readonly connection: ConnectionGenerationState;\n readonly config: ResolvedQaSurfaceConfig;\n readonly secureSession: QaSecureSession;\n readonly sourceApi?: QaSourceApi;\n readonly storage?: StorageLike;\n /** Present while the deployment gates QA users with accounts. */\n readonly accounts?: QaAccountsFacade;\n readonly timeoutMs?: number;\n /**\n * Minimum spacing between projections of a running turn's stream frames.\n * The host runtime already batches deltas to one notification per\n * animation frame; this ceiling keeps the render path flat on long\n * transcripts and weak hardware. Zero disables the spacing.\n */\n readonly streamIntervalMs?: number;\n}\n\nconst CONFIGURATION_ERROR = \"Настройки помощника недоступны.\";\n\n/**\n * The only module that couples QA behavior to DSH Session/client APIs. It owns\n * the chat lifecycle state machine; the observable wait, browser-local chat\n * bookkeeping and policy-attestation details live in their own modules.\n */\nexport class QaSessionController {\n private readonly listeners = new Set<() => void>();\n private readonly sessions: QaSessions;\n private readonly api: QaSessionsApi;\n private readonly conversation: QaConversation;\n private readonly connection: ConnectionGenerationState;\n private readonly config: ResolvedQaSurfaceConfig;\n private readonly secureSessionRemote: QaSecureSession;\n private readonly sourceApi: QaSourceApi;\n private readonly chats: QaChatIndex;\n private readonly accounts: QaAccountsFacade | undefined;\n /** Per-chat attachment URL cache; blob URLs die with the chat binding. */\n private readonly assets = new SessionAssetRepository();\n private readonly timeoutMs: number;\n private readonly streamIntervalMs: number;\n private state: QaSessionState = QA_SESSION_IDLE_STATE;\n private session: SessionFace | undefined;\n private conversationBinding: ConversationBinding | undefined;\n private unsubscribeSession: (() => void) | undefined;\n private unsubscribeChat: (() => void) | undefined;\n private readonly unsubscribeConnection: () => void;\n private ensuring: Promise<void> | undefined;\n private materializing: Promise<boolean> | undefined;\n private operationError: string | null = null;\n private admissionPending = false;\n private policyReady = false;\n private drafting = false;\n private streamFlushTimer: ReturnType<typeof setTimeout> | undefined;\n /** The chat session to return to when a subagent view closes. */\n private chatSessionId: string | null = null;\n private viewingSubagent: QaSubagentView | null = null;\n private connectedOnce: boolean;\n private disposed = false;\n private generation = 0;\n private chatsRevision = 0;\n /** Host-side provenance of the bound chat, merged into the projection. */\n private readonly hostSources: QaHostSourceBridge;\n\n constructor(options: QaSessionControllerOptions) {\n this.sessions = options.sessions;\n this.api = options.api;\n this.conversation = options.conversation;\n this.connection = options.connection;\n this.config = options.config;\n this.secureSessionRemote = options.secureSession;\n this.sourceApi =\n options.sourceApi ??\n ({\n sources: async () => ({ ok: true as const, value: [] }),\n readSourceFile: async () => ({\n ok: false as const,\n error: \"unavailable\",\n }),\n } satisfies QaSourceApi);\n this.chats = new QaChatIndex(\n options.storage,\n `${options.config.session.storageKey}:v1:${options.config.route.path}`,\n );\n this.accounts = options.accounts;\n this.hostSources = new QaHostSourceBridge(\n this.sourceApi,\n () => this.accounts?.token() ?? \"\",\n );\n this.timeoutMs = options.timeoutMs ?? 15_000;\n this.streamIntervalMs = options.streamIntervalMs ?? 66;\n this.connectedOnce = this.connection.getSnapshot() !== undefined;\n this.unsubscribeConnection = this.connection.subscribe(() => {\n if (this.connection.getSnapshot() !== undefined)\n this.connectedOnce = true;\n this.publish();\n });\n }\n\n getSnapshot = (): QaSessionState => this.state;\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n };\n\n ensureSession(): Promise<void> {\n if (this.ensuring !== undefined) return this.ensuring;\n const operation = this.ensureSessionNow().finally(() => {\n if (this.ensuring === operation) this.ensuring = undefined;\n });\n this.ensuring = operation;\n return operation;\n }\n\n async send(\n text: string,\n images: readonly QaImageDraft[] = [],\n ): Promise<boolean> {\n const prompt = text.trim();\n if ((prompt === \"\" && images.length === 0) || !this.state.canSend) {\n return false;\n }\n if (prompt.startsWith(\"/\")) {\n this.operationError = \"Команды со слешем недоступны в режиме помощника.\";\n this.publish();\n return false;\n }\n if (this.session === undefined) {\n // A draft chat materializes its session only now: nothing was created\n // when the user pressed \"New chat\", so the first prompt pays for it.\n if (!this.drafting || this.materializing !== undefined) return false;\n if (!(await this.materializeDraft()) || this.session === undefined) {\n return false;\n }\n }\n this.operationError = null;\n const step = await this.attestPolicy();\n if (step.kind === \"stale\") {\n // The user moved to another chat while the proof was pending; that\n // binding attests through its own flow and must not receive a prompt\n // meant for the old one.\n return false;\n }\n let attestedId = step.kind === \"ok\" ? step.sessionId : null;\n if (attestedId === null) {\n attestedId = await this.recoverForSend();\n if (attestedId === null) return false;\n }\n // Nothing can interleave between the last await and here, so matching the\n // attested id proves the prompt rides exactly the session it proved.\n const target = this.session;\n if (\n this.disposed ||\n target === undefined ||\n String(target.sessionId) !== attestedId\n ) {\n return false;\n }\n this.admissionPending = true;\n this.publish();\n try {\n const content: QaPromptContent = [\n ...(prompt === \"\" ? [] : [{ type: \"text\" as const, text: prompt }]),\n ...images.map((image) => ({\n type: \"image\" as const,\n mediaType: image.mediaType,\n data: image.data,\n name: image.name,\n })),\n ];\n const result = await target.prompt(content, \"queue\");\n if (this.session !== target) return false;\n if (!result.ok) {\n this.admissionPending = false;\n this.operationError = \"Не удалось отправить сообщение.\";\n this.publish();\n return false;\n }\n this.publish();\n return true;\n } catch (error) {\n this.admissionPending = false;\n console.error(\"dsh-qa-surface: prompt failed\", error);\n if (this.session === target) {\n this.operationError = \"Не удалось отправить сообщение.\";\n this.publish();\n }\n return false;\n }\n }\n\n /**\n * Ask for a fresh variant of the previous answer. The session has no\n * truncation seam, so this sends the hidden regeneration instruction as an\n * ordinary prompt: the model produces a follow-up turn, the projection\n * hides the marker message, and the consecutive turns read as variants of\n * the original question (switched in the surface).\n */\n async regenerate(): Promise<boolean> {\n return this.send(QA_REGENERATE_MARKER);\n }\n\n async stop(): Promise<void> {\n const target = this.session;\n if (target === undefined || !this.state.canStop) return;\n try {\n const result = await target.cancel();\n if (this.session !== target) return;\n if (!result.ok) this.operationError = \"Не удалось остановить ответ.\";\n } catch (error) {\n console.error(\"dsh-qa-surface: stop failed\", error);\n if (this.session !== target) return;\n this.operationError = \"Не удалось остановить ответ.\";\n }\n this.publish();\n }\n\n /**\n * Enter the \"new chat\" draft: show an empty composer without creating any\n * session. Nothing appears in the chat list and no Host session is spent\n * until the first prompt is actually sent, which materializes the session\n * lazily ({@link materializeDraft}). Fixed-policy deployments cannot draft.\n */\n async startDraft(): Promise<void> {\n if (\n this.disposed ||\n this.config.session.policy === \"fixed\" ||\n (this.config.lockdown.enabled && !this.config.lockdown.allowSessionReset)\n )\n return;\n const previous = this.session;\n if (previous?.getSnapshot().running === true) {\n try {\n await previous.cancel();\n } catch (error) {\n console.error(\"dsh-qa-surface: stop before draft failed\", error);\n }\n }\n this.drafting = true;\n this.unbind();\n this.operationError = null;\n this.admissionPending = false;\n this.policyReady = false;\n this.state = {\n ...QA_SESSION_IDLE_STATE,\n chatsRevision: this.chatsRevision,\n };\n this.publish();\n }\n\n /**\n * Turn the current draft into a real attested session. Runs inside the\n * send flow; concurrent sends share one materialization. A refusal here is\n * reported at once — a fresh session's first attestation is the\n * deployment's only chance to learn the reason.\n */\n private materializeDraft(): Promise<boolean> {\n if (this.materializing !== undefined) return this.materializing;\n const operation = ++this.generation;\n const attempt = (async () => {\n try {\n await this.waitForConnection();\n const id = await createQaSession({\n sessions: this.sessions,\n api: this.api,\n config: this.config,\n });\n if (this.disposed || operation !== this.generation) return false;\n await this.bind(id);\n if (this.disposed || operation !== this.generation) return false;\n this.drafting = false;\n if (this.config.session.policy === \"browser-persistent\") {\n this.chats.saveActive(id);\n }\n return true;\n } catch (error) {\n if (this.disposed || operation !== this.generation) return false;\n this.fail(\n this.operationError === CONFIGURATION_ERROR\n ? this.operationError\n : \"Не удалось начать чат.\",\n error,\n );\n return false;\n }\n })();\n this.materializing = attempt;\n this.publish();\n // `attempt` never rejects: every failure path is caught and reports false.\n void attempt.then(() => {\n if (this.materializing === attempt) this.materializing = undefined;\n });\n return attempt;\n }\n\n /**\n * Open one of this browser's indexed chats. The id must be present in the\n * host session list and pass policy attestation; an unknown id is forgotten\n * from the index. Fixed-policy deployments cannot switch.\n */\n async switchTo(sessionId: string): Promise<void> {\n if (this.disposed || this.config.session.policy === \"fixed\") return;\n if (\n this.session !== undefined &&\n String(this.session.sessionId) === sessionId\n )\n return;\n const operation = ++this.generation;\n this.drafting = false;\n this.viewingSubagent = null;\n this.unbind();\n this.operationError = null;\n this.admissionPending = false;\n this.policyReady = false;\n this.state = {\n ...QA_SESSION_IDLE_STATE,\n chatsRevision: this.chatsRevision,\n phase: \"creating\",\n };\n this.emit();\n try {\n await this.waitForConnection();\n const list = await waitFor(\n this.sessions.list,\n (snapshot) => snapshot.phase === \"ready\",\n this.timeoutMs,\n );\n if (this.disposed || operation !== this.generation) return;\n if (!Object.hasOwn(list.byId, sessionId as SessionId)) {\n this.forgetChat(sessionId);\n throw new Error(\"Этот чат больше недоступен.\");\n }\n await this.bind(sessionId);\n if (this.disposed || operation !== this.generation) return;\n this.chats.saveActive(sessionId);\n } catch (error) {\n // A newer operation superseded this switch: its own outcome governs.\n if (this.disposed || operation !== this.generation) return;\n this.fail(\n this.operationError === CONFIGURATION_ERROR\n ? this.operationError\n : \"Не удалось открыть этот чат.\",\n error,\n );\n }\n }\n\n /**\n * Watch a subagent's transcript live. The binding is read-only by\n * construction: no attestation runs (attestation admits sending, and the\n * composer stays disabled here), the chat index is untouched, and\n * {@link closeSubagent} returns to the chat the panel was opened from.\n */\n async viewSubagent(id: string, title: string): Promise<void> {\n if (this.disposed) return;\n if (\n this.viewingSubagent !== null &&\n this.viewingSubagent.id === id &&\n this.session !== undefined\n ) {\n return;\n }\n const operation = ++this.generation;\n this.drafting = false;\n this.viewingSubagent = { id, title };\n this.unbind();\n this.operationError = null;\n this.admissionPending = false;\n this.policyReady = false;\n this.state = {\n ...QA_SESSION_IDLE_STATE,\n chatsRevision: this.chatsRevision,\n viewingSubagent: this.viewingSubagent,\n phase: \"creating\",\n };\n this.emit();\n try {\n await this.waitForConnection();\n await this.bind(id, { attest: false, track: false, report: false });\n } catch (error) {\n // A newer operation superseded this view request: leave its state alone.\n if (this.disposed || operation !== this.generation) return;\n this.viewingSubagent = null;\n this.fail(\"Не удалось открыть транскрипт субагента.\", error);\n }\n if (this.disposed || operation !== this.generation) return;\n }\n\n /** Leave the subagent transcript and re-open the chat it was launched from. */\n async closeSubagent(): Promise<void> {\n const chat = this.chatSessionId;\n if (chat === null) return;\n await this.switchTo(chat);\n }\n\n /** This browser's chat ids: the owned list when accounts are on, else the\n * local index. Both intersect the host session list at projection time. */\n chatIds(): readonly string[] {\n const owned = this.accounts?.ownedIds() ?? [];\n if (owned.length === 0) return this.chats.chatIds();\n const local = this.chats.chatIds();\n return [...new Set([...owned, ...local])];\n }\n\n /** The bound session id, or null while no chat is bound. */\n activeSessionId(): string | null {\n return this.session === undefined ? null : String(this.session.sessionId);\n }\n\n /**\n * Resolve one durable image attachment of the bound session into a\n * browser-usable URL. Resolutions are cached per chat in the asset\n * repository (attachment ids repeat across chats) and revoked when the chat\n * is unbound; failures surface as broken views and retry on demand.\n */\n async readImage(attachmentId: string): Promise<string> {\n if (this.session === undefined) throw new Error(\"no bound session\");\n const sessionId = String(this.session.sessionId);\n return this.assets.resolve(sessionId, attachmentId, (id) =>\n this.readAttachmentUrl(id),\n );\n }\n\n private async readAttachmentUrl(attachmentId: string): Promise<string> {\n const session = this.session;\n if (session === undefined) throw new Error(\"no bound session\");\n const result = await session.readAttachment(\n attachmentId as Parameters<SessionFace[\"readAttachment\"]>[0],\n );\n if (!result.ok) {\n throw new Error(`${result.error.code}: ${result.error.message}`);\n }\n const { attachment, data } = result.value;\n if (typeof URL.createObjectURL !== \"function\") {\n return `data:${attachment.mediaType};base64,${bytesToBase64(data)}`;\n }\n return URL.createObjectURL(\n new Blob([Uint8Array.from(data).buffer as ArrayBuffer], {\n type: attachment.mediaType,\n }),\n );\n }\n\n /**\n * Remove one chat from this browser's index. Deleting the chat that is\n * currently open also forgets the persisted id and starts a fresh attested\n * session (when the deployment allows session resets); the Host-side\n * session itself is not touched — no host deletion seam exists.\n */\n async deleteChat(id: string): Promise<void> {\n this.forgetChat(id);\n this.chatsRevision += 1;\n if (\n this.activeSessionId() === id &&\n this.config.session.policy !== \"fixed\"\n ) {\n // No replacement session is created: deleting the open chat falls back\n // to a draft, and the next prompt materializes a fresh one. The stale\n // persisted id is dropped so a reload cannot resurrect the deleted chat.\n this.chats.clearActive();\n await this.startDraft();\n return;\n }\n this.publish();\n }\n\n /** Drop one chat id from this browser's index. */\n forgetChat(sessionId: string): void {\n this.chats.forgetChat(sessionId);\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.generation += 1;\n this.clearStreamFlush();\n this.unsubscribeConnection();\n this.unbind();\n this.assets.dispose();\n this.listeners.clear();\n }\n\n private async ensureSessionNow(): Promise<void> {\n const operation = ++this.generation;\n this.drafting = false;\n this.state = {\n ...QA_SESSION_IDLE_STATE,\n chatsRevision: this.chatsRevision,\n phase: \"creating\",\n };\n this.emit();\n try {\n await this.waitForConnection();\n const list = await waitFor(\n this.sessions.list,\n (snapshot) => snapshot.phase === \"ready\",\n this.timeoutMs,\n );\n let id: string | null = null;\n let restored = false;\n if (this.config.session.policy === \"fixed\") {\n id = this.config.session.fixedSessionId;\n if (id === null || !Object.hasOwn(list.byId, id)) {\n throw new Error(\"Configured fixed session is unavailable.\");\n }\n } else if (this.config.session.policy === \"browser-persistent\") {\n const stored = this.chats.activeId();\n if (stored !== null && Object.hasOwn(list.byId, stored)) {\n id = stored;\n restored = true;\n } else if (stored !== null) {\n this.chats.clearActive();\n }\n }\n if (id === null) {\n id = await createQaSession({\n sessions: this.sessions,\n api: this.api,\n config: this.config,\n });\n }\n if (this.disposed || operation !== this.generation) return;\n // A restored id's first bind stays quiet: the recovery path below may\n // replace it. A freshly created session must report a refusal at once —\n // it is the deployment's only chance to learn the reason.\n try {\n await this.bind(id, { report: !restored });\n } catch (error) {\n // A stale restore must not start its recovery ladder against a newer\n // operation; rethrow for the generation-guarded outer catch.\n if (this.disposed || operation !== this.generation) throw error;\n if (\n !restored ||\n this.config.session.policy !== \"browser-persistent\" ||\n !(error instanceof QaPolicyAttestationError)\n ) {\n throw error;\n }\n\n // A stored id is only a hint. If Host refuses that session under the\n // current QA policy (for example after the configured preset changes),\n // forget it and bootstrap one fresh, policy-attested session instead.\n this.unbind();\n this.operationError = null;\n this.chats.clearActive();\n id = await createQaSession({\n sessions: this.sessions,\n api: this.api,\n config: this.config,\n });\n if (this.disposed || operation !== this.generation) return;\n await this.bind(id);\n }\n if (this.disposed || operation !== this.generation) return;\n if (this.config.session.policy === \"browser-persistent\") {\n this.chats.saveActive(id);\n }\n } catch (error) {\n // A newer operation superseded this bootstrap: its own outcome governs.\n if (this.disposed || operation !== this.generation) return;\n this.fail(\n this.operationError === CONFIGURATION_ERROR\n ? this.operationError\n : \"Не удалось начать чат.\",\n error,\n );\n }\n }\n\n /**\n * Recovery ladder after a refused send-time attestation. The prompt was\n * never admitted, so nothing here can duplicate it. Step 1 re-opens the\n * session: a Host that idled the agent out dismantles its tool view, and\n * re-opening re-materializes it. Step 2 — when that refused session is\n * still blank (it never received the prompt, so there is nothing to lose) —\n * starts a fresh attested session instead. A session with history is left\n * alone: recreating it would silently drop the conversation. Returns the\n * attested session id, or null when nothing was attested.\n */\n private async recoverForSend(): Promise<string | null> {\n const id =\n this.session === undefined ? null : String(this.session.sessionId);\n if (\n id === null ||\n this.disposed ||\n this.config.session.policy === \"fixed\"\n ) {\n return null;\n }\n const operation = ++this.generation;\n this.unbind();\n this.admissionPending = false;\n this.policyReady = false;\n this.state = { ...this.state, phase: \"creating\" };\n this.emit();\n try {\n await this.waitForConnection();\n try {\n await this.bind(id);\n if (this.disposed || operation !== this.generation) return null;\n if (this.policyReady) return id;\n } catch (error) {\n if (!(error instanceof QaPolicyAttestationError)) throw error;\n if (this.disposed || operation !== this.generation) return null;\n }\n if (this.session !== undefined && !this.session.getSnapshot().blank) {\n this.fail(CONFIGURATION_ERROR, new QaPolicyAttestationError());\n return null;\n }\n this.unbind();\n this.chats.clearActive();\n const created = await createQaSession({\n sessions: this.sessions,\n api: this.api,\n config: this.config,\n });\n if (this.disposed || operation !== this.generation) return null;\n await this.bind(created);\n if (this.disposed || operation !== this.generation) return null;\n this.chats.saveActive(created);\n return this.policyReady ? created : null;\n } catch (error) {\n if (this.disposed || operation !== this.generation) return null;\n this.fail(\n this.operationError === CONFIGURATION_ERROR\n ? this.operationError\n : \"Не удалось открыть этот чат.\",\n error,\n );\n return null;\n }\n }\n\n private async bind(\n id: string,\n options: { report?: boolean; attest?: boolean; track?: boolean } = {},\n ): Promise<void> {\n const { report = true, attest = true, track = true } = options;\n this.sessions.open(id as SessionId);\n let binding = this.sessions.binding(id as SessionId);\n if (binding === undefined) {\n await waitFor(\n this.sessions.list,\n (snapshot) => Object.hasOwn(snapshot.byId, id),\n this.timeoutMs,\n );\n binding = this.sessions.binding(id as SessionId);\n }\n if (binding === undefined)\n throw new Error(\"Session binding is unavailable.\");\n this.unbind();\n this.session = binding.session;\n this.conversationBinding = this.conversation.binding(id as SessionId);\n this.policyReady = false;\n this.unsubscribeSession = binding.session.subscribe(() => {\n this.admissionPending = false;\n this.operationError = null;\n this.publishSessionUpdate();\n });\n // Subscribing the Chat target activates it, so the assembled transcript\n // (nodes, partials, running calls) materializes for the projection.\n this.unsubscribeChat = this.conversationBinding\n .target(\"chat\")\n .subscribe(() => {\n this.publishSessionUpdate();\n });\n await waitFor(\n binding.session,\n (snapshot) =>\n snapshot.openState === \"open\" || snapshot.openState === \"error\",\n this.timeoutMs,\n );\n if (binding.session.getSnapshot().openState !== \"open\") {\n throw new Error(\"Session binding could not be opened.\");\n }\n if (attest) {\n const step = await this.attestPolicy(report);\n if (step.kind !== \"ok\") throw new QaPolicyAttestationError();\n }\n if (track) {\n this.chatSessionId = String(this.session.sessionId);\n this.viewingSubagent = null;\n this.chats.addChat(String(this.session.sessionId));\n this.accounts?.onSessionCreated(String(this.session.sessionId));\n }\n this.publish();\n }\n\n private unbind(): void {\n this.clearStreamFlush();\n this.unsubscribeSession?.();\n this.unsubscribeSession = undefined;\n this.unsubscribeChat?.();\n this.unsubscribeChat = undefined;\n this.conversationBinding = undefined;\n if (this.session !== undefined) {\n // Leaving the chat retires its attachment URLs; a later re-bind\n // re-resolves them from the durable store.\n this.assets.release(String(this.session.sessionId));\n }\n this.session = undefined;\n this.hostSources.reset();\n this.admissionPending = false;\n this.policyReady = false;\n }\n\n private waitForConnection(): Promise<unknown> {\n return waitFor(\n this.connection,\n (description) => description !== undefined,\n this.timeoutMs,\n );\n }\n\n /**\n * Project one session notification. A running turn's frames arrive at\n * animation-frame cadence, so re-projections are spaced at least\n * {@link streamIntervalMs} apart: the first frame of a window projects at\n * once and further frames are absorbed (the memoized render path replays\n * nothing, so absorbing a frame only defers it). Everything outside a\n * running turn - phase flips, errors, turn completion - projects\n * immediately.\n */\n private publishSessionUpdate(): void {\n if (\n this.streamIntervalMs <= 0 ||\n this.session?.getSnapshot().running !== true\n ) {\n this.clearStreamFlush();\n this.publish();\n return;\n }\n if (this.streamFlushTimer !== undefined) return;\n this.publish();\n this.streamFlushTimer = setTimeout(() => {\n this.streamFlushTimer = undefined;\n }, this.streamIntervalMs);\n }\n\n private clearStreamFlush(): void {\n if (this.streamFlushTimer === undefined) return;\n clearTimeout(this.streamFlushTimer);\n this.streamFlushTimer = undefined;\n }\n\n private publish(): void {\n if (this.disposed) return;\n const connected = this.connection.getSnapshot() !== undefined;\n if (this.drafting && this.session === undefined) {\n // Draft state: an empty writable composer without a bound session. The\n // session list is untouched — nothing exists until the first send.\n const materializing = this.materializing !== undefined;\n this.state = {\n ...QA_SESSION_IDLE_STATE,\n phase: materializing\n ? \"creating\"\n : !connected && this.connectedOnce\n ? \"reconnecting\"\n : \"idle\",\n error: this.operationError,\n canSend: connected && !materializing,\n chatsRevision: this.chatsRevision,\n };\n this.emit();\n return;\n }\n if (this.session === undefined) {\n this.state = {\n ...this.state,\n phase:\n !connected && this.connectedOnce ? \"reconnecting\" : this.state.phase,\n error: this.operationError ?? this.state.error,\n };\n this.emit();\n return;\n }\n const snapshot = this.session.getSnapshot();\n const sessionId = String(this.session.sessionId);\n const conversationSnapshot =\n this.conversationBinding?.snapshot.getSnapshot();\n const projectedSourceBundles = projectTurnSources(\n conversationSnapshot,\n sessionId,\n this.config.session.cwd ?? undefined,\n );\n const sourceBundles = this.hostSources.merge(projectedSourceBundles);\n if (!snapshot.running) {\n void this.hostSources.refresh(sessionId, () => this.publish());\n }\n this.state = projectBoundSessionState({\n connected,\n sessionId,\n sessionSnapshot: snapshot,\n conversationSnapshot,\n sourceBundles,\n // Ownership is chat-level: every user message of a foreign chat\n // carries its owner's name when an admin reads it.\n author: this.accounts?.messageAuthorOf(sessionId),\n operationError: this.operationError,\n policyReady: this.policyReady,\n admissionPending: this.admissionPending,\n chatsRevision: this.chatsRevision,\n viewingSubagent: this.viewingSubagent,\n config: this.config,\n });\n this.emit();\n }\n\n private fail(message: string, error: unknown): void {\n // Policy attestation refusals already logged their precise reason; a\n // second stack trace for the wrapper error is only console noise.\n if (!(error instanceof QaPolicyAttestationError)) {\n console.error(\"dsh-qa-surface: session operation failed\", error);\n }\n if (this.disposed) return;\n this.operationError = message;\n this.state = {\n ...QA_SESSION_IDLE_STATE,\n phase: \"error\",\n error: message,\n chatsRevision: this.chatsRevision,\n };\n this.emit();\n }\n\n /**\n * Attest the currently bound session. `ok` carries the session id the proof\n * was issued for; `stale` means the binding changed while the request was\n * in flight, so nothing was written — the newer binding manages its own\n * attestation; `refused` is a genuine admission refusal of this binding.\n */\n private async attestPolicy(\n reportFailure = true,\n ): Promise<\n { kind: \"ok\"; sessionId: string } | { kind: \"refused\" } | { kind: \"stale\" }\n > {\n const session = this.session;\n if (session === undefined) return { kind: \"refused\" };\n const sessionId = String(session.sessionId);\n if (!this.config.lockdown.enabled) {\n this.policyReady = true;\n return { kind: \"ok\", sessionId };\n }\n this.policyReady = false;\n this.publish();\n const outcome = await attestQaPolicy({\n secureSession: this.secureSessionRemote,\n token: this.accounts?.token() ?? \"\",\n sessionId,\n lockdown: this.config.lockdown,\n report: reportFailure,\n });\n if (this.session !== session) return { kind: \"stale\" };\n if (outcome.ok) {\n this.policyReady = true;\n this.operationError = null;\n this.publish();\n return { kind: \"ok\", sessionId };\n }\n if (outcome.authRequired) {\n // The identity expired or was rotated: back to the gate instead of\n // the generic configuration error.\n this.accounts?.onAuthRequired();\n return { kind: \"refused\" };\n }\n this.policyReady = false;\n this.operationError = CONFIGURATION_ERROR;\n this.publish();\n return { kind: \"refused\" };\n }\n\n private emit(): void {\n for (const listener of this.listeners) listener();\n }\n}\n","import { useState, type FormEvent } from \"react\";\nimport type {\n QaAccountsController,\n QaAccountsSnapshot,\n} from \"../QaAccountsController.js\";\n\nexport interface QaAuthGateProps {\n readonly accounts: QaAccountsController;\n readonly snapshot: QaAccountsSnapshot;\n readonly title: string;\n readonly logoUrl: string | null;\n readonly allowRegistration: boolean;\n}\n\nfunction Logo({ logoUrl }: { readonly logoUrl: string | null }) {\n if (logoUrl !== null) {\n return <img className=\"dsh-qa-auth__logo\" src={logoUrl} alt=\"\" />;\n }\n return (\n <svg className=\"dsh-qa-auth__logo\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <path d=\"M10 2.75a6.4 6.4 0 0 0-4.9 10.52c.2.24.28.5.24.79l-.2 1.44 1.9-.7c.24-.09.5-.06.74.05A6.4 6.4 0 1 0 10 2.75Z\" />\n <path d=\"M7.4 8.1h5.2M7.4 11h3.2\" />\n </svg>\n );\n}\n\n/**\n * The full-frame login/registration card shown instead of the chat while the\n * deployment has accounts enabled and the browser holds no valid identity.\n * Errors are the Host's coarse codes rendered as audience-safe copy.\n */\nexport function QaAuthGate(props: QaAuthGateProps) {\n const { snapshot, accounts } = props;\n const mode = snapshot.stage === \"gate\" ? snapshot.mode : \"login\";\n const busy = snapshot.stage === \"gate\" ? snapshot.busy : false;\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const showRegister = props.allowRegistration;\n const submit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (busy) return;\n const operation =\n mode === \"register\"\n ? accounts.register(email, password)\n : accounts.login(email, password);\n void operation;\n };\n return (\n <main className=\"dsh-qa-surface dsh-qa-auth\" aria-label=\"Вход в помощник\">\n <form className=\"dsh-qa-auth__card\" onSubmit={submit}>\n <div className=\"dsh-qa-auth__brand\">\n <Logo logoUrl={props.logoUrl} />\n <h1>{props.title}</h1>\n </div>\n {showRegister ? (\n <div\n className=\"dsh-qa-auth__tabs\"\n role=\"tablist\"\n aria-label=\"Вход или регистрация\"\n >\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mode === \"login\"}\n className={\n mode === \"login\"\n ? \"dsh-qa-auth__tab dsh-qa-auth__tab--active\"\n : \"dsh-qa-auth__tab\"\n }\n onClick={() => accounts.setMode(\"login\")}\n >\n Вход\n </button>\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mode === \"register\"}\n className={\n mode === \"register\"\n ? \"dsh-qa-auth__tab dsh-qa-auth__tab--active\"\n : \"dsh-qa-auth__tab\"\n }\n onClick={() => accounts.setMode(\"register\")}\n >\n Регистрация\n </button>\n </div>\n ) : null}\n <label className=\"dsh-qa-auth__field\">\n <span>Email</span>\n <input\n type=\"email\"\n name=\"email\"\n autoComplete=\"email\"\n required\n disabled={busy}\n value={email}\n onChange={(event) => setEmail(event.currentTarget.value)}\n />\n </label>\n <label className=\"dsh-qa-auth__field\">\n <span>Пароль</span>\n <input\n type=\"password\"\n name=\"password\"\n autoComplete={\n mode === \"register\" ? \"new-password\" : \"current-password\"\n }\n required\n minLength={8}\n disabled={busy}\n value={password}\n onChange={(event) => setPassword(event.currentTarget.value)}\n />\n </label>\n {snapshot.stage === \"gate\" && snapshot.error !== null ? (\n <p className=\"dsh-qa-auth__error\" role=\"alert\">\n {snapshot.error}\n </p>\n ) : null}\n <button type=\"submit\" className=\"dsh-qa-auth__submit\" disabled={busy}>\n {busy\n ? \"Подождите…\"\n : mode === \"register\"\n ? \"Зарегистрироваться\"\n : \"Войти\"}\n </button>\n </form>\n </main>\n );\n}\n","import { memo, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport type { QaImageDraft, QaImageMediaType } from \"../../types.js\";\n\nexport interface QaComposerProps {\n readonly placeholder: string;\n readonly quickQuestions?: readonly string[];\n readonly canSend: boolean;\n readonly canStop: boolean;\n readonly running: boolean;\n readonly showStop: boolean;\n readonly status: string | null;\n readonly images: readonly QaImageDraft[];\n readonly onImagesChange: (images: readonly QaImageDraft[]) => void;\n readonly onSend: (\n text: string,\n images: readonly QaImageDraft[],\n ) => Promise<boolean>;\n readonly onStop: () => Promise<void>;\n}\n\n/** Raster formats the host attachment path accepts. */\nconst IMAGE_MEDIA_TYPES: readonly QaImageMediaType[] = [\n \"image/png\",\n \"image/jpeg\",\n \"image/webp\",\n \"image/gif\",\n];\n/** Soft client-side caps; the Host stays authoritative at admission. */\nconst MAX_IMAGES = 8;\nconst MAX_FILE_BYTES = 15 * 1024 * 1024;\n\nlet imageDraftSequence = 0;\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (let index = 0; index < bytes.length; index += 0x8000) {\n binary += String.fromCharCode(...bytes.subarray(index, index + 0x8000));\n }\n return btoa(binary);\n}\n\n/** FileReader covers runtimes without File.arrayBuffer (jsdom). */\nfunction readAsArrayBuffer(file: File): Promise<ArrayBuffer> {\n if (typeof file.arrayBuffer === \"function\") return file.arrayBuffer();\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as ArrayBuffer);\n reader.onerror = () => reject(reader.error ?? new Error(\"read failed\"));\n reader.readAsArrayBuffer(file);\n });\n}\n\nasync function fileToImageDraft(file: File): Promise<QaImageDraft | string> {\n if (!IMAGE_MEDIA_TYPES.includes(file.type as QaImageMediaType)) {\n return \"Поддерживаются изображения PNG, JPEG, WebP и GIF.\";\n }\n if (file.size > MAX_FILE_BYTES) {\n return \"Изображение слишком большое (лимит 15 МБ).\";\n }\n const data = bytesToBase64(new Uint8Array(await readAsArrayBuffer(file)));\n imageDraftSequence += 1;\n return {\n id: `image-${imageDraftSequence}`,\n mediaType: file.type as QaImageMediaType,\n name: file.name === \"\" ? \"изображение\" : file.name,\n data,\n previewUrl: URL.createObjectURL(file),\n };\n}\n\nfunction ImagePickerIcon() {\n return (\n <svg viewBox=\"0 0 18 18\" aria-hidden=\"true\">\n <rect x=\"2.5\" y=\"3.5\" width=\"13\" height=\"11\" rx=\"2\" />\n <circle cx=\"6.4\" cy=\"7.4\" r=\"1.3\" />\n <path d=\"m4 13 3.6-3.6 2 2L12.4 8l2.6 2.6\" />\n </svg>\n );\n}\n\n/**\n * Memoized with the default shallow compare: every prop is a scalar, a\n * stable array or a stable callback, so a stream of transcript frames never\n * re-renders the composer and typing stays responsive while an answer runs.\n */\nexport const QaComposer = memo(function QaComposer(props: QaComposerProps) {\n const [draft, setDraft] = useState(\"\");\n const [submitting, setSubmitting] = useState(false);\n const [dragOver, setDragOver] = useState(false);\n const [attachmentError, setAttachmentError] = useState<string | null>(null);\n const textarea = useRef<HTMLTextAreaElement>(null);\n const fileInput = useRef<HTMLInputElement>(null);\n const images = props.images;\n const send = async (textOverride?: string) => {\n const text = textOverride ?? draft;\n if (submitting || !props.canSend) return;\n if (text.trim() === \"\" && images.length === 0) return;\n setSubmitting(true);\n try {\n if (await props.onSend(text, images)) {\n if (textOverride === undefined) setDraft(\"\");\n else setDraft(\"\");\n props.onImagesChange([]);\n }\n } finally {\n setSubmitting(false);\n textarea.current?.focus();\n }\n };\n\n const addFiles = async (files: Iterable<File>) => {\n const incoming = [...files];\n if (incoming.length === 0) return;\n setAttachmentError(null);\n const room = MAX_IMAGES - images.length;\n if (room <= 0) {\n setAttachmentError(`Не больше ${MAX_IMAGES} изображений на сообщение.`);\n return;\n }\n const drafts: QaImageDraft[] = [];\n let error: string | null =\n incoming.length > room\n ? `Не больше ${MAX_IMAGES} изображений на сообщение.`\n : null;\n for (const file of incoming.slice(0, Math.max(0, room))) {\n const draft = await fileToImageDraft(file);\n if (typeof draft === \"string\") error = draft;\n else drafts.push(draft);\n }\n if (drafts.length > 0) props.onImagesChange([...images, ...drafts]);\n setAttachmentError(error);\n };\n\n useEffect(() => {\n if (!props.running) textarea.current?.focus();\n }, [props.running]);\n\n useLayoutEffect(() => {\n const element = textarea.current;\n if (element === null) return;\n element.style.height = \"0px\";\n element.style.height = `${Math.min(element.scrollHeight, 168)}px`;\n }, [draft]);\n\n const hasContent = draft.trim() !== \"\" || images.length > 0;\n return (\n <div\n className={\n dragOver\n ? \"dsh-qa-composer-wrap dsh-qa-composer-wrap--drag\"\n : \"dsh-qa-composer-wrap\"\n }\n onDragOver={(event) => {\n event.preventDefault();\n setDragOver(true);\n }}\n onDragLeave={() => setDragOver(false)}\n onDrop={(event) => {\n event.preventDefault();\n setDragOver(false);\n void addFiles(event.dataTransfer.files);\n }}\n >\n {(props.quickQuestions?.length ?? 0) > 0 ? (\n <div className=\"dsh-qa-quick-questions\" aria-label=\"Быстрые вопросы\">\n {props.quickQuestions?.map((question) => (\n <button\n type=\"button\"\n key={question}\n disabled={!props.canSend || submitting}\n onClick={() => void send(question)}\n >\n {question}\n </button>\n ))}\n </div>\n ) : null}\n <div className=\"dsh-qa-composer\">\n {images.length === 0 ? null : (\n <div\n className=\"dsh-qa-composer__images\"\n aria-label=\"Прикреплённые изображения\"\n >\n {images.map((image) => (\n <span key={image.id} className=\"dsh-qa-composer__image\">\n <img src={image.previewUrl} alt={image.name} />\n <button\n type=\"button\"\n aria-label={`Убрать ${image.name}`}\n title=\"Убрать\"\n onClick={() =>\n props.onImagesChange(\n images.filter((candidate) => candidate.id !== image.id),\n )\n }\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"m4 4 8 8m0-8-8 8\" />\n </svg>\n </button>\n </span>\n ))}\n </div>\n )}\n {attachmentError === null ? null : (\n <p className=\"dsh-qa-composer__attachment-error\" role=\"alert\">\n {attachmentError}\n </p>\n )}\n <label className=\"dsh-qa-sr-only\" htmlFor=\"dsh-qa-prompt\">\n Задать вопрос\n </label>\n <textarea\n ref={textarea}\n id=\"dsh-qa-prompt\"\n rows={1}\n value={draft}\n placeholder={props.placeholder}\n disabled={!props.canSend && !props.running}\n onChange={(event) => setDraft(event.currentTarget.value)}\n onPaste={(event) => {\n const files = event.clipboardData?.files;\n if (files !== undefined && files.length > 0) {\n event.preventDefault();\n void addFiles(files);\n }\n }}\n onKeyDown={(event) => {\n if (\n event.key === \"Enter\" &&\n !event.shiftKey &&\n !event.nativeEvent.isComposing\n ) {\n event.preventDefault();\n void send();\n }\n }}\n />\n <div className=\"dsh-qa-composer__toolbar\">\n <input\n ref={fileInput}\n type=\"file\"\n accept={IMAGE_MEDIA_TYPES.join(\",\")}\n multiple\n className=\"dsh-qa-sr-only\"\n tabIndex={-1}\n aria-hidden=\"true\"\n onChange={(event) => {\n void addFiles(event.target.files ?? []);\n event.target.value = \"\";\n }}\n />\n <button\n type=\"button\"\n className=\"dsh-qa-composer__attach\"\n aria-label=\"Прикрепить изображения\"\n title=\"Прикрепить изображения\"\n disabled={!props.canSend || images.length >= MAX_IMAGES}\n onClick={() => fileInput.current?.click()}\n >\n <ImagePickerIcon />\n </button>\n <span className=\"dsh-qa-composer__hint\" aria-live=\"polite\">\n {props.status ?? \"Enter: отправить, Shift+Enter: новая строка\"}\n </span>\n {props.running && props.showStop ? (\n <button\n type=\"button\"\n className=\"dsh-qa-composer__action dsh-qa-composer__action--stop\"\n aria-label=\"Остановить\"\n title=\"Остановить\"\n disabled={!props.canStop}\n onClick={() => void props.onStop()}\n >\n <svg viewBox=\"0 0 18 18\" aria-hidden=\"true\">\n <rect x=\"5.25\" y=\"5.25\" width=\"7.5\" height=\"7.5\" rx=\"1.5\" />\n </svg>\n </button>\n ) : (\n <button\n type=\"button\"\n className=\"dsh-qa-composer__action dsh-qa-composer__action--send\"\n aria-label=\"Отправить\"\n title=\"Отправить\"\n disabled={!props.canSend || submitting || !hasContent}\n onClick={() => void send()}\n >\n <svg viewBox=\"0 0 18 18\" aria-hidden=\"true\">\n <path d=\"M9 13.5v-9m0 0L5.5 8M9 4.5 12.5 8\" />\n </svg>\n </button>\n )}\n </div>\n </div>\n </div>\n );\n});\n","/** Shared time formatting for the QA surface UI. */\n\n/** `только что`, `5 мин`, `3 ч`, `2 дн` or a ru-RU date past the week. */\nexport function relativeTime(timestamp: number, now: number): string {\n const seconds = Math.max(1, Math.round((now - timestamp) / 1000));\n if (seconds < 60) return \"только что\";\n const minutes = Math.round(seconds / 60);\n if (minutes < 60) return `${minutes} мин`;\n const hours = Math.round(minutes / 60);\n if (hours < 24) return `${hours} ч`;\n const days = Math.round(hours / 24);\n if (days < 7) return `${days} дн`;\n return new Date(timestamp).toLocaleDateString(\"ru-RU\");\n}\n\n/** `9 сент 15:44` - compact ru-RU day/month plus time. */\nexport function formatDayTime(timestamp: number): string {\n const date = new Date(timestamp);\n const month = date\n .toLocaleDateString(\"ru-RU\", { month: \"short\" })\n .replace(\".\", \"\");\n const time = date.toLocaleTimeString(\"ru-RU\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n return `${date.getDate()} ${month} ${time}`;\n}\n\n/** `1,1 с` below ten seconds, `8 с` above. */\nexport function formatSeconds(ms: number): string {\n const seconds = ms / 1_000;\n const value =\n seconds < 10\n ? (Math.round(seconds * 10) / 10).toString()\n : String(Math.round(seconds));\n return `${value.replace(\".\", \",\")} с`;\n}\n\nexport function formatWorkDuration(durationMs: number): string {\n const seconds = Math.max(0, Math.round(durationMs / 1_000));\n if (seconds < 1) return \"< 1 с\";\n if (seconds < 60) return `${seconds} с`;\n const minutes = Math.floor(seconds / 60);\n const remainder = seconds % 60;\n return remainder === 0 ? `${minutes} мин` : `${minutes} мин ${remainder} с`;\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n QaSource,\n QaSourceFilePreview,\n QaTurnSources,\n ResolvedQaSurfaceConfig,\n} from \"../../types.js\";\nimport type { QaBoundSourceApi } from \"../types.js\";\nimport { Markdown } from \"./Markdown.js\";\n\nconst KIND_LABELS: Readonly<Record<QaSource[\"kind\"], string>> = {\n file: \"Документы\",\n code: \"Код\",\n web: \"Web\",\n jira: \"Jira\",\n confluence: \"Confluence\",\n knowledge: \"База знаний\",\n other: \"Другие\",\n};\n\nfunction sourceTarget(source: QaSource): string {\n return source.path ?? source.uri ?? source.title;\n}\n\nexport function SourceIcon({ kind }: { readonly kind: QaSource[\"kind\"] }) {\n if (kind === \"web\") {\n return (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"5.75\" />\n <path d=\"M2.25 8h11.5M8 2.25c1.6 1.55 2.4 3.5 2.4 5.75S9.6 12.2 8 13.75C6.4 12.2 5.6 10.25 5.6 8S6.4 3.8 8 2.25Z\" />\n </svg>\n );\n }\n if (kind === \"jira\" || kind === \"confluence\" || kind === \"knowledge\") {\n return (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <circle cx=\"7.1\" cy=\"7.1\" r=\"4.3\" />\n <path d=\"m10.3 10.3 2.9 2.9\" />\n </svg>\n );\n }\n return (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M9.25 2.5H4.75A1.25 1.25 0 0 0 3.5 3.75v8.5a1.25 1.25 0 0 0 1.25 1.25h6.5a1.25 1.25 0 0 0 1.25-1.25V5.75L9.25 2.5Z\" />\n <path d=\"M9.25 2.5v3.25h3.25\" />\n </svg>\n );\n}\n\nfunction OriginBadges({\n source,\n showOrigin,\n}: {\n readonly source: QaSource;\n readonly showOrigin: boolean;\n}) {\n const delegated =\n showOrigin && source.origins.some((origin) => origin.role === \"subagent\");\n const truncated = source.metadata?.truncated === true;\n if (!delegated && !truncated && source.evidence !== \"discovered\") return null;\n return (\n <span className=\"dsh-qa-sources__badges\">\n {delegated ? <span>Subagent</span> : null}\n {truncated ? <span>Partial</span> : null}\n {source.evidence === \"discovered\" ? <span>Discovered</span> : null}\n </span>\n );\n}\n\nfunction QaSourceCard({\n source,\n showOriginBadges,\n onOpen,\n}: {\n readonly source: QaSource;\n readonly showOriginBadges: boolean;\n readonly onOpen: () => void;\n}) {\n return (\n <button type=\"button\" className=\"dsh-qa-sources__item\" onClick={onOpen}>\n <span className=\"dsh-qa-sources__kind\" data-kind={source.kind}>\n <SourceIcon kind={source.kind} />\n </span>\n <span className=\"dsh-qa-sources__text\">\n <span className=\"dsh-qa-sources__title\">{source.title}</span>\n <span className=\"dsh-qa-sources__target\">{sourceTarget(source)}</span>\n <OriginBadges source={source} showOrigin={showOriginBadges} />\n {source.snippet === undefined ? null : <p>{source.snippet}</p>}\n </span>\n </button>\n );\n}\n\nfunction RawFilePreview({\n preview,\n lineStart,\n lineEnd,\n}: {\n readonly preview: QaSourceFilePreview;\n readonly lineStart?: number;\n readonly lineEnd?: number;\n}) {\n const target = useRef<HTMLSpanElement>(null);\n useEffect(() => {\n if (typeof target.current?.scrollIntoView === \"function\") {\n target.current.scrollIntoView({ block: \"center\" });\n }\n }, [preview.path, lineStart]);\n const lines = preview.content.replace(/\\r\\n?/gu, \"\\n\").split(\"\\n\");\n return (\n <pre className=\"dsh-qa-preview__raw\">\n <code>\n {lines.map((line, index) => {\n const number = index + 1;\n const highlighted =\n lineStart !== undefined &&\n number >= lineStart &&\n number <= (lineEnd ?? lineStart);\n return (\n <span\n key={number}\n ref={number === lineStart ? target : undefined}\n className={\n highlighted\n ? \"dsh-qa-preview__line dsh-qa-preview__line--highlight\"\n : \"dsh-qa-preview__line\"\n }\n >\n <span className=\"dsh-qa-preview__number\">{number}</span>\n <span>{line || \" \"}</span>\n </span>\n );\n })}\n </code>\n </pre>\n );\n}\n\nfunction QaSourceDetail({\n source,\n sessionId,\n sourceApi,\n filePreviewConfig,\n showOriginBadges,\n onBack,\n}: {\n readonly source: QaSource;\n readonly sessionId: string | null;\n readonly sourceApi: QaBoundSourceApi;\n readonly filePreviewConfig: ResolvedQaSurfaceConfig[\"sources\"][\"filePreview\"];\n readonly showOriginBadges: boolean;\n readonly onBack: () => void;\n}) {\n const [preview, setPreview] = useState<QaSourceFilePreview | null>(null);\n const [previewError, setPreviewError] = useState(false);\n const [mode, setMode] = useState<\"rendered\" | \"raw\">(\"raw\");\n const external =\n source.uri?.match(/^https?:\\/\\//iu)?.[0] === undefined\n ? undefined\n : source.uri;\n const firstRange = source.locations.find(\n (location) =>\n location.lineStart !== undefined || location.lineEnd !== undefined,\n );\n const lineStart = firstRange?.lineStart ?? firstRange?.lineEnd;\n const lineEnd = firstRange?.lineEnd ?? firstRange?.lineStart;\n\n useEffect(() => {\n let alive = true;\n setPreview(null);\n setPreviewError(false);\n if (\n source.path === undefined ||\n sessionId === null ||\n !filePreviewConfig.enabled\n )\n return;\n sourceApi.readSourceFile(sessionId, source.path).then(\n (result) => {\n if (!alive) return;\n if (!result.ok) {\n setPreviewError(true);\n return;\n }\n setPreview(result.value);\n setMode(\n result.value.markdown &&\n result.value.renderableMarkdown &&\n filePreviewConfig.markdownRenderedByDefault\n ? \"rendered\"\n : \"raw\",\n );\n },\n () => alive && setPreviewError(true),\n );\n return () => {\n alive = false;\n };\n }, [\n filePreviewConfig.enabled,\n filePreviewConfig.markdownRenderedByDefault,\n sessionId,\n source.id,\n source.path,\n sourceApi,\n ]);\n\n return (\n <div className=\"dsh-qa-sourcedetail\">\n <div className=\"dsh-qa-sourcedetail__head\">\n <button\n type=\"button\"\n className=\"dsh-qa-sourcedetail__back\"\n aria-label=\"Ко всем источникам\"\n title=\"Ко всем источникам\"\n onClick={onBack}\n >\n <svg viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <path d=\"m8.75 3.5-3.5 3.5 3.5 3.5\" />\n </svg>\n </button>\n <span className=\"dsh-qa-sourcedetail__kind\">\n <SourceIcon kind={source.kind} />\n </span>\n <span className=\"dsh-qa-sourcedetail__title\">{source.title}</span>\n {preview?.markdown && filePreviewConfig.allowRawToggle ? (\n <span className=\"dsh-qa-preview__toggle\">\n <button\n type=\"button\"\n aria-pressed={mode === \"rendered\"}\n disabled={!preview.renderableMarkdown}\n onClick={() => setMode(\"rendered\")}\n >\n Rendered\n </button>\n <button\n type=\"button\"\n aria-pressed={mode === \"raw\"}\n onClick={() => setMode(\"raw\")}\n >\n Raw\n </button>\n </span>\n ) : external === undefined ? null : (\n <a\n className=\"dsh-qa-sourcedetail__open\"\n href={external}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Открыть\n </a>\n )}\n </div>\n <div className=\"dsh-qa-sourcedetail__target\">{sourceTarget(source)}</div>\n <div className=\"dsh-qa-sourcedetail__body\">\n <OriginBadges source={source} showOrigin={showOriginBadges} />\n {source.path !== undefined && preview === null && !previewError ? (\n <p className=\"dsh-qa-sourcedetail__empty\">Открываю источник…</p>\n ) : null}\n {previewError ? (\n <p className=\"dsh-qa-sourcedetail__empty\">\n Не удалось открыть источник. Возможно, файл был перемещён или больше\n недоступен.\n </p>\n ) : null}\n {preview !== null ? (\n <>\n {preview.truncated ? (\n <p className=\"dsh-qa-preview__notice\">\n Показано начало файла: размер превышает лимит preview.\n </p>\n ) : null}\n {lineStart === undefined ? null : (\n <p className=\"dsh-qa-preview__range\">\n Referenced lines: {lineStart}\n {lineEnd !== undefined && lineEnd !== lineStart\n ? `–${lineEnd}`\n : \"\"}\n {mode === \"rendered\" ? (\n <button type=\"button\" onClick={() => setMode(\"raw\")}>\n View raw\n </button>\n ) : null}\n </p>\n )}\n {mode === \"rendered\" && preview.renderableMarkdown ? (\n <div className=\"dsh-qa-preview__markdown\">\n <Markdown text={preview.content} />\n </div>\n ) : (\n <RawFilePreview\n preview={preview}\n lineStart={lineStart}\n lineEnd={lineEnd}\n />\n )}\n </>\n ) : source.path === undefined ? (\n source.snippet === undefined ? (\n <p className=\"dsh-qa-sourcedetail__empty\">\n У источника нет текстового фрагмента.\n </p>\n ) : (\n <p>{source.snippet}</p>\n )\n ) : null}\n <p className=\"dsh-qa-sourcedetail__provenance\">\n <span>Использован {source.origins.length} раз(а)</span>\n <span>{source.evidence}</span>\n </p>\n </div>\n </div>\n );\n}\n\nexport interface QaSourcesDrawerProps {\n readonly sources: readonly QaSource[];\n readonly complete: boolean;\n readonly incompleteOrigins?: QaTurnSources[\"incompleteOrigins\"];\n readonly sessionId: string | null;\n readonly sourceApi: QaBoundSourceApi;\n readonly display: ResolvedQaSurfaceConfig[\"sources\"][\"display\"];\n readonly filePreview: ResolvedQaSurfaceConfig[\"sources\"][\"filePreview\"];\n /** Open straight onto this source's detail (an inline footnote click). */\n readonly initialDetail?: QaSource | null;\n readonly onClose: () => void;\n}\n\n/** Canonical grouped source panel and safe local-file preview. */\nexport function QaSourcesDrawer({\n sources,\n complete,\n incompleteOrigins,\n sessionId,\n sourceApi,\n display,\n filePreview,\n initialDetail = null,\n onClose,\n}: QaSourcesDrawerProps) {\n const [detailId, setDetailId] = useState<string | null>(\n initialDetail?.id ?? null,\n );\n const [expanded, setExpanded] = useState<ReadonlySet<string>>(\n () => new Set(),\n );\n const detail =\n detailId === null\n ? undefined\n : (sources.find((source) => source.id === detailId) ??\n (initialDetail?.id === detailId ? initialDetail : undefined));\n const groups = useMemo(() => {\n if (!display.groupByKind)\n return [{ key: \"all\", label: \"Источники\", sources }];\n const grouped = new Map<QaSource[\"kind\"], QaSource[]>();\n for (const source of sources)\n grouped.set(source.kind, [...(grouped.get(source.kind) ?? []), source]);\n return [...grouped].map(([key, items]) => ({\n key,\n label: KIND_LABELS[key],\n sources: items,\n }));\n }, [display.groupByKind, sources]);\n return (\n <aside className=\"dsh-qa-sources\" aria-label=\"Источники\">\n <div className=\"dsh-qa-sources__head\">\n <span>\n {detail === undefined ? `Источники (${sources.length})` : \"Источник\"}\n </span>\n <button\n type=\"button\"\n aria-label=\"Закрыть источники\"\n title=\"Закрыть\"\n onClick={onClose}\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"m4 4 8 8m0-8-8 8\" />\n </svg>\n </button>\n </div>\n {detail === undefined ? (\n <div className=\"dsh-qa-sources__list\">\n {!complete ? (\n <p className=\"dsh-qa-sources__incomplete\">\n Некоторые источники делегированных запусков недоступны (\n {incompleteOrigins?.length ?? 1}).\n </p>\n ) : null}\n {groups.map((group) => {\n const visible = expanded.has(group.key)\n ? group.sources\n : group.sources.slice(0, display.maxInitiallyVisiblePerGroup);\n return (\n <section key={group.key} className=\"dsh-qa-sources__group\">\n <h3>\n {group.label}\n <span>{group.sources.length}</span>\n </h3>\n {visible.map((source) => (\n <QaSourceCard\n key={source.id}\n source={source}\n showOriginBadges={display.showOriginBadges}\n onOpen={() => setDetailId(source.id)}\n />\n ))}\n {visible.length < group.sources.length ? (\n <button\n type=\"button\"\n className=\"dsh-qa-sources__more\"\n onClick={() =>\n setExpanded(new Set([...expanded, group.key]))\n }\n >\n Показать ещё {group.sources.length - visible.length}\n </button>\n ) : null}\n </section>\n );\n })}\n </div>\n ) : (\n <QaSourceDetail\n source={detail}\n sessionId={sessionId}\n sourceApi={sourceApi}\n filePreviewConfig={filePreview}\n showOriginBadges={display.showOriginBadges}\n onBack={() => setDetailId(null)}\n />\n )}\n </aside>\n );\n}\n","import type { QaSource } from \"../../types.js\";\n\n/**\n * Match layer between assistant text and the canonical turn sources: markdown\n * links resolve by normalized URL, inline-code tokens by file path. A token\n * that matches nothing keeps its plain rendering — the surface never guesses.\n */\nexport interface QaSourceRefs {\n /** Identity of the source set; memo comparators compare this. */\n readonly signature: string;\n resolveUrl(url: string): QaSource | undefined;\n resolvePath(token: string): QaSource | undefined;\n}\n\n/** http(s) URLs only, case-folded authority, hash and trailing slash gone. */\nfunction normalizeUrl(value: string): string | undefined {\n try {\n const url = new URL(value);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return undefined;\n url.hash = \"\";\n if (url.pathname.length > 1) {\n url.pathname = url.pathname.replace(/\\/+$/u, \"\");\n }\n return `${url.protocol}//${url.host.toLowerCase()}${url.pathname}${url.search}`;\n } catch {\n return undefined;\n }\n}\n\n/** Separators normalized for comparison, not for display. */\nfunction normalizePath(value: string): string {\n return value.trim().replace(/\\\\/gu, \"/\").replace(/\\/+$/u, \"\").toLowerCase();\n}\n\nfunction basename(value: string): string {\n const slash = value.lastIndexOf(\"/\");\n return slash < 0 ? value : value.slice(slash + 1);\n}\n\n/** Display name for a file-backed source: the file name alone, case kept. */\nexport function sourceFileName(source: QaSource): string {\n const normalized = (source.path ?? source.uri ?? source.title)\n .trim()\n .replace(/\\\\/gu, \"/\");\n const slash = normalized.lastIndexOf(\"/\");\n const name = slash < 0 ? normalized : normalized.slice(slash + 1);\n return name === \"\" ? source.title : name;\n}\n\nconst NO_REFS: QaSourceRefs = {\n signature: \"\",\n resolveUrl: () => undefined,\n resolvePath: () => undefined,\n};\n\nexport function buildSourceRefs(sources: readonly QaSource[]): QaSourceRefs {\n if (sources.length === 0) return NO_REFS;\n const byUrl = new Map<string, QaSource>();\n const paths: { readonly normalized: string; readonly source: QaSource }[] =\n [];\n for (const source of sources) {\n if (source.uri !== undefined) {\n const key = normalizeUrl(source.uri);\n if (key !== undefined) byUrl.set(key, source);\n }\n if (source.path !== undefined) {\n paths.push({ normalized: normalizePath(source.path), source });\n }\n }\n return {\n signature: sources.map((source) => source.id).join(\"|\"),\n resolveUrl(url: string): QaSource | undefined {\n const key = normalizeUrl(url);\n return key === undefined ? undefined : byUrl.get(key);\n },\n resolvePath(token: string): QaSource | undefined {\n const normalized = normalizePath(token);\n if (normalized === \"\") return undefined;\n const exact = paths.find((path) => path.normalized === normalized);\n if (exact !== undefined) return exact.source;\n if (!normalized.includes(\"/\")) {\n // A bare file name is ambiguous the moment two sources share it.\n const named = paths.filter(\n (path) => basename(path.normalized) === normalized,\n );\n return named.length === 1 ? named[0]?.source : undefined;\n }\n // A partial directory path must stay unambiguous the same way.\n const suffix = paths.filter((path) =>\n path.normalized.endsWith(`/${normalized}`),\n );\n return suffix.length === 1 ? suffix[0]?.source : undefined;\n },\n };\n}\n","import { memo, Fragment, type ReactNode } from \"react\";\nimport type { QaSource } from \"../../types.js\";\nimport { SourceIcon } from \"./QaSourcesDrawer.js\";\nimport { sourceFileName, type QaSourceRefs } from \"./source-refs.js\";\n\nconst INLINE = /(\\[[^\\]]+\\]\\([^\\s)]+\\)|`[^`]+`|\\*\\*[^*]+\\*\\*|\\*[^*]+\\*)/gu;\nconst TABLE_SEPARATOR = /^\\s*\\|?\\s*:?-{2,}:?\\s*(\\|\\s*:?-{2,}:?\\s*)*\\|?\\s*$/u;\nconst ORDERED_LIST = /^\\d{1,3}[.)]\\s+/u;\nconst HORIZONTAL_RULE = /^\\s*(?:-{3,}|\\*{3,}|_{3,})\\s*$/u;\nconst BLOCK_START =\n /^(#{1,3})\\s+|```|^[-*]\\s+|^\\d{1,3}[.)]\\s+|^>\\s|(?:^\\s*(?:-{3,}|\\*{3,}|_{3,})\\s*$)/u;\n\nfunction safeHref(value: string): string | undefined {\n try {\n const url = new URL(value);\n return [\"http:\", \"https:\", \"mailto:\"].includes(url.protocol)\n ? value\n : undefined;\n } catch {\n return undefined;\n }\n}\n\n/** Inline source awareness handed down from the owning assistant message. */\nexport interface MarkdownSourceContext {\n readonly refs?: QaSourceRefs;\n /** Open a path-backed source in the sources drawer's detail view. */\n readonly onSourceOpen?: (source: QaSource) => void;\n}\n\n/**\n * One inline source footnote: a pill over the matched link or path with a\n * hover/focus preview card (title, target, snippet). A URL-backed source is\n * an anchor that opens right away; a path-backed one is a button whose click\n * the owner routes to the sources drawer.\n */\nfunction SourceChip({\n source,\n label,\n href,\n onOpen,\n}: {\n readonly source: QaSource;\n readonly label: string;\n readonly href?: string;\n readonly onOpen?: (source: QaSource) => void;\n}) {\n const target = source.path ?? source.uri ?? source.title;\n const face = (\n <>\n <span className=\"dsh-qa-srcref__icon\" data-kind={source.kind}>\n <SourceIcon kind={source.kind} />\n </span>\n <span className=\"dsh-qa-srcref__label\">{label}</span>\n <span className=\"dsh-qa-srcref__card\" aria-hidden=\"true\">\n <span className=\"dsh-qa-srcref__card-title\">\n <span className=\"dsh-qa-srcref__icon\" data-kind={source.kind}>\n <SourceIcon kind={source.kind} />\n </span>\n {source.title || label}\n </span>\n <span className=\"dsh-qa-srcref__card-target\">{target}</span>\n {source.snippet === undefined ? null : (\n <span className=\"dsh-qa-srcref__card-snippet\">{source.snippet}</span>\n )}\n </span>\n </>\n );\n if (href !== undefined) {\n return (\n <a\n className=\"dsh-qa-srcref\"\n data-kind={source.kind}\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {face}\n </a>\n );\n }\n return (\n <button\n type=\"button\"\n className=\"dsh-qa-srcref\"\n data-kind={source.kind}\n onClick={onOpen === undefined ? undefined : () => onOpen(source)}\n >\n {face}\n </button>\n );\n}\n\nfunction inline(\n text: string,\n keyPrefix: string,\n sources: MarkdownSourceContext = {},\n): ReactNode[] {\n const nodes: ReactNode[] = [];\n let offset = 0;\n for (const match of text.matchAll(INLINE)) {\n const index = match.index;\n if (index > offset) nodes.push(text.slice(offset, index));\n const token = match[0];\n const key = `${keyPrefix}:${index}`;\n if (token.startsWith(\"[\")) {\n const parts = /^\\[([^\\]]+)\\]\\(([^\\s)]+)\\)$/u.exec(token);\n const href = parts?.[2] === undefined ? undefined : safeHref(parts[2]);\n if (href === undefined) {\n nodes.push(token);\n } else {\n const source = sources.refs?.resolveUrl(href);\n nodes.push(\n source === undefined ? (\n <a key={key} href={href} target=\"_blank\" rel=\"noreferrer\">\n {parts?.[1]}\n </a>\n ) : (\n <SourceChip\n key={key}\n source={source}\n label={parts?.[1] || source.title}\n href={href}\n />\n ),\n );\n }\n } else if (token.startsWith(\"`\")) {\n const value = token.slice(1, -1);\n const source = sources.refs?.resolvePath(value);\n if (source === undefined) {\n nodes.push(<code key={key}>{value}</code>);\n } else if (source.path === undefined) {\n nodes.push(\n <SourceChip\n key={key}\n source={source}\n label={source.title || value}\n href={safeHref(source.uri ?? \"\")}\n />,\n );\n } else if (sources.onSourceOpen === undefined) {\n nodes.push(<code key={key}>{value}</code>);\n } else {\n nodes.push(\n <SourceChip\n key={key}\n source={source}\n label={sourceFileName(source)}\n onOpen={sources.onSourceOpen}\n />,\n );\n }\n } else if (token.startsWith(\"**\")) {\n nodes.push(<strong key={key}>{token.slice(2, -2)}</strong>);\n } else {\n nodes.push(<em key={key}>{token.slice(1, -1)}</em>);\n }\n offset = index + token.length;\n }\n if (offset < text.length) nodes.push(text.slice(offset));\n return nodes;\n}\n\n/** Split one GFM table row into trimmed cells, honoring escaped pipes. */\nfunction splitTableRow(line: string): string[] {\n let row = line.trim();\n if (row.startsWith(\"|\")) row = row.slice(1);\n if (row.endsWith(\"|\") && !row.endsWith(\"\\\\|\")) row = row.slice(0, -1);\n return row\n .split(/(?<!\\\\)\\|/u)\n .map((cell) => cell.trim().replace(/\\\\\\|/gu, \"|\"));\n}\n\nfunction isTableStart(lines: readonly string[], index: number): boolean {\n const header = lines[index] ?? \"\";\n if (!header.includes(\"|\")) return false;\n return TABLE_SEPARATOR.test(lines[index + 1] ?? \"\");\n}\n\nfunction renderTable(\n lines: readonly string[],\n index: number,\n sources: MarkdownSourceContext,\n): { node: ReactNode; next: number } {\n const header = splitTableRow(lines[index] ?? \"\");\n const aligns = splitTableRow(lines[index + 1] ?? \"\").map((cell) => {\n const left = cell.startsWith(\":\");\n const right = cell.endsWith(\":\");\n if (left && right) return \"center\";\n return right ? \"right\" : \"left\";\n });\n let cursor = index + 2;\n const rows: string[][] = [];\n while (\n cursor < lines.length &&\n (lines[cursor] ?? \"\").trim() !== \"\" &&\n (lines[cursor] ?? \"\").includes(\"|\") &&\n !/^(#{1,3})\\s+|```|^[-*]\\s+|^\\d{1,3}[.)]\\s+|^>\\s/u.test(lines[cursor] ?? \"\")\n ) {\n rows.push(splitTableRow(lines[cursor] ?? \"\"));\n cursor += 1;\n }\n return {\n node: (\n <div key={`table:${index}`} className=\"dsh-qa-md-table\">\n <table>\n <thead>\n <tr>\n {header.map((cell, cellIndex) => (\n <th\n key={`h:${cellIndex}`}\n style={{ textAlign: aligns[cellIndex] ?? \"left\" }}\n >\n {inline(cell, `th:${index}:${cellIndex}`, sources)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, rowIndex) => (\n <tr key={`r:${rowIndex}`}>\n {header.map((_, cellIndex) => (\n <td\n key={`d:${rowIndex}:${cellIndex}`}\n style={{ textAlign: aligns[cellIndex] ?? \"left\" }}\n >\n {inline(\n row[cellIndex] ?? \"\",\n `td:${rowIndex}:${cellIndex}`,\n sources,\n )}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n ),\n next: cursor,\n };\n}\n\n/**\n * Deliberately small, HTML-free Markdown renderer for assistant-visible text.\n * Memoized on the text value: stream updates re-render only the message whose\n * text actually changed, so committed history is never re-parsed.\n */\nexport const Markdown = memo(function Markdown({\n text,\n sourceRefs,\n onSourceOpen,\n}: {\n readonly text: string;\n readonly sourceRefs?: QaSourceRefs;\n readonly onSourceOpen?: (source: QaSource) => void;\n}) {\n const sources: MarkdownSourceContext =\n sourceRefs === undefined\n ? {}\n : {\n refs: sourceRefs,\n ...(onSourceOpen === undefined ? {} : { onSourceOpen }),\n };\n const lines = text.replace(/\\r\\n?/gu, \"\\n\").split(\"\\n\");\n const blocks: ReactNode[] = [];\n for (let index = 0; index < lines.length;) {\n const line = lines[index] ?? \"\";\n if (line.startsWith(\"```\")) {\n const language = line.slice(3).trim();\n const code: string[] = [];\n index += 1;\n while (index < lines.length && !(lines[index] ?? \"\").startsWith(\"```\")) {\n code.push(lines[index] ?? \"\");\n index += 1;\n }\n if (index < lines.length) index += 1;\n blocks.push(\n <pre key={`code:${index}`}>\n <code data-language={language || undefined}>{code.join(\"\\n\")}</code>\n </pre>,\n );\n continue;\n }\n if (isTableStart(lines, index)) {\n const table = renderTable(lines, index, sources);\n blocks.push(table.node);\n index = table.next;\n continue;\n }\n if (HORIZONTAL_RULE.test(line)) {\n blocks.push(<hr key={`hr:${index}`} />);\n index += 1;\n continue;\n }\n const heading = /^(#{1,3})\\s+(.+)$/u.exec(line);\n if (heading !== null) {\n const content = inline(heading[2] ?? \"\", `heading:${index}`, sources);\n const key = `heading:${index}`;\n blocks.push(\n heading[1]?.length === 1 ? (\n <h2 key={key}>{content}</h2>\n ) : heading[1]?.length === 2 ? (\n <h3 key={key}>{content}</h3>\n ) : (\n <h4 key={key}>{content}</h4>\n ),\n );\n index += 1;\n continue;\n }\n if (/^[-*]\\s+/u.test(line)) {\n const items: ReactNode[] = [];\n while (index < lines.length && /^[-*]\\s+/u.test(lines[index] ?? \"\")) {\n const content = (lines[index] ?? \"\").replace(/^[-*]\\s+/u, \"\");\n items.push(\n <li key={`item:${index}`}>\n {inline(content, `item:${index}`, sources)}\n </li>,\n );\n index += 1;\n }\n blocks.push(<ul key={`list:${index}`}>{items}</ul>);\n continue;\n }\n if (ORDERED_LIST.test(line)) {\n const items: ReactNode[] = [];\n while (index < lines.length && ORDERED_LIST.test(lines[index] ?? \"\")) {\n const content = (lines[index] ?? \"\").replace(ORDERED_LIST, \"\");\n items.push(\n <li key={`oitem:${index}`}>\n {inline(content, `oitem:${index}`, sources)}\n </li>,\n );\n index += 1;\n }\n blocks.push(<ol key={`olist:${index}`}>{items}</ol>);\n continue;\n }\n if (line.startsWith(\"> \")) {\n blocks.push(\n <blockquote key={`quote:${index}`}>\n {inline(line.slice(2), `quote:${index}`, sources)}\n </blockquote>,\n );\n index += 1;\n continue;\n }\n if (line.trim() === \"\") {\n index += 1;\n continue;\n }\n const paragraph = [line];\n index += 1;\n while (\n index < lines.length &&\n (lines[index] ?? \"\").trim() !== \"\" &&\n !BLOCK_START.test(lines[index] ?? \"\") &&\n !isTableStart(lines, index)\n ) {\n paragraph.push(lines[index] ?? \"\");\n index += 1;\n }\n blocks.push(\n <p key={`paragraph:${index}`}>\n {paragraph.map((part, partIndex) => (\n <Fragment key={`line:${partIndex}`}>\n {partIndex === 0 ? null : <br />}\n {inline(part, `paragraph:${index}:${partIndex}`, sources)}\n </Fragment>\n ))}\n </p>,\n );\n }\n return <>{blocks}</>;\n});\n","import { memo, useEffect, useRef, useState } from \"react\";\nimport type { QaWorkItem } from \"../../types.js\";\nimport { formatWorkDuration } from \"./format.js\";\nimport { Markdown } from \"./Markdown.js\";\n\nexport interface QaWorkGroupProps {\n readonly status: \"running\" | \"complete\";\n readonly startedAt?: number;\n readonly endedAt?: number;\n readonly items: readonly QaWorkItem[];\n readonly renderMarkdown: boolean;\n}\n\nexport const THINKING_PHRASES = Object.freeze([\n \"Скребу по сусекам…\",\n \"Кумекаю…\",\n \"Навожу резкость…\",\n \"Собираю мысли в кучку…\",\n \"Раскладываю по полочкам…\",\n \"Сверяю приметы…\",\n]);\n\nfunction Chevron({ open }: { readonly open: boolean }) {\n return (\n <svg\n className=\"dsh-qa-work__chevron\"\n data-open={open || undefined}\n viewBox=\"0 0 14 14\"\n aria-hidden=\"true\"\n >\n <path d=\"m5.25 3.5 3.5 3.5-3.5 3.5\" />\n </svg>\n );\n}\n\nfunction ThinkIcon() {\n return (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M8 2.25a4.25 4.25 0 0 0-2.45 7.72c.48.34.7.72.7 1.15v.13h3.5v-.13c0-.43.22-.81.7-1.15A4.25 4.25 0 0 0 8 2.25Z\" />\n <path d=\"M6.35 13h3.3M6.9 14.5h2.2\" />\n </svg>\n );\n}\n\nfunction ToolIcon() {\n return (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M9.8 2.4a3.2 3.2 0 0 0-3.73 4.12l-3.4 3.4a1.55 1.55 0 1 0 2.2 2.2l3.4-3.4A3.2 3.2 0 0 0 12.4 5l-1.85 1.1-1.5-1.5L9.8 2.4Z\" />\n </svg>\n );\n}\n\nfunction RobotIcon() {\n return (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"5\" width=\"10\" height=\"7.5\" rx=\"1.75\" />\n <path d=\"M8 2.5V5m0-.25a.9.9 0 1 0-.01-1.8.9.9 0 0 0 .01 1.8ZM5.4 8.4h1.7M8.9 8.4h1.7M6 10.4h4\" />\n </svg>\n );\n}\n\nfunction isDelegationTool(name: string): boolean {\n return name === \"subagent\" || name === \"subagent_fork\";\n}\n\n/**\n * Whether two work items render identically. The transcript projection\n * rebuilds every item object on each published frame, so memoized work rows\n * compare by rendered content instead of by reference.\n */\nexport function sameWorkItem(a: QaWorkItem, b: QaWorkItem): boolean {\n if (a === b) return true;\n if (a.id !== b.id || a.kind !== b.kind) return false;\n if (a.kind === \"tool\" && b.kind === \"tool\") {\n return (\n a.name === b.name &&\n a.label === b.label &&\n a.summary === b.summary &&\n a.input === b.input &&\n a.output === b.output &&\n a.status === b.status &&\n a.subagentId === b.subagentId &&\n a.startedAt === b.startedAt &&\n a.endedAt === b.endedAt\n );\n }\n if (a.kind !== \"tool\" && b.kind !== \"tool\") {\n return a.text === b.text && a.status === b.status;\n }\n return false;\n}\n\n/** Whether two work item lists render identically, item for item. */\nexport function sameWorkItems(\n a: readonly QaWorkItem[],\n b: readonly QaWorkItem[],\n): boolean {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n return a.every((item, index) => sameWorkItem(item, b[index] as QaWorkItem));\n}\n\nfunction WorkItemIcon({ item }: { readonly item: QaWorkItem }) {\n if (item.kind !== \"tool\") return <ThinkIcon />;\n if (isDelegationTool(item.name)) return <RobotIcon />;\n if (item.status === \"running\") {\n return <span className=\"dsh-qa-work-item__spinner\" aria-hidden=\"true\" />;\n }\n if (item.status === \"ok\") {\n return (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"m3.5 8.25 2.7 2.7 6.3-6.3\" />\n </svg>\n );\n }\n return <ToolIcon />;\n}\n\nfunction toolStatusLabel(\n status: Extract<QaWorkItem, { kind: \"tool\" }>[\"status\"],\n) {\n switch (status) {\n case \"running\":\n return \"Выполняется\";\n case \"ok\":\n return \"Готово\";\n case \"error\":\n return \"Ошибка\";\n case \"stopped\":\n return \"Остановлено\";\n }\n}\n\nconst QaToolWorkItem = memo(\n function QaToolWorkItem({\n item,\n }: {\n readonly item: Extract<QaWorkItem, { kind: \"tool\" }>;\n }) {\n const expandable = item.input !== null || item.output !== null;\n const delegation = isDelegationTool(item.name);\n const header = (\n <>\n <span className=\"dsh-qa-work-item__icon\" data-state={item.status}>\n <WorkItemIcon item={item} />\n </span>\n <span className=\"dsh-qa-work-item__label\">{item.label}</span>\n <span className=\"dsh-qa-work-item__summary\">{item.summary}</span>\n {item.subagentId === undefined ? null : (\n <span className=\"dsh-qa-work-item__agent-id\" title={item.subagentId}>\n {item.subagentId.slice(0, 8)}\n </span>\n )}\n <span className=\"dsh-qa-sr-only\">{toolStatusLabel(item.status)}</span>\n {expandable ? <Chevron open={false} /> : null}\n </>\n );\n\n if (!expandable) {\n return (\n <div\n className=\"dsh-qa-work-item dsh-qa-work-item--tool\"\n data-tool={delegation ? \"subagent\" : undefined}\n >\n {header}\n </div>\n );\n }\n return (\n <details\n className=\"dsh-qa-work-tool\"\n data-tool={delegation ? \"subagent\" : undefined}\n >\n <summary className=\"dsh-qa-work-item dsh-qa-work-item--tool\">\n {header}\n </summary>\n <div className=\"dsh-qa-work-tool__body\">\n {item.input === null ? null : (\n <section aria-label={`Входные данные: ${item.label}`}>\n <span>Входные данные</span>\n <pre>{item.input}</pre>\n </section>\n )}\n {item.output === null ? null : (\n <section aria-label={`Результат: ${item.label}`}>\n <span>Результат</span>\n <pre>{item.output}</pre>\n </section>\n )}\n </div>\n </details>\n );\n },\n (prev, next) => sameWorkItem(prev.item, next.item),\n);\n\nconst QaTextWorkItem = memo(\n function QaTextWorkItem({\n item,\n renderMarkdown,\n }: {\n readonly item: Extract<QaWorkItem, { kind: \"reasoning\" | \"progress\" }>;\n readonly renderMarkdown: boolean;\n }) {\n return (\n <section\n className=\"dsh-qa-work-item dsh-qa-work-item--text\"\n data-state={item.status}\n aria-label={item.kind === \"reasoning\" ? \"Рассуждение\" : \"Ход работы\"}\n >\n <div className=\"dsh-qa-work-item__text-head\">\n <span className=\"dsh-qa-work-item__icon\">\n <ThinkIcon />\n </span>\n <span className=\"dsh-qa-work-item__label\">\n {item.kind === \"reasoning\" ? \"Размышление\" : \"Ход работы\"}\n </span>\n </div>\n <div className=\"dsh-qa-work-item__text\">\n {renderMarkdown ? <Markdown text={item.text} /> : item.text}\n </div>\n </section>\n );\n },\n (prev, next) =>\n prev.renderMarkdown === next.renderMarkdown &&\n sameWorkItem(prev.item, next.item),\n);\n\nexport const QaWorkGroup = memo(\n function QaWorkGroup({\n status,\n startedAt,\n endedAt,\n items,\n renderMarkdown,\n }: QaWorkGroupProps) {\n const [open, setOpen] = useState(status === \"running\");\n const [now, setNow] = useState(() => Date.now());\n const previousStatus = useRef(status);\n\n useEffect(() => {\n if (previousStatus.current === \"running\" && status === \"complete\") {\n setOpen(false);\n } else if (\n previousStatus.current === \"complete\" &&\n status === \"running\"\n ) {\n setOpen(true);\n }\n previousStatus.current = status;\n }, [status]);\n\n useEffect(() => {\n if (status !== \"running\" || startedAt === undefined) return;\n setNow(Date.now());\n const timer = setInterval(() => setNow(Date.now()), 1_000);\n return () => clearInterval(timer);\n }, [startedAt, status]);\n\n const duration =\n startedAt === undefined\n ? null\n : formatWorkDuration((endedAt ?? now) - startedAt);\n const label =\n status === \"running\"\n ? `${\n THINKING_PHRASES[\n Math.floor(\n Math.max(0, (endedAt ?? now) - (startedAt ?? now)) / 4_000,\n ) % THINKING_PHRASES.length\n ]\n }${duration === null ? \"\" : ` (${duration})`}`\n : duration === null\n ? \"Ход работы\"\n : `Готово за ${duration}`;\n\n return (\n <section className=\"dsh-qa-work\" data-state={status}>\n <button\n type=\"button\"\n className=\"dsh-qa-work__toggle\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n >\n {status === \"running\" ? (\n <span className=\"dsh-qa-work__spinner\" aria-hidden=\"true\" />\n ) : null}\n <span>{label}</span>\n <Chevron open={open} />\n </button>\n {open ? (\n <div className=\"dsh-qa-work__body\">\n {items.map((item) =>\n item.kind === \"tool\" ? (\n <QaToolWorkItem key={item.id} item={item} />\n ) : (\n <QaTextWorkItem\n key={item.id}\n item={item}\n renderMarkdown={renderMarkdown}\n />\n ),\n )}\n </div>\n ) : null}\n </section>\n );\n },\n (prev, next) =>\n prev.status === next.status &&\n prev.startedAt === next.startedAt &&\n prev.endedAt === next.endedAt &&\n prev.renderMarkdown === next.renderMarkdown &&\n sameWorkItems(prev.items, next.items),\n);\n","import { memo, useEffect, useRef, useState } from \"react\";\nimport type {\n QaMessage as QaMessageModel,\n QaImageView,\n QaSource,\n QaTurnSources,\n} from \"../../types.js\";\nimport { sameWorkItems } from \"./QaWorkGroup.js\";\nimport { buildSourceRefs, type QaSourceRefs } from \"./source-refs.js\";\n\nfunction QaAttachedImage({\n image,\n resolve,\n}: {\n readonly image: QaImageView;\n readonly resolve: (attachmentId: string) => Promise<string>;\n}) {\n const [url, setUrl] = useState<string | null>(null);\n useEffect(() => {\n let alive = true;\n // Deduplication and revocation live in the controller's per-chat asset\n // repository; this effect only projects one resolution.\n resolve(image.attachmentId).then(\n (resolved) => {\n if (alive) setUrl(resolved);\n },\n () => {\n if (alive) setUrl(\"\");\n },\n );\n return () => {\n alive = false;\n };\n }, [image.attachmentId, resolve]);\n if (url === null) {\n return <span className=\"dsh-qa-message__image\" data-state=\"loading\" />;\n }\n if (url === \"\") {\n return <span className=\"dsh-qa-message__image\" data-state=\"broken\" />;\n }\n return (\n <a href={url} target=\"_blank\" rel=\"noreferrer\">\n <img\n className=\"dsh-qa-message__image\"\n src={url}\n alt=\"Прикреплённое изображение\"\n />\n </a>\n );\n}\nimport { formatDayTime, formatSeconds } from \"./format.js\";\nimport { Markdown } from \"./Markdown.js\";\nimport { QaWorkGroup } from \"./QaWorkGroup.js\";\n\nexport interface QaMessageProps {\n readonly message: QaMessageModel;\n readonly renderMarkdown: boolean;\n readonly showTimestamp: boolean;\n /**\n * Storage prefix persisted message ratings live under. Callers scope it to\n * the chat: message ids repeat across chats (`assistant:<seq>`).\n */\n readonly stateKey?: string;\n /** Ask for a fresh variant of this answer; omit to hide the control. */\n readonly onRegenerate?: () => void;\n /** Resolve one durable attachment into a viewable URL. */\n readonly resolveImage?: (attachmentId: string) => Promise<string>;\n /** Open the drawer at the exact canonical snapshot shown in this footer. */\n readonly onOpenSources?: (\n sources: readonly QaSource[],\n complete: boolean,\n incompleteOrigins: QaTurnSources[\"incompleteOrigins\"],\n ) => void;\n /** Open one path-backed source's detail (an inline footnote click). */\n readonly onSourceDetail?: (source: QaSource) => void;\n}\n\ntype Rating = \"up\" | \"down\";\n\n/**\n * Whether two transcript messages render identically. The transcript\n * projection rebuilds every message object on each published frame, so the\n * memoized row compares rendered content instead of references; string\n * comparison is by value, which keeps fresh copies cheap to recognize.\n */\nexport function sameMessage(a: QaMessageModel, b: QaMessageModel): boolean {\n if (a === b) return true;\n if (a.id !== b.id || a.role !== b.role || a.status !== b.status) return false;\n if (a.role === \"work\" && b.role === \"work\") {\n return (\n a.turn === b.turn &&\n a.startedAt === b.startedAt &&\n a.endedAt === b.endedAt &&\n sameWorkItems(a.items, b.items)\n );\n }\n if (a.role === \"work\" || b.role === \"work\") return false;\n // Roles are equal, so both messages are one of the text-bearing variants.\n if (a.text !== b.text || a.timestamp !== b.timestamp) return false;\n if (a.role === \"assistant\" && b.role === \"assistant\") {\n return (\n sameSources(a.sources, b.sources) &&\n (a.stats === undefined) === (b.stats === undefined) &&\n (a.stats === undefined ||\n b.stats === undefined ||\n (a.stats.durationMs === b.stats.durationMs &&\n a.stats.ttftMs === b.stats.ttftMs &&\n a.stats.tokensPerSecond === b.stats.tokensPerSecond))\n );\n }\n if (a.role === \"user\" && b.role === \"user\") {\n return a.author === b.author && sameImages(a.images, b.images);\n }\n if (a.role === \"system\" && b.role === \"system\") {\n return (\n (a.notice === undefined) === (b.notice === undefined) &&\n (a.notice === undefined ||\n b.notice === undefined ||\n (a.notice.title === b.notice.title && a.notice.body === b.notice.body))\n );\n }\n return false;\n}\n\nfunction sameSources(\n a: readonly QaSource[] | undefined,\n b: readonly QaSource[] | undefined,\n): boolean {\n if (a === b) return true;\n if (a === undefined || b === undefined || a.length !== b.length) return false;\n return a.every(\n (source, index) =>\n source.id === b[index]?.id &&\n source.title === b[index]?.title &&\n source.uri === b[index]?.uri &&\n source.path === b[index]?.path &&\n source.snippet === b[index]?.snippet &&\n source.evidence === b[index]?.evidence &&\n source.score === b[index]?.score &&\n JSON.stringify(source.locations) ===\n JSON.stringify(b[index]?.locations) &&\n JSON.stringify(source.origins) === JSON.stringify(b[index]?.origins),\n );\n}\n\nfunction sameImages(\n a: readonly QaImageView[] | undefined,\n b: readonly QaImageView[] | undefined,\n): boolean {\n if (a === b) return true;\n if (a === undefined || b === undefined || a.length !== b.length) return false;\n return a.every(\n (image, index) =>\n image.attachmentId === (b[index] as QaImageView).attachmentId &&\n image.mediaType === (b[index] as QaImageView).mediaType,\n );\n}\n\nfunction readRatings(stateKey: string | undefined): Record<string, Rating> {\n if (stateKey === undefined) return {};\n try {\n const raw = window.localStorage.getItem(`${stateKey}:ratings`);\n if (raw === null) return {};\n const parsed: unknown = JSON.parse(raw);\n return typeof parsed === \"object\" && parsed !== null\n ? (parsed as Record<string, Rating>)\n : {};\n } catch {\n return {};\n }\n}\n\nfunction writeRating(\n stateKey: string | undefined,\n id: string,\n rating: Rating | null,\n): void {\n if (stateKey === undefined) return;\n try {\n const ratings = readRatings(stateKey);\n if (rating === null) delete ratings[id];\n else ratings[id] = rating;\n window.localStorage.setItem(`${stateKey}:ratings`, JSON.stringify(ratings));\n } catch {\n // A denied localStorage write must not break the conversation.\n }\n}\n\nfunction assistantMeta(message: QaMessageModel & { role: \"assistant\" }) {\n const parts: string[] = [];\n if (message.stats !== undefined) {\n parts.push(formatSeconds(message.stats.durationMs));\n if (message.stats.ttftMs !== null) {\n parts.push(`TTFT ${formatSeconds(message.stats.ttftMs)}`);\n }\n if (message.stats.tokensPerSecond !== null) {\n parts.push(`${message.stats.tokensPerSecond} ток/с`);\n }\n }\n return parts;\n}\n\nexport const QaMessage = memo(\n function QaMessage({\n message,\n renderMarkdown,\n showTimestamp,\n stateKey,\n onRegenerate,\n resolveImage,\n onOpenSources,\n onSourceDetail,\n }: QaMessageProps) {\n const [copied, setCopied] = useState(false);\n const copiedTimer = useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined,\n );\n const [rating, setRating] = useState<Rating | null>(null);\n // Source-footnote registry, cached by the source-id set so the memoized\n // Markdown keeps one resolver identity across streaming frames.\n const refsCache = useRef<{ ids: string; refs: QaSourceRefs }>({\n ids: \"\",\n refs: buildSourceRefs([]),\n });\n if (message.role === \"assistant\") {\n const ids = message.sources?.map((source) => source.id).join(\"|\") ?? \"\";\n if (refsCache.current.ids !== ids) {\n refsCache.current = {\n ids,\n refs: buildSourceRefs(message.sources ?? []),\n };\n }\n }\n const sourceRefs =\n message.role === \"assistant\" ? refsCache.current.refs : undefined;\n useEffect(() => {\n setRating(readRatings(stateKey)[message.id] ?? null);\n }, [stateKey, message.id]);\n useEffect(\n () => () => {\n if (copiedTimer.current !== undefined)\n clearTimeout(copiedTimer.current);\n },\n [],\n );\n if (message.role === \"system\" && message.notice !== undefined) {\n return (\n <details className=\"dsh-qa-notice\">\n <summary className=\"dsh-qa-notice__summary\">\n <svg\n className=\"dsh-qa-notice__icon\"\n viewBox=\"0 0 16 16\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"5\" width=\"10\" height=\"7.5\" rx=\"1.75\" />\n <path d=\"M8 2.5V5m0-.25a.9.9 0 1 0-.01-1.8.9.9 0 0 0 .01 1.8ZM5.4 8.4h1.7M8.9 8.4h1.7M6 10.4h4\" />\n </svg>\n <span className=\"dsh-qa-notice__title\">{message.notice.title}</span>\n <svg\n className=\"dsh-qa-notice__chevron\"\n viewBox=\"0 0 14 14\"\n aria-hidden=\"true\"\n >\n <path d=\"m5.25 3.5 3.5 3.5-3.5 3.5\" />\n </svg>\n </summary>\n <div className=\"dsh-qa-notice__body\">\n {message.notice.body === \"\" ? (\n <p>Без итогового сообщения.</p>\n ) : renderMarkdown ? (\n <Markdown text={message.notice.body} />\n ) : (\n message.notice.body\n )}\n </div>\n </details>\n );\n }\n if (message.role === \"work\") {\n return (\n <article\n className=\"dsh-qa-message dsh-qa-message--work\"\n data-status={message.status}\n aria-label=\"Работа помощника\"\n >\n <QaWorkGroup\n status={message.status}\n startedAt={message.startedAt}\n endedAt={message.endedAt}\n items={message.items}\n renderMarkdown={renderMarkdown}\n />\n </article>\n );\n }\n const label =\n message.role === \"assistant\"\n ? \"Помощник\"\n : message.role === \"user\"\n ? (message.author ?? \"Вы\")\n : \"Статус\";\n const copy = async () => {\n if (copied || navigator.clipboard?.writeText === undefined) return;\n try {\n await navigator.clipboard.writeText(message.text);\n setCopied(true);\n if (copiedTimer.current !== undefined)\n clearTimeout(copiedTimer.current);\n copiedTimer.current = setTimeout(() => setCopied(false), 1200);\n } catch {\n // Clipboard access may be denied by the embedding browser; keep the\n // action available for a later user gesture without surfacing noise.\n }\n };\n const toggleRating = (value: Rating) => {\n const next = rating === value ? null : value;\n setRating(next);\n writeRating(stateKey, message.id, next);\n };\n const persistentMeta = showTimestamp && message.timestamp !== undefined;\n const meta =\n message.role === \"system\" || message.timestamp === undefined ? null : (\n <span className=\"dsh-qa-message__meta\">\n <time dateTime={new Date(message.timestamp).toISOString()}>\n {formatDayTime(message.timestamp)}\n </time>\n {message.role === \"assistant\"\n ? assistantMeta(message).map((part) => (\n <span key={part} className=\"dsh-qa-message__meta-part\">\n {part}\n </span>\n ))\n : null}\n </span>\n );\n const showActions =\n message.role !== \"system\" && message.status !== \"streaming\";\n return (\n <article\n className={`dsh-qa-message dsh-qa-message--${message.role}`}\n data-status={message.status}\n aria-label={`Сообщение: ${label}`}\n >\n <div className=\"dsh-qa-message__content\">\n {message.role === \"user\" && message.author !== undefined ? (\n <span className=\"dsh-qa-message__byline\">{message.author}</span>\n ) : null}\n {message.role === \"user\" && message.images !== undefined ? (\n <div className=\"dsh-qa-message__images\">\n {message.images.map((image) =>\n resolveImage === undefined ? null : (\n <QaAttachedImage\n key={image.attachmentId}\n image={image}\n resolve={resolveImage}\n />\n ),\n )}\n </div>\n ) : null}\n {message.role === \"assistant\" && renderMarkdown ? (\n <Markdown\n text={message.text}\n sourceRefs={sourceRefs}\n onSourceOpen={onSourceDetail}\n />\n ) : (\n message.text\n )}\n {message.status === \"streaming\" ? (\n <span className=\"dsh-qa-message__cursor\" aria-hidden=\"true\" />\n ) : null}\n </div>\n {message.role === \"assistant\" &&\n onOpenSources !== undefined &&\n message.sources !== undefined &&\n message.sources.length > 0 ? (\n <button\n type=\"button\"\n className=\"dsh-qa-message__sources\"\n onClick={() =>\n onOpenSources(\n message.sources ?? [],\n message.sourcesComplete ?? true,\n message.incompleteSourceOrigins,\n )\n }\n >\n Источники ({message.sources.length})\n </button>\n ) : null}\n {showActions ? (\n <div\n className=\"dsh-qa-message__actions\"\n data-persistent={persistentMeta || undefined}\n >\n {message.role === \"user\" ? meta : null}\n <button\n type=\"button\"\n aria-label={copied ? \"Скопировано\" : \"Скопировать сообщение\"}\n title={copied ? \"Скопировано\" : \"Копировать\"}\n onClick={() => void copy()}\n >\n {copied ? (\n <svg viewBox=\"0 0 18 18\" aria-hidden=\"true\">\n <path d=\"m4.5 9.25 2.75 2.75 6.25-6.25\" />\n </svg>\n ) : (\n <svg viewBox=\"0 0 18 18\" aria-hidden=\"true\">\n <rect x=\"6.25\" y=\"3.25\" width=\"8.5\" height=\"8.5\" rx=\"2\" />\n <path d=\"M11.75 11.75v.5a2.5 2.5 0 0 1-2.5 2.5h-3.5a2.5 2.5 0 0 1-2.5-2.5v-3.5a2.5 2.5 0 0 1 2.5-2.5h.5\" />\n </svg>\n )}\n </button>\n {message.role === \"user\" ? null : (\n <>\n <button\n type=\"button\"\n aria-label=\"Нравится\"\n title=\"Нравится\"\n aria-pressed={rating === \"up\"}\n data-active={rating === \"up\" || undefined}\n onClick={() => toggleRating(\"up\")}\n >\n <svg viewBox=\"0 0 18 18\" aria-hidden=\"true\">\n <path d=\"M5.25 8.25 8.1 2.9a1.3 1.3 0 0 1 2.4.75v3.1h3.1c.9 0 1.55.85 1.33 1.72l-1.05 4.2a1.75 1.75 0 0 1-1.7 1.33H5.25m0-5.75v5.75m0-5.75h-2v5.75h2\" />\n </svg>\n </button>\n <button\n type=\"button\"\n aria-label=\"Не нравится\"\n title=\"Не нравится\"\n aria-pressed={rating === \"down\"}\n data-active={rating === \"down\" || undefined}\n onClick={() => toggleRating(\"down\")}\n >\n <svg viewBox=\"0 0 18 18\" aria-hidden=\"true\">\n <path d=\"M12.75 9.75 9.9 15.1a1.3 1.3 0 0 1-2.4-.75v-3.1H4.4a1.38 1.38 0 0 1-1.33-1.72l1.05-4.2A1.75 1.75 0 0 1 5.82 4h6.93m0 5.75V4m0 5.75h2V4h-2\" />\n </svg>\n </button>\n {onRegenerate === undefined ? null : (\n <button\n type=\"button\"\n aria-label=\"Перегенерировать\"\n title=\"Перегенерировать\"\n onClick={onRegenerate}\n >\n <svg viewBox=\"0 0 18 18\" aria-hidden=\"true\">\n <path d=\"M14.6 9A5.6 5.6 0 1 1 12.9 5l1.7 1.7m0-3.4v3.4h-3.4\" />\n </svg>\n </button>\n )}\n </>\n )}\n {message.role === \"user\" ? null : meta}\n </div>\n ) : null}\n </article>\n );\n },\n (prev, next) =>\n prev.renderMarkdown === next.renderMarkdown &&\n prev.showTimestamp === next.showTimestamp &&\n prev.stateKey === next.stateKey &&\n prev.onRegenerate === next.onRegenerate &&\n prev.resolveImage === next.resolveImage &&\n prev.onOpenSources === next.onOpenSources &&\n prev.onSourceDetail === next.onSourceDetail &&\n sameMessage(prev.message, next.message),\n);\n","import { useEffect, useRef } from \"react\";\n\n/**\n * The deployed plugin version and a curated end-user changelog. The module is\n * bundled into the self-contained client, so both are frozen at build time;\n * the build and test configs inject QA_VERSION from package.json. Curated\n * entries may include the next planned version before Nx materializes it in\n * CHANGELOG.md; after the release bump that entry becomes current without a\n * source edit.\n */\ndeclare const __DSH_QA_VERSION__: string;\nexport const QA_VERSION = __DSH_QA_VERSION__;\n\nexport interface QaChangelogEntry {\n readonly version: string;\n readonly date: string;\n readonly sections: readonly {\n readonly title: string;\n readonly items: readonly string[];\n }[];\n}\n\nexport const QA_CHANGELOG: readonly QaChangelogEntry[] = [\n {\n version: \"0.3.0\",\n date: \"2026-09-12\",\n sections: [\n {\n title: \"Новое\",\n items: [\n \"Аккаунты QA: вход и регистрация, персональная история чатов, выход из аккаунта и управление пользователями через CLI.\",\n \"Администратор видит только свои чаты по умолчанию. Общую историю пользователей можно явно включить настройкой accounts.showOtherUsersChats.\",\n \"Предупреждение при входе в тестовый QA-интерфейс с пояснением о работе с данными.\",\n \"Навигация по ответу стала нагляднее: шкала хода работы, сноски на источники и подробности выполненных инструментов.\",\n \"История версий теперь доступна прямо из нижней части сайдбара.\",\n ],\n },\n {\n title: \"Исправления\",\n items: [\n \"Поиск по чатам учитывает владельца, получил кнопку очистки и больше не ломает ширину строк; роли администратора отображаются отдельно.\",\n \"Убраны декоративные точки-разделители из списка чатов, сообщений и карточек источников.\",\n \"Переключение между чатами больше не переносит вложения и другое состояние предыдущей сессии; устранены гонки асинхронной загрузки.\",\n \"Изменения аккаунтов, сделанные через CLI, подхватываются без перезапуска, а запись хранилища стала безопаснее для параллельных процессов.\",\n \"Ошибки создания сессии, остановленные и завершившиеся ошибкой инструменты теперь показываются пользователю корректно.\",\n \"Клиент и упакованный плагин обновлены для интерфейсов DSH 0.1.5-rc.2.\",\n ],\n },\n ],\n },\n {\n version: \"0.2.0\",\n date: \"2026-09-10\",\n sections: [\n {\n title: \"Новое\",\n items: [\n \"Вложения-картинки: перетащите файл в чат, вставьте из буфера или выберите через кнопку — превью можно убрать до отправки.\",\n \"Субагенты-эксперты: панель со списком, живой просмотр их работы только для чтения и свёрнутые уведомления о завершении.\",\n \"Карточки источников с полным просмотром вывода, кликабельными ссылками и кнопкой открытия.\",\n \"Перегенерация ответа с переключением вариантов, как в ChatGPT.\",\n \"Оценки ответов с метаданными на-hover: длительность, время до первого токена, токенов в секунду.\",\n \"История чатов: поиск, сворачивание сайдбара, сортировка по обновлению, черновики-чаты без создания сессии до первого вопроса.\",\n \"Закрепление чата за каталогом/workspace с понятным отказом, когда workspace недоступен.\",\n \"Плашка с дисклеймером об использовании данных под полем ввода.\",\n ],\n },\n {\n title: \"Исправления\",\n items: [\n \"В опубликованный пакет снова вошли модули host- и remote-энтрипоинтов, которые терялись при упаковке.\",\n ],\n },\n ],\n },\n {\n version: \"0.1.1\",\n date: \"2026-09-06\",\n sections: [\n {\n title: \"Исправления\",\n items: [\n \"Отдельный браузерный интерфейс QA поверх нативных сессий DeepSeek Harness.\",\n ],\n },\n ],\n },\n {\n version: \"0.1.0\",\n date: \"2026-09-05\",\n sections: [\n {\n title: \"Новое\",\n items: [\n \"Полноэкранный чат /qa на нативных сессиях DSH: потоковый ответ, Stop, Новый чат, безопасный Markdown, адаптивный интерфейс.\",\n \"Группировка рассуждений и вызовов инструментов в сворачиваемый блок «Работал над ответом».\",\n \"История чатов в сайдбаре с поиском по этому браузеру, переключением и удалением чата из индекса.\",\n \"Русскоязычный интерфейс, вращающиеся фразы-«мысли» и чипсы быстрых вопросов на пустом чате.\",\n \"Безопасность: аттестация политики хоста, закреплённый read-only профиль, белый список инструментов и защита от повторного выполнения.\",\n \"Рендер GFM-таблиц, нумерованных списков и разделителей в ответах.\",\n \"Работа по сети: деплой-оверлей для LAN и запасной путь получения конфигурации.\",\n ],\n },\n ],\n },\n];\n\n/** Props of the {@link QaChangelogModal} dialog. */\nexport interface QaChangelogModalProps {\n readonly open: boolean;\n readonly onClose: () => void;\n}\n\n/**\n * The version/changelog dialog opened from the sidebar footer. Rendering is\n * a no-op while closed; Escape and a backdrop click close it.\n */\nexport function QaChangelogModal(props: QaChangelogModalProps) {\n const closeButton = useRef<HTMLButtonElement>(null);\n useEffect(() => {\n if (!props.open) return;\n closeButton.current?.focus();\n const onKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") props.onClose();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [props.open, props.onClose]);\n if (!props.open) return null;\n return (\n <div\n className=\"dsh-qa-changelog\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"История версий\"\n onClick={(event) => {\n if (event.target === event.currentTarget) props.onClose();\n }}\n >\n <div className=\"dsh-qa-changelog__panel\">\n <header className=\"dsh-qa-changelog__head\">\n <h2 className=\"dsh-qa-changelog__title\">История версий</h2>\n <button\n ref={closeButton}\n type=\"button\"\n className=\"dsh-qa-changelog__close\"\n aria-label=\"Закрыть историю версий\"\n onClick={props.onClose}\n >\n <svg viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <path d=\"m3.5 3.5 7 7m0-7-7 7\" />\n </svg>\n </button>\n </header>\n <div className=\"dsh-qa-changelog__body\">\n {QA_CHANGELOG.map((entry) => (\n <section key={entry.version} className=\"dsh-qa-changelog__entry\">\n <h3 className=\"dsh-qa-changelog__version\">\n Версия {entry.version}\n <span className=\"dsh-qa-changelog__date\">{entry.date}</span>\n {entry.version === QA_VERSION ? (\n <span className=\"dsh-qa-changelog__current\">текущая</span>\n ) : null}\n </h3>\n {entry.sections.map((section) => (\n <div key={section.title} className=\"dsh-qa-changelog__section\">\n <h4 className=\"dsh-qa-changelog__section-title\">\n {section.title}\n </h4>\n <ul className=\"dsh-qa-changelog__list\">\n {section.items.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n </div>\n ))}\n </section>\n ))}\n </div>\n </div>\n </div>\n );\n}\n","import { memo, useState, type ReactNode } from \"react\";\nimport type { SessionSummary } from \"@deepseek-ai/dsh-api-session-controller/client\";\nimport { QA_VERSION, QaChangelogModal } from \"./QaChangelog.js\";\nimport { relativeTime } from \"./format.js\";\n\n/** One renderable row of the chat-history sidebar. */\nexport interface QaChatRow {\n readonly id: string;\n readonly title: string;\n readonly running: boolean;\n readonly active: boolean;\n readonly meta: string;\n readonly updatedAt: number;\n /** Chat owner's display name; present in the admin ownership view only. */\n readonly ownerName?: string;\n}\n\n/**\n * Project this browser's indexed chat ids onto the host session list, most\n * recently updated first. Opening a chat is not an update: only the host's\n * `updatedAt` (fresh messages) orders the list. Ids the host no longer lists\n * are skipped (the controller prunes them on switch).\n */\nexport function buildChatRows(\n chatIds: readonly string[],\n byId: Readonly<Record<string, SessionSummary>>,\n activeId: string | null,\n ownerNameOf?: (sessionId: string) => string | undefined,\n now: number = Date.now(),\n): readonly QaChatRow[] {\n const rows: QaChatRow[] = [];\n for (const id of chatIds) {\n const summary = byId[id];\n if (summary === undefined) continue;\n const ownerName = ownerNameOf?.(id);\n rows.push({\n id,\n title: summary.blank ? \"Новый чат\" : summary.displayTitle,\n running: summary.running,\n active: id === activeId,\n meta: relativeTime(summary.updatedAt, now),\n updatedAt: summary.updatedAt,\n ...(ownerName === undefined ? {} : { ownerName }),\n });\n }\n return rows.sort((left, right) => right.updatedAt - left.updatedAt);\n}\n\n/** One per-owner section of the admin sidebar grouping. */\nexport interface QaSidebarSection {\n /**\n * Section header; chats nobody claimed group under \"Без владельца\". An\n * empty name renders no header (the flat, non-grouped mode).\n */\n readonly name: string;\n readonly rows: readonly QaChatRow[];\n}\n\n/**\n * Group rows into per-owner sections for the admin view. Sections order by\n * their freshest row so the busiest users float up; unclaimed chats go last.\n * Row order inside a section is already the global updatedAt order.\n */\nexport function buildOwnerSections(\n rows: readonly QaChatRow[],\n): readonly QaSidebarSection[] {\n const groups = new Map<string, QaChatRow[]>();\n for (const row of rows) {\n const key = row.ownerName ?? \"\";\n const bucket = groups.get(key);\n if (bucket === undefined) groups.set(key, [row]);\n else bucket.push(row);\n }\n const sections: QaSidebarSection[] = [...groups].map(([name, groupRows]) => ({\n name: name === \"\" ? \"Без владельца\" : name,\n rows: groupRows,\n }));\n sections.sort((left, right) => {\n if (left.name === \"Без владельца\") return 1;\n if (right.name === \"Без владельца\") return -1;\n return (right.rows[0]?.updatedAt ?? 0) - (left.rows[0]?.updatedAt ?? 0);\n });\n return sections;\n}\n\nexport interface QaSidebarProps {\n readonly rows: readonly QaChatRow[];\n /**\n * Render per-owner sections instead of the flat list; the admin ownership\n * view. Rows without an owner name fall into a trailing section.\n */\n readonly groupByOwner?: boolean;\n /** Deployment brand shown next to the logo (also while collapsed). */\n readonly title: string;\n /** Optional image logo; a built-in mark is drawn when null. */\n readonly logoUrl: string | null;\n /** Storage prefix used to remember the collapsed state across reloads. */\n readonly stateKey: string;\n readonly showNewChat: boolean;\n readonly busy: boolean;\n readonly onSwitch: (sessionId: string) => void;\n readonly onNewChat: () => void;\n /** Removes a chat from this browser's index; omit to hide the control. */\n readonly onDelete?: (sessionId: string) => void;\n /** The signed-in account; omit when accounts are disabled. */\n readonly account?: {\n readonly email: string;\n readonly role: string;\n readonly onLogout: () => void;\n };\n}\n\nfunction readCollapsed(key: string): boolean {\n try {\n return window.localStorage.getItem(`${key}:sidebar-collapsed`) === \"1\";\n } catch {\n return false;\n }\n}\n\nfunction writeCollapsed(key: string, collapsed: boolean): void {\n try {\n window.localStorage.setItem(\n `${key}:sidebar-collapsed`,\n collapsed ? \"1\" : \"0\",\n );\n } catch {\n // A denied localStorage write only costs persistence across reloads.\n }\n}\n\nfunction DefaultMark() {\n return (\n <svg viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <path d=\"M10 2.75a6.4 6.4 0 0 0-4.9 10.52c.2.24.28.5.24.79l-.2 1.44 1.9-.7c.24-.09.5-.06.74.05A6.4 6.4 0 1 0 10 2.75Z\" />\n <path d=\"M7.4 8.1h5.2M7.4 11h3.2\" />\n </svg>\n );\n}\n\nfunction PlusIcon() {\n return (\n <svg viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <path d=\"M7 2.8v8.4M2.8 7h8.4\" />\n </svg>\n );\n}\n\nfunction SearchIcon() {\n return (\n <svg viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <circle cx=\"6.25\" cy=\"6.25\" r=\"3.75\" />\n <path d=\"m9.2 9.2 2.55 2.55\" />\n </svg>\n );\n}\n\nfunction ClearIcon() {\n return (\n <svg viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <path d=\"m3.5 3.5 7 7m0-7-7 7\" />\n </svg>\n );\n}\n\nfunction ChevronIcon() {\n return (\n <svg viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <path d=\"m8.75 3.5-3.5 3.5 3.5 3.5\" />\n </svg>\n );\n}\n\nfunction rowMatches(row: QaChatRow, query: string): boolean {\n return (\n row.title.toLowerCase().includes(query) ||\n row.ownerName?.toLowerCase().includes(query) === true\n );\n}\n\n/**\n * Whether two sidebar row lists show the same thing. Rows are rebuilt on\n * every surface render (relative timestamps drift), so the memoized sidebar\n * compares by content and skips frames that only move the transcript.\n */\nexport function sameChatRows(\n a: readonly QaChatRow[],\n b: readonly QaChatRow[],\n): boolean {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n return a.every((row, index) => {\n const other = b[index] as QaChatRow;\n return (\n row.id === other.id &&\n row.title === other.title &&\n row.running === other.running &&\n row.active === other.active &&\n row.meta === other.meta &&\n row.updatedAt === other.updatedAt &&\n row.ownerName === other.ownerName\n );\n });\n}\n\n/** The per-browser chat history shown beside the QA conversation. */\nexport const QaSidebar = memo(\n function QaSidebar(props: QaSidebarProps) {\n const [collapsed, setCollapsed] = useState(() =>\n readCollapsed(props.stateKey),\n );\n const [query, setQuery] = useState(\"\");\n const [confirmingId, setConfirmingId] = useState<string | null>(null);\n const [changelogOpen, setChangelogOpen] = useState(false);\n const toggleCollapsed = () => {\n const next = !collapsed;\n setCollapsed(next);\n writeCollapsed(props.stateKey, next);\n };\n if (collapsed) {\n return (\n <nav\n className=\"dsh-qa-sidebar dsh-qa-sidebar--collapsed\"\n aria-label=\"История чатов\"\n >\n <button\n type=\"button\"\n className=\"dsh-qa-sidebar__expand\"\n aria-label=\"Развернуть историю чатов\"\n title=\"Развернуть историю чатов\"\n onClick={toggleCollapsed}\n >\n <ChevronIcon />\n </button>\n </nav>\n );\n }\n const normalizedQuery = query.trim().toLowerCase();\n const visibleRows =\n normalizedQuery === \"\"\n ? props.rows\n : props.rows.filter((row) => rowMatches(row, normalizedQuery));\n const confirmingVisible =\n confirmingId !== null &&\n props.rows.some((row) => row.id === confirmingId);\n const sections: readonly QaSidebarSection[] =\n props.groupByOwner === true\n ? buildOwnerSections(visibleRows)\n : [{ name: \"\", rows: visibleRows }];\n const renderRow = (row: QaChatRow) => {\n const confirming = confirmingVisible && confirmingId === row.id;\n return (\n <div\n key={row.id}\n className={\n row.active\n ? \"dsh-qa-sidebar__item dsh-qa-sidebar__item--active\"\n : \"dsh-qa-sidebar__item\"\n }\n >\n <button\n type=\"button\"\n className=\"dsh-qa-sidebar__item-main\"\n aria-current={row.active ? \"true\" : undefined}\n onClick={() => props.onSwitch(row.id)}\n >\n <span className=\"dsh-qa-sidebar__item-title\">{row.title}</span>\n <span className=\"dsh-qa-sidebar__item-meta\">\n {row.running ? (\n <span\n className=\"dsh-qa-sidebar__dot\"\n role=\"img\"\n aria-label=\"Выполняется\"\n />\n ) : null}\n {row.meta}\n </span>\n </button>\n {props.onDelete === undefined ? null : (\n <button\n type=\"button\"\n className={\n confirming\n ? \"dsh-qa-sidebar__item-delete dsh-qa-sidebar__item-delete--confirm\"\n : \"dsh-qa-sidebar__item-delete\"\n }\n aria-label={\n confirming ? \"Подтвердить удаление чата\" : \"Удалить чат\"\n }\n title={\n confirming ? \"Нажмите ещё раз для удаления\" : \"Удалить чат\"\n }\n onClick={() => {\n if (confirming) {\n setConfirmingId(null);\n props.onDelete?.(row.id);\n return;\n }\n setConfirmingId(row.id);\n }}\n >\n {confirming ? (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"m3.5 8.5 3 3L12.5 5\" />\n </svg>\n ) : (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M2.5 4h11M6.5 4V2.5h3V4m-6.2 0 .6 9.5h7.2L12 4\" />\n </svg>\n )}\n </button>\n )}\n </div>\n );\n };\n const brand: ReactNode =\n props.logoUrl === null ? (\n <DefaultMark />\n ) : (\n <img src={props.logoUrl} alt=\"\" />\n );\n return (\n <nav className=\"dsh-qa-sidebar\" aria-label=\"История чатов\">\n <div className=\"dsh-qa-sidebar__head\">\n <span className=\"dsh-qa-sidebar__brand\" title={props.title}>\n <span className=\"dsh-qa-sidebar__logo\">{brand}</span>\n <span className=\"dsh-qa-sidebar__name\">{props.title}</span>\n </span>\n <button\n type=\"button\"\n className=\"dsh-qa-sidebar__collapse\"\n aria-label=\"Свернуть историю чатов\"\n title=\"Свернуть историю чатов\"\n onClick={toggleCollapsed}\n >\n <ChevronIcon />\n </button>\n </div>\n {props.showNewChat ? (\n <div className=\"dsh-qa-sidebar__newbar\">\n <button\n type=\"button\"\n className=\"dsh-qa-sidebar__new\"\n disabled={props.busy}\n onClick={props.onNewChat}\n >\n <PlusIcon />\n Новый чат\n </button>\n </div>\n ) : null}\n <div className=\"dsh-qa-sidebar__search\">\n <SearchIcon />\n <input\n type=\"search\"\n value={query}\n placeholder=\"Поиск по чатам\"\n aria-label=\"Поиск по чатам\"\n onChange={(event) => setQuery(event.currentTarget.value)}\n />\n {query === \"\" ? null : (\n <button\n type=\"button\"\n className=\"dsh-qa-sidebar__search-clear\"\n aria-label=\"Очистить поиск\"\n title=\"Очистить поиск\"\n onClick={() => setQuery(\"\")}\n >\n <ClearIcon />\n </button>\n )}\n </div>\n <div className=\"dsh-qa-sidebar__list\">\n {props.rows.length === 0 ? (\n <p className=\"dsh-qa-sidebar__empty\">Здесь пока пусто</p>\n ) : visibleRows.length === 0 ? (\n <p className=\"dsh-qa-sidebar__empty\">Ничего не найдено</p>\n ) : (\n sections.map((section) => (\n <div\n key={section.name || \"__all\"}\n className=\"dsh-qa-sidebar__group\"\n >\n {section.name === \"\" ? null : (\n <div className=\"dsh-qa-sidebar__group-name\">\n {section.name} ({section.rows.length})\n </div>\n )}\n {section.rows.map(renderRow)}\n </div>\n ))\n )}\n </div>\n <div className=\"dsh-qa-sidebar__footer\">\n {props.account === undefined ? null : (\n <div\n className=\"dsh-qa-sidebar__account\"\n title={`${props.account.email} (${props.account.role})`}\n >\n <span className=\"dsh-qa-sidebar__account-name\">\n {props.account.email}\n </span>\n {props.account.role === \"admin\" ? (\n <span className=\"dsh-qa-sidebar__account-role\">admin</span>\n ) : null}\n <button\n type=\"button\"\n className=\"dsh-qa-sidebar__account-exit\"\n title=\"Выйти из аккаунта\"\n aria-label=\"Выйти из аккаунта\"\n onClick={props.account.onLogout}\n >\n <svg viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <path d=\"M8.5 2.5h3v9h-3M5.5 9.5 3 7l2.5-2.5M3 7h6\" />\n </svg>\n </button>\n </div>\n )}\n <button\n type=\"button\"\n className=\"dsh-qa-sidebar__version\"\n aria-haspopup=\"dialog\"\n title=\"История версий\"\n onClick={() => setChangelogOpen(true)}\n >\n Версия {QA_VERSION}\n </button>\n </div>\n <QaChangelogModal\n open={changelogOpen}\n onClose={() => setChangelogOpen(false)}\n />\n </nav>\n );\n },\n (prev, next) =>\n prev.title === next.title &&\n prev.logoUrl === next.logoUrl &&\n prev.stateKey === next.stateKey &&\n prev.showNewChat === next.showNewChat &&\n prev.busy === next.busy &&\n prev.groupByOwner === next.groupByOwner &&\n prev.onSwitch === next.onSwitch &&\n prev.onNewChat === next.onNewChat &&\n prev.onDelete === next.onDelete &&\n prev.account?.email === next.account?.email &&\n prev.account?.role === next.account?.role &&\n prev.account?.onLogout === next.account?.onLogout &&\n sameChatRows(prev.rows, next.rows),\n);\n","import type { SessionSummary } from \"@deepseek-ai/dsh-api-session-controller/client\";\nimport { relativeTime } from \"./format.js\";\n\n/** One row of the agents panel: a subagent session of the open chat. */\nexport interface QaSubagentRow {\n readonly id: string;\n readonly title: string;\n readonly running: boolean;\n readonly completed: boolean;\n readonly meta: string;\n}\n\n/**\n * Direct subagent children of the open chat, running first. Reads the host\n * session list's lineage (parentId + origin), so no extra subscription beyond\n * the list the surface already follows.\n */\nexport function collectSubagents(\n byId: Readonly<Record<string, SessionSummary>>,\n rootId: string | null,\n now: number = Date.now(),\n): readonly QaSubagentRow[] {\n if (rootId === null) return [];\n const rows: QaSubagentRow[] = [];\n for (const summary of Object.values(byId)) {\n if (summary.parentId !== rootId || summary.origin !== \"subagent\") continue;\n rows.push({\n id: summary.id,\n title: summary.blank ? \"Субагент\" : summary.displayTitle,\n running: summary.running,\n completed: summary.completed === true,\n meta: relativeTime(summary.updatedAt, now),\n });\n }\n return rows.sort((left, right) =>\n left.running === right.running ? 0 : left.running ? -1 : 1,\n );\n}\n\nexport interface QaAgentsDrawerProps {\n readonly agents: readonly QaSubagentRow[];\n /** The subagent currently watched, if any. */\n readonly activeId: string | null;\n readonly onView: (id: string, title: string) => void;\n readonly onClose: () => void;\n}\n\n/** Right-hand panel listing the chat's subagents. */\nexport function QaAgentsDrawer({\n agents,\n activeId,\n onView,\n onClose,\n}: QaAgentsDrawerProps) {\n return (\n <aside className=\"dsh-qa-agents\" aria-label=\"Субагенты чата\">\n <div className=\"dsh-qa-agents__head\">\n <span>Субагенты ({agents.length})</span>\n <button\n type=\"button\"\n aria-label=\"Закрыть список субагентов\"\n title=\"Закрыть\"\n onClick={onClose}\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"m4 4 8 8m0-8-8 8\" />\n </svg>\n </button>\n </div>\n <div className=\"dsh-qa-agents__list\">\n {agents.map((agent) => {\n const active = activeId === agent.id;\n return (\n <button\n key={agent.id}\n type=\"button\"\n className={\n active\n ? \"dsh-qa-agents__item dsh-qa-agents__item--active\"\n : \"dsh-qa-agents__item\"\n }\n onClick={() => onView(agent.id, agent.title)}\n >\n <span\n className={\n agent.running\n ? \"dsh-qa-agents__dot dsh-qa-agents__dot--running\"\n : \"dsh-qa-agents__dot\"\n }\n aria-hidden=\"true\"\n />\n <span className=\"dsh-qa-agents__text\">\n <span className=\"dsh-qa-agents__title\">{agent.title}</span>\n <span className=\"dsh-qa-agents__meta\">\n {agent.running\n ? \"выполняется\"\n : agent.completed\n ? \"завершён\"\n : agent.meta}\n </span>\n </span>\n <span className=\"dsh-qa-agents__open\">\n {active ? \"открыт\" : \"смотреть\"}\n </span>\n </button>\n );\n })}\n </div>\n </aside>\n );\n}\n","import {\n memo,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type MouseEvent,\n type PointerEvent,\n type RefObject,\n} from \"react\";\nimport type { QaMessage } from \"../../types.js\";\n\n/**\n * One mark of the turn rail: the user prompt that opens the turn, a bounded\n * answer preview for the hover tooltip, and the message id that anchors the\n * jump (the prompt's message slot in the transcript).\n */\nexport interface QaTurnRailItem {\n /** 1-based position in the visible transcript; also the React key. */\n readonly turn: number;\n /** The user message id that opens the turn (scroll anchor). */\n readonly id: string;\n readonly prompt: string;\n readonly response: string;\n}\n\n/** Transcript attribute marking the message slot that opens a turn. */\nexport const QA_TURN_ANCHOR_ATTRIBUTE = \"data-dsh-qa-turn-anchor\";\n\n/** Scroll distance from the floor at which the rail still calls it \"at bottom\". */\nexport const QA_TURN_FOLLOW_PX = 96;\n/** The reading line: reading offset from the scrollport top while scrolling. */\nexport const QA_TURN_READING_PX = 96;\n/** Where a jump lands its prompt row, mirroring the harness chat rail. */\nconst QA_TURN_LAND_PX = 24;\n\nconst PROMPT_CLIP = 140;\nconst RESPONSE_CLIP = 220;\n\nfunction clipPreview(text: string, max: number): string {\n const flat = text.replace(/\\s+/gu, \" \").trim();\n if (flat.length <= max) return flat;\n return `${flat.slice(0, max - 1).trimEnd()}…`;\n}\n\n/**\n * Rail ladder of the visible transcript: every user prompt opens a turn, the\n * first non-empty answer after it fills the response preview. Hidden variant\n * answers never reach this list because callers pass the already-filtered\n * messages.\n */\nexport function buildTurnRailItems(\n messages: readonly QaMessage[],\n): readonly QaTurnRailItem[] {\n const items: QaTurnRailItem[] = [];\n for (const message of messages) {\n if (message.role === \"user\") {\n items.push({\n turn: items.length + 1,\n id: message.id,\n prompt: clipPreview(message.text, PROMPT_CLIP),\n response: \"\",\n });\n continue;\n }\n if (message.role !== \"assistant\" || items.length === 0) continue;\n const current = items.at(-1);\n if (current === undefined || current.response !== \"\") continue;\n const response = clipPreview(message.text, RESPONSE_CLIP);\n if (response !== \"\") items[items.length - 1] = { ...current, response };\n }\n return items;\n}\n\n/** Deep equality guard so the memoized rail skips streaming commits. */\nexport function sameTurnRailItems(\n left: readonly QaTurnRailItem[],\n right: readonly QaTurnRailItem[],\n): boolean {\n if (left === right) return true;\n if (left.length !== right.length) return false;\n return left.every((item, index) => {\n const other = right[index];\n return (\n other !== undefined &&\n item.turn === other.turn &&\n item.id === other.id &&\n item.prompt === other.prompt &&\n item.response === other.response\n );\n });\n}\n\n/**\n * Turn owning the transcript's reading line, or the newest one while the\n * reader follows the live tail. Anchors above the line are scanned in flow\n * order; the last one at or above it owns the mark.\n */\nexport function computeActiveTurn(\n scroller: HTMLElement,\n items: readonly QaTurnRailItem[],\n): number | null {\n if (items.length === 0) return null;\n const last = items.at(-1);\n if (last === undefined) return null;\n if (\n scroller.scrollHeight - scroller.scrollTop - scroller.clientHeight <=\n QA_TURN_FOLLOW_PX + 1\n ) {\n return last.turn;\n }\n const line =\n scroller.getBoundingClientRect().top +\n Math.min(QA_TURN_READING_PX, scroller.clientHeight * 0.2);\n const turnByAnchor = new Map(\n items.map((item) => [item.id, item.turn] as const),\n );\n const first = items[0];\n if (first === undefined) return null;\n let next = first.turn;\n for (const row of scroller.querySelectorAll<HTMLElement>(\n `[${QA_TURN_ANCHOR_ATTRIBUTE}]`,\n )) {\n if (row.getBoundingClientRect().top > line) break;\n const turn = turnByAnchor.get(\n row.getAttribute(QA_TURN_ANCHOR_ATTRIBUTE) ?? \"\",\n );\n if (turn !== undefined) next = turn;\n }\n return next;\n}\n\n/** Fixed pitch between neighbouring marks; overflow scrolls inside the frame. */\nconst TURN_SPACING_PX = 10;\n/** Rail padding above the first mark and below the last one, per end. */\nconst RAIL_INSET_PX = 6;\n/** Fade band the mask reserves at a scrollable end. */\nconst FADE_PX = 24;\n\n/** Scroll state the mask fades and follow logic read together. */\ninterface RailScrollState {\n readonly top: number;\n readonly canScrollUp: boolean;\n readonly canScrollDown: boolean;\n}\n\nconst RAIL_AT_REST: RailScrollState = {\n top: 0,\n canScrollUp: false,\n canScrollDown: false,\n};\n\nexport interface QaTurnRailProps {\n readonly items: readonly QaTurnRailItem[];\n readonly activeTurn: number | null;\n /** Turn still generating; its mark pulses. */\n readonly busyTurn: number | null;\n /** The transcript scroller the rail floats over and measures its band from. */\n readonly scrollerRef: RefObject<HTMLDivElement | null>;\n readonly onNavigate: (item: QaTurnRailItem) => void;\n}\n\nfunction railScrollState(scroller: HTMLElement): RailScrollState {\n const top = scroller.scrollTop;\n return {\n top,\n canScrollUp: top > 1,\n canScrollDown: top < scroller.scrollHeight - scroller.clientHeight - 1,\n };\n}\n\nfunction sameRailScrollState(\n left: RailScrollState,\n right: RailScrollState,\n): boolean {\n return (\n left.top === right.top &&\n left.canScrollUp === right.canScrollUp &&\n left.canScrollDown === right.canScrollDown\n );\n}\n\nfunction itemAtPointer(\n items: readonly QaTurnRailItem[],\n frame: HTMLElement,\n scrollTop: number,\n clientY: number,\n): QaTurnRailItem | undefined {\n const rect = frame.getBoundingClientRect();\n const offset = clientY - rect.top + scrollTop - RAIL_INSET_PX;\n const index = Math.max(\n 0,\n Math.min(items.length - 1, Math.round(offset / TURN_SPACING_PX)),\n );\n return items[index];\n}\n\nfunction QaTurnRailView({\n items,\n activeTurn,\n busyTurn,\n scrollerRef,\n onNavigate,\n}: QaTurnRailProps) {\n const slotRef = useRef<HTMLDivElement | null>(null);\n const ladderRef = useRef<HTMLDivElement | null>(null);\n /** While the pointer works the rail, follow must not move it under the hand. */\n const pointerInsideRef = useRef(false);\n const [previewTurn, setPreviewTurn] = useState<number | null>(null);\n const [scrollState, setScrollState] = useState<RailScrollState>(RAIL_AT_REST);\n const previewId = useId();\n\n // The band the marks centre in is the transcript scrollport's own height;\n // publish it as a custom property so the frame can centre without knowing\n // the header/composer layout around it.\n useEffect(() => {\n const slot = slotRef.current;\n const scroller = scrollerRef.current;\n if (slot === null || scroller === null) return;\n const apply = () => {\n slot.style.setProperty(\n \"--dsh-qa-rail-band\",\n `${scroller.clientHeight}px`,\n );\n };\n apply();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(apply);\n observer.observe(scroller);\n return () => {\n observer.disconnect();\n };\n }, [scrollerRef]);\n\n const syncScrollState = useCallback((): void => {\n const ladder = ladderRef.current;\n if (ladder === null) return;\n const next = railScrollState(ladder);\n setScrollState((current) =>\n sameRailScrollState(current, next) ? current : next,\n );\n }, []);\n\n // Frame resizes (band changes) move the overflow edges without a scroll\n // event; item count changes move the content height the same way.\n useEffect(() => {\n const ladder = ladderRef.current;\n if (ladder === null || typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(syncScrollState);\n observer.observe(ladder);\n return () => {\n observer.disconnect();\n };\n }, [syncScrollState]);\n useEffect(() => {\n syncScrollState();\n }, [items.length, syncScrollState]);\n\n // Keep the active mark visible: centre it whenever it leaves the scrollport,\n // unless the reader's pointer is working the rail.\n useEffect(() => {\n const ladder = ladderRef.current;\n const index = items.findIndex((item) => item.turn === activeTurn);\n if (ladder === null || index < 0 || pointerInsideRef.current) return;\n const markTop = index * TURN_SPACING_PX + RAIL_INSET_PX;\n const viewTop = ladder.scrollTop;\n const viewHeight = ladder.clientHeight;\n if (\n viewHeight <= 0 ||\n (markTop >= viewTop + FADE_PX &&\n markTop <= viewTop + viewHeight - FADE_PX)\n ) {\n return;\n }\n const target = Math.max(0, markTop - viewHeight / 2);\n const reduced =\n typeof matchMedia === \"function\" &&\n matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n if (typeof ladder.scrollTo === \"function\") {\n ladder.scrollTo({ top: target, behavior: reduced ? \"auto\" : \"smooth\" });\n } else {\n ladder.scrollTop = target;\n }\n syncScrollState();\n }, [activeTurn, items, syncScrollState]);\n\n if (items.length < 2) return null;\n const previewIndex = items.findIndex((item) => item.turn === previewTurn);\n const preview = previewIndex < 0 ? undefined : items[previewIndex];\n const previewPosition =\n previewIndex < 0 ? undefined : previewIndex * TURN_SPACING_PX;\n const previewAtPointer = (event: PointerEvent<HTMLElement>): void => {\n const scrollTop = ladderRef.current?.scrollTop ?? 0;\n setPreviewTurn(\n itemAtPointer(items, event.currentTarget, scrollTop, event.clientY)\n ?.turn ?? null,\n );\n };\n const navigateAtPointer = (event: MouseEvent<HTMLElement>): void => {\n const scrollTop = ladderRef.current?.scrollTop ?? 0;\n const item = itemAtPointer(\n items,\n event.currentTarget,\n scrollTop,\n event.clientY,\n );\n if (item !== undefined) onNavigate(item);\n };\n const ladderClasses = [\"dsh-qa-rail__scroll\"];\n if (scrollState.canScrollUp)\n ladderClasses.push(\"dsh-qa-rail__scroll--fade-top\");\n if (scrollState.canScrollDown) {\n ladderClasses.push(\"dsh-qa-rail__scroll--fade-bottom\");\n }\n return (\n <div ref={slotRef} className=\"dsh-qa-rail\">\n <nav\n className=\"dsh-qa-rail__frame\"\n style={\n {\n \"--dsh-qa-rail-natural\": `${\n (items.length - 1) * TURN_SPACING_PX + 2 * RAIL_INSET_PX\n }px`,\n \"--dsh-qa-rail-scroll-top\": `${scrollState.top}px`,\n } as CSSProperties\n }\n aria-label=\"Переход по вопросам\"\n onClick={navigateAtPointer}\n onPointerMove={previewAtPointer}\n onPointerEnter={() => {\n pointerInsideRef.current = true;\n }}\n onPointerLeave={() => {\n pointerInsideRef.current = false;\n setPreviewTurn(null);\n }}\n >\n <div\n ref={ladderRef}\n className={ladderClasses.join(\" \")}\n onScroll={() => {\n syncScrollState();\n }}\n >\n <div className=\"dsh-qa-rail__marks\">\n {items.map((item, index) => {\n const active = item.turn === activeTurn;\n const showingPreview = item.turn === previewTurn;\n const classes = [\"dsh-qa-rail__mark\"];\n if (active) classes.push(\"dsh-qa-rail__mark--active\");\n else if (showingPreview) {\n classes.push(\"dsh-qa-rail__mark--preview\");\n }\n if (item.turn === busyTurn)\n classes.push(\"dsh-qa-rail__mark--busy\");\n return (\n <div\n key={item.turn}\n className=\"dsh-qa-rail__pos\"\n style={\n {\n \"--dsh-qa-rail-pos\": `${index * TURN_SPACING_PX}px`,\n } as CSSProperties\n }\n >\n <button\n type=\"button\"\n className={classes.join(\" \")}\n aria-label={`К вопросу ${item.turn}`}\n aria-current={active ? \"true\" : undefined}\n aria-busy={item.turn === busyTurn ? \"true\" : undefined}\n aria-describedby={showingPreview ? previewId : undefined}\n onClick={(event) => {\n event.stopPropagation();\n onNavigate(item);\n }}\n onFocus={() => {\n setPreviewTurn(item.turn);\n }}\n onBlur={() => {\n setPreviewTurn(null);\n }}\n />\n </div>\n );\n })}\n </div>\n </div>\n {preview !== undefined && previewPosition !== undefined ? (\n <div\n id={previewId}\n role=\"tooltip\"\n className=\"dsh-qa-rail__preview\"\n style={\n {\n \"--dsh-qa-rail-pos\": `${previewPosition}px`,\n } as CSSProperties\n }\n >\n <div className=\"dsh-qa-rail__preview-prompt\">{preview.prompt}</div>\n {preview.response === \"\" ? null : (\n <div className=\"dsh-qa-rail__preview-response\">\n {preview.response}\n </div>\n )}\n </div>\n ) : null}\n </nav>\n </div>\n );\n}\n\nfunction sameRailProps(\n previous: QaTurnRailProps,\n next: QaTurnRailProps,\n): boolean {\n return (\n previous.activeTurn === next.activeTurn &&\n previous.busyTurn === next.busyTurn &&\n previous.scrollerRef === next.scrollerRef &&\n previous.onNavigate === next.onNavigate &&\n sameTurnRailItems(previous.items, next.items)\n );\n}\n\n/**\n * Fixed-pitch rail of every turn of the visible transcript, floating over the\n * transcript's right gutter: the active mark follows the reading line, a\n * hover/focus preview shows the prompt and answer, and a click lands the\n * transcript on that turn. Memoized like the harness rail — the transcript\n * re-renders on every streaming delta, and the rail only changes when a turn\n * is added or becomes active.\n */\nexport const QaTurnRail = memo(QaTurnRailView, sameRailProps);\n\n/** Land the transcript on a turn's prompt row, harness-style. */\nexport function turnScrollTarget(\n scroller: HTMLElement,\n row: HTMLElement,\n): number {\n const top =\n scroller.scrollTop +\n row.getBoundingClientRect().top -\n scroller.getBoundingClientRect().top;\n const max = Math.max(0, scroller.scrollHeight - scroller.clientHeight);\n return Math.min(max, Math.max(0, top - QA_TURN_LAND_PX));\n}\n","import {\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type PointerEvent,\n type RefObject,\n} from \"react\";\n\n/** DSH's dragged content-width floor; a lower operator cap still wins. */\nexport const QA_CONTENT_MIN_WIDTH = 640;\n\n/**\n * Space kept outside the content: 88px per side leaves room for the handle,\n * its inset, and a safe zone that remains draggable in both directions.\n */\nexport const QA_CONTENT_EDGE_BUDGET = 176;\n\nconst QA_ADAPTIVE_MIN_WIDTH = 680;\nconst QA_ADAPTIVE_MAX_WIDTH = 920;\n\nexport function readQaContentWidth(\n storage: Pick<Storage, \"getItem\">,\n key: string,\n): number | null {\n try {\n const raw = storage.getItem(key);\n if (raw === null) return null;\n const value = Number(raw);\n return Number.isFinite(value) && value > 0 ? value : null;\n } catch {\n return null;\n }\n}\n\nexport function writeQaContentWidth(\n storage: Pick<Storage, \"setItem\">,\n key: string,\n width: number,\n): void {\n try {\n storage.setItem(key, `${width}`);\n } catch {\n // Denied durable storage only costs persistence across reloads.\n }\n}\n\n/** Resolve the centered content width for the currently available column. */\nexport function resolveQaContentWidth(\n columnWidth: number,\n preference: number | null,\n maxContentWidth: number,\n): number {\n const available = Math.max(0, columnWidth - QA_CONTENT_EDGE_BUDGET);\n const maximum = Math.min(maxContentWidth, available);\n const minimum = Math.min(QA_CONTENT_MIN_WIDTH, maximum);\n const adaptive = Math.min(\n maxContentWidth,\n Math.max(\n QA_ADAPTIVE_MIN_WIDTH,\n Math.min(columnWidth * 0.64, QA_ADAPTIVE_MAX_WIDTH),\n ),\n );\n const requested = preference ?? adaptive;\n return Math.min(Math.max(requested, minimum), maximum);\n}\n\ninterface QaWidthHandleProps {\n readonly side: \"left\" | \"right\";\n readonly onStart: () => number;\n readonly onDrag: (width: number) => void;\n readonly onCommit: (width: number) => void;\n readonly onEnd: () => void;\n}\n\n/** Pointer-captured, rAF-throttled symmetric content-width handle. */\nexport function QaWidthHandle(props: QaWidthHandleProps) {\n const [dragging, setDragging] = useState(false);\n const base = useRef(0);\n const origin = useRef(0);\n const latest = useRef(0);\n const frame = useRef<number | null>(null);\n const callbacks = useRef(props);\n callbacks.current = props;\n\n const outwardWidth = () => {\n const delta = latest.current - origin.current;\n const outward = callbacks.current.side === \"right\" ? delta : -delta;\n return base.current + outward * 2;\n };\n\n const cancelFrame = useCallback(() => {\n if (frame.current === null) return;\n cancelAnimationFrame(frame.current);\n frame.current = null;\n }, []);\n\n useEffect(() => cancelFrame, [cancelFrame]);\n\n const onPointerDown = useCallback((event: PointerEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.currentTarget.setPointerCapture(event.pointerId);\n origin.current = event.clientX;\n latest.current = event.clientX;\n base.current = callbacks.current.onStart();\n setDragging(true);\n }, []);\n\n const onPointerMove = useCallback((event: PointerEvent<HTMLDivElement>) => {\n const box = event.currentTarget.getBoundingClientRect();\n event.currentTarget.style.setProperty(\n \"--dsh-qa-width-handle-pointer-y\",\n `${event.clientY - box.top}px`,\n );\n if (!event.currentTarget.hasPointerCapture(event.pointerId)) return;\n latest.current = event.clientX;\n frame.current ??= requestAnimationFrame(() => {\n frame.current = null;\n callbacks.current.onDrag(outwardWidth());\n });\n }, []);\n\n const onPointerUp = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n if (!event.currentTarget.hasPointerCapture(event.pointerId)) return;\n event.currentTarget.releasePointerCapture(event.pointerId);\n cancelFrame();\n latest.current = event.clientX;\n if (latest.current !== origin.current) {\n callbacks.current.onCommit(outwardWidth());\n }\n setDragging(false);\n callbacks.current.onEnd();\n },\n [cancelFrame],\n );\n\n const onPointerCancel = useCallback(() => {\n cancelFrame();\n setDragging(false);\n callbacks.current.onEnd();\n }, [cancelFrame]);\n\n return (\n <div\n className=\"dsh-qa-width-handle\"\n data-side={props.side}\n data-width-handle={props.side}\n data-dragging={dragging || undefined}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerCancel}\n onLostPointerCapture={onPointerCancel}\n />\n );\n}\n\ninterface UseQaContentWidthOptions {\n readonly active: boolean;\n readonly root: RefObject<HTMLDivElement | null>;\n readonly storage: Pick<Storage, \"getItem\" | \"setItem\">;\n readonly storageKey: string;\n readonly maxContentWidth: number;\n}\n\nexport function useQaContentWidth({\n active,\n root,\n storage,\n storageKey,\n maxContentWidth,\n}: UseQaContentWidthOptions) {\n const publish = useCallback(() => {\n const element = root.current;\n if (element === null) return;\n const preference = readQaContentWidth(storage, storageKey);\n const width = resolveQaContentWidth(\n element.offsetWidth,\n preference,\n maxContentWidth,\n );\n element.style.setProperty(\"--dsh-qa-content-width\", `${width}px`);\n }, [maxContentWidth, root, storage, storageKey]);\n\n useLayoutEffect(() => {\n if (!active) return;\n const element = root.current;\n if (element === null) return;\n publish();\n const observer = new ResizeObserver(publish);\n observer.observe(element);\n return () => observer.disconnect();\n }, [active, publish, root]);\n\n const onStart = useCallback(() => {\n const element = root.current;\n if (element === null) return maxContentWidth;\n return resolveQaContentWidth(\n element.offsetWidth,\n readQaContentWidth(storage, storageKey),\n maxContentWidth,\n );\n }, [maxContentWidth, root, storage, storageKey]);\n\n const onDrag = useCallback(\n (requestedWidth: number) => {\n const element = root.current;\n if (element === null) return;\n const width = resolveQaContentWidth(\n element.offsetWidth,\n requestedWidth,\n maxContentWidth,\n );\n element.style.setProperty(\"--dsh-qa-content-width\", `${width}px`);\n },\n [maxContentWidth, root],\n );\n\n const onCommit = useCallback(\n (requestedWidth: number) => {\n const element = root.current;\n if (element === null) return;\n const width = resolveQaContentWidth(\n element.offsetWidth,\n requestedWidth,\n maxContentWidth,\n );\n writeQaContentWidth(storage, storageKey, width);\n },\n [maxContentWidth, root, storage, storageKey],\n );\n\n return { onStart, onDrag, onCommit, onEnd: publish } as const;\n}\n","import type { QaMessage } from \"../../types.js\";\n\nexport interface QaVariantGroup {\n /** The user message that anchors the group. */\n readonly groupId: string;\n /** Answer turns triggered by that message, in order. */\n readonly turns: readonly number[];\n}\n\n/**\n * Group answer turns under the user message that triggered them. The session\n * has no truncation seam, so a regenerated answer is a real follow-up turn;\n * consecutive turns after one user message read as its variants.\n */\nexport function collectVariantGroups(\n messages: readonly QaMessage[],\n): readonly QaVariantGroup[] {\n const groups: { groupId: string; turns: number[] }[] = [];\n let current: { groupId: string; turns: number[] } | undefined;\n for (const message of messages) {\n if (message.role === \"user\") {\n current = { groupId: message.id, turns: [] };\n groups.push(current);\n continue;\n }\n if (\n current === undefined ||\n (message.role !== \"assistant\" && message.role !== \"work\")\n ) {\n continue;\n }\n if (message.turn !== undefined && !current.turns.includes(message.turn)) {\n current.turns.push(message.turn);\n }\n }\n return groups;\n}\n\nexport function VariantSwitcher({\n count,\n offset,\n onStep,\n}: {\n readonly count: number;\n readonly offset: number;\n readonly onStep: (offset: number) => void;\n}) {\n return (\n <div className=\"dsh-qa-variants\" aria-label=\"Варианты ответа\">\n <button\n type=\"button\"\n aria-label=\"Предыдущий вариант\"\n disabled={offset >= count - 1}\n onClick={() => onStep(offset + 1)}\n >\n <svg viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <path d=\"m8.75 3.5-3.5 3.5 3.5 3.5\" />\n </svg>\n </button>\n <span>\n {count - offset}/{count}\n </span>\n <button\n type=\"button\"\n aria-label=\"Следующий вариант\"\n disabled={offset <= 0}\n onClick={() => onStep(offset - 1)}\n >\n <svg viewBox=\"0 0 14 14\" aria-hidden=\"true\">\n <path d=\"m5.25 3.5 3.5 3.5-3.5 3.5\" />\n </svg>\n </button>\n </div>\n );\n}\n","import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type KeyboardEvent,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { SettingsOnboardingOwnerProps } from \"@deepseek-ai/dsh-client-ui-settings/client\";\nimport type { StorageLike } from \"../types.js\";\n\n/** Bump when the notice changes materially and must be acknowledged again. */\nexport const QA_WELCOME_NOTICE_VERSION = \"2026-09-12.1\";\n\nexport const QA_WELCOME_NOTICE_COPY = Object.freeze({\n title: \"Перед началом тестирования\",\n paragraphs: Object.freeze([\n \"Этот помощник разработан не с нуля: он основан на DeepSeek Harness. Платформа находится в preview, поэтому возможны ошибки, нестабильная работа и изменения поведения.\",\n \"На этапе тестирования заданные вопросы и полученные ответы будут анализироваться для повышения качества помощника. Пожалуйста, задавайте преимущественно вопросы, связанные с работой.\",\n \"Помощник использует локальные модели. Данные обрабатываются внутри контура и никуда за его пределы не передаются.\",\n ]),\n continueLabel: \"Понятно, продолжить\",\n});\n\nexport interface QaWelcomeNoticeFace {\n readonly storage: StorageLike;\n readonly storageKey: string;\n}\n\nexport interface QaWelcomeNoticeProps extends QaWelcomeNoticeFace {\n readonly complete?: () => void;\n}\n\nexport interface QaWelcomeNoticeStepProps\n extends SettingsOnboardingOwnerProps, QaWelcomeNoticeFace {}\n\nconst QA_WELCOME_ACKNOWLEDGED_EVENT = \"dsh-qa-welcome-acknowledged\";\n\nfunction acknowledged(storage: StorageLike, key: string): boolean {\n try {\n return storage.getItem(key) === QA_WELCOME_NOTICE_VERSION;\n } catch {\n return false;\n }\n}\n\nfunction focusable(root: HTMLElement): HTMLElement[] {\n return [\n ...root.querySelectorAll<HTMLElement>(\n \"button:not([disabled]), a[href], input:not([disabled]), [tabindex]:not([tabindex='-1'])\",\n ),\n ].filter((element) => !element.hidden);\n}\n\n/** Route-scoped replacement for DSH's stock `welcome-notice` onboarding step. */\nexport function QaWelcomeNotice(props: QaWelcomeNoticeProps) {\n const [isAcknowledged, setAcknowledged] = useState(() =>\n acknowledged(props.storage, props.storageKey),\n );\n const completed = useRef(false);\n const dialog = useRef<HTMLDivElement>(null);\n const continueButton = useRef<HTMLButtonElement>(null);\n\n const complete = useCallback(() => {\n if (completed.current) return;\n completed.current = true;\n props.complete?.();\n }, [props.complete]);\n\n useEffect(() => {\n if (isAcknowledged) complete();\n }, [complete, isAcknowledged]);\n\n useEffect(() => {\n if (isAcknowledged) return;\n const appRoot = document.getElementById(\"root\");\n const wasInert = appRoot?.inert;\n if (appRoot !== null) appRoot.inert = true;\n continueButton.current?.focus();\n return () => {\n if (appRoot !== null) appRoot.inert = wasInert ?? false;\n };\n }, [isAcknowledged]);\n\n const confirm = useCallback(() => {\n try {\n props.storage.setItem(props.storageKey, QA_WELCOME_NOTICE_VERSION);\n } catch {\n // A denied localStorage write only costs persistence across reloads.\n }\n setAcknowledged(true);\n window.dispatchEvent(\n new CustomEvent(QA_WELCOME_ACKNOWLEDGED_EVENT, {\n detail: props.storageKey,\n }),\n );\n complete();\n }, [complete, props.storage, props.storageKey]);\n\n const trapKeys = useCallback((event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n if (event.key !== \"Tab\" || dialog.current === null) return;\n const items = focusable(dialog.current);\n if (items.length === 0) {\n event.preventDefault();\n dialog.current.focus();\n return;\n }\n const first = items[0];\n const last = items.at(-1);\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last?.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first?.focus();\n }\n }, []);\n\n if (isAcknowledged) return null;\n\n return createPortal(\n <div className=\"dsh-qa-onboarding\" onKeyDown={trapKeys}>\n <div\n ref={dialog}\n className=\"dsh-qa-onboarding__panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dsh-qa-onboarding-title\"\n aria-describedby=\"dsh-qa-onboarding-description\"\n tabIndex={-1}\n >\n <div className=\"dsh-qa-onboarding__mark\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 3.5 20 8v8l-8 4.5L4 16V8l8-4.5Z\" />\n <path d=\"m8.75 12 2 2 4.5-4.5\" />\n </svg>\n </div>\n <div className=\"dsh-qa-onboarding__content\">\n <h1 id=\"dsh-qa-onboarding-title\" className=\"dsh-qa-onboarding__title\">\n {QA_WELCOME_NOTICE_COPY.title}\n </h1>\n <div\n id=\"dsh-qa-onboarding-description\"\n className=\"dsh-qa-onboarding__description\"\n >\n {QA_WELCOME_NOTICE_COPY.paragraphs.map((paragraph) => (\n <p key={paragraph}>{paragraph}</p>\n ))}\n </div>\n <div className=\"dsh-qa-onboarding__actions\">\n <button\n ref={continueButton}\n type=\"button\"\n className=\"dsh-qa-onboarding__continue\"\n onClick={confirm}\n >\n {QA_WELCOME_NOTICE_COPY.continueLabel}\n </button>\n </div>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n\n/**\n * Invisible shadow for DSH's stock welcome step. The host coordinator removes\n * onboarding content as soon as a chat stops being blank, so the visible QA\n * notice is owned by the route overlay above instead of this lifecycle.\n */\nexport function QaWelcomeNoticeStep(props: QaWelcomeNoticeStepProps) {\n const [isAcknowledged, setAcknowledged] = useState(() =>\n acknowledged(props.storage, props.storageKey),\n );\n const completed = useRef(false);\n\n useEffect(() => {\n const handleAcknowledged = (event: Event) => {\n if (event instanceof CustomEvent && event.detail === props.storageKey) {\n setAcknowledged(true);\n }\n };\n window.addEventListener(QA_WELCOME_ACKNOWLEDGED_EVENT, handleAcknowledged);\n return () =>\n window.removeEventListener(\n QA_WELCOME_ACKNOWLEDGED_EVENT,\n handleAcknowledged,\n );\n }, [props.storageKey]);\n\n useEffect(() => {\n if (!isAcknowledged || completed.current) return;\n completed.current = true;\n props.complete();\n }, [isAcknowledged, props.complete]);\n\n return null;\n}\n","import { useMemo } from \"react\";\nimport type { QaMessage } from \"../types.js\";\nimport {\n buildTurnRailItems,\n type QaTurnRailItem,\n} from \"./components/QaTurnRail.js\";\nimport {\n collectVariantGroups,\n type QaVariantGroup,\n} from \"./components/VariantSwitcher.js\";\n\nexport interface QaTranscriptView {\n readonly visibleMessages: readonly QaMessage[];\n /** Answer groups by the user message id that opens them. */\n readonly groupByPromptId: ReadonlyMap<string, QaVariantGroup>;\n /** Per group: the turn the current variant offset selects. */\n readonly selectedTurn: ReadonlyMap<string, number>;\n readonly railItems: readonly QaTurnRailItem[];\n}\n\n/**\n * Memoized transcript view model. The controller republishes state with a\n * fresh messages array on every stream frame, but re-renders that keep the\n * transcript unchanged (drawers, the active turn mark, variant offsets) must\n * not re-run the projections — and per-row group lookups go through a map\n * instead of a linear find inside the render loop.\n */\nexport function useTranscriptView(\n messages: readonly QaMessage[],\n variantOffsets: Record<string, number>,\n): QaTranscriptView {\n return useMemo(() => {\n const groups = collectVariantGroups(messages);\n const groupByPromptId = new Map<string, QaVariantGroup>();\n const turnToGroup = new Map<number, string>();\n const selectedTurn = new Map<string, number>();\n for (const group of groups) {\n groupByPromptId.set(group.groupId, group);\n const offset = variantOffsets[group.groupId] ?? 0;\n const turn =\n group.turns[Math.max(0, group.turns.length - 1 - offset)] ??\n group.turns.at(-1);\n if (turn !== undefined) {\n selectedTurn.set(group.groupId, turn);\n for (const groupTurn of group.turns)\n turnToGroup.set(groupTurn, group.groupId);\n }\n }\n const visibleMessages = messages.filter((message) => {\n if (\n (message.role === \"assistant\" || message.role === \"work\") &&\n message.turn !== undefined\n ) {\n const groupId = turnToGroup.get(message.turn);\n return (\n groupId === undefined || selectedTurn.get(groupId) === message.turn\n );\n }\n return true;\n });\n return {\n visibleMessages,\n groupByPromptId,\n selectedTurn,\n railItems: buildTurnRailItems(visibleMessages),\n };\n }, [messages, variantOffsets]);\n}\n","import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type Dispatch,\n type SetStateAction,\n} from \"react\";\nimport type { QaImageDraft, QaSource, QaTurnSources } from \"../types.js\";\nimport { revokeObjectUrlIfBlob } from \"./session-assets.js\";\n\n/** Snapshot completeness captured when a drawer was opened from a message. */\nexport interface QaDrawerCompleteness {\n readonly complete: boolean;\n readonly incompleteOrigins?: QaTurnSources[\"incompleteOrigins\"];\n}\n\nexport interface QaSessionUiState {\n /** Per group: how many answers back from the newest is shown (0 = newest). */\n readonly variantOffsets: Record<string, number>;\n readonly setVariantOffsets: Dispatch<SetStateAction<Record<string, number>>>;\n /** The turn the transcript's reading line currently owns. */\n readonly activeTurn: number | null;\n readonly setActiveTurn: Dispatch<SetStateAction<number | null>>;\n readonly agentsOpen: boolean;\n readonly setAgentsOpen: Dispatch<SetStateAction<boolean>>;\n readonly sourcesOpen: boolean;\n readonly setSourcesOpen: Dispatch<SetStateAction<boolean>>;\n readonly drawerSources: readonly QaSource[] | null;\n readonly setDrawerSources: Dispatch<\n SetStateAction<readonly QaSource[] | null>\n >;\n readonly drawerCompleteness: QaDrawerCompleteness | null;\n readonly setDrawerCompleteness: Dispatch<\n SetStateAction<QaDrawerCompleteness | null>\n >;\n readonly drawerDetail: QaSource | null;\n readonly setDrawerDetail: Dispatch<SetStateAction<QaSource | null>>;\n readonly pendingImages: readonly QaImageDraft[];\n readonly setPendingImages: (next: readonly QaImageDraft[]) => void;\n}\n\n/**\n * Per-chat UI state: composer attachments, variant offsets, the rail mark and\n * the drawers. Everything here describes the chat it was made in, so a\n * session change clears it instead of leaking a draft, an image or a drawer\n * from one conversation into the next.\n */\nexport function useSessionUiState(sessionId: string | null): QaSessionUiState {\n /** Per group: how many answers back from the newest is shown (0 = newest). */\n const [variantOffsets, setVariantOffsets] = useState<Record<string, number>>(\n {},\n );\n const [activeTurn, setActiveTurn] = useState<number | null>(null);\n const [agentsOpen, setAgentsOpen] = useState(false);\n const [sourcesOpen, setSourcesOpen] = useState(false);\n const [drawerSources, setDrawerSources] = useState<\n readonly QaSource[] | null\n >(null);\n const [drawerCompleteness, setDrawerCompleteness] =\n useState<QaDrawerCompleteness | null>(null);\n const [drawerDetail, setDrawerDetail] = useState<QaSource | null>(null);\n const [pendingImages, setPendingImagesState] = useState<\n readonly QaImageDraft[]\n >([]);\n /** Mirror of the live drafts: blob URLs to revoke when they leave state. */\n const pendingImagesRef = useRef<readonly QaImageDraft[]>([]);\n\n /**\n * The single entry point that changes the draft set: every image that\n * leaves state has its preview blob URL revoked here, whether it was\n * removed by the composer, cleared by a send or dropped on a chat switch.\n */\n const setPendingImages = useCallback((next: readonly QaImageDraft[]) => {\n for (const draft of pendingImagesRef.current) {\n if (!next.includes(draft)) revokeObjectUrlIfBlob(draft.previewUrl);\n }\n pendingImagesRef.current = next;\n setPendingImagesState(next);\n }, []);\n\n useEffect(() => {\n setVariantOffsets({});\n setActiveTurn(null);\n setAgentsOpen(false);\n setSourcesOpen(false);\n setDrawerSources(null);\n setDrawerCompleteness(null);\n setDrawerDetail(null);\n setPendingImages([]);\n }, [sessionId, setPendingImages]);\n\n // Whatever is still attached dies with the surface, and its URLs with it.\n useEffect(\n () => () => {\n for (const draft of pendingImagesRef.current)\n revokeObjectUrlIfBlob(draft.previewUrl);\n },\n [],\n );\n\n return {\n variantOffsets,\n setVariantOffsets,\n activeTurn,\n setActiveTurn,\n agentsOpen,\n setAgentsOpen,\n sourcesOpen,\n setSourcesOpen,\n drawerSources,\n setDrawerSources,\n drawerCompleteness,\n setDrawerCompleteness,\n drawerDetail,\n setDrawerDetail,\n pendingImages,\n setPendingImages,\n };\n}\n","import {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n type KeyboardEvent,\n} from \"react\";\nimport type { ConnectionGenerationState } from \"@deepseek-ai/dsh-client-connection/client\";\nimport type {\n InjectFace,\n PropsRuntime,\n} from \"@deepseek-ai/dsh-client-ui-slots\";\nimport type {\n QaImageDraft,\n QaSessionState,\n QaSource,\n QaTurnSources,\n} from \"../types.js\";\nimport type { QaConfigController } from \"./QaConfigController.js\";\nimport type { QaRouteController } from \"./QaRouteController.js\";\nimport type {\n QaAccountsController,\n QaAccountsSnapshot,\n} from \"./QaAccountsController.js\";\nimport { QaSessionController } from \"./QaSessionController.js\";\nimport type {\n QaConversation,\n QaSecureSession,\n QaSessions,\n QaSessionsApi,\n QaSourceApi,\n} from \"./types.js\";\nimport { QA_SESSION_IDLE_STATE } from \"./types.js\";\nimport { QaAuthGate } from \"./components/QaAuthGate.js\";\nimport { QaComposer } from \"./components/QaComposer.js\";\nimport { QaMessage } from \"./components/QaMessage.js\";\nimport { buildChatRows, QaSidebar } from \"./components/QaSidebar.js\";\nimport {\n QaAgentsDrawer,\n collectSubagents,\n} from \"./components/QaAgentsDrawer.js\";\nimport { QaSourcesDrawer } from \"./components/QaSourcesDrawer.js\";\nimport {\n QA_TURN_ANCHOR_ATTRIBUTE,\n QaTurnRail,\n computeActiveTurn,\n turnScrollTarget,\n type QaTurnRailItem,\n} from \"./components/QaTurnRail.js\";\nimport {\n QaWidthHandle,\n useQaContentWidth,\n} from \"./components/QaWidthHandle.js\";\nimport { VariantSwitcher } from \"./components/VariantSwitcher.js\";\nimport { QaWelcomeNotice } from \"./components/QaWelcomeNotice.js\";\nimport { useTranscriptView } from \"./use-transcript-view.js\";\nimport { useSessionUiState } from \"./use-session-ui-state.js\";\n\nconst noopSubscribe = () => () => undefined;\n\n/** Stable empty stand-in so memoized children see one identity, not a fresh []. */\nconst NO_QUESTIONS: readonly string[] = Object.freeze([]);\n\nconst ACCOUNTS_CHECKING_SNAPSHOT: QaAccountsSnapshot = { stage: \"checking\" };\nconst noopAccountsSnapshot = (): QaAccountsSnapshot =>\n ACCOUNTS_CHECKING_SNAPSHOT;\n\nexport interface QaSurfaceFace {\n readonly route: QaRouteController;\n readonly config: QaConfigController;\n readonly sessions: QaSessions;\n readonly conversation: QaConversation;\n readonly api: QaSessionsApi;\n readonly connection: ConnectionGenerationState;\n readonly secureSession: QaSecureSession;\n readonly sourceApi: QaSourceApi;\n /** Present when the deployment mounts the QA account gate. */\n readonly accounts?: QaAccountsController;\n}\n\ntype QaSurfaceProps = PropsRuntime<\"shell.overlay\"> & InjectFace<QaSurfaceFace>;\n\nfunction focusable(root: HTMLElement): HTMLElement[] {\n return [\n ...root.querySelectorAll<HTMLElement>(\n \"button:not([disabled]), textarea:not([disabled]), a[href], [tabindex]:not([tabindex='-1'])\",\n ),\n ].filter((element) => !element.hidden);\n}\n\nfunction trapKeys(event: KeyboardEvent<HTMLElement>): void {\n event.stopPropagation();\n if (event.key !== \"Tab\") return;\n const items = focusable(event.currentTarget);\n if (items.length === 0) {\n event.preventDefault();\n event.currentTarget.focus();\n return;\n }\n const first = items[0];\n const last = items.at(-1);\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last?.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first?.focus();\n }\n}\n\nfunction statusText(state: QaSessionState): string | null {\n if (state.phase === \"creating\") return \"Подключаюсь…\";\n if (state.phase === \"reconnecting\")\n return \"Связь потерялась. Подключаюсь снова…\";\n if (state.phase === \"running\") return \"Скребу по сусекам…\";\n return null;\n}\n\nfunction titleFromMessages(state: QaSessionState): string | null {\n const firstUser = state.messages.find((message) => message.role === \"user\");\n if (firstUser === undefined) return null;\n const title = firstUser.text.replace(/\\s+/gu, \" \").trim();\n if (title === \"\") return null;\n if (title.length <= 52) return title;\n return `${title.slice(0, 51).trimEnd()}…`;\n}\n\nfunction modeLabel(agentPreset: string | null): string {\n if (agentPreset === null) return \"Режим вопросов\";\n const name = agentPreset\n .replace(/[-_]+/gu, \" \")\n .replace(/^\\p{Ll}/u, (letter) => letter.toUpperCase());\n return `Режим «${name}»`;\n}\n\nfunction RobotBadge() {\n return (\n <svg\n className=\"dsh-qa-agentview__icon\"\n viewBox=\"0 0 16 16\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"5\" width=\"10\" height=\"7.5\" rx=\"1.75\" />\n <path d=\"M8 2.5V5m0-.25a.9.9 0 1 0-.01-1.8.9.9 0 0 0 .01 1.8ZM5.4 8.4h1.7M8.9 8.4h1.7M6 10.4h4\" />\n </svg>\n );\n}\n\nexport function QaSurface(props: QaSurfaceProps) {\n const route = useSyncExternalStore(\n props.route.subscribe,\n props.route.getSnapshot,\n props.route.getSnapshot,\n );\n const configState = useSyncExternalStore(\n props.config.subscribe,\n props.config.getSnapshot,\n props.config.getSnapshot,\n );\n const config = configState.config;\n const accounts = props.accounts;\n const accountsSnapshot = useSyncExternalStore(\n accounts?.subscribe ?? noopSubscribe,\n accounts?.getSnapshot ?? noopAccountsSnapshot,\n accounts?.getSnapshot ?? noopAccountsSnapshot,\n );\n const accountsStage = accountsSnapshot.stage;\n const [controller, setController] = useState<QaSessionController>();\n const transcript = useRef<HTMLDivElement>(null);\n const chat = useRef<HTMLDivElement>(null);\n const nearBottom = useRef(true);\n /** Turn marks of the visible transcript, kept in a ref for stable callbacks. */\n const railItemsRef = useRef<readonly QaTurnRailItem[]>([]);\n const activeTurnFrame = useRef<number | null>(null);\n const stateKey = `${config.session.storageKey}:v1:${config.route.path}`;\n const widthHandlers = useQaContentWidth({\n active: route.active,\n root: chat,\n storage: window.localStorage,\n storageKey: `${stateKey}:content-width`,\n maxContentWidth: config.ui.maxContentWidth,\n });\n\n useEffect(() => {\n if (!route.active) {\n setController(undefined);\n return;\n }\n const accountsEnabled = config.accounts.enabled && accounts !== undefined;\n // The gate owns the frame until the browser holds a valid identity; the\n // session controller (and every attestation it triggers) waits for it.\n if (accountsEnabled && accountsStage !== \"authed\") {\n setController(undefined);\n return;\n }\n const facade =\n accountsEnabled && accounts\n ? {\n token: () => accounts.token(),\n ownedIds: () => accounts.ownedIds(),\n messageAuthorOf: (sessionId: string) =>\n accounts.messageAuthorOf(sessionId),\n onSessionCreated: (sessionId: string) => {\n void accounts.claimNewSession(sessionId);\n },\n onAuthRequired: () => accounts.signOut(),\n }\n : undefined;\n const next = new QaSessionController({\n sessions: props.sessions,\n api: props.api,\n conversation: props.conversation,\n connection: props.connection,\n secureSession: props.secureSession,\n sourceApi: props.sourceApi,\n config,\n storage: window.localStorage,\n accounts: facade,\n });\n setController(next);\n void next.ensureSession();\n return () => next.dispose();\n }, [\n accounts,\n accountsStage,\n config,\n props.api,\n props.conversation,\n props.connection,\n props.secureSession,\n props.sourceApi,\n props.sessions,\n route.active,\n ]);\n\n // The drawer receives a token-bound view; its props keep the simple shape.\n const boundSourceApi = useMemo(\n () => ({\n sources: (sessionId: string) =>\n props.sourceApi.sources(accounts?.token() ?? \"\", sessionId),\n readSourceFile: (sessionId: string, sourcePath: string) =>\n props.sourceApi.readSourceFile(\n accounts?.token() ?? \"\",\n sessionId,\n sourcePath,\n ),\n }),\n [accounts, props.sourceApi],\n );\n const handleLogout = useCallback(() => {\n accounts?.signOut();\n }, [accounts]);\n\n const state = useSyncExternalStore(\n controller?.subscribe ?? noopSubscribe,\n controller?.getSnapshot ?? (() => QA_SESSION_IDLE_STATE),\n controller?.getSnapshot ?? (() => QA_SESSION_IDLE_STATE),\n );\n const listState = useSyncExternalStore(\n props.sessions.list.subscribe,\n props.sessions.list.getSnapshot,\n props.sessions.list.getSnapshot,\n );\n // Draft text, attachments, variant offsets and drawers are chat-local; the\n // hook clears them whenever the bound session changes.\n const {\n activeTurn,\n setActiveTurn,\n variantOffsets,\n setVariantOffsets,\n pendingImages,\n setPendingImages,\n agentsOpen,\n setAgentsOpen,\n sourcesOpen,\n setSourcesOpen,\n drawerSources,\n setDrawerSources,\n drawerCompleteness,\n setDrawerCompleteness,\n drawerDetail,\n setDrawerDetail,\n } = useSessionUiState(state.sessionId);\n\n useEffect(() => {\n if (!route.active) return;\n const previousBodyOverflow = document.body.style.overflow;\n const previousHtmlOverflow = document.documentElement.style.overflow;\n document.body.dataset.dshQaSurface = \"active\";\n document.body.style.overflow = \"hidden\";\n document.documentElement.style.overflow = \"hidden\";\n const frame = requestAnimationFrame(() => {\n document.querySelector<HTMLTextAreaElement>(\"#dsh-qa-prompt\")?.focus();\n });\n return () => {\n cancelAnimationFrame(frame);\n delete document.body.dataset.dshQaSurface;\n document.body.style.overflow = previousBodyOverflow;\n document.documentElement.style.overflow = previousHtmlOverflow;\n };\n }, [route.active]);\n\n // Stable identities for the memoized render path: message rows, the sidebar\n // and the composer compare callbacks by reference, so per-frame closures\n // here would defeat the memoization downstream.\n const resolveImage = useMemo(\n () =>\n controller === undefined\n ? undefined\n : (attachmentId: string) => controller.readImage(attachmentId),\n [controller],\n );\n const handleRegenerate = useCallback(() => {\n void controller?.regenerate();\n }, [controller]);\n const handleSwitch = useCallback(\n (sessionId: string) => {\n void controller?.switchTo(sessionId);\n },\n [controller],\n );\n const handleNewChat = useCallback(() => {\n void controller?.startDraft();\n }, [controller]);\n const handleDelete = useCallback(\n (sessionId: string) => {\n void controller?.deleteChat(sessionId);\n },\n [controller],\n );\n const handleSend = useCallback(\n (text: string, images: readonly QaImageDraft[]) =>\n controller?.send(text, images) ?? Promise.resolve(false),\n [controller],\n );\n const handleStop = useCallback(\n () => controller?.stop() ?? Promise.resolve(),\n [controller],\n );\n /** Turn the transcript's reading line currently owns; rAF-throttled. */\n const syncActiveTurn = useCallback(() => {\n const element = transcript.current;\n const items = railItemsRef.current;\n if (element === null || items.length === 0) {\n setActiveTurn((current) => (current === null ? current : null));\n return;\n }\n const next = computeActiveTurn(element, items);\n setActiveTurn((current) => (current === next ? current : next));\n }, []);\n const scheduleActiveTurnSync = useCallback(() => {\n if (activeTurnFrame.current !== null) return;\n if (typeof requestAnimationFrame === \"undefined\") {\n syncActiveTurn();\n return;\n }\n activeTurnFrame.current = requestAnimationFrame(() => {\n activeTurnFrame.current = null;\n syncActiveTurn();\n });\n }, [syncActiveTurn]);\n useEffect(\n () => () => {\n if (\n activeTurnFrame.current !== null &&\n typeof cancelAnimationFrame !== \"undefined\"\n ) {\n cancelAnimationFrame(activeTurnFrame.current);\n }\n },\n [],\n );\n const handleTurnNavigate = useCallback((item: QaTurnRailItem) => {\n const element = transcript.current;\n if (element === null) return;\n const escaped =\n typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\"\n ? CSS.escape(item.id)\n : item.id;\n const row = element.querySelector<HTMLElement>(\n `[${QA_TURN_ANCHOR_ATTRIBUTE}=\"${escaped}\"]`,\n );\n if (row === null) return;\n element.scrollTop = turnScrollTarget(element, row);\n nearBottom.current =\n element.scrollHeight - element.scrollTop - element.clientHeight < 96;\n setActiveTurn(item.turn);\n }, []);\n const handleOpenSources = useCallback(\n (\n sources: readonly QaSource[],\n complete: boolean,\n incompleteOrigins: QaTurnSources[\"incompleteOrigins\"],\n ) => {\n setDrawerSources(sources);\n setDrawerCompleteness({\n complete,\n ...(incompleteOrigins === undefined ? {} : { incompleteOrigins }),\n });\n setDrawerDetail(null);\n setSourcesOpen(true);\n setAgentsOpen(false);\n },\n [],\n );\n const handleSourceDetail = useCallback((source: QaSource) => {\n setDrawerSources(null);\n setDrawerCompleteness(null);\n setDrawerDetail(source);\n setSourcesOpen(true);\n setAgentsOpen(false);\n }, []);\n\n useLayoutEffect(() => {\n const element = transcript.current;\n if (element !== null && nearBottom.current) {\n element.scrollTop = element.scrollHeight;\n }\n scheduleActiveTurnSync();\n }, [state.messages, scheduleActiveTurnSync]);\n\n const status = statusText(state);\n const empty = state.messages.length === 0;\n const conversationTitle = titleFromMessages(state);\n const showSidebar = config.ui.showSessionList && controller !== undefined;\n const allowNewChat =\n config.session.policy !== \"fixed\" &&\n (!config.lockdown.enabled || config.lockdown.allowSessionReset);\n const view = useTranscriptView(state.messages, variantOffsets);\n const visibleMessages = view.visibleMessages;\n const activeSessionId = controller?.activeSessionId() ?? null;\n const agentRows = useMemo(\n () => collectSubagents(listState.byId, activeSessionId),\n [listState, activeSessionId],\n );\n // Admins group the sidebar by chat owner; everyone else sees the flat list.\n const ownerNames = useMemo(\n () =>\n config.accounts.enabled &&\n config.accounts.showOtherUsersChats &&\n accounts !== undefined &&\n accountsSnapshot.stage === \"authed\" &&\n accountsSnapshot.user.role === \"admin\"\n ? accounts.ownerNames()\n : undefined,\n [config, accounts, accountsSnapshot],\n );\n const railItems = view.railItems;\n railItemsRef.current = railItems;\n const busyTurn =\n state.phase === \"running\" ? (railItems.at(-1)?.turn ?? null) : null;\n const chatRows = useMemo(\n () =>\n showSidebar\n ? buildChatRows(\n controller?.chatIds() ?? [],\n listState.byId,\n activeSessionId,\n (id) => ownerNames?.get(id),\n )\n : [],\n [\n showSidebar,\n controller,\n listState,\n activeSessionId,\n ownerNames,\n state.chatsRevision,\n ],\n );\n // Message ids repeat across chats (`assistant:<seq>`), so the persisted\n // ratings key is chat-scoped; the sidebar keeps the deployment-wide key.\n const messageStateKey =\n state.sessionId === null\n ? undefined\n : `${stateKey}:chat:${state.sessionId}`;\n if (!route.active) return null;\n\n // DSH only seats onboarding while the active Session is blank. Keep the QA\n // disclosure in this route-owned overlay so sending a prompt cannot dismiss\n // it; the shadow step registered in index.tsx only suppresses the stock copy.\n const welcomeNotice = (\n <QaWelcomeNotice\n key={stateKey}\n storage={window.localStorage}\n storageKey={`${stateKey}:welcome-notice`}\n />\n );\n\n if (config.accounts.enabled && accounts !== undefined) {\n if (accountsStage === \"checking\") {\n return (\n <>\n {welcomeNotice}\n <main\n className=\"dsh-qa-surface\"\n aria-busy=\"true\"\n aria-label={config.branding.title}\n tabIndex={-1}\n />\n </>\n );\n }\n if (accountsStage === \"gate\") {\n return (\n <>\n {welcomeNotice}\n <QaAuthGate\n accounts={accounts}\n snapshot={accountsSnapshot}\n title={config.branding.title}\n logoUrl={config.branding.logoUrl}\n allowRegistration={config.accounts.allowRegistration}\n />\n </>\n );\n }\n }\n\n return (\n <>\n {welcomeNotice}\n <main\n className=\"dsh-qa-surface\"\n data-phase={state.phase}\n aria-label={config.branding.title}\n tabIndex={-1}\n onKeyDown={trapKeys}\n >\n {showSidebar ? (\n <QaSidebar\n rows={chatRows}\n groupByOwner={ownerNames !== undefined}\n title={config.branding.title}\n logoUrl={config.branding.logoUrl}\n stateKey={stateKey}\n showNewChat={allowNewChat}\n busy={state.phase === \"creating\"}\n onSwitch={handleSwitch}\n onNewChat={handleNewChat}\n onDelete={handleDelete}\n account={\n config.accounts.enabled &&\n accounts !== undefined &&\n accountsStage === \"authed\"\n ? {\n email: accountsSnapshot.user.email,\n role: accountsSnapshot.user.role,\n onLogout: handleLogout,\n }\n : undefined\n }\n />\n ) : null}\n <div className=\"dsh-qa-body\">\n {state.viewingSubagent !== null && !config.ui.showHeader ? (\n <div className=\"dsh-qa-agentview\" role=\"status\">\n <RobotBadge />\n <span>Просмотр субагента</span>\n <button\n type=\"button\"\n onClick={() => void controller?.closeSubagent()}\n >\n ← В чат\n </button>\n </div>\n ) : null}\n {config.ui.showHeader ? (\n <header className=\"dsh-qa-header\">\n <div className=\"dsh-qa-header__inner\">\n <div className=\"dsh-qa-header__title-row\">\n {config.branding.logoUrl === null ? null : (\n <img\n className=\"dsh-qa-header__logo\"\n src={config.branding.logoUrl}\n alt=\"\"\n />\n )}\n {conversationTitle === null ? null : (\n <h1 title={conversationTitle}>{conversationTitle}</h1>\n )}\n {state.viewingSubagent !== null ? (\n <span className=\"dsh-qa-header__viewing\">\n <RobotBadge />\n Просмотр субагента\n <button\n type=\"button\"\n className=\"dsh-qa-header__back\"\n onClick={() => void controller?.closeSubagent()}\n >\n ← В чат\n </button>\n </span>\n ) : (\n <span className=\"dsh-qa-header__mode\">\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"3.25\" r=\"1.5\" />\n <circle cx=\"4\" cy=\"11.75\" r=\"1.5\" />\n <circle cx=\"12\" cy=\"11.75\" r=\"1.5\" />\n <path d=\"M8 4.75v2.5m0 0H4v3m4-3h4v3\" />\n </svg>\n {modeLabel(config.session.agentPreset)}\n </span>\n )}\n <button\n type=\"button\"\n className={\n config.sources.enabled && config.sources.display.sidebar\n ? \"dsh-qa-header__agents\"\n : \"dsh-qa-header__agents dsh-qa-header__agents--end\"\n }\n disabled={agentRows.length === 0}\n aria-expanded={agentsOpen}\n onClick={() => {\n setAgentsOpen((open) => !open);\n setSourcesOpen(false);\n }}\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"5.5\" width=\"10\" height=\"7\" rx=\"1.75\" />\n <path d=\"M8 3v2.5M6.2 9h.01M9.8 9h.01M6.2 11h3.6\" />\n </svg>\n Агенты\n {agentRows.length === 0 ? null : ` (${agentRows.length})`}\n </button>\n {config.sources.enabled && config.sources.display.sidebar ? (\n <button\n type=\"button\"\n className={\n config.ui.showReset &&\n config.session.policy !== \"fixed\" &&\n (!config.lockdown.enabled ||\n config.lockdown.allowSessionReset)\n ? \"dsh-qa-header__sources\"\n : \"dsh-qa-header__sources dsh-qa-header__sources--end\"\n }\n disabled={\n state.sources.length === 0 && state.sourcesComplete\n }\n aria-expanded={sourcesOpen}\n onClick={() => {\n setSourcesOpen((open) => !open);\n setDrawerSources(null);\n setDrawerCompleteness(null);\n setAgentsOpen(false);\n }}\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"5.75\" />\n <path d=\"M2.25 8h11.5M8 2.25c1.6 1.55 2.4 3.5 2.4 5.75S9.6 12.2 8 13.75C6.4 12.2 5.6 10.25 5.6 8S6.4 3.8 8 2.25Z\" />\n </svg>\n Источники\n {state.sources.length === 0 && state.sourcesComplete\n ? null\n : ` (${state.sources.length})`}\n </button>\n ) : null}\n {config.ui.showReset &&\n config.session.policy !== \"fixed\" &&\n (!config.lockdown.enabled ||\n config.lockdown.allowSessionReset) ? (\n <button\n type=\"button\"\n className=\"dsh-qa-header__reset\"\n disabled={\n controller === undefined || state.phase === \"creating\"\n }\n onClick={() => void controller?.startDraft()}\n >\n Новый чат\n </button>\n ) : null}\n </div>\n <div className=\"dsh-qa-header__tabs\" aria-label=\"Вид беседы\">\n <span aria-current=\"page\">Чат</span>\n </div>\n </div>\n </header>\n ) : null}\n\n <div\n ref={chat}\n className=\"dsh-qa-chat\"\n style={\n {\n \"--dsh-qa-content-width\": `${config.ui.maxContentWidth}px`,\n } as CSSProperties\n }\n >\n <div\n ref={transcript}\n className=\"dsh-qa-transcript\"\n onScroll={(event) => {\n const element = event.currentTarget;\n nearBottom.current =\n element.scrollHeight -\n element.scrollTop -\n element.clientHeight <\n 96;\n scheduleActiveTurnSync();\n }}\n >\n {empty ? null : (\n <QaTurnRail\n items={railItems}\n activeTurn={activeTurn}\n busyTurn={busyTurn}\n scrollerRef={transcript}\n onNavigate={handleTurnNavigate}\n />\n )}\n <div className=\"dsh-qa-transcript__inner\">\n {empty ? (\n <section\n className=\"dsh-qa-welcome\"\n aria-labelledby=\"dsh-qa-welcome-title\"\n >\n <h2 id=\"dsh-qa-welcome-title\">\n {config.branding.welcomeMessage}\n </h2>\n {config.branding.subtitle === \"\" ? null : (\n <p>{config.branding.subtitle}</p>\n )}\n </section>\n ) : (\n visibleMessages.map((message, index) => {\n const group =\n message.role === \"user\"\n ? view.groupByPromptId.get(message.id)\n : undefined;\n const isLast = index === visibleMessages.length - 1;\n return (\n <div\n key={message.id}\n className=\"dsh-qa-message-slot\"\n data-dsh-qa-turn-anchor={\n message.role === \"user\" ? message.id : undefined\n }\n >\n <QaMessage\n message={message}\n renderMarkdown={config.ui.renderMarkdown}\n showTimestamp={config.ui.showTimestamps}\n stateKey={messageStateKey}\n resolveImage={resolveImage}\n onRegenerate={\n isLast &&\n message.role === \"assistant\" &&\n message.status === \"committed\" &&\n controller !== undefined\n ? handleRegenerate\n : undefined\n }\n onOpenSources={\n config.sources.enabled &&\n config.sources.display.footer\n ? handleOpenSources\n : undefined\n }\n onSourceDetail={\n config.sources.enabled\n ? handleSourceDetail\n : undefined\n }\n />\n {group !== undefined && group.turns.length > 1 ? (\n <VariantSwitcher\n count={group.turns.length}\n offset={variantOffsets[group.groupId] ?? 0}\n onStep={(step) =>\n setVariantOffsets((offsets) => ({\n ...offsets,\n [group.groupId]: step,\n }))\n }\n />\n ) : null}\n </div>\n );\n })\n )}\n {state.error === null ? null : (\n <div className=\"dsh-qa-error\" role=\"alert\">\n <span>{state.error}</span>\n {state.phase === \"error\" ? (\n <button\n type=\"button\"\n onClick={() => void controller?.ensureSession()}\n >\n Повторить\n </button>\n ) : null}\n </div>\n )}\n </div>\n </div>\n\n <footer className=\"dsh-qa-footer\">\n <div className=\"dsh-qa-footer__inner\">\n {/* Keyed by chat: the composer's draft text is chat-local, so a\n switch remounts it empty instead of carrying text across. */}\n <QaComposer\n key={state.sessionId ?? \"draft\"}\n placeholder={config.branding.placeholder}\n quickQuestions={\n empty ? config.suggestedQuestions : NO_QUESTIONS\n }\n canSend={state.canSend}\n canStop={state.canStop}\n running={state.phase === \"running\"}\n showStop={config.ui.showStop}\n status={status}\n images={pendingImages}\n onImagesChange={setPendingImages}\n onSend={handleSend}\n onStop={handleStop}\n />\n {config.branding.disclaimer === \"\" ? null : (\n <p className=\"dsh-qa-footer__disclaimer\">\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"5.75\" />\n <path d=\"M8 7.25v3.5m0-5.25v.5\" />\n </svg>\n {config.branding.disclaimer}\n </p>\n )}\n </div>\n </footer>\n {!empty\n ? ([\"left\", \"right\"] as const).map((side) => (\n <QaWidthHandle key={side} side={side} {...widthHandlers} />\n ))\n : null}\n </div>\n </div>\n {agentsOpen && agentRows.length > 0 ? (\n <QaAgentsDrawer\n agents={agentRows}\n activeId={state.viewingSubagent?.id ?? null}\n onView={(id, title) => void controller?.viewSubagent(id, title)}\n onClose={() => setAgentsOpen(false)}\n />\n ) : null}\n {sourcesOpen &&\n ((drawerSources ?? state.sources).length > 0 ||\n !(drawerCompleteness?.complete ?? state.sourcesComplete)) ? (\n <QaSourcesDrawer\n sources={drawerSources ?? state.sources}\n complete={drawerCompleteness?.complete ?? state.sourcesComplete}\n incompleteOrigins={\n drawerCompleteness?.incompleteOrigins ??\n state.incompleteSourceOrigins\n }\n sessionId={state.sessionId}\n sourceApi={boundSourceApi}\n display={config.sources.display}\n filePreview={config.sources.filePreview}\n initialDetail={drawerDetail}\n onClose={() => {\n setSourcesOpen(false);\n setDrawerSources(null);\n setDrawerCompleteness(null);\n setDrawerDetail(null);\n }}\n />\n ) : null}\n </main>\n </>\n );\n}\n","/**\n * Company interaction palette (\"Цвета взаимодействия\" guideline) — the single\n * source of every hard-coded color in this file. The object is emitted once as\n * --dsh-qa-* custom properties on the .dsh-qa-surface root; rules below may\n * only reference these tokens (brand and interaction colors) or the themed\n * --dsw-alias-* tokens (surfaces and typography keep following the host\n * light/dark theme). Rebranding = editing this one object.\n */\nconst QA_BRAND_PALETTE = {\n brand: \"#3D9E9A\",\n // Primary — CTA (Link / Link30 / TextSelect / LinkHover)\n accent: \"#6D9E45\",\n accentSoft: \"#D4E2C3\",\n textSelect: \"#CBD5C6\",\n accentHover: \"#51733F\",\n // Blue — informational\n info: \"#2C71E8\",\n info30: \"#C0D5F8\",\n info10: \"#EAF1FD\",\n // Green — success\n success: \"#4CB250\",\n success30: \"#CAE6CB\",\n success10: \"#EEF8EE\",\n // Red — failure\n error: \"#EA3E3E\",\n error30: \"#F9C6C6\",\n error10: \"#FDECEC\",\n errorHover: \"#C13533\",\n // Orange — notifications\n warning: \"#FFAD0A\",\n warning30: \"#FFE7B6\",\n warning10: \"#FFF7E7\",\n warningHover: \"#DF9911\",\n // Text/icon color placed on top of an accent fill.\n accentContrast: \"#FFFFFF\",\n // Translucent dialog backdrop over the conversation.\n overlay: \"rgba(15, 22, 26, 0.55)\",\n} as const;\n\nconst QA_BRAND_TOKENS = Object.entries(QA_BRAND_PALETTE)\n .map(\n ([token, value]) =>\n `--dsh-qa-${token.replace(/[A-Z]/gu, (letter) => `-${letter.toLowerCase()}`)}:${value}`,\n )\n .join(\";\");\n\nexport const QA_SURFACE_STYLES = String.raw`\n.dsh-qa-surface{${QA_BRAND_TOKENS};position:fixed;inset:0;z-index:2147483000;pointer-events:auto;display:flex;flex-direction:row;min-width:0;height:100vh;height:100dvh;overflow:hidden;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);font-family:inherit}\n.dsh-qa-onboarding{${QA_BRAND_TOKENS};position:fixed;inset:0;z-index:2147483640;display:grid;place-items:center;padding:24px;background:var(--dsh-qa-overlay);color:var(--dsw-alias-label-primary);font-family:inherit}\n.dsh-qa-onboarding__panel{display:grid;grid-template-columns:auto minmax(0,1fr);gap:18px;width:min(620px,100%);max-height:100%;overflow-y:auto;padding:28px;border:1px solid var(--dsw-alias-border-l2);border-radius:18px;background:var(--dsw-alias-bg-layer-2);box-shadow:0 22px 64px rgba(0,0,0,.28)}\n.dsh-qa-onboarding__mark{display:grid;place-items:center;width:44px;height:44px;border-radius:13px;background:var(--dsh-qa-accent-soft);color:var(--dsh-qa-accent-hover)}\n.dsh-qa-onboarding__mark svg{width:25px;height:25px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-onboarding__content{min-width:0}\n.dsh-qa-onboarding__title{margin:2px 0 12px;color:var(--dsw-alias-label-primary);font-size:20px;font-weight:650;line-height:1.35}\n.dsh-qa-onboarding__description{color:var(--dsw-alias-label-secondary);font-size:14px;line-height:1.65}\n.dsh-qa-onboarding__description p{margin:0 0 12px}\n.dsh-qa-onboarding__description p:last-child{margin-bottom:0}\n.dsh-qa-onboarding__actions{display:flex;justify-content:flex-end;margin-top:22px}\n.dsh-qa-onboarding__continue{appearance:none;min-width:164px;padding:10px 18px;border:0;border-radius:999px;background:var(--dsh-qa-accent);color:var(--dsh-qa-accent-contrast);font:inherit;font-size:14px;font-weight:600;line-height:20px;cursor:pointer;transition:background .14s,transform .14s}\n.dsh-qa-onboarding__continue:hover{background:var(--dsh-qa-accent-hover)}\n.dsh-qa-onboarding__continue:active{transform:translateY(1px)}\n.dsh-qa-onboarding__continue:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:3px}\n@media (max-width:600px){.dsh-qa-onboarding{padding:14px}.dsh-qa-onboarding__panel{grid-template-columns:1fr;gap:12px;padding:22px;border-radius:15px}.dsh-qa-onboarding__mark{width:38px;height:38px;border-radius:11px}.dsh-qa-onboarding__title{font-size:18px}.dsh-qa-onboarding__actions{margin-top:18px}.dsh-qa-onboarding__continue{width:100%}}\n.dsh-qa-body{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}\n.dsh-qa-chat{position:relative;flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}\n.dsh-qa-sidebar{flex:none;width:264px;display:flex;flex-direction:column;min-height:0;border-right:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base)}\n.dsh-qa-sidebar--collapsed{width:52px;align-items:center;padding-top:12px}\n.dsh-qa-sidebar__head{display:flex;align-items:center;justify-content:space-between;gap:6px;flex:none;padding:14px 10px 10px 16px}\n.dsh-qa-sidebar__brand{display:flex;align-items:center;gap:8px;min-width:0}\n.dsh-qa-sidebar__logo{display:grid;place-items:center;width:20px;height:20px;flex:none;color:var(--dsh-qa-brand)}\n.dsh-qa-sidebar__logo svg,.dsh-qa-sidebar__logo img{width:20px;height:20px;display:block;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-sidebar__logo img{object-fit:contain;border-radius:6px}\n.dsh-qa-sidebar__name{min-width:0;overflow:hidden;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:18px;text-overflow:ellipsis;white-space:nowrap}\n.dsh-qa-sidebar__collapse,.dsh-qa-sidebar__expand{appearance:none;display:grid;place-items:center;flex:none;width:26px;height:26px;padding:0;border:0;border-radius:7px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}\n.dsh-qa-sidebar__collapse:hover,.dsh-qa-sidebar__expand:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dsh-qa-sidebar__collapse:focus-visible,.dsh-qa-sidebar__expand:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}\n.dsh-qa-sidebar__collapse svg,.dsh-qa-sidebar__expand svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round;transition:transform .16s}.dsh-qa-sidebar__expand svg{transform:rotate(180deg)}\n.dsh-qa-sidebar__newbar{flex:none;padding:2px 12px 10px}\n.dsh-qa-sidebar__new{display:flex;align-items:center;justify-content:center;gap:7px;width:100%;padding:8px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;font-weight:500;line-height:18px;cursor:pointer;transition:border-color .12s,background .12s}\n.dsh-qa-sidebar__new:hover:not(:disabled){border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-interactive-bg-hover)}\n.dsh-qa-sidebar__new:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}\n.dsh-qa-sidebar__new:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}\n.dsh-qa-sidebar__new svg{width:14px;height:14px;flex:none;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-sidebar__search{position:relative;flex:none;padding:0 12px 10px}\n.dsh-qa-sidebar__search>svg{position:absolute;top:17px;left:22px;width:14px;height:14px;fill:none;stroke:var(--dsw-alias-label-tertiary);stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round;pointer-events:none;transform:translateY(-50%)}\n.dsh-qa-sidebar__search input{display:block;width:100%;height:34px;min-width:0;padding:0 34px 0 32px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;line-height:18px;-webkit-appearance:none;appearance:none}\n.dsh-qa-sidebar__search input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}\n.dsh-qa-sidebar__search input::placeholder{color:var(--dsw-alias-label-tertiary)}\n.dsh-qa-sidebar__search input:focus{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px;border-color:transparent}\n.dsh-qa-sidebar__search-clear{position:absolute;top:17px;right:18px;display:grid;place-items:center;width:24px;height:24px;padding:0;border:0;border-radius:6px;background:transparent;color:var(--dsw-alias-label-tertiary);cursor:pointer;transform:translateY(-50%)}\n.dsh-qa-sidebar__search-clear:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dsh-qa-sidebar__search-clear:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}\n.dsh-qa-sidebar__search-clear svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.35;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-sidebar__list{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 8px 12px}\n.dsh-qa-sidebar__group{margin-top:6px}\n.dsh-qa-sidebar__group:first-child{margin-top:0}\n.dsh-qa-sidebar__group-name{padding:4px 6px 2px;color:var(--dsw-alias-label-tertiary);font-size:11px;font-weight:600;line-height:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.dsh-qa-sidebar__empty{margin:8px 8px 0;color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:18px}\n.dsh-qa-sidebar__item{position:relative;display:flex;align-items:center;width:100%;padding:2px;border-radius:8px}\n.dsh-qa-sidebar__item:hover,.dsh-qa-sidebar__item--active{background:var(--dsw-alias-bg-layer-2)}\n.dsh-qa-sidebar__item-main{appearance:none;display:flex;align-items:center;gap:8px;width:100%;min-width:0;border:0;background:0 0;cursor:pointer;text-align:left;font:inherit;padding:7px 8px;border-radius:8px}\n.dsh-qa-sidebar__item-main:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}\n.dsh-qa-sidebar__item-delete{appearance:none;position:absolute;top:50%;right:4px;display:flex;align-items:center;justify-content:center;width:26px;height:26px;border:0;background:var(--dsw-alias-bg-layer-2);cursor:pointer;color:var(--dsw-alias-label-tertiary);padding:5px;border-radius:6px;opacity:0;transform:translateY(-50%);transition:opacity .12s}\n.dsh-qa-sidebar__item:hover .dsh-qa-sidebar__item-delete,.dsh-qa-sidebar__item-delete:focus-visible,.dsh-qa-sidebar__item-delete--confirm{opacity:1}\n.dsh-qa-sidebar__item-delete:hover{color:var(--dsw-alias-label-primary)}\n.dsh-qa-sidebar__item-delete:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}\n.dsh-qa-sidebar__item-delete--confirm{color:var(--dsh-qa-error-hover)}\n.dsh-qa-sidebar__item-delete svg{width:14px;height:14px;display:block;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-sidebar__item-title{flex:1;min-width:0;overflow:hidden;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:18px;text-overflow:ellipsis;white-space:nowrap}\n.dsh-qa-sidebar__item--active .dsh-qa-sidebar__item-title{color:var(--dsw-alias-label-primary);font-weight:500}\n.dsh-qa-sidebar__item-meta{flex:none;display:flex;align-items:center;gap:5px;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:14px}\n.dsh-qa-sidebar__dot{width:7px;height:7px;border-radius:999px;background:var(--dsh-qa-brand);flex:none}\n.dsh-qa-sidebar__footer{flex:none;padding:8px 16px 12px;border-top:1px solid var(--dsw-alias-border-l2)}\n.dsh-qa-sidebar__version{appearance:none;display:inline-flex;align-items:center;padding:2px 0;border:0;background:0 0;color:var(--dsw-alias-label-tertiary);font:inherit;font-size:12px;line-height:16px;cursor:pointer;transition:color .12s}\n.dsh-qa-sidebar__version:hover{color:var(--dsw-alias-label-primary)}\n.dsh-qa-sidebar__version:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px;border-radius:4px}\n.dsh-qa-sidebar__account{display:flex;align-items:center;gap:6px;min-width:0;margin-bottom:6px}\n.dsh-qa-sidebar__account-name{min-width:0;overflow:hidden;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:16px;text-overflow:ellipsis;white-space:nowrap}\n.dsh-qa-sidebar__account-role{flex:none;padding:1px 6px;border-radius:999px;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-tertiary);font-size:10px;font-weight:500;line-height:15px}\n.dsh-qa-sidebar__account-exit{appearance:none;display:grid;place-items:center;flex:none;width:24px;height:24px;padding:0;border:0;border-radius:7px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}\n.dsh-qa-sidebar__account-exit:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dsh-qa-sidebar__account-exit:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}\n.dsh-qa-sidebar__account-exit svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-auth{align-items:center;justify-content:center;padding:24px}\n.dsh-qa-auth__card{display:flex;flex-direction:column;gap:14px;width:min(360px,100%);padding:28px;border:1px solid var(--dsw-alias-border-l2);border-radius:14px;background:var(--dsw-alias-bg-layer-2);box-shadow:0 18px 48px var(--dsh-qa-overlay)}\n.dsh-qa-auth__brand{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center}\n.dsh-qa-auth__logo{width:32px;height:32px;fill:none;stroke:var(--dsh-qa-brand);stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-auth__brand h1{margin:0;color:var(--dsw-alias-label-primary);font-size:19px;font-weight:600;line-height:26px}\n.dsh-qa-auth__tabs{display:flex;gap:4px;padding:3px;border-radius:9px;background:var(--dsw-alias-bg-module-platform)}\n.dsh-qa-auth__tab{appearance:none;flex:1;padding:6px 0;border:0;border-radius:7px;background:0 0;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;font-weight:500;line-height:18px;cursor:pointer;transition:background .12s,color .12s}\n.dsh-qa-auth__tab:hover{color:var(--dsw-alias-label-primary)}\n.dsh-qa-auth__tab--active{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary)}\n.dsh-qa-auth__tab:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}\n.dsh-qa-auth__field{display:flex;flex-direction:column;gap:5px}\n.dsh-qa-auth__field span{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:16px}\n.dsh-qa-auth__field input{appearance:none;width:100%;padding:9px 11px;border:1px solid var(--dsw-alias-border-l2);border-radius:9px;background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);font:inherit;font-size:14px;line-height:20px}\n.dsh-qa-auth__field input:focus{outline:none;border-color:var(--dsh-qa-brand)}\n.dsh-qa-auth__field input:disabled{opacity:.55}\n.dsh-qa-auth__error{margin:0;color:var(--dsh-qa-error);font-size:12px;line-height:17px}\n.dsh-qa-auth__submit{appearance:none;margin-top:2px;padding:10px 0;border:0;border-radius:9px;background:var(--dsh-qa-brand);color:var(--dsh-qa-accent-contrast);font:inherit;font-size:14px;font-weight:600;line-height:20px;cursor:pointer;transition:background .12s}\n.dsh-qa-auth__submit:hover{background:var(--dsh-qa-accent-hover)}\n.dsh-qa-auth__submit:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}\n.dsh-qa-auth__submit:disabled{opacity:.6;cursor:default}\n.dsh-qa-changelog{position:fixed;inset:0;z-index:2147483600;display:grid;place-items:center;padding:24px;background:var(--dsh-qa-overlay)}\n.dsh-qa-changelog__panel{display:flex;flex-direction:column;width:min(560px,100%);max-height:min(640px,100%);border:1px solid var(--dsw-alias-border-l2);border-radius:14px;background:var(--dsw-alias-bg-layer-2);box-shadow:0 18px 48px var(--dsh-qa-overlay);overflow:hidden}\n.dsh-qa-changelog__head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex:none;padding:16px 18px 12px;border-bottom:1px solid var(--dsw-alias-border-l2)}\n.dsh-qa-changelog__title{margin:0;color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:20px}\n.dsh-qa-changelog__close{appearance:none;display:grid;place-items:center;flex:none;width:28px;height:28px;padding:0;border:0;border-radius:8px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}\n.dsh-qa-changelog__close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dsh-qa-changelog__close:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}\n.dsh-qa-changelog__close svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-changelog__body{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:6px 18px 18px}\n.dsh-qa-changelog__entry{padding-top:10px}\n.dsh-qa-changelog__version{display:flex;align-items:baseline;gap:8px;margin:0 0 2px;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:20px}\n.dsh-qa-changelog__date{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:16px}\n.dsh-qa-changelog__current{padding:0 8px;border-radius:999px;background:var(--dsh-qa-accent-soft);color:var(--dsh-qa-accent-hover);font-size:11px;font-weight:500;line-height:17px;white-space:nowrap}\n.dsh-qa-changelog__section{margin:6px 0 0}\n.dsh-qa-changelog__section-title{margin:0;color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600;line-height:18px}\n.dsh-qa-changelog__list{margin:4px 0 0;padding-left:18px;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px}\n.dsh-qa-changelog__list li{margin:3px 0}\n.dsh-qa-changelog__list li::marker{color:var(--dsw-alias-label-tertiary)}\n.dsh-qa-surface *{box-sizing:border-box}\n.dsh-qa-surface ::selection{background:var(--dsh-qa-text-select)}\n.dsh-qa-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n.dsh-qa-header{position:relative;flex:none;background:var(--dsw-alias-bg-base)}\n.dsh-qa-header::after{content:\"\";position:absolute;right:0;bottom:1px;left:0;height:1px;background:var(--dsw-alias-border-l2);pointer-events:none}\n.dsh-qa-header__inner{width:100%;padding:11px 28px 0 30px}\n.dsh-qa-header__title-row{display:flex;align-items:center;min-height:32px;gap:10px}\n.dsh-qa-header__logo{width:24px;height:24px;object-fit:contain;border-radius:6px;flex:none}\n.dsh-qa-header h1{max-width:min(42vw,420px);min-width:0;overflow:hidden;margin:0;color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:20px;text-overflow:ellipsis;white-space:nowrap}\n.dsh-qa-header__mode{display:inline-flex;align-items:center;gap:5px;flex:none;color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:20px;white-space:nowrap}\n.dsh-qa-header__mode svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-header__reset{margin-left:auto;padding:5px 10px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;cursor:pointer}\n.dsh-qa-header__agents{display:inline-flex;align-items:center;gap:6px;flex:none;padding:5px 10px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;line-height:20px;cursor:pointer}\n.dsh-qa-header__agents--end{margin-left:auto}\n.dsh-qa-header__agents:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dsh-qa-header__agents:disabled{opacity:.45;cursor:default}\n.dsh-qa-header__agents[aria-expanded=\"true\"]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dsh-qa-header__agents svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-header__agents:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}\n.dsh-qa-agentview{display:flex;align-items:center;gap:8px;flex:none;padding:6px 28px;border-bottom:1px solid var(--dsh-qa-info-30);background:var(--dsh-qa-info-10);color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px}\n.dsh-qa-header__viewing{display:inline-flex;align-items:center;gap:7px;flex:none;padding:3px 10px;border-radius:999px;background:var(--dsh-qa-info-10);color:var(--dsh-qa-info);font-size:13px;line-height:20px;white-space:nowrap}\n.dsh-qa-header__viewing > svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-header__back{border:0;background:transparent;padding:0;color:var(--dsh-qa-info);font:inherit;font-size:13px;font-weight:500;line-height:20px;cursor:pointer}\n.dsh-qa-header__back:hover{text-decoration:underline}\n.dsh-qa-header__back:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}\n.dsh-qa-agentview strong{color:var(--dsw-alias-label-primary);font-weight:600}\n.dsh-qa-agentview__icon{width:16px;height:16px;flex:none;fill:none;stroke:var(--dsh-qa-info);stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-agentview button{margin-left:auto;flex:none;padding:4px 10px;border:0;border-radius:8px;background:transparent;color:var(--dsh-qa-info);font:inherit;font-size:13px;font-weight:500;cursor:pointer}\n.dsh-qa-agentview button:hover{background:color-mix(in srgb,var(--dsh-qa-info) 12%,transparent)}\n.dsh-qa-agentview button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}\n.dsh-qa-agents{flex:none;display:flex;flex-direction:column;width:360px;min-height:0;border-left:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base)}\n.dsh-qa-agents__head{display:flex;align-items:center;justify-content:space-between;flex:none;padding:14px 12px 10px 16px;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:20px}\n.dsh-qa-agents__head button{appearance:none;display:grid;place-items:center;width:26px;height:26px;padding:0;border:0;border-radius:7px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}\n.dsh-qa-agents__head button:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dsh-qa-agents__head button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}\n.dsh-qa-agents__head button svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round}\n.dsh-qa-agents__list{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 10px 12px}\n.dsh-qa-agents__item{display:flex;align-items:center;gap:10px;width:100%;margin:0 0 6px;padding:10px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-2);font:inherit;text-align:left;cursor:pointer}\n.dsh-qa-agents__item:hover{border-color:var(--dsw-alias-label-dimmed)}\n.dsh-qa-agents__item--active{border-color:var(--dsh-qa-brand)}\n.dsh-qa-agents__item:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}\n.dsh-qa-agents__dot{width:8px;height:8px;flex:none;border-radius:999px;background:var(--dsw-alias-label-tertiary)}\n.dsh-qa-agents__dot--running{background:var(--dsh-qa-success)}\n.dsh-qa-agents__text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}\n.dsh-qa-agents__title{overflow:hidden;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:18px;text-overflow:ellipsis;white-space:nowrap}\n.dsh-qa-agents__meta{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:15px}\n.dsh-qa-agents__open{flex:none;color:var(--dsh-qa-accent);font-size:12px;font-weight:500;line-height:18px}\n.dsh-qa-header__sources{display:inline-flex;align-items:center;gap:6px;flex:none;padding:5px 10px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;line-height:20px;cursor:pointer}\n.dsh-qa-header__sources--end{margin-left:auto}\n.dsh-qa-header__sources:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dsh-qa-header__sources:disabled{opacity:.45;cursor:default}\n.dsh-qa-header__sources[aria-expanded=\"true\"]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dsh-qa-header__sources svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-header__sources:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}\n.dsh-qa-header__reset:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}\n.dsh-qa-header__reset:disabled{opacity:.45;cursor:default}\n.dsh-qa-header__tabs{position:relative;z-index:1;display:flex;gap:32px;margin-top:4px}\n.dsh-qa-header__tabs span{position:relative;padding:0 0 11px;color:var(--dsh-qa-accent);font-size:13px;font-weight:500;line-height:16px}\n.dsh-qa-header__tabs span::after{content:\"\";position:absolute;right:0;bottom:1px;left:0;height:2px;border-radius:2px;background:var(--dsh-qa-accent)}\n.dsh-qa-transcript{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable}\n.dsh-qa-transcript__inner{width:100%;max-width:var(--dsh-qa-content-width);min-height:100%;margin:0 auto;padding:18px 16px 42px}\n.dsh-qa-width-handle{position:absolute;z-index:8;top:0;bottom:0;width:max(0px,min(40px,calc((100% - var(--dsh-qa-content-width)) / 2 - 48px)));cursor:col-resize;touch-action:none;user-select:none}\n.dsh-qa-width-handle[data-side=\"left\"]{right:calc(50% + var(--dsh-qa-content-width) / 2 + 24px)}\n.dsh-qa-width-handle[data-side=\"right\"]{left:calc(50% + var(--dsh-qa-content-width) / 2 + 24px)}\n.dsh-qa-width-handle::after{content:\"\";position:absolute;top:0;bottom:0;width:3px;border-radius:3px;background:linear-gradient(to bottom,transparent calc(var(--dsh-qa-width-handle-pointer-y,50%) - 52px),var(--dsw-alias-scrollbar-hover-l1) calc(var(--dsh-qa-width-handle-pointer-y,50%) - 12px),var(--dsw-alias-scrollbar-hover-l1) calc(var(--dsh-qa-width-handle-pointer-y,50%) + 12px),transparent calc(var(--dsh-qa-width-handle-pointer-y,50%) + 52px));opacity:0;pointer-events:none}\n.dsh-qa-width-handle[data-side=\"left\"]::after{right:16px}\n.dsh-qa-width-handle[data-side=\"right\"]::after{left:16px}\n.dsh-qa-width-handle:hover::after,.dsh-qa-width-handle[data-dragging]::after{opacity:1}\n.dsh-qa-welcome{min-height:calc(100% - 40px);display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:48px 0 88px}\n.dsh-qa-welcome h2{max-width:620px;margin:0;color:var(--dsw-alias-label-primary);font-size:clamp(25px,4vw,34px);font-weight:600;line-height:1.24;letter-spacing:-.02em}\n.dsh-qa-welcome p{max-width:520px;margin:10px 0 0;color:var(--dsw-alias-label-tertiary);font-size:14px;line-height:21px}\n.dsh-qa-message-slot{width:100%;min-width:0}\n.dsh-qa-variants{display:flex;align-items:center;gap:2px;margin:-10px 0 16px}\n.dsh-qa-variants button{display:grid;place-items:center;width:24px;height:24px;padding:0;border:0;border-radius:7px;background:transparent;color:var(--dsw-alias-label-tertiary);cursor:pointer}\n.dsh-qa-variants button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dsh-qa-variants button:disabled{opacity:.4;cursor:default}\n.dsh-qa-variants button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-1px}\n.dsh-qa-variants button svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-variants span{min-width:34px;text-align:center;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:20px;font-variant-numeric:tabular-nums}\n.dsh-qa-sources{flex:none;display:flex;flex-direction:column;width:360px;min-height:0;border-left:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base)}\n.dsh-qa-sources__head{display:flex;align-items:center;justify-content:space-between;flex:none;padding:14px 12px 10px 16px;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:20px}\n.dsh-qa-sources__head button{appearance:none;display:grid;place-items:center;width:26px;height:26px;padding:0;border:0;border-radius:7px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}\n.dsh-qa-sources__head button:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dsh-qa-sources__head button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}\n.dsh-qa-sources__head button svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round}\n.dsh-qa-sources__list{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:0 10px 12px}\n.dsh-qa-sources__group{margin:0 0 14px}\n.dsh-qa-sources__group h3{display:flex;align-items:center;gap:7px;margin:4px 4px 8px;color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600;line-height:18px}\n.dsh-qa-sources__group h3 span{display:inline-grid;place-items:center;min-width:19px;height:18px;padding:0 5px;border-radius:999px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-tertiary);font-size:10px}\n.dsh-qa-sources__incomplete{margin:0 2px 12px;padding:9px 10px;border:1px solid var(--dsw-alias-border-l2);border-radius:9px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font-size:12px;line-height:17px}\n.dsh-qa-sources__more{appearance:none;width:100%;padding:5px;border:0;background:transparent;color:var(--dsh-qa-accent);font:inherit;font-size:12px;cursor:pointer}\n.dsh-qa-sources__badges{display:flex;flex-wrap:wrap;gap:4px;margin-top:2px}\n.dsh-qa-sources__badges>span{padding:1px 6px;border-radius:999px;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);font-size:10px;line-height:15px}\nbutton.dsh-qa-sources__item{display:flex;gap:10px;width:100%;margin:0 0 8px;padding:10px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-2);font:inherit;text-align:left;cursor:pointer;transition:border-color .12s}\n.dsh-qa-sources__kind{display:grid;place-items:center;width:18px;height:18px;flex:none;margin-top:1px;color:var(--dsw-alias-label-tertiary)}\n.dsh-qa-sources__kind svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-sources__item:hover{border-color:var(--dsw-alias-label-dimmed)}\n.dsh-qa-sources__item:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}\n.dsh-qa-sources__text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}\n.dsh-qa-sources__title{overflow:hidden;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:18px;text-decoration:none;text-overflow:ellipsis;white-space:nowrap}\na.dsh-qa-sources__title:hover{text-decoration:underline}\n.dsh-qa-sources__target{overflow:hidden;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px;text-overflow:ellipsis;white-space:nowrap}\n.dsh-qa-sources__text p{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin:0;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:17px}\n.dsh-qa-sourcedetail{flex:1;min-height:0;display:flex;flex-direction:column;padding:0 10px 12px}\n.dsh-qa-sourcedetail__head{display:flex;align-items:center;gap:8px;flex:none;padding:2px 2px 8px}\n.dsh-qa-sourcedetail__back{display:grid;place-items:center;width:26px;height:26px;flex:none;padding:0;border:0;border-radius:7px;background:0 0;color:var(--dsw-alias-label-tertiary);cursor:pointer}\n.dsh-qa-sourcedetail__back:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dsh-qa-sourcedetail__back:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}\n.dsh-qa-sourcedetail__back svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-sourcedetail__kind{display:grid;place-items:center;width:16px;height:16px;flex:none;color:var(--dsw-alias-label-tertiary)}\n.dsh-qa-sourcedetail__kind svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-sourcedetail__title{min-width:0;overflow:hidden;flex:1;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:20px;text-overflow:ellipsis;white-space:nowrap}\n.dsh-qa-sourcedetail__open{flex:none;padding:3px 10px;border:1px solid var(--dsh-qa-accent);border-radius:999px;color:var(--dsh-qa-accent);font-size:12px;font-weight:500;line-height:18px;text-decoration:none}\n.dsh-qa-sourcedetail__open:hover{background:var(--dsh-qa-accent);color:var(--dsh-qa-accent-contrast)}\n.dsh-qa-sourcedetail__open:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}\n.dsh-qa-sourcedetail__target{flex:none;margin:0 2px 8px;overflow:hidden;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px;text-overflow:ellipsis;white-space:nowrap}\n.dsh-qa-sourcedetail__body{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;padding:12px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font-size:12px;line-height:19px;white-space:pre-wrap;overflow-wrap:anywhere}\n.dsh-qa-sourcedetail__body a{color:var(--dsh-qa-accent);text-decoration:underline}\n.dsh-qa-sourcedetail__body p{margin:0}\n.dsh-qa-sourcedetail__empty{margin:0;color:var(--dsw-alias-label-tertiary)}\n.dsh-qa-sourcedetail__provenance{display:flex;flex-wrap:wrap;gap:3px 10px;margin-top:10px!important;color:var(--dsw-alias-label-tertiary)}\n.dsh-qa-preview__toggle{display:flex;flex:none;padding:2px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-3)}\n.dsh-qa-preview__toggle button{appearance:none;padding:2px 7px;border:0;border-radius:5px;background:transparent;color:var(--dsw-alias-label-tertiary);font:inherit;font-size:10px;line-height:16px;cursor:pointer}\n.dsh-qa-preview__toggle button[aria-pressed=\"true\"]{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary)}\n.dsh-qa-preview__toggle button:disabled{opacity:.45;cursor:not-allowed}\n.dsh-qa-preview__notice{margin:0 0 9px!important;padding:7px 9px;border-radius:7px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-secondary)}\n.dsh-qa-preview__range{display:flex;align-items:center;gap:8px;margin:0 0 9px!important;color:var(--dsw-alias-label-secondary);font-size:11px}\n.dsh-qa-preview__range button{appearance:none;padding:1px 6px;border:0;background:transparent;color:var(--dsh-qa-accent);font:inherit;font-size:11px;cursor:pointer}\n.dsh-qa-preview__markdown{white-space:normal;color:var(--dsw-alias-label-primary);font-size:13px;line-height:1.6}\n.dsh-qa-preview__markdown p,.dsh-qa-preview__markdown ul,.dsh-qa-preview__markdown ol,.dsh-qa-preview__markdown blockquote,.dsh-qa-preview__markdown pre,.dsh-qa-preview__markdown table{margin:0 0 10px}\n.dsh-qa-preview__raw{max-width:100%;margin:0;overflow:auto;white-space:pre;background:var(--dsw-alias-bg-layer-3);font:11px/18px ui-monospace,SFMono-Regular,Consolas,monospace}\n.dsh-qa-preview__raw code{display:block;min-width:max-content}\n.dsh-qa-preview__line{display:flex;min-height:18px}\n.dsh-qa-preview__line--highlight{background:var(--dsw-alias-interactive-bg-hover)}\n.dsh-qa-preview__number{width:46px;flex:none;padding-right:10px;color:var(--dsw-alias-label-tertiary);text-align:right;user-select:none}\n.dsh-qa-message{display:flex;flex-direction:column;width:100%;min-width:0;margin:0 0 20px}\n.dsh-qa-message--user{align-items:flex-end;margin-left:auto}\n.dsh-qa-message--assistant{align-items:flex-start;margin-right:auto}\n.dsh-qa-message--work{align-items:flex-start;margin:-4px 0 14px}\n.dsh-qa-message--system{align-items:center;margin:4px auto 20px}\n.dsh-qa-message__content{max-width:100%;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--dsw-alias-label-primary);font-size:15px;line-height:1.62}\n.dsh-qa-message--user .dsh-qa-message__content{max-width:min(525px,82%);padding:10px 16px;border-radius:22px;background:var(--dsw-specific-bubble);font-size:16px;line-height:24px}\n.dsh-qa-message__byline{display:block;margin-bottom:2px;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:16px;font-weight:500}\n.dsh-qa-message__images{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 8px}\n.dsh-qa-message--user .dsh-qa-message__images{justify-content:flex-end}\n.dsh-qa-message__image{display:block;width:132px;height:96px;border-radius:12px;border:1px solid var(--dsw-alias-border-l2);object-fit:cover;background:var(--dsw-alias-bg-layer-2)}\na.dsh-qa-message__image{padding:0}\nspan.dsh-qa-message__image{display:grid;place-items:center;color:var(--dsw-alias-label-tertiary);font-size:11px}\nspan.dsh-qa-message__image[data-state=\"broken\"]::after{content:\"Не удалось загрузить\"}\nspan.dsh-qa-message__image[data-state=\"loading\"]{animation:dsh-qa-spin 1.2s linear infinite;border-style:dashed}\n.dsh-qa-message--assistant .dsh-qa-message__content{width:100%;padding:2px 0}\n.dsh-qa-message__sources{appearance:none;margin-top:10px;padding:4px 9px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:inherit;font-size:12px;line-height:18px;cursor:pointer}\n.dsh-qa-message__sources:hover{border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}\n.dsh-qa-message__sources:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}\n.dsh-qa-message--system .dsh-qa-message__content{padding:7px 11px;border-radius:9px;background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px}\n.dsh-qa-message[data-status=\"info\"] .dsh-qa-message__content{color:var(--dsh-qa-info)}\n.dsh-qa-message[data-status=\"error\"] .dsh-qa-message__content{color:var(--dsh-qa-error)}\n.dsh-qa-message__actions{display:flex;align-items:center;gap:8px;height:28px;margin-top:6px;color:var(--dsw-alias-label-tertiary)}\n.dsh-qa-message--user .dsh-qa-message__actions{justify-content:flex-end}\n.dsh-qa-message__actions button{display:grid;place-items:center;width:28px;height:28px;padding:5px;border:0;border-radius:999px;background:transparent;color:var(--dsw-alias-label-tertiary);cursor:pointer}\n.dsh-qa-message__actions button:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}\n.dsh-qa-message__actions button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}\n.dsh-qa-message__actions svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.35;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-message__actions button[data-active]{color:var(--dsh-qa-accent)}\n.dsh-qa-message__actions button[data-active]:hover{color:var(--dsh-qa-accent)}\n.dsh-qa-message__meta{display:flex;align-items:center;gap:12px;min-width:0;padding:0 8px;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:20px;white-space:nowrap}\n.dsh-qa-rail{position:sticky;top:0;z-index:7;height:0;pointer-events:none}.dsh-qa-rail__frame{--dsh-qa-rail-band:320px;--dsh-qa-rail-natural:0px;--dsh-qa-rail-inset:6px;--dsh-qa-rail-scroll-top:0px;--dsh-qa-rail-preview-height:100px;position:absolute;top:calc(var(--dsh-qa-rail-band)/2);right:12px;width:28px;height:min(var(--dsh-qa-rail-natural),max(0px,calc(var(--dsh-qa-rail-band) - 64px)),420px);cursor:pointer;pointer-events:auto;transform:translateY(-50%);transition:height 220ms cubic-bezier(.2,.8,.2,1)}\n.dsh-qa-rail__scroll{position:absolute;inset:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:none}\n.dsh-qa-rail__scroll::-webkit-scrollbar{display:none}\n.dsh-qa-rail__scroll--fade-top{mask-image:linear-gradient(to bottom,transparent 0,#000 24px,#000 100%)}\n.dsh-qa-rail__scroll--fade-bottom{mask-image:linear-gradient(to bottom,#000 0,#000 calc(100% - 24px),transparent 100%)}\n.dsh-qa-rail__scroll--fade-top.dsh-qa-rail__scroll--fade-bottom{mask-image:linear-gradient(to bottom,transparent 0,#000 24px,#000 calc(100% - 24px),transparent 100%)}\n.dsh-qa-rail__marks{position:relative;height:var(--dsh-qa-rail-natural)}\n.dsh-qa-rail__pos{position:absolute;top:calc(var(--dsh-qa-rail-pos) + var(--dsh-qa-rail-inset));right:0;left:0;height:10px;transform:translateY(-50%);transition:top 220ms cubic-bezier(.2,.8,.2,1);animation:dsh-qa-rail-enter 150ms ease-out}\n.dsh-qa-rail__mark{position:absolute;inset:0 0 0 auto;width:20px;padding:0;border:0;border-radius:8px;background:transparent;cursor:pointer;pointer-events:none}\n.dsh-qa-rail__mark::before{position:absolute;top:50%;right:0;width:12px;height:2px;border-radius:2px;background:var(--dsw-alias-border-l4,var(--dsw-alias-border-l2));content:\"\";transform:translateY(-50%);transition:width 140ms ease,background-color 140ms ease}\n.dsh-qa-rail__mark--preview::before{width:18px;background:var(--dsw-alias-label-tertiary)}\n.dsh-qa-rail__mark--busy::before{animation:dsh-qa-rail-busy 1s ease-in-out infinite}\n.dsh-qa-rail__mark--active::before{width:20px;background:var(--dsw-alias-label-primary)}\n.dsh-qa-rail__mark:focus-visible{outline:1px solid var(--dsh-qa-accent);outline-offset:2px}\n.dsh-qa-rail__mark:focus-visible::before{width:20px;background:var(--dsh-qa-accent)}\n.dsh-qa-rail__preview{position:absolute;top:clamp(0px,calc(var(--dsh-qa-rail-pos) + var(--dsh-qa-rail-inset) - var(--dsh-qa-rail-scroll-top) - var(--dsh-qa-rail-preview-height)/2),calc(100% - var(--dsh-qa-rail-preview-height)));right:calc(100% + 10px);box-sizing:border-box;width:min(300px,60vw);max-height:var(--dsh-qa-rail-preview-height);overflow:hidden;padding:10px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);box-shadow:var(--dsw-shadow-lv2);pointer-events:none;animation:dsh-qa-rail-preview-enter 120ms ease-out;transition:top 140ms cubic-bezier(.2,.8,.2,1)}\n.dsh-qa-rail__preview-prompt,.dsh-qa-rail__preview-response{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical}\n.dsh-qa-rail__preview-prompt{font-size:13px;font-weight:600;line-height:18px;-webkit-line-clamp:1}\n.dsh-qa-rail__preview-response{margin-top:4px;color:var(--dsw-alias-label-caption,var(--dsw-alias-label-tertiary));font-size:12px;line-height:17px;-webkit-line-clamp:3}\n@keyframes dsh-qa-rail-enter{from{opacity:0}to{opacity:1}}\n@keyframes dsh-qa-rail-preview-enter{from{opacity:0;transform:translateX(4px)}to{opacity:1;transform:translateX(0)}}\n@keyframes dsh-qa-rail-busy{0%,100%{opacity:1}50%{opacity:.35}}\n@media (max-width:900px){.dsh-qa-rail{display:none}}\n.dsh-qa-srcref{position:relative;display:inline-flex;align-items:center;gap:5px;max-width:320px;margin:0 1px;padding:2px 9px 2px 7px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font-size:13px;line-height:18px;font-weight:500;text-decoration:none;vertical-align:baseline;cursor:pointer;transition:border-color .12s,color .12s}\na.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}\n.dsh-qa-srcref:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}\n.dsh-qa-srcref__icon{display:grid;place-items:center;width:14px;height:14px;flex:none;color:var(--dsw-alias-label-tertiary)}\n.dsh-qa-srcref__icon svg{width:13px;height:13px;display:block;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-srcref__label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.dsh-qa-srcref__card{position:absolute;top:calc(100% + 6px);left:0;z-index:9;display:none;width:min(320px,calc(100vw - 48px));padding:10px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;background:var(--dsw-alias-bg-layer-2);box-shadow:var(--dsw-shadow-lv2);color:var(--dsw-alias-label-primary);font-size:12px;line-height:17px;font-weight:400;text-align:left;white-space:normal;cursor:default}\n.dsh-qa-srcref:hover .dsh-qa-srcref__card,.dsh-qa-srcref:focus-visible .dsh-qa-srcref__card{display:block}\n.dsh-qa-srcref__card-title{display:flex;align-items:center;gap:6px;min-width:0;overflow:hidden;color:var(--dsw-alias-label-primary);font-weight:600;text-overflow:ellipsis;white-space:nowrap}\n.dsh-qa-srcref__card-target{display:block;overflow:hidden;margin-top:2px;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px;text-overflow:ellipsis;white-space:nowrap}\n.dsh-qa-srcref__card-snippet{display:-webkit-box;overflow:hidden;margin-top:6px;color:var(--dsw-alias-label-secondary);-webkit-box-orient:vertical;-webkit-line-clamp:3}\n\n.dsh-qa-message__content p,.dsh-qa-message__content ul,.dsh-qa-message__content blockquote,.dsh-qa-message__content pre{margin:0 0 14px}\n.dsh-qa-message__content :last-child{margin-bottom:0}\n.dsh-qa-message__content h2,.dsh-qa-message__content h3,.dsh-qa-message__content h4{margin:18px 0 8px;line-height:1.35}\n.dsh-qa-message__content h2{font-size:19px}.dsh-qa-message__content h3{font-size:17px}.dsh-qa-message__content h4{font-size:15px}\n.dsh-qa-message__content ul{padding-left:22px}.dsh-qa-message__content a{color:var(--dsh-qa-accent)}\n.dsh-qa-message__content code{border-radius:5px;padding:1px 4px;background:var(--dsw-alias-bg-layer-2);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.9em}\n.dsh-qa-message__content pre{overflow-x:auto;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;padding:13px;background:var(--dsw-alias-bg-layer-2)}\n.dsh-qa-message__content pre code{padding:0;background:transparent}\n.dsh-qa-message__content ol{margin:0 0 14px;padding-left:22px}\n.dsh-qa-message__content ol li,.dsh-qa-message__content ul li{margin:0 0 4px}\n.dsh-qa-message__content hr{border:0;border-top:1px solid var(--dsw-alias-border-l2);margin:16px 0}\n.dsh-qa-md-table{overflow-x:auto;margin:0 0 14px}\n.dsh-qa-md-table table{border-collapse:collapse;width:auto;min-width:calc(100% - var(--dsh-qa-bleed,0px)*2);font-size:14px}\n.dsh-qa-md-table th,.dsh-qa-md-table td{border:1px solid var(--dsw-alias-border-l2);padding:6px 10px;vertical-align:top}\n.dsh-qa-md-table thead th{background:var(--dsw-alias-bg-layer-2);font-weight:600}\n.dsh-qa-md-table tbody tr:nth-child(even){background:var(--dsw-alias-bg-layer-2)}\n.dsh-qa-message--assistant .dsh-qa-message__content pre,.dsh-qa-message--assistant .dsh-qa-md-table{--dsh-qa-bleed:min(72px,max(0px,(100vw - 100%)/2 - 28px));width:calc(100% + var(--dsh-qa-bleed)*2);margin-right:calc(var(--dsh-qa-bleed)*-1);margin-left:calc(var(--dsh-qa-bleed)*-1)}\n.dsh-qa-message__content blockquote{border-left:3px solid var(--dsw-alias-border-l2);padding-left:12px;color:var(--dsw-alias-label-secondary)}\n.dsh-qa-message__cursor{display:inline-block;width:7px;height:1em;margin-left:3px;vertical-align:-2px;background:var(--dsw-alias-label-secondary);animation:dsh-qa-blink 1s steps(2,start) infinite}\n@keyframes dsh-qa-blink{50%{opacity:0}}\n.dsh-qa-notice{width:100%;min-width:0;margin:-4px 0 14px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;background:var(--dsw-alias-bg-layer-2)}\n.dsh-qa-notice__summary{display:flex;align-items:center;gap:7px;min-height:32px;padding:4px 10px;list-style:none;color:var(--dsw-alias-label-secondary);font-size:13px;cursor:pointer}\n.dsh-qa-notice__summary::-webkit-details-marker{display:none}\n.dsh-qa-notice__summary:hover{color:var(--dsw-alias-label-primary)}\n.dsh-qa-notice__summary:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-2px}\n.dsh-qa-notice__icon{width:15px;height:15px;flex:none;fill:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-notice__title{flex:1;min-width:0;overflow:hidden;font-weight:500;text-overflow:ellipsis;white-space:nowrap}\n.dsh-qa-notice__chevron{width:13px;height:13px;flex:none;fill:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;transition:transform .16s ease}\n.dsh-qa-notice[open] .dsh-qa-notice__chevron{transform:rotate(90deg)}\n.dsh-qa-notice__body{padding:2px 12px 10px 32px;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px;white-space:pre-wrap;overflow-wrap:anywhere}\n.dsh-qa-notice__body p{margin:0}\n.dsh-qa-work{width:100%;color:var(--dsw-alias-label-secondary);font-size:14px;line-height:22px}\n.dsh-qa-work__toggle{display:flex;align-items:center;gap:7px;min-height:30px;margin:0;padding:3px 5px 3px 0;border:0;border-radius:7px;background:transparent;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer}\n.dsh-qa-work__toggle:hover{color:var(--dsw-alias-label-primary)}\n.dsh-qa-work__toggle:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}\n.dsh-qa-work__chevron{width:14px;height:14px;flex:none;fill:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;transition:transform .16s ease}\n.dsh-qa-work__chevron[data-open],.dsh-qa-work-tool[open]>.dsh-qa-work-item .dsh-qa-work__chevron{transform:rotate(90deg)}\n.dsh-qa-work__spinner,.dsh-qa-work-item__spinner{width:13px;height:13px;flex:none;border:1.5px solid var(--dsw-alias-border-l2);border-top-color:var(--dsw-alias-label-secondary);border-radius:50%;animation:dsh-qa-spin .9s linear infinite}\n@keyframes dsh-qa-spin{to{transform:rotate(360deg)}}\n.dsh-qa-work__body{position:relative;margin:4px 0 2px 6px;padding:3px 0 5px 18px;border-left:1px solid var(--dsw-alias-border-l2)}\n.dsh-qa-work-item{min-width:0;color:var(--dsw-alias-label-secondary)}\n.dsh-qa-work-item--tool{display:flex;align-items:center;gap:7px;min-height:32px;padding:4px 6px;border-radius:7px}\n.dsh-qa-work-tool>summary{list-style:none;cursor:pointer}\n.dsh-qa-work-tool>summary::-webkit-details-marker{display:none}\n.dsh-qa-work-tool>summary:hover{background:var(--dsw-alias-interactive-bg-hover)}\n.dsh-qa-work-tool>summary:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:-1px}\n.dsh-qa-work-item__icon{display:grid;place-items:center;width:16px;height:16px;flex:none;color:var(--dsw-alias-label-tertiary)}\n.dsh-qa-work-item__icon svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-work-item__icon[data-state=\"ok\"]{color:var(--dsh-qa-success,var(--dsw-alias-label-secondary))}\n.dsh-qa-work-item__icon[data-state=\"error\"]{color:var(--dsh-qa-error)}\n.dsh-qa-work-item__label{flex:none;color:var(--dsw-alias-label-secondary);font-weight:500}\n.dsh-qa-work-item__summary{min-width:0;overflow:hidden;flex:1;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap}.dsh-qa-work-item__agent-id{flex:none;padding:1px 6px;border-radius:999px;background:var(--dsh-qa-info-10);color:var(--dsh-qa-info);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:10px;line-height:15px}.dsh-qa-work-tool[data-tool=\"subagent\"],.dsh-qa-work-item[data-tool=\"subagent\"]{border:1px solid var(--dsh-qa-info-30);border-radius:9px}\n.dsh-qa-work-item--text{padding:5px 6px 9px}\n.dsh-qa-work-item__text-head{display:flex;align-items:center;gap:7px;min-height:24px}\n.dsh-qa-work-item__text{padding:3px 0 0 23px;color:var(--dsw-alias-label-tertiary);font-size:14px;line-height:23px;white-space:pre-wrap;overflow-wrap:anywhere}\n.dsh-qa-work-item__text p,.dsh-qa-work-item__text ul,.dsh-qa-work-item__text pre{margin:0 0 9px}\n.dsh-qa-work-item__text :last-child{margin-bottom:0}\n.dsh-qa-work-tool__body{margin:0 6px 7px 29px;overflow:hidden;border:1px solid var(--dsw-alias-border-l2);border-radius:9px;background:var(--dsw-alias-bg-layer-2)}\n.dsh-qa-work-tool__body section+section{border-top:1px solid var(--dsw-alias-border-l2)}\n.dsh-qa-work-tool__body section>span{display:block;padding:7px 10px 0;color:var(--dsw-alias-label-tertiary);font-size:11px;font-weight:600;line-height:18px;text-transform:uppercase;letter-spacing:.04em}\n.dsh-qa-work-tool__body pre{max-height:260px;overflow:auto;margin:0;padding:7px 10px 10px;color:var(--dsw-alias-label-secondary);background:transparent;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;line-height:19px;white-space:pre-wrap;overflow-wrap:anywhere}\n.dsh-qa-error{display:flex;align-items:center;justify-content:center;gap:10px;margin:16px auto;padding:10px 12px;border:1px solid var(--dsh-qa-error);border-radius:10px;color:var(--dsw-alias-label-primary);font-size:13px}\n.dsh-qa-error button{border:0;background:transparent;color:var(--dsh-qa-accent);font:inherit;font-weight:600;cursor:pointer}\n.dsh-qa-footer{position:relative;flex:none;padding:28px 16px max(12px,env(safe-area-inset-bottom));background:linear-gradient(180deg,color-mix(in srgb,var(--dsw-alias-bg-base) 0%,transparent) 0,var(--dsw-alias-bg-base) 28px)}\n.dsh-qa-footer__inner{width:100%;max-width:var(--dsh-qa-content-width);margin:0 auto}\n.dsh-qa-composer-wrap{display:flex;flex-direction:column;gap:10px;width:100%}\n.dsh-qa-footer__disclaimer{display:flex;align-items:flex-start;justify-content:center;gap:6px;margin:10px auto 0;max-width:640px;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px;text-align:left}\n.dsh-qa-footer__disclaimer svg{width:13px;height:13px;flex:none;margin-top:1px;fill:none;stroke:currentColor;stroke-width:1.2;stroke-linecap:round}\n.dsh-qa-quick-questions{display:flex;gap:8px;width:100%;padding:2px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin}\n.dsh-qa-quick-questions button{flex:none;max-width:min(360px,80vw);padding:8px 13px;border:1px solid var(--dsw-alias-border-l2);border-radius:999px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;line-height:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}\n.dsh-qa-quick-questions button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dsh-qa-quick-questions button:disabled{opacity:.5;cursor:default}\n.dsh-qa-quick-questions button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}\n.dsh-qa-composer-wrap--drag .dsh-qa-composer{border-color:var(--dsh-qa-accent);border-style:dashed;background:color-mix(in srgb,var(--dsh-qa-accent) 6%,var(--dsw-specific-input-major))}\n.dsh-qa-composer__images{display:flex;flex-wrap:wrap;gap:8px}\n.dsh-qa-composer__image{position:relative;display:block;width:64px;height:64px;flex:none}\n.dsh-qa-composer__image img{display:block;width:100%;height:100%;object-fit:cover;border-radius:10px;border:1px solid var(--dsw-alias-border-l2)}\n.dsh-qa-composer__image button{position:absolute;top:-6px;right:-6px;display:grid;place-items:center;width:18px;height:18px;padding:0;border:0;border-radius:999px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);cursor:pointer;box-shadow:var(--dsw-shadow-lv2)}\n.dsh-qa-composer__image button:hover{color:var(--dsh-qa-error)}\n.dsh-qa-composer__image button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}\n.dsh-qa-composer__image button svg{width:9px;height:9px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round}\n.dsh-qa-composer__attachment-error{margin:0;color:var(--dsh-qa-error);font-size:12px;line-height:18px}\n.dsh-qa-composer__attach{display:grid;place-items:center;flex:none;width:30px;height:30px;padding:0;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-tertiary);cursor:pointer}\n.dsh-qa-composer__attach:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}\n.dsh-qa-composer__attach:disabled{opacity:.4;cursor:default}\n.dsh-qa-composer__attach:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}\n.dsh-qa-composer__attach svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-composer{display:flex;flex-direction:column;gap:10px;width:100%;min-height:94px;padding:14px 10px 8px 16px;border:1px solid var(--dsw-alias-border-l2-darkmode-thin);border-radius:22px;background:var(--dsw-specific-input-major);box-shadow:var(--dsw-shadow-lv2);transition:border-color .12s,box-shadow .12s}\n.dsh-qa-composer:focus-within{border-color:var(--dsh-qa-accent)}\n.dsh-qa-composer textarea{display:block;width:100%;min-height:28px;max-height:168px;resize:none;overflow-y:auto;border:0;outline:0;background:transparent;color:var(--dsw-alias-label-primary);font:inherit;font-size:16px;line-height:24px;padding:0 6px 0 0;caret-color:var(--dsh-qa-accent)}\n.dsh-qa-composer textarea::placeholder{color:var(--dsw-alias-label-tertiary)}\n.dsh-qa-composer textarea:disabled{cursor:default}\n.dsh-qa-composer__toolbar{display:flex;align-items:center;min-height:34px;gap:12px}\n.dsh-qa-composer__hint{flex:1;min-width:0;overflow:hidden;color:var(--dsw-alias-label-caption);font-size:11px;line-height:18px;text-overflow:ellipsis;white-space:nowrap}\n.dsh-qa-composer__action{display:grid;place-items:center;flex:none;width:34px;height:34px;padding:0;border:0;border-radius:999px;color:var(--dsh-qa-accent-contrast);cursor:pointer}\n.dsh-qa-composer__action svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}\n.dsh-qa-composer__action--send{background:var(--dsh-qa-accent)}\n.dsh-qa-composer__action--send:hover:not(:disabled){background:var(--dsh-qa-accent-hover)}\n.dsh-qa-composer__action--stop{background:var(--dsh-qa-error)}\n.dsh-qa-composer__action--stop svg{fill:currentColor;stroke:none}\n.dsh-qa-composer__action:disabled{opacity:.4;cursor:default}\n.dsh-qa-composer__action:focus-visible,.dsh-qa-error button:focus-visible,.dsh-qa-header__reset:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}\n@media (hover:hover){.dsh-qa-message__actions .dsh-qa-message__meta{opacity:0;transition:opacity 80ms ease}.dsh-qa-message:hover .dsh-qa-message__actions .dsh-qa-message__meta,.dsh-qa-message:focus-within .dsh-qa-message__actions .dsh-qa-message__meta,.dsh-qa-message__actions[data-persistent] .dsh-qa-message__meta{opacity:1}}.dsh-qa-message__actions[data-persistent] .dsh-qa-message__meta{opacity:1}\n@media (max-width:600px){.dsh-qa-sidebar{display:none}.dsh-qa-sources,.dsh-qa-agents{position:absolute;inset:0;z-index:6;width:100%;border-left:0}.dsh-qa-header__inner{padding-left:16px;padding-right:16px}.dsh-qa-header h1{max-width:48vw}.dsh-qa-header__mode{font-size:12px}.dsh-qa-width-handle{display:none}.dsh-qa-transcript__inner{max-width:100%;padding:16px 16px 28px}.dsh-qa-footer__inner{max-width:100%}.dsh-qa-message{margin-bottom:16px}.dsh-qa-message--user .dsh-qa-message__content{max-width:88%;font-size:15px}.dsh-qa-message__content{font-size:14px}.dsh-qa-footer{padding-left:10px;padding-right:10px;padding-bottom:max(8px,env(safe-area-inset-bottom))}.dsh-qa-composer{min-height:84px;padding-top:12px}.dsh-qa-composer__hint{font-size:0}.dsh-qa-composer__hint::after{content:\"Enter: отправить\";font-size:11px}}\n@media (max-height:480px) and (orientation:landscape){.dsh-qa-header__inner{padding-top:6px}.dsh-qa-header__tabs{display:none}.dsh-qa-transcript__inner{padding-top:12px}.dsh-qa-footer{padding-top:12px}.dsh-qa-composer{min-height:72px;gap:4px;padding-top:8px}}\n@media (prefers-reduced-motion:reduce){.dsh-qa-message__cursor,.dsh-qa-work__spinner,.dsh-qa-work-item__spinner{animation:none}.dsh-qa-work__chevron{transition:none}.dsh-qa-rail__frame,.dsh-qa-rail__pos,.dsh-qa-rail__mark::before,.dsh-qa-rail__mark--busy::before,.dsh-qa-rail__preview{transition:none;animation:none}}\n`;\n","import type { Context } from \"@deepseek-ai/cordis\";\nimport type { ConnectionHandle } from \"@deepseek-ai/dsh-client-connection/client\";\nimport type { SettingsScopeBinder } from \"@deepseek-ai/dsh-client-ui-settings/client\";\nimport type { RemoteResult } from \"@deepseek-ai/dsh-typert-protocol\";\nimport qaSurfaceRemote from \"@yadsh/dsh-qa-surface/remote\";\nimport type { ClientRemote } from \"@deepseek-ai/dsh-api-gateway/client\";\nimport type {} from \"@deepseek-ai/dsh-api-session-controller/remote\";\nimport type {} from \"@deepseek-ai/dsh-agent-presets/remote\";\nimport type {} from \"@deepseek-ai/dsh-client-ui-conversation/client\";\nimport type {} from \"@deepseek-ai/dsh-client-ui-layout/client\";\nimport type {} from \"@deepseek-ai/dsh-client-ui-renderer/client\";\nimport type {} from \"@deepseek-ai/dsh-client-ui-settings/client\";\nimport { QaConfigController } from \"./QaConfigController.js\";\nimport { matchesQaRoute, QaRouteController } from \"./QaRouteController.js\";\nimport { QaAccountsController } from \"./QaAccountsController.js\";\nimport { QaChatIndex } from \"./chat-index.js\";\nimport { QaSurface } from \"./QaSurface.js\";\nimport { QaWelcomeNoticeStep } from \"./components/QaWelcomeNotice.js\";\nimport type {\n QaSecureSession,\n QaSessions,\n QaSessionsApi,\n QaSourceApi,\n} from \"./types.js\";\nimport { QA_SURFACE_STYLES } from \"./styles.js\";\nimport type {\n QaAccountSession,\n QaClaimResult,\n QaLockdownProof,\n QaOwnershipEntry,\n QaSurfaceConfig,\n ResolvedQaSurfaceConfig,\n QaWhoamiResult,\n} from \"../types.js\";\n\nconst SETTINGS_NAMESPACE = \"qa-surface\";\n\ndeclare module \"@deepseek-ai/cordis\" {\n interface Context {\n connection: ConnectionHandle;\n }\n}\n\ninterface QaPolicyRemote {\n secureSession(\n token: string,\n sessionId: string,\n ): Promise<RemoteResult<QaLockdownProof>>;\n describe(): Promise<RemoteResult<ResolvedQaSurfaceConfig>>;\n sources(\n token: string,\n sessionId: string,\n ): QaSourceApi extends {\n sources(token: string, sessionId: string): infer Result;\n }\n ? Result\n : never;\n readSourceFile(\n token: string,\n sessionId: string,\n sourcePath: string,\n ): QaSourceApi extends {\n readSourceFile(\n token: string,\n sessionId: string,\n sourcePath: string,\n ): infer Result;\n }\n ? Result\n : never;\n accountsWhoami(token: string): Promise<RemoteResult<QaWhoamiResult>>;\n accountsLogin(\n email: string,\n password: string,\n ): Promise<RemoteResult<QaAccountSession>>;\n accountsRegister(\n email: string,\n password: string,\n ): Promise<RemoteResult<QaAccountSession>>;\n accountsClaimSessions(\n token: string,\n sessionIds: readonly string[],\n ): Promise<RemoteResult<QaClaimResult>>;\n accountsOwnedSessions(\n token: string,\n ): Promise<RemoteResult<{ readonly ids: readonly string[] }>>;\n accountsListOwnership(\n token: string,\n ): Promise<RemoteResult<{ readonly entries: readonly QaOwnershipEntry[] }>>;\n}\n\n/** The assembled Client Remote plus this plugin's own qaSurface namespace. */\ntype QaClientRemote = ClientRemote & { readonly qaSurface: QaPolicyRemote };\n\nconst QA_WELCOME_SLOT_ID = \"welcome-notice\";\n\nfunction qaWelcomeStorageKey(config: ResolvedQaSurfaceConfig): string {\n return `${config.session.storageKey}:v1:${config.route.path}:welcome-notice`;\n}\n\nexport const inject = [\n \"slots\",\n \"sessions\",\n \"uiConversation\",\n \"connection\",\n \"settingsScope\",\n \"remote\",\n];\n\n/** Register the route-aware, full-frame QA entry in the additive overlay slot. */\nexport async function apply(ctx: Context): Promise<() => Promise<void>> {\n const remote = ctx.remote as QaClientRemote;\n const disposeRemote = await remote.$mount(qaSurfaceRemote);\n await ctx.inject(\n [\"remote.qaSurface\", \"remote.session\", \"remote.agentPresets\"],\n (remoteContext) => {\n const injectedRemote = remoteContext.remote as QaClientRemote;\n const policyRemote = injectedRemote.qaSurface;\n const secureSession: QaSecureSession = (token, sessionId) =>\n policyRemote.secureSession(token, sessionId);\n const qaApi: QaSessionsApi = {\n selectModel: (request) => injectedRemote.session.selectModel(request),\n selectAgentPreset: (agentId, agentPreset) =>\n injectedRemote.agentPresets.select(agentId, agentPreset),\n };\n const sourceApi: QaSourceApi = {\n sources: (token, sessionId) =>\n policyRemote.sources(token, sessionId) as unknown as ReturnType<\n QaSourceApi[\"sources\"]\n >,\n readSourceFile: (token, sessionId, sourcePath) =>\n policyRemote.readSourceFile(\n token,\n sessionId,\n sourcePath,\n ) as unknown as ReturnType<QaSourceApi[\"readSourceFile\"]>,\n };\n // The account gate rides its own remote; a stale token simply answers\n // \"not authenticated\" and the browser shows the login card.\n const accounts = new QaAccountsController({\n remote: policyRemote,\n storage: window.localStorage,\n config: () => config.getSnapshot().config,\n legacyChatIds: () => {\n // A standalone index view over the same prefix: reads the chat ids\n // this browser accumulated before accounts existed.\n const snapshot = config.getSnapshot().config;\n const index = new QaChatIndex(\n window.localStorage,\n `${snapshot.session.storageKey}:v1:${snapshot.route.path}`,\n );\n const ids = [...index.chatIds()];\n const active = index.activeId();\n if (active !== null && !ids.includes(active)) ids.push(active);\n return ids;\n },\n forgetChat: (sessionId) => {\n const snapshot = config.getSnapshot().config;\n new QaChatIndex(\n window.localStorage,\n `${snapshot.session.storageKey}:v1:${snapshot.route.path}`,\n ).forgetChat(sessionId);\n },\n });\n const route = new QaRouteController();\n const config = new QaConfigController(\n (ctx.settingsScope as SettingsScopeBinder).bind<QaSurfaceConfig>({\n namespace: SETTINGS_NAMESPACE,\n }),\n async () => {\n // Settings RPCs are loopback-pinned by the gateway, so a browser the\n // Host serves over the LAN reads the effective configuration here.\n const described = await policyRemote.describe();\n if (!described.ok) {\n throw new Error(\n `qaSurface/describe failed: ${described.error.code}`,\n );\n }\n // The generated self-remote resolves through the previous build's\n // declarations during an incremental source typecheck.\n return described.value as unknown as ResolvedQaSurfaceConfig;\n },\n );\n const syncRoute = () => {\n const snapshot = config.getSnapshot();\n route.configure(\n snapshot.config,\n snapshot.status === \"ready\" || snapshot.status === \"unavailable\",\n );\n };\n syncRoute();\n const unsubscribeConfig = config.subscribe(syncRoute);\n // After a Host restart an open page must re-read the deployment config,\n // or the next attestation compares its proof against a stale copy and\n // refuses. Loopback pages follow the settings mirror; this covers the\n // describe fallback (LAN browsers). Fires on every lost→restored\n // connection transition; while connected, ticks are ignored.\n let connectionUp = ctx.connection.generation.getSnapshot() !== undefined;\n const unsubscribeConnection = ctx.connection.generation.subscribe(() => {\n const connected = ctx.connection.generation.getSnapshot() !== undefined;\n if (connected && !connectionUp) {\n config.refreshFallback();\n // A boot-time whoami may have raced the lost connection; the\n // controller no-ops unless it is still in the checking stage.\n void accounts.start();\n }\n connectionUp = connected;\n });\n void accounts.start();\n\n // The stock DSH welcome notice cannot persist its acknowledgement for\n // non-loopback browsers. Shadow only its list-slot cell while the QA\n // route is selected; leaving /qa immediately restores the host entry.\n ctx.slots.inject(\"settings.onboarding\", () => {\n let removeEntry: (() => void) | undefined;\n let mountedKey: string | undefined;\n const reconcile = () => {\n const configSnapshot = config.getSnapshot().config;\n const routeSnapshot = route.getSnapshot();\n const active =\n configSnapshot.enabled &&\n matchesQaRoute(routeSnapshot.pathname, configSnapshot.route);\n const nextKey = active\n ? qaWelcomeStorageKey(configSnapshot)\n : undefined;\n if (nextKey === mountedKey) return;\n removeEntry?.();\n removeEntry = undefined;\n mountedKey = nextKey;\n if (nextKey === undefined) return;\n removeEntry = ctx.slots.register(\n {\n name: \"settings.onboarding\",\n id: QA_WELCOME_SLOT_ID,\n order: -100,\n priority: -1_000,\n inject: () => ({\n storage: window.localStorage,\n storageKey: nextKey,\n }),\n },\n QaWelcomeNoticeStep,\n );\n };\n reconcile();\n const unsubscribeRoute = route.subscribe(reconcile);\n const unsubscribeConfig = config.subscribe(reconcile);\n return () => {\n unsubscribeRoute();\n unsubscribeConfig();\n removeEntry?.();\n };\n });\n\n ctx.effect(() => {\n const style = document.createElement(\"style\");\n style.dataset.dshQaSurface = \"styles\";\n style.textContent = QA_SURFACE_STYLES;\n document.head.append(style);\n return () => style.remove();\n }, \"dsh-qa-surface: styles\");\n\n ctx.effect(\n () => () => {\n unsubscribeConfig();\n unsubscribeConnection();\n config.dispose();\n route.dispose();\n },\n \"dsh-qa-surface: controllers\",\n );\n\n ctx.slots.inject(\"shell.overlay\", () =>\n ctx.slots.register(\n {\n name: \"shell.overlay\",\n id: \"dsh-qa-surface\",\n order: -10_000,\n inject: () => ({\n route,\n config,\n // The host dsh-session merge types ctx.sessions as SessionStore in\n // this program; the client assembly provides the ISessions face.\n sessions: ctx.sessions as unknown as QaSessions,\n conversation: ctx.uiConversation,\n api: qaApi,\n connection: ctx.connection.generation,\n secureSession,\n sourceApi,\n accounts,\n }),\n },\n QaSurface,\n ),\n );\n },\n );\n return disposeRemote;\n}\n\nexport { QaConfigController } from \"./QaConfigController.js\";\nexport { QaAccountsController } from \"./QaAccountsController.js\";\nexport { QaRouteController, matchesQaRoute } from \"./QaRouteController.js\";\nexport { QaSessionController } from \"./QaSessionController.js\";\nexport { projectTranscript } from \"./QaTranscriptAdapter.js\";\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"mappings":"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"}
|