diff --git a/config/scripts/build/mobile-web-app/build-mobile-web-app-bundle.mjs b/config/scripts/build/mobile-web-app/build-mobile-web-app-bundle.mjs index 136f6b90eab..c27e14f9009 100644 --- a/config/scripts/build/mobile-web-app/build-mobile-web-app-bundle.mjs +++ b/config/scripts/build/mobile-web-app/build-mobile-web-app-bundle.mjs @@ -2,7 +2,7 @@ import { readFile } from 'node:fs/promises' import { readRouteSnapshot } from '../../mobile-web-app/mobile-web-app-route-snapshot.mjs' import { MOBILE_WEB_APP_DEPENDENCY_PATH } from '../../mobile-web-app/mobile-web-app-bundle-dependencies.mjs' import { existsSync, realpathSync } from 'node:fs' -import { basename, extname, join, resolve } from 'node:path' +import { basename, dirname, extname, join, resolve } from 'node:path' import { createRequire } from 'node:module' import { fileURLToPath } from 'node:url' import * as esbuild from 'esbuild' @@ -133,16 +133,61 @@ const HAIRLINE_PLUGIN_NAME = 'orca-hairline-device-pixel' const ENTRY_CHUNK_NAME = 'entry' +const ROUTE_MANIFEST_MODULE = /web-entry[\\/]route-manifest(\.ts)?$/ +const ROUTE_ENTRY_NAMESPACE = 'orca-route-entry' + +// The entry's static imports as written, minus the manifest: a route importing it would be an output cycle. +async function entryImportAnchors() { + const scan = await esbuild.build({ + entryPoints: [entryPoint], + write: false, + metafile: true, + outdir: 'scan', + logLevel: 'silent' + }) + const [{ imports }] = Object.values(scan.metafile.outputs) + return imports + .filter( + ({ kind, path }) => + kind === 'import-statement' && !ROUTE_MANIFEST_MODULE.test(join(dirname(entryPoint), path)) + ) + .map(({ path }) => `import ${JSON.stringify(path)}\n`) + .join('') +} + +const escapeRegExp = (text) => text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + // Keep typed route-manifest file for TS/Metro resolution; replace only its body for web. -function routeManifestPlugin(manifestSource) { +// Routes import the entry's imports first, so esbuild keeps those modules in one chunk instead of one per route subset. +function routeManifestPlugin(manifestSource, routes) { + let anchors return { name: ROUTE_MANIFEST_PLUGIN_NAME, setup(build) { - build.onLoad({ filter: /web-entry[\\/]route-manifest\.ts$/ }, () => ({ + build.onLoad({ filter: ROUTE_MANIFEST_MODULE }, () => ({ contents: manifestSource, loader: 'js', resolveDir: mobileDir })) + if (routes.length === 0) { + return + } + const routeImport = new RegExp( + `^(?:${routes.map(({ module }) => escapeRegExp(module)).join('|')})$` + ) + build.onResolve({ filter: routeImport }, (args) => + args.kind === 'dynamic-import' + ? { path: args.path, namespace: ROUTE_ENTRY_NAMESPACE } + : undefined + ) + build.onLoad({ filter: /.*/, namespace: ROUTE_ENTRY_NAMESPACE }, async (args) => { + anchors ??= entryImportAnchors() + return { + contents: `${await anchors}export { default } from ${JSON.stringify(args.path)}\n`, + loader: 'js', + resolveDir: dirname(entryPoint) + } + }) } } } @@ -220,7 +265,7 @@ export function mobileWebAppBuildOptions(routes) { zod: MOBILE_ZOD_PACKAGE }, plugins: [ - routeManifestPlugin(renderMobileWebAppRouteManifest(routes)), + routeManifestPlugin(renderMobileWebAppRouteManifest(routes), routes), lucideBarrelPlugin, hairlineDevicePixelPlugin ], @@ -399,10 +444,30 @@ function localeCatalogOutputs(metafile) { ) } +// esbuild keeps a whole namespace used as a value: `import { z }` or `z.core` ships ~200 KB of zod locale tables. +const ZOD_LOCALE_TABLE_INPUT = /\/zod\/v4\/locales\/(?!en\.js$)[^/]+$/ + +function assertNoZodLocaleTables(metafile) { + const leaked = Object.values(metafile.outputs).flatMap(({ inputs }) => + Object.entries(inputs) + .filter( + ([input, { bytesInOutput }]) => bytesInOutput > 0 && ZOD_LOCALE_TABLE_INPUT.test(input) + ) + .map(([input]) => input) + ) + if (leaked.length > 0) { + throw new Error( + `[build-mobile-web-app-bundle] ${String(leaked.length)} zod locale tables reached the page (${leaked[0]}, …); ` + + "use `import * as z from 'zod'`, and import nested namespaces like `z.core` directly" + ) + } +} + export async function bundleMobileWebApp({ appDir = defaultAppDir } = {}) { const routes = await collectMobileWebAppRoutes(appDir) await assertRoutesCarryNoSynchronousExports(routes) const result = await esbuild.build(mobileWebAppBuildOptions(routes)) + assertNoZodLocaleTables(result.metafile) const entryOutputPath = Object.keys(result.metafile.outputs).find( (path) => basename(path) === `${ENTRY_CHUNK_NAME}.js` ) diff --git a/config/scripts/build/mobile-web-app/verify-mobile-web-app-bundle.mjs b/config/scripts/build/mobile-web-app/verify-mobile-web-app-bundle.mjs index 0c0d43866c6..dfc3ebf5f84 100644 --- a/config/scripts/build/mobile-web-app/verify-mobile-web-app-bundle.mjs +++ b/config/scripts/build/mobile-web-app/verify-mobile-web-app-bundle.mjs @@ -32,7 +32,7 @@ export const MOBILE_WEB_APP_BUNDLE_MAX_CATALOG_BYTES = 3 * 1024 * 1024 // Our own fence on the page's code, well inside the phone contract (32 MiB total, 10 MiB per asset in // manifest-contract.ts); it fails the build before the code weighs more than any one asset may. -export const MOBILE_WEB_APP_BUNDLE_MAX_TOTAL_BYTES = 9.75 * 1024 * 1024 +export const MOBILE_WEB_APP_BUNDLE_MAX_TOTAL_BYTES = 9.5 * 1024 * 1024 // Only this licensed desktop-identical asset has its own allowance; other fonts (KaTeX's) and code count. export const MOBILE_WEB_APP_TERMINAL_FONT_MAX_BYTES = 1200 * 1024 @@ -55,22 +55,22 @@ export function mobileWebAppBundleBudgetBytes(manifest) { // Re-measure table when routes change; it is envelope’s only input, and pins must fail rather than permit arbitrary ceiling bumps. export const MOBILE_WEB_APP_BUNDLE_SCRIPT_SWEEP = [ ['./_layout.tsx', 4], - ['./h/[hostId]/[...page].tsx', 8], - ['./h/[hostId]/accounts.tsx', 12], - ['./h/[hostId]/agent-history/[worktreeId].tsx', 17], - ['./h/[hostId]/automations.tsx', 24], - ['./h/[hostId]/edit.tsx', 26], - ['./h/[hostId]/files/[worktreeId].tsx', 32], - ['./h/[hostId]/files/preview/[worktreeId].tsx', 42], - ['./h/[hostId]/history/[worktreeId].tsx', 45], - ['./h/[hostId]/index.tsx', 55], - ['./h/[hostId]/new-workspace.tsx', 67], - ['./h/[hostId]/pr/[worktreeId].tsx', 68], - ['./h/[hostId]/review/[worktreeId].tsx', 81], - ['./h/[hostId]/session/[worktreeId].tsx', 96], - ['./h/[hostId]/source-control/[worktreeId].tsx', 104], - ['./h/[hostId]/tasks.tsx', 117], - ['./h/_layout.tsx', 123] + ['./h/[hostId]/[...page].tsx', 6], + ['./h/[hostId]/accounts.tsx', 9], + ['./h/[hostId]/agent-history/[worktreeId].tsx', 12], + ['./h/[hostId]/automations.tsx', 17], + ['./h/[hostId]/edit.tsx', 19], + ['./h/[hostId]/files/[worktreeId].tsx', 25], + ['./h/[hostId]/files/preview/[worktreeId].tsx', 34], + ['./h/[hostId]/history/[worktreeId].tsx', 36], + ['./h/[hostId]/index.tsx', 45], + ['./h/[hostId]/new-workspace.tsx', 56], + ['./h/[hostId]/pr/[worktreeId].tsx', 57], + ['./h/[hostId]/review/[worktreeId].tsx', 69], + ['./h/[hostId]/session/[worktreeId].tsx', 83], + ['./h/[hostId]/source-control/[worktreeId].tsx', 90], + ['./h/[hostId]/tasks.tsx', 104], + ['./h/_layout.tsx', 108] ] const sweptScripts = MOBILE_WEB_APP_BUNDLE_SCRIPT_SWEEP.map(([, scripts]) => scripts) diff --git a/mobile/src/agent-history/agent-history-reply-schema.ts b/mobile/src/agent-history/agent-history-reply-schema.ts index b9cf9f848ab..7c098be34ed 100644 --- a/mobile/src/agent-history/agent-history-reply-schema.ts +++ b/mobile/src/agent-history/agent-history-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../src/shared/zod-salvage' // Schemas cover history/status and resume metadata from runtime RPC status, ai-vault, repo, folder-workspace and worktree-catalog methods; rows use shared AiVault types. diff --git a/mobile/src/automations/automation-operations.ts b/mobile/src/automations/automation-operations.ts index 227e9cdf3a8..54da5cc7246 100644 --- a/mobile/src/automations/automation-operations.ts +++ b/mobile/src/automations/automation-operations.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { TuiAgent } from '../../../src/shared/agent-launch/catalog/tui-agent' import { isTuiAgent } from '../../../src/shared/agent-launch/catalog/tui-agent-config' import { bindDeferredRpcOperation, defineRpcOperation } from '../transport/rpc-operation' diff --git a/mobile/src/automations/automation-reply-schema.ts b/mobile/src/automations/automation-reply-schema.ts index 07e814b41f6..d49d4fcd87f 100644 --- a/mobile/src/automations/automation-reply-schema.ts +++ b/mobile/src/automations/automation-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { normalizeExecutionHostId } from '../../../src/shared/execution-host' import { salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' diff --git a/mobile/src/automations/automation-run-agent.ts b/mobile/src/automations/automation-run-agent.ts index d69cbd44457..6ccdeeac124 100644 --- a/mobile/src/automations/automation-run-agent.ts +++ b/mobile/src/automations/automation-run-agent.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { normalizeVisibleExecutionHostIds, parseExecutionHostId, diff --git a/mobile/src/automations/automation-target-inventory.ts b/mobile/src/automations/automation-target-inventory.ts index 191b8cf13fc..da4505cb900 100644 --- a/mobile/src/automations/automation-target-inventory.ts +++ b/mobile/src/automations/automation-target-inventory.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { AutomationDraftValidationError } from './automation-error' import { getRepoMainWorktreeId } from '../../../src/shared/worktree/id' import { getRepoExecutionHostId, parseExecutionHostId } from '../../../src/shared/execution-host' diff --git a/mobile/src/browser/browser-command-reply-schema.ts b/mobile/src/browser/browser-command-reply-schema.ts index c6b4125a9dc..17986a497df 100644 --- a/mobile/src/browser/browser-command-reply-schema.ts +++ b/mobile/src/browser/browser-command-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../src/shared/zod-salvage' // Page command schemas mirror runtime browser-core and adjacent pointer/keyboard/dialog methods. diff --git a/mobile/src/components/accounts-snapshot.ts b/mobile/src/components/accounts-snapshot.ts index 2be2b132e64..48038d345b8 100644 --- a/mobile/src/components/accounts-snapshot.ts +++ b/mobile/src/components/accounts-snapshot.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { translate } from '../i18n/mobile-i18n' const TimestampSchema = z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER) diff --git a/mobile/src/components/codex-reset-credit-reply-schema.ts b/mobile/src/components/codex-reset-credit-reply-schema.ts index dc252fe193f..475982e0a0a 100644 --- a/mobile/src/components/codex-reset-credit-reply-schema.ts +++ b/mobile/src/components/codex-reset-credit-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../src/shared/zod-salvage' // Reset-credit schemas match runtime status.get and accounts.consumeCodexResetCredit handlers. diff --git a/mobile/src/components/new-workspace-reply-schema.ts b/mobile/src/components/new-workspace-reply-schema.ts index 67dfb4f9473..4a69cc51746 100644 --- a/mobile/src/components/new-workspace-reply-schema.ts +++ b/mobile/src/components/new-workspace-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { SetupRunPolicy } from '../../../src/shared/orca-yaml-hook-types' import { hostUnionArms, salvagedOptional, salvagingRecord } from '../../../src/shared/zod-salvage' diff --git a/mobile/src/dictation/dictation-reply-schema.ts b/mobile/src/dictation/dictation-reply-schema.ts index 7d4fafce2aa..f50061d06e6 100644 --- a/mobile/src/dictation/dictation-reply-schema.ts +++ b/mobile/src/dictation/dictation-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { RuntimeSpeechModelSummary } from '../../../src/shared/runtime-worktree-contracts' import { hostUnionArms, salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' diff --git a/mobile/src/files/file-explorer-reply-schema.ts b/mobile/src/files/file-explorer-reply-schema.ts index 49ae27e8606..a1d47c8c5b9 100644 --- a/mobile/src/files/file-explorer-reply-schema.ts +++ b/mobile/src/files/file-explorer-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' // Require an array because the cache sorts/walks it unguarded. Drop rows without name or isDirectory; salvage decorative isSymlink. diff --git a/mobile/src/files/file-ownership-reply-schema.ts b/mobile/src/files/file-ownership-reply-schema.ts index fb715f0c897..916fcff091f 100644 --- a/mobile/src/files/file-ownership-reply-schema.ts +++ b/mobile/src/files/file-ownership-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../src/shared/zod-salvage' // Ownership routes writes: unreadable routing members must fail, since salvaging them to absent could send a remote mutation locally. diff --git a/mobile/src/files/file-preview-reply-schema.ts b/mobile/src/files/file-preview-reply-schema.ts index c0bbde111f4..5b84f0268b7 100644 --- a/mobile/src/files/file-preview-reply-schema.ts +++ b/mobile/src/files/file-preview-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../src/shared/zod-salvage' // Require unguarded members, salvage typed guards to their existing fallbacks, and retain unknown for truthiness-only reads. diff --git a/mobile/src/files/file-tab-doc-reply-schema.ts b/mobile/src/files/file-tab-doc-reply-schema.ts index 57663e65b48..8a9ad61b634 100644 --- a/mobile/src/files/file-tab-doc-reply-schema.ts +++ b/mobile/src/files/file-tab-doc-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../src/shared/zod-salvage' // Tabs publish members directly into ready documents; their readers must be stricter than the preview screen’s guarded normalizers. diff --git a/mobile/src/files/mobile-file-media-download.ts b/mobile/src/files/mobile-file-media-download.ts index 2e07a632297..b6e29f98615 100644 --- a/mobile/src/files/mobile-file-media-download.ts +++ b/mobile/src/files/mobile-file-media-download.ts @@ -1,5 +1,5 @@ import { Buffer } from 'buffer/index.js' -import { z } from 'zod' +import * as z from 'zod' import { bindDeferredRpcOperation, defineRpcOperation } from '../transport/rpc-operation' import { rpcResultVariant } from '../transport/rpc-operation-result-reader' import type { MobileFilePreviewRpcSender } from './mobile-file-preview-operations' diff --git a/mobile/src/host-screen/host-screen-reply-schema.ts b/mobile/src/host-screen/host-screen-reply-schema.ts index 6e543225259..16db7bf8847 100644 --- a/mobile/src/host-screen/host-screen-reply-schema.ts +++ b/mobile/src/host-screen/host-screen-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { PersistedUIState } from '../../../src/shared/persisted-ui-state-types' import type { RepoIcon } from '../../../src/shared/repo-icon' import { hostUnionArms, salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' diff --git a/mobile/src/host-screen/host-sidebar-feed-operations.ts b/mobile/src/host-screen/host-sidebar-feed-operations.ts index 192e41756b7..8c961b20b0b 100644 --- a/mobile/src/host-screen/host-sidebar-feed-operations.ts +++ b/mobile/src/host-screen/host-sidebar-feed-operations.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { SidebarInputsReadResultSchema } from '../../../src/shared/sidebar-list/sidebar-inputs-feed-contract' import type { SidebarFeedTransport } from '../../../src/shared/sidebar-feed-client/sidebar-feed-reader' import { bindDeferredRpcOperation, defineRpcOperation } from '../transport/rpc-operation' diff --git a/mobile/src/mobile-web-shell/bridge/bridge-audio-verbs.ts b/mobile/src/mobile-web-shell/bridge/bridge-audio-verbs.ts index d6ed1082889..b6a9929b7b6 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-audio-verbs.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-audio-verbs.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { MAX_DICTATION_AUDIO_CHUNK_BYTES } from '../../../../src/shared/rpc-contract/speech-params' // The shell owns microphone PCM and its wake lock; the page owns dictation state/RPCs. Pull from the ring through existing request/reply rather than adding a push frame. diff --git a/mobile/src/mobile-web-shell/bridge/bridge-connection-snapshot.ts b/mobile/src/mobile-web-shell/bridge/bridge-connection-snapshot.ts index 2e370243c25..a07534795de 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-connection-snapshot.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-connection-snapshot.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../../src/shared/zod-salvage' import type { RelayHostReachability } from '../../transport/relay-host-reachability' import type { RpcClient } from '../../transport/rpc-client' diff --git a/mobile/src/mobile-web-shell/bridge/bridge-envelope.ts b/mobile/src/mobile-web-shell/bridge/bridge-envelope.ts index b296e76f228..ea4bac77b82 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-envelope.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-envelope.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../../src/shared/zod-salvage' import { SUPPORTED_UI_LOCALES } from '../../../../src/shared/ui-locale' import { NODE_PLATFORM_NAMES } from '../../transport/mobile-runtime-host-platform' diff --git a/mobile/src/mobile-web-shell/bridge/bridge-error-capture.ts b/mobile/src/mobile-web-shell/bridge/bridge-error-capture.ts index db0ae776b58..8dc96517c4d 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-error-capture.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-error-capture.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { isRpcDeliveryUnknown, markRpcDeliveryUnknown diff --git a/mobile/src/mobile-web-shell/bridge/bridge-fold-division.ts b/mobile/src/mobile-web-shell/bridge/bridge-fold-division.ts index aff88f55de6..bd710aee24d 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-fold-division.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-fold-division.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { BRIDGE_MAX_SAFE_AREA_INSET } from './bridge-safe-area-insets' const offsetSchema = z.number().finite().min(0).max(BRIDGE_MAX_SAFE_AREA_INSET) diff --git a/mobile/src/mobile-web-shell/bridge/bridge-frame-fields.ts b/mobile/src/mobile-web-shell/bridge/bridge-frame-fields.ts index 09e2c602577..9fea8193746 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-frame-fields.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-frame-fields.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { BRIDGE_MAX_METHOD_CHARS } from './bridge-caps' // Version gates incompatible shape; negotiate capabilities through grants. Drop unknown keys so independently updated desktop bundles and installed shells tolerate additive fields. diff --git a/mobile/src/mobile-web-shell/bridge/bridge-haptics-notify.ts b/mobile/src/mobile-web-shell/bridge/bridge-haptics-notify.ts index b5b9c862aa4..2800cedae71 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-haptics-notify.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-haptics-notify.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' // Use notify for haptics so frequent row taps cannot fill the 64-slot request window. The envelope owns v to avoid an import cycle. diff --git a/mobile/src/mobile-web-shell/bridge/bridge-image-verbs.ts b/mobile/src/mobile-web-shell/bridge/bridge-image-verbs.ts index 4ddef700a72..2d6265385e6 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-image-verbs.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-image-verbs.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { CLIPBOARD_IMAGE_MAX_SOURCE_BYTES } from '../../../../src/shared/clipboard-image' import { isKnownRasterImageMimeType } from '../../../../src/shared/raster-image-preview-limits' import { MOBILE_CLIPBOARD_IMAGE_UPLOAD_CHUNK_BASE64_CHARS } from '../../session/mobile-clipboard-image-upload-chunk' diff --git a/mobile/src/mobile-web-shell/bridge/bridge-init-route.ts b/mobile/src/mobile-web-shell/bridge/bridge-init-route.ts index 9eda113b95a..86d40079df3 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-init-route.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-init-route.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { BRIDGE_MAX_ROUTE_PARAM_CHARS, BRIDGE_MAX_ROUTE_PARAMS, diff --git a/mobile/src/mobile-web-shell/bridge/bridge-keyboard-inset.ts b/mobile/src/mobile-web-shell/bridge/bridge-keyboard-inset.ts index 05f8818dd5c..d822316c735 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-keyboard-inset.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-keyboard-inset.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { BRIDGE_MAX_SAFE_AREA_INSET } from './bridge-safe-area-insets' // Publish native keyboard height in page px (iOS from window bottom, Android above bars); the shell overlays IME so the page cannot measure it itself. diff --git a/mobile/src/mobile-web-shell/bridge/bridge-liveness-probe-notify.ts b/mobile/src/mobile-web-shell/bridge/bridge-liveness-probe-notify.ts index 722e1d4a6eb..691324718a6 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-liveness-probe-notify.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-liveness-probe-notify.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' // The page asks native for a decisive liveness probe when its replies stop coming. Older shells refuse the frame with a diagnostic only and keep the idle watchdog. export const BRIDGE_LIVENESS_PROBE_NOTIFY = 'liveness-probe' diff --git a/mobile/src/mobile-web-shell/bridge/bridge-media-verbs.ts b/mobile/src/mobile-web-shell/bridge/bridge-media-verbs.ts index efdf26adaa7..e2cd46a5649 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-media-verbs.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-media-verbs.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { CLIPBOARD_IMAGE_MAX_SOURCE_BYTES } from '../../../../src/shared/clipboard-image' import { MOBILE_CLIPBOARD_IMAGE_UPLOAD_CHUNK_BASE64_CHARS } from '../../session/mobile-clipboard-image-upload-chunk' diff --git a/mobile/src/mobile-web-shell/bridge/bridge-native-verbs.ts b/mobile/src/mobile-web-shell/bridge/bridge-native-verbs.ts index 4149ab152e1..07f94bf1eb9 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-native-verbs.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-native-verbs.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { audioReadParamsSchema, audioReadResultSchema, diff --git a/mobile/src/mobile-web-shell/bridge/bridge-notify-envelope.ts b/mobile/src/mobile-web-shell/bridge/bridge-notify-envelope.ts index 3f2f1fee6ee..41a23392ec7 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-notify-envelope.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-notify-envelope.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { BridgeErrorCaptureSchema } from './bridge-error-capture' import { BRIDGE_HAPTICS_NOTIFY_FIELDS } from './bridge-haptics-notify' import { BRIDGE_LIVENESS_PROBE_NOTIFY_FIELDS } from './bridge-liveness-probe-notify' diff --git a/mobile/src/mobile-web-shell/bridge/bridge-page-geometry.ts b/mobile/src/mobile-web-shell/bridge/bridge-page-geometry.ts index e73da86ceeb..77a5a9fa921 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-page-geometry.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-page-geometry.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { BRIDGE_MAX_SAFE_AREA_INSET } from './bridge-safe-area-insets' const coordinate = z.number().finite().min(0).max(BRIDGE_MAX_SAFE_AREA_INSET) diff --git a/mobile/src/mobile-web-shell/bridge/bridge-page-route-grants.ts b/mobile/src/mobile-web-shell/bridge/bridge-page-route-grants.ts index 8039f0c5517..f8f21047c08 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-page-route-grants.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-page-route-grants.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { MOBILE_WEB_BUNDLE_MAX_GRANTED_ROUTE_GRANTS, MobileWebBundleGrantNameSchema diff --git a/mobile/src/mobile-web-shell/bridge/bridge-safe-area-insets.ts b/mobile/src/mobile-web-shell/bridge/bridge-safe-area-insets.ts index 586b95a6366..c88fce7addb 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-safe-area-insets.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-safe-area-insets.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' export const BRIDGE_MAX_SAFE_AREA_INSET = 4096 diff --git a/mobile/src/mobile-web-shell/bridge/bridge-terminal-key.ts b/mobile/src/mobile-web-shell/bridge/bridge-terminal-key.ts index 8366e96878f..b320557a154 100644 --- a/mobile/src/mobile-web-shell/bridge/bridge-terminal-key.ts +++ b/mobile/src/mobile-web-shell/bridge/bridge-terminal-key.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' /** The iPhone Duo key rail: terminal keys the shell draws in a side inset strip for the page. */ diff --git a/mobile/src/mobile-web-shell/bridge/use-native-verbs.ts b/mobile/src/mobile-web-shell/bridge/use-native-verbs.ts index 176ef4f687a..f86c6ea51a8 100644 --- a/mobile/src/mobile-web-shell/bridge/use-native-verbs.ts +++ b/mobile/src/mobile-web-shell/bridge/use-native-verbs.ts @@ -1,5 +1,5 @@ import { useMemo } from 'react' -import { z } from 'zod' +import * as z from 'zod' import { usePageBridgeClient } from '../../transport/client-context.web' import { mediaNameResultSchema, diff --git a/mobile/src/session/clipboard-image-reply-schema.ts b/mobile/src/session/clipboard-image-reply-schema.ts index 218d66b46ba..ccbb5fa60d0 100644 --- a/mobile/src/session/clipboard-image-reply-schema.ts +++ b/mobile/src/session/clipboard-image-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' // Require uploadId because every append/commit/abort addresses that slot. export const clipboardImageUploadSlotSchema = z.looseObject({ uploadId: z.string() }) diff --git a/mobile/src/session/diff-review-reply-schema.ts b/mobile/src/session/diff-review-reply-schema.ts index 3c79567f0bb..b14cc96c58b 100644 --- a/mobile/src/session/diff-review-reply-schema.ts +++ b/mobile/src/session/diff-review-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' import type { MobileGitBranchCompareResult, diff --git a/mobile/src/session/github-pr-check-reply-schema.ts b/mobile/src/session/github-pr-check-reply-schema.ts index 0d04253f6a6..6489d1272a0 100644 --- a/mobile/src/session/github-pr-check-reply-schema.ts +++ b/mobile/src/session/github-pr-check-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' import type { PRCheckAnnotation, diff --git a/mobile/src/session/github-pr-entity-reply-schema.ts b/mobile/src/session/github-pr-entity-reply-schema.ts index a6bf7c541e9..af79cd89d25 100644 --- a/mobile/src/session/github-pr-entity-reply-schema.ts +++ b/mobile/src/session/github-pr-entity-reply-schema.ts @@ -1,5 +1,5 @@ import { normalizePRCheckHeadSha } from '../../../src/shared/github/pr-check-head' -import { z } from 'zod' +import * as z from 'zod' import { openEnum, salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' import type { GitHubReaction, PRComment } from '../../../src/shared/github/comment-types' import type { diff --git a/mobile/src/session/github-pr-mutation-reply-schema.ts b/mobile/src/session/github-pr-mutation-reply-schema.ts index fa42a9dcedd..da577e57b10 100644 --- a/mobile/src/session/github-pr-mutation-reply-schema.ts +++ b/mobile/src/session/github-pr-mutation-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' // No ok member means the host’s legacy unstructured success. export type GitHubPrMutationStatus = diff --git a/mobile/src/session/github-pr-read-reply-schema.ts b/mobile/src/session/github-pr-read-reply-schema.ts index 7e678b6fb99..34aa7ba3b15 100644 --- a/mobile/src/session/github-pr-read-reply-schema.ts +++ b/mobile/src/session/github-pr-read-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' import type { PRInfo } from '../../../src/shared/github/pull-request-types' import type { diff --git a/mobile/src/session/mobile-agent-message-terminal.ts b/mobile/src/session/mobile-agent-message-terminal.ts index 20803b0ed41..2d3517bc232 100644 --- a/mobile/src/session/mobile-agent-message-terminal.ts +++ b/mobile/src/session/mobile-agent-message-terminal.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { structuredSessionOpenFailure, type StructuredSessionOpenFailure diff --git a/mobile/src/session/mobile-agent-session-attachment-upload.ts b/mobile/src/session/mobile-agent-session-attachment-upload.ts index 9cf4d4ed8f2..051296dca63 100644 --- a/mobile/src/session/mobile-agent-session-attachment-upload.ts +++ b/mobile/src/session/mobile-agent-session-attachment-upload.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { agentSessionAttachmentAppends, base64DecodedByteLength, diff --git a/mobile/src/session/mobile-new-tab-folder-host-operations.ts b/mobile/src/session/mobile-new-tab-folder-host-operations.ts index cb89670b02c..628ec488f98 100644 --- a/mobile/src/session/mobile-new-tab-folder-host-operations.ts +++ b/mobile/src/session/mobile-new-tab-folder-host-operations.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { bindDeferredRpcOperation, defineRpcOperation } from '../transport/rpc-operation' import { rpcResultVariant } from '../transport/rpc-operation-result-reader' diff --git a/mobile/src/session/mobile-structured-session-open-rpc.ts b/mobile/src/session/mobile-structured-session-open-rpc.ts index b5612b4284e..77685f77e20 100644 --- a/mobile/src/session/mobile-structured-session-open-rpc.ts +++ b/mobile/src/session/mobile-structured-session-open-rpc.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { bindDeferredRpcOperation, defineRpcOperation } from '../transport/rpc-operation' import { rpcResultVariant } from '../transport/rpc-operation-result-reader' import type { RpcMethodName } from '../transport/rpc-params-contract' diff --git a/mobile/src/session/mobile-worker-auto-close.ts b/mobile/src/session/mobile-worker-auto-close.ts index 480ab0230b7..2daf591437b 100644 --- a/mobile/src/session/mobile-worker-auto-close.ts +++ b/mobile/src/session/mobile-worker-auto-close.ts @@ -1,5 +1,5 @@ import { useCallback, useEffect, useState, useSyncExternalStore } from 'react' -import { z } from 'zod' +import * as z from 'zod' import { Timer } from 'lucide-react-native' import type { ActionSheetAction } from '../components/ActionSheetModal' import { useMobileTranslation } from '../i18n/use-mobile-translation' diff --git a/mobile/src/session/native-chat/mobile-native-chat-item-read.ts b/mobile/src/session/native-chat/mobile-native-chat-item-read.ts index d237e99308d..d8cd00ac666 100644 --- a/mobile/src/session/native-chat/mobile-native-chat-item-read.ts +++ b/mobile/src/session/native-chat/mobile-native-chat-item-read.ts @@ -1,5 +1,5 @@ import { createContext, type ContextType } from 'react' -import { z } from 'zod' +import * as z from 'zod' import { isAdmissibleAgentJournalRenderItem } from '../../../../src/shared/agent-session/journal/agent-session-journal-schemas' import type { AgentJournalRenderItem } from '../../../../src/shared/agent-session/journal/agent-session-journal-types' import { bindDeferredRpcOperation, defineRpcOperation } from '../../transport/rpc-operation' diff --git a/mobile/src/session/native-chat/use-mobile-native-chat-markdown-links.ts b/mobile/src/session/native-chat/use-mobile-native-chat-markdown-links.ts index b197750b52b..6a2652f44d4 100644 --- a/mobile/src/session/native-chat/use-mobile-native-chat-markdown-links.ts +++ b/mobile/src/session/native-chat/use-mobile-native-chat-markdown-links.ts @@ -1,5 +1,5 @@ import { useEffect, useMemo, useState } from 'react' -import { z } from 'zod' +import * as z from 'zod' import { relativePathInsideRoot } from '../../../../src/shared/cross-platform-path' import { githubReferenceRepo, diff --git a/mobile/src/session/native-chat/visual/mobile-native-chat-visual-read.ts b/mobile/src/session/native-chat/visual/mobile-native-chat-visual-read.ts index a2289e1fd43..319c01d25bc 100644 --- a/mobile/src/session/native-chat/visual/mobile-native-chat-visual-read.ts +++ b/mobile/src/session/native-chat/visual/mobile-native-chat-visual-read.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { NATIVE_CHAT_VISUAL_MAX_BYTES } from '../../../../../src/shared/native-chat/native-chat-visual-directive' import { bindDeferredRpcOperation, defineRpcOperation } from '../../../transport/rpc-operation' import { rpcResultVariant } from '../../../transport/rpc-operation-result-reader' diff --git a/mobile/src/session/review-terminal-reply-schema.ts b/mobile/src/session/review-terminal-reply-schema.ts index 2deca3a4978..2c34a8fc267 100644 --- a/mobile/src/session/review-terminal-reply-schema.ts +++ b/mobile/src/session/review-terminal-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' import { AGENT_STATUS_STATES } from '../../../src/shared/agent-status/contracts/agent-status-types' import { isTuiAgent } from '../../../src/shared/agent-launch/catalog/tui-agent-config' diff --git a/mobile/src/session/session-launch-reply-schema.ts b/mobile/src/session/session-launch-reply-schema.ts index 1fbae414a7e..067ae724aa2 100644 --- a/mobile/src/session/session-launch-reply-schema.ts +++ b/mobile/src/session/session-launch-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../src/shared/zod-salvage' // Require an explicit opened verdict so malformed replies cannot masquerade as declined opens. diff --git a/mobile/src/session/session-read-reply-schema.ts b/mobile/src/session/session-read-reply-schema.ts index 155d3fb1a97..ba47520a9a6 100644 --- a/mobile/src/session/session-read-reply-schema.ts +++ b/mobile/src/session/session-read-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' import type { WorktreeDisplayNameSource } from './worktree-display-name' diff --git a/mobile/src/session/session-write-reply-schema.ts b/mobile/src/session/session-write-reply-schema.ts index 815b75920cc..d52075c5a00 100644 --- a/mobile/src/session/session-write-reply-schema.ts +++ b/mobile/src/session/session-write-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../src/shared/zod-salvage' // Unread bodies stay opaque; acceptance alone decides these mutations. diff --git a/mobile/src/session/use-mobile-native-chat-model-discovery.ts b/mobile/src/session/use-mobile-native-chat-model-discovery.ts index 3c4d5f14cb3..e146bdec421 100644 --- a/mobile/src/session/use-mobile-native-chat-model-discovery.ts +++ b/mobile/src/session/use-mobile-native-chat-model-discovery.ts @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react' -import { z } from 'zod' +import * as z from 'zod' import { getAgentSessionOptionCatalog } from '../../../src/shared/agent-session/options/agent-session-option-catalog' import type { CatalogModel } from '../../../src/shared/agent-session/options/agent-session-option-catalog-types' import { diff --git a/mobile/src/session/use-mobile-structured-session-commands.ts b/mobile/src/session/use-mobile-structured-session-commands.ts index 58ddb589b3f..8459e09afa9 100644 --- a/mobile/src/session/use-mobile-structured-session-commands.ts +++ b/mobile/src/session/use-mobile-structured-session-commands.ts @@ -1,6 +1,6 @@ import { startAgentSessionCommandMenuQuery } from '../../../src/shared/agent-session/agent-session-command-menu-query' import { useCallback, useEffect, useRef, useState } from 'react' -import { z } from 'zod' +import * as z from 'zod' import type { AgentSessionSlashCommand } from '../../../src/shared/agent-session/agent-session-wire' import type { RpcClient } from '../transport/rpc-client' import { bindDeferredRpcOperation, defineRpcOperation } from '../transport/rpc-operation' diff --git a/mobile/src/source-control/git-compare-reply-schema.ts b/mobile/src/source-control/git-compare-reply-schema.ts index b8c07b373f0..7763e9662fa 100644 --- a/mobile/src/source-control/git-compare-reply-schema.ts +++ b/mobile/src/source-control/git-compare-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { openEnum, salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' const GIT_BRANCH_CHANGE_STATUS = ['modified', 'added', 'deleted', 'renamed', 'copied'] as const diff --git a/mobile/src/source-control/git-history-reply-schema.ts b/mobile/src/source-control/git-history-reply-schema.ts index c30ac2c32e3..1caf05f6ad0 100644 --- a/mobile/src/source-control/git-history-reply-schema.ts +++ b/mobile/src/source-control/git-history-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' // Require only consumed fields so older hosts can omit unread history metadata. diff --git a/mobile/src/source-control/git-status-reply-schema.ts b/mobile/src/source-control/git-status-reply-schema.ts index e9cf1bd999c..327e9292261 100644 --- a/mobile/src/source-control/git-status-reply-schema.ts +++ b/mobile/src/source-control/git-status-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { openEnum, salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' // Require only unguarded consumer fields; unread host metadata must not become a compatibility gate. diff --git a/mobile/src/source-control/hosted-review-reply-schema.ts b/mobile/src/source-control/hosted-review-reply-schema.ts index c0bf6c1e90b..af643cd66ab 100644 --- a/mobile/src/source-control/hosted-review-reply-schema.ts +++ b/mobile/src/source-control/hosted-review-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../src/shared/zod-salvage' // Require provider for compose routing; preserve unknown tokens that newer hosts may publish. diff --git a/mobile/src/source-control/mobile-git-mutation-operations.ts b/mobile/src/source-control/mobile-git-mutation-operations.ts index eb27ca428b9..db16505b479 100644 --- a/mobile/src/source-control/mobile-git-mutation-operations.ts +++ b/mobile/src/source-control/mobile-git-mutation-operations.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { TextGenerationFailureFields } from '../../../src/shared/text-generation-failure-copy' import { bindDeferredRpcOperation, defineRpcOperation } from '../transport/rpc-operation' import { rpcResultVariant } from '../transport/rpc-operation-result-reader' diff --git a/mobile/src/source-control/mobile-git-read-operations.ts b/mobile/src/source-control/mobile-git-read-operations.ts index 5fc05bf0447..878bf1462be 100644 --- a/mobile/src/source-control/mobile-git-read-operations.ts +++ b/mobile/src/source-control/mobile-git-read-operations.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { bindDeferredRpcOperation, defineRpcOperation } from '../transport/rpc-operation' import type { RpcCompatibleReader } from '../transport/rpc-operation-contract' import { rpcResultVariant } from '../transport/rpc-operation-result-reader' diff --git a/mobile/src/source-control/mobile-repo-base-ref-operations.ts b/mobile/src/source-control/mobile-repo-base-ref-operations.ts index 3faf03b1714..367cbdb793a 100644 --- a/mobile/src/source-control/mobile-repo-base-ref-operations.ts +++ b/mobile/src/source-control/mobile-repo-base-ref-operations.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' import { bindDeferredRpcOperation, defineRpcOperation } from '../transport/rpc-operation' import { rpcResultVariant } from '../transport/rpc-operation-result-reader' diff --git a/mobile/src/source-control/mobile-source-file-open-operations.ts b/mobile/src/source-control/mobile-source-file-open-operations.ts index 98c45fd76e3..1e6e47f1282 100644 --- a/mobile/src/source-control/mobile-source-file-open-operations.ts +++ b/mobile/src/source-control/mobile-source-file-open-operations.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { bindDeferredRpcOperation, defineRpcOperation } from '../transport/rpc-operation' import { rpcResultVariant } from '../transport/rpc-operation-result-reader' diff --git a/mobile/src/source-control/mobile-worktree-metadata-operations.ts b/mobile/src/source-control/mobile-worktree-metadata-operations.ts index f8455241253..b001979507b 100644 --- a/mobile/src/source-control/mobile-worktree-metadata-operations.ts +++ b/mobile/src/source-control/mobile-worktree-metadata-operations.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { bindDeferredRpcOperation, defineRpcOperation } from '../transport/rpc-operation' import { rpcResultVariant } from '../transport/rpc-operation-result-reader' import type { GitPushTarget } from '../../../src/shared/worktree/types' diff --git a/mobile/src/source-control/worktree-metadata-reply-schema.ts b/mobile/src/source-control/worktree-metadata-reply-schema.ts index 78a7491d4f7..14c54f3ab74 100644 --- a/mobile/src/source-control/worktree-metadata-reply-schema.ts +++ b/mobile/src/source-control/worktree-metadata-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../src/shared/zod-salvage' // Base-ref and PR-link consumers fall back on absent hints; salvage those fields without requiring unrelated host metadata. diff --git a/mobile/src/tasks/jira-reply-schema.ts b/mobile/src/tasks/jira-reply-schema.ts index 0dafda73abb..39e62a4d169 100644 --- a/mobile/src/tasks/jira-reply-schema.ts +++ b/mobile/src/tasks/jira-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' // Required identity fields reject unusable rows; optional fields salvage older-host replies. diff --git a/mobile/src/tasks/mobile-workspace-create-operations.ts b/mobile/src/tasks/mobile-workspace-create-operations.ts index 0630b9987d9..87f94267a8b 100644 --- a/mobile/src/tasks/mobile-workspace-create-operations.ts +++ b/mobile/src/tasks/mobile-workspace-create-operations.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { isAgentLaunchResult, type AgentLaunchResult diff --git a/mobile/src/tasks/task-item-comment-reply-schema.ts b/mobile/src/tasks/task-item-comment-reply-schema.ts index 8b5d92bfc6d..b89cec6f7b4 100644 --- a/mobile/src/tasks/task-item-comment-reply-schema.ts +++ b/mobile/src/tasks/task-item-comment-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { prFlag, prText } from '../session/github-pr-entity-reply-schema' import { taskCommentWriteEnvelopeSchema } from './task-provider-entity-reply-schema' diff --git a/mobile/src/tasks/task-item-detail-reply-schema.ts b/mobile/src/tasks/task-item-detail-reply-schema.ts index c00fd87361f..96e29042121 100644 --- a/mobile/src/tasks/task-item-detail-reply-schema.ts +++ b/mobile/src/tasks/task-item-detail-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' import { CHECK_STATUS, diff --git a/mobile/src/tasks/task-item-state-reply-schema.ts b/mobile/src/tasks/task-item-state-reply-schema.ts index 0b5e60f6bd5..a6d91960c8d 100644 --- a/mobile/src/tasks/task-item-state-reply-schema.ts +++ b/mobile/src/tasks/task-item-state-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { prCount, prFlag, prText } from '../session/github-pr-entity-reply-schema' import { detailCheckListSchema, diff --git a/mobile/src/tasks/task-list-reply-schema.ts b/mobile/src/tasks/task-list-reply-schema.ts index 8c4fd53758f..3547c75498e 100644 --- a/mobile/src/tasks/task-list-reply-schema.ts +++ b/mobile/src/tasks/task-list-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' import { prFlag, prText } from '../session/github-pr-entity-reply-schema' import { taskMutationEnvelopeSchema } from './task-provider-entity-reply-schema' diff --git a/mobile/src/tasks/task-project-board-reply-schema.ts b/mobile/src/tasks/task-project-board-reply-schema.ts index c8fb7108fbe..ccd93186842 100644 --- a/mobile/src/tasks/task-project-board-reply-schema.ts +++ b/mobile/src/tasks/task-project-board-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { GitHubProjectOwnerType } from '../../../src/shared/github/project-types' import { hostUnionArms, salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' import { diff --git a/mobile/src/tasks/task-provider-entity-reply-schema.ts b/mobile/src/tasks/task-provider-entity-reply-schema.ts index 9495f4f636c..341db8719a4 100644 --- a/mobile/src/tasks/task-provider-entity-reply-schema.ts +++ b/mobile/src/tasks/task-provider-entity-reply-schema.ts @@ -1,5 +1,5 @@ import { normalizePRCheckHeadSha } from '../../../src/shared/github/pr-check-head' -import { z } from 'zod' +import * as z from 'zod' import type { GitHubPRFile } from '../../../src/shared/github/pull-request-types' import { hostUnionArms, salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' import { prCount, prFlag, prNullableText, prText } from '../session/github-pr-entity-reply-schema' diff --git a/mobile/src/tasks/task-runtime-reply-schema.ts b/mobile/src/tasks/task-runtime-reply-schema.ts index 18d7cfc9f70..2719e83634f 100644 --- a/mobile/src/tasks/task-runtime-reply-schema.ts +++ b/mobile/src/tasks/task-runtime-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' // Guarded capabilities may be absent; keep idempotency policy unknown for the caller’s distinct absent/null/object cases. diff --git a/mobile/src/tasks/task-source-search-reply-schema.ts b/mobile/src/tasks/task-source-search-reply-schema.ts index e4f8146b188..cce1009c577 100644 --- a/mobile/src/tasks/task-source-search-reply-schema.ts +++ b/mobile/src/tasks/task-source-search-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' import { linearIssueRowSchema } from './task-item-detail-reply-schema' diff --git a/mobile/src/tasks/workspace-create-reply-schema.ts b/mobile/src/tasks/workspace-create-reply-schema.ts index b6e3950c14d..c9278b11de3 100644 --- a/mobile/src/tasks/workspace-create-reply-schema.ts +++ b/mobile/src/tasks/workspace-create-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../src/shared/zod-salvage' const createText = (name: string) => salvagedOptional(name, z.string()) diff --git a/mobile/src/tasks/workspace-source-reply-schema.ts b/mobile/src/tasks/workspace-source-reply-schema.ts index 79ea1f902eb..7e6851faf90 100644 --- a/mobile/src/tasks/workspace-source-reply-schema.ts +++ b/mobile/src/tasks/workspace-source-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { openEnum, salvagedOptional, salvagingArray } from '../../../src/shared/zod-salvage' import { SSH_CONNECTION_STATUS } from '../transport/ssh-connection-status-arms' import { SETUP_RUN_POLICIES } from '../components/new-workspace-reply-schema' diff --git a/mobile/src/terminal/terminal-reply-schema.ts b/mobile/src/terminal/terminal-reply-schema.ts index 47d1f567c33..fc8027050cc 100644 --- a/mobile/src/terminal/terminal-reply-schema.ts +++ b/mobile/src/terminal/terminal-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../src/shared/zod-salvage' export const terminalComposerDraftSchema = z.looseObject({ diff --git a/mobile/src/transport/github-target-invocation.ts b/mobile/src/transport/github-target-invocation.ts index d6444c09d52..84c293476e4 100644 --- a/mobile/src/transport/github-target-invocation.ts +++ b/mobile/src/transport/github-target-invocation.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { bindDeferredRpcOperation, defineRpcOperation } from './rpc-operation' import { rpcResultVariant } from './rpc-operation-result-reader' import type { RpcClient, SendRequestOptions } from './rpc-client' diff --git a/mobile/src/transport/host-status-reply-schema.ts b/mobile/src/transport/host-status-reply-schema.ts index 4057fff99f5..fe72774a090 100644 --- a/mobile/src/transport/host-status-reply-schema.ts +++ b/mobile/src/transport/host-status-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../src/shared/zod-salvage' import { NODE_PLATFORM_NAMES } from './mobile-runtime-host-platform' import { HOST_MACHINE_KINDS } from '../../../src/shared/host-machine-line' diff --git a/mobile/src/transport/pr-check-observation-contract.ts b/mobile/src/transport/pr-check-observation-contract.ts index 1326fb17d81..0e6ca6ca783 100644 --- a/mobile/src/transport/pr-check-observation-contract.ts +++ b/mobile/src/transport/pr-check-observation-contract.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { RpcClient, SendRequestOptions } from './rpc-client' import type { RpcOperationSender } from './rpc-operation-sender' import { captureGitHubInvocation, supportsExactGitHubOperations } from './github-target-invocation' diff --git a/mobile/src/transport/rpc-envelope-fields.ts b/mobile/src/transport/rpc-envelope-fields.ts index a81897420d8..c12f05ac4d9 100644 --- a/mobile/src/transport/rpc-envelope-fields.ts +++ b/mobile/src/transport/rpc-envelope-fields.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { RpcRequest } from './types' // Pass added top-level host fields through unchanged so new fields need no mobile binary update. diff --git a/mobile/src/transport/rpc-operation-result-reader.ts b/mobile/src/transport/rpc-operation-result-reader.ts index c61b5389408..ca1bc1f4b4a 100644 --- a/mobile/src/transport/rpc-operation-result-reader.ts +++ b/mobile/src/transport/rpc-operation-result-reader.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import type * as z from 'zod' import { collectSalvageDrops } from '../../../src/shared/zod-salvage' import type { RpcCompatibleReader, RpcDecodeIssue } from './rpc-operation-contract' diff --git a/mobile/src/worktree/project-sections-operations.ts b/mobile/src/worktree/project-sections-operations.ts index 746b044ef71..873f49056d3 100644 --- a/mobile/src/worktree/project-sections-operations.ts +++ b/mobile/src/worktree/project-sections-operations.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { MOBILE_PROJECT_SECTIONS_METHOD } from '../../../src/shared/mobile-project-sections-contract' import { ProjectGroupSchema, diff --git a/mobile/src/worktree/server-workspace-operations.ts b/mobile/src/worktree/server-workspace-operations.ts index 00642aea8c4..c7bd8c9705c 100644 --- a/mobile/src/worktree/server-workspace-operations.ts +++ b/mobile/src/worktree/server-workspace-operations.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { ExecutionHostHealth } from '../../../src/shared/execution-host-health' import { parseExecutionHostId } from '../../../src/shared/execution-host' import { diff --git a/mobile/src/worktree/server-workspaces.ts b/mobile/src/worktree/server-workspaces.ts index c0270d162b3..6ffe32a9b08 100644 --- a/mobile/src/worktree/server-workspaces.ts +++ b/mobile/src/worktree/server-workspaces.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { ExecutionHostId } from '../../../src/shared/execution-host' import type { ExecutionHostHealth } from '../../../src/shared/execution-host-health' import type { MobileRelayHost } from '../../../src/shared/remote-runtime/relay/mobile-relay-hosts-contract' diff --git a/mobile/src/worktree/worktree-catalog-reply-schema.ts b/mobile/src/worktree/worktree-catalog-reply-schema.ts index 34381dfc014..f226ff72641 100644 --- a/mobile/src/worktree/worktree-catalog-reply-schema.ts +++ b/mobile/src/worktree/worktree-catalog-reply-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { salvagedOptional } from '../../../src/shared/zod-salvage' // Accept unchanged polls without worktrees; consumers validate their own row projections. diff --git a/mobile/src/worktree/worktree-catalog-snapshot-client.ts b/mobile/src/worktree/worktree-catalog-snapshot-client.ts index 265a02e20eb..93a1de543c8 100644 --- a/mobile/src/worktree/worktree-catalog-snapshot-client.ts +++ b/mobile/src/worktree/worktree-catalog-snapshot-client.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { RpcClient } from '../transport/rpc-client' import type { Worktree } from './workspace-list-sections' import { worktreeCatalogRead } from './worktree-catalog-operations' diff --git a/src/shared/agent-launch/startup/agent-launch-account-env.ts b/src/shared/agent-launch/startup/agent-launch-account-env.ts index 69b00513408..c06b0ab448f 100644 --- a/src/shared/agent-launch/startup/agent-launch-account-env.ts +++ b/src/shared/agent-launch/startup/agent-launch-account-env.ts @@ -1,6 +1,6 @@ /** Desktop account routing for terminal agents on WSL orcad hosts without account services: four variables, absolute POSIX paths (the shell pointer may use ~/). Structured-session homes remain host-derived. */ -import { z } from 'zod' +import * as z from 'zod' import { CLAUDE_INJECTED_CONFIG_DIR_ENV, CLAUDE_PROFILE_POINTER_ENV diff --git a/src/shared/agent-session/agent-session-context-usage-schema.ts b/src/shared/agent-session/agent-session-context-usage-schema.ts index 240bce98820..75648c43471 100644 --- a/src/shared/agent-session/agent-session-context-usage-schema.ts +++ b/src/shared/agent-session/agent-session-context-usage-schema.ts @@ -1,6 +1,6 @@ // Bound replayed context facts to what live writers can produce. -import { z } from 'zod' +import * as z from 'zod' import { MAX_CONTEXT_CATEGORIES, MAX_CONTEXT_CATEGORY_NAME_CHARS, diff --git a/src/shared/agent-session/agent-session-message-source.ts b/src/shared/agent-session/agent-session-message-source.ts index b5cd276e2a7..f825e9eb142 100644 --- a/src/shared/agent-session/agent-session-message-source.ts +++ b/src/shared/agent-session/agent-session-message-source.ts @@ -1,6 +1,6 @@ // Agent-origin messages carry from outside fingerprints; absence identifies the person at the composer. -import { z } from 'zod' +import * as z from 'zod' import { normalizeAgentSessionConversationName } from './agent-session-conversation-name' import { isOrcaSessionId, type OrcaSessionId } from '../orca-session-address' import type { OrchestrationPartyIdentity } from '../orchestration-party-identity' diff --git a/src/shared/agent-session/agent-session-registered-agents.ts b/src/shared/agent-session/agent-session-registered-agents.ts index 13ccdb1e53e..071c0977929 100644 --- a/src/shared/agent-session/agent-session-registered-agents.ts +++ b/src/shared/agent-session/agent-session-registered-agents.ts @@ -1,6 +1,6 @@ /** Advertised agentSession.agents lists registered agents/capabilities before sessions exist. Drop unreadable rows individually; unknown capability arms degrade to the least authority. */ -import { z } from 'zod' +import * as z from 'zod' import type { AgentSessionCapabilities } from './agent-session-capabilities' import { isStructuredAgentId } from './lifecycle/agent-session-provider-handle-encoding' import { openEnum } from '../zod-salvage' diff --git a/src/shared/agent-session/failures/agent-session-failure-fact-schema.ts b/src/shared/agent-session/failures/agent-session-failure-fact-schema.ts index 44c21f7510c..b8a7eb5acfd 100644 --- a/src/shared/agent-session/failures/agent-session-failure-fact-schema.ts +++ b/src/shared/agent-session/failures/agent-session-failure-fact-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' /** Keep newer kinds/audiences/refusal details readable like row state; the fact reader drops anything it cannot place. */ export const AgentSessionFailureFactSchema = z.object({ diff --git a/src/shared/agent-session/journal/agent-session-journal-open-union.ts b/src/shared/agent-session/journal/agent-session-journal-open-union.ts index d6d00142284..7f96b026023 100644 --- a/src/shared/agent-session/journal/agent-session-journal-open-union.ts +++ b/src/shared/agent-session/journal/agent-session-journal-open-union.ts @@ -1,6 +1,6 @@ // Preserve unknown journal union tags so newer bodies/blocks/goals/approval subjects remain readable. -import { z } from 'zod' +import * as z from 'zod' /** A tag a newer build could have written: a string with something other than whitespace in it. */ export function isJournalTag(value: unknown): value is string { diff --git a/src/shared/agent-session/journal/agent-session-journal-schemas.ts b/src/shared/agent-session/journal/agent-session-journal-schemas.ts index 2246305d1a4..0538c3616b3 100644 --- a/src/shared/agent-session/journal/agent-session-journal-schemas.ts +++ b/src/shared/agent-session/journal/agent-session-journal-schemas.ts @@ -5,7 +5,7 @@ // Older rewind replaces unknown turn/tool/resolution states with placeholders and blocks with raw-JSON text, retaining unknown bodies. // History pages lack row v: extensions must also remain safe for older clients. -import { z } from 'zod' +import * as z from 'zod' import { AgentSessionContextUsageSchema } from '../agent-session-context-usage-schema' import { AgentJournalThreadGoalStateSchema } from './agent-session-journal-thread-goal-schema' import { AgentSessionFailureFactSchema } from '../failures/agent-session-failure-fact-schema' diff --git a/src/shared/agent-session/journal/agent-session-journal-thread-goal-schema.ts b/src/shared/agent-session/journal/agent-session-journal-thread-goal-schema.ts index af86675fa0d..d8519aa646c 100644 --- a/src/shared/agent-session/journal/agent-session-journal-thread-goal-schema.ts +++ b/src/shared/agent-session/journal/agent-session-journal-thread-goal-schema.ts @@ -1,6 +1,6 @@ // The journal's thread-goal transition, validated as deeply as the rest of the render model. -import { z } from 'zod' +import * as z from 'zod' import { openDiscriminatedUnion } from './agent-session-journal-open-union' const ThreadGoal = z.object({ diff --git a/src/shared/agent-session/lifecycle/agent-session-rewind.ts b/src/shared/agent-session/lifecycle/agent-session-rewind.ts index c2ec0a0cbe3..8723d01faf4 100644 --- a/src/shared/agent-session/lifecycle/agent-session-rewind.ts +++ b/src/shared/agent-session/lifecycle/agent-session-rewind.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { AgentJournalItemBodySchema, AgentJournalProducerLinkageFields, diff --git a/src/shared/agent-session/options/agent-session-execution-options.ts b/src/shared/agent-session/options/agent-session-execution-options.ts index 1983618ed65..62dbf26826d 100644 --- a/src/shared/agent-session/options/agent-session-execution-options.ts +++ b/src/shared/agent-session/options/agent-session-execution-options.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' /** Freeze choices on acceptance; permission stays a launch setting. Strip unknown keys from free-form send/saved options. */ export const AgentSessionExecutionOptionsSchema = z.object({ diff --git a/src/shared/attachment-text-source.ts b/src/shared/attachment-text-source.ts index b32fa36d638..188228aeabc 100644 --- a/src/shared/attachment-text-source.ts +++ b/src/shared/attachment-text-source.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { attachmentTextSegments } from './attachment-text-segments' export { attachmentTextSegments } from './attachment-text-segments' import { waitForPromiseWithSignal } from './abort-signal-reason' diff --git a/src/shared/browser/client-hosting/browser-expected-url.ts b/src/shared/browser/client-hosting/browser-expected-url.ts index a9bc797b7d1..101d6555ae0 100644 --- a/src/shared/browser/client-hosting/browser-expected-url.ts +++ b/src/shared/browser/client-hosting/browser-expected-url.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' export const BROWSER_EXPECTED_URL_MISMATCH_CODE = 'browser_expected_url_mismatch' export const BROWSER_EXPECT_URL_UNSUPPORTED_CODE = 'browser_expect_url_unsupported' diff --git a/src/shared/codex-reset-credit-attempt-ledger.ts b/src/shared/codex-reset-credit-attempt-ledger.ts index ef1cf145b45..2eec8c481f3 100644 --- a/src/shared/codex-reset-credit-attempt-ledger.ts +++ b/src/shared/codex-reset-credit-attempt-ledger.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { CodexRateLimitResetOutcome } from './rate-limit-types' import type { CodexResetCreditExpectedScope } from './codex-reset-credit-scope' diff --git a/src/shared/delegated-mobile-device-contract.ts b/src/shared/delegated-mobile-device-contract.ts index b33e426512e..6e7371ff8f9 100644 --- a/src/shared/delegated-mobile-device-contract.ts +++ b/src/shared/delegated-mobile-device-contract.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' // Why: a paired desktop relays each of its phones to this host as an ordinary phone device it owns. export const DELEGATED_MOBILE_DEVICE_SYNC_METHOD = 'pairing.delegatedMobileDevice.sync' diff --git a/src/shared/diff-comment-schema.ts b/src/shared/diff-comment-schema.ts index 873f5d793b7..d97dcaf0bdc 100644 --- a/src/shared/diff-comment-schema.ts +++ b/src/shared/diff-comment-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' export const MobileDiffReviewSchema = z.object({ version: z.literal(1), diff --git a/src/shared/mobile-web-bundle/manifest-contract.ts b/src/shared/mobile-web-bundle/manifest-contract.ts index e6f32433f42..3ad8d541570 100644 --- a/src/shared/mobile-web-bundle/manifest-contract.ts +++ b/src/shared/mobile-web-bundle/manifest-contract.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { sha256 } from '../sha256' /** A reader that sees another value must reject rather than guess at the shape. */ diff --git a/src/shared/project-section-catalog-schema.ts b/src/shared/project-section-catalog-schema.ts index d4d06d9e9b9..0908eb99f0f 100644 --- a/src/shared/project-section-catalog-schema.ts +++ b/src/shared/project-section-catalog-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { normalizeExecutionHostId } from './execution-host' import type { ProjectHostSetupMethod } from './project-types' import type { ProjectGroup, ProjectGroupCreatedFrom } from './project-group-types' diff --git a/src/shared/remote-runtime/host-status/runtime-host-descriptor.ts b/src/shared/remote-runtime/host-status/runtime-host-descriptor.ts index 6ae87ec59f4..91be41df104 100644 --- a/src/shared/remote-runtime/host-status/runtime-host-descriptor.ts +++ b/src/shared/remote-runtime/host-status/runtime-host-descriptor.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' /** installationId persists per profile; HMAC machineBinding hints at moved/copied profiles and is never identity alone. */ export const RuntimeHostDescriptorSchema = z.object({ diff --git a/src/shared/remote-runtime/pairing/mobile-relay-pairing-offer.ts b/src/shared/remote-runtime/pairing/mobile-relay-pairing-offer.ts index 56216335998..40da6775523 100644 --- a/src/shared/remote-runtime/pairing/mobile-relay-pairing-offer.ts +++ b/src/shared/remote-runtime/pairing/mobile-relay-pairing-offer.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { PAIRING_DEVICE_TOKEN_MAX_CHARACTERS, PAIRING_ENDPOINT_MAX_CHARACTERS, diff --git a/src/shared/remote-runtime/relay/mobile-relay-hosts-contract.ts b/src/shared/remote-runtime/relay/mobile-relay-hosts-contract.ts index 81bb020c294..c4eb4812e52 100644 --- a/src/shared/remote-runtime/relay/mobile-relay-hosts-contract.ts +++ b/src/shared/remote-runtime/relay/mobile-relay-hosts-contract.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { ExecutionHostHealth } from '../../execution-host-health' // Why: both are answered by the paired desktop itself; the phone lists servers the desktop shows. diff --git a/src/shared/rpc-contract/agent-launch-settings-params.ts b/src/shared/rpc-contract/agent-launch-settings-params.ts index 5232d55c43e..c23582f532d 100644 --- a/src/shared/rpc-contract/agent-launch-settings-params.ts +++ b/src/shared/rpc-contract/agent-launch-settings-params.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { isTuiAgent } from '../agent-launch/catalog/tui-agent-config' import { AGENT_PERMISSION_CHOICES } from '../agent-launch/permissions/tui-agent-permission-choice' import type { TuiAgent } from '../agent-launch/catalog/tui-agent' diff --git a/src/shared/rpc-contract/agent-session-params.ts b/src/shared/rpc-contract/agent-session-params.ts index 66e709f2d5f..0e1fd2acb85 100644 --- a/src/shared/rpc-contract/agent-session-params.ts +++ b/src/shared/rpc-contract/agent-session-params.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { isValidTerminalTabId } from '../workspace-layout/terminal-tab-id' import { RESUMABLE_TUI_AGENTS, diff --git a/src/shared/rpc-contract/automation-params.ts b/src/shared/rpc-contract/automation-params.ts index d1384469a10..61344cf86eb 100644 --- a/src/shared/rpc-contract/automation-params.ts +++ b/src/shared/rpc-contract/automation-params.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { ChoicePatch, OptionKey } from './agent-launch-settings-params' import { AGENT_PERMISSION_CHOICES } from '../agent-launch/permissions/tui-agent-permission-choice' import { isTuiAgent } from '../agent-launch/catalog/tui-agent-config' diff --git a/src/shared/rpc-contract/cross-store-parent-params.ts b/src/shared/rpc-contract/cross-store-parent-params.ts index 468c2427d14..9bba668e61c 100644 --- a/src/shared/rpc-contract/cross-store-parent-params.ts +++ b/src/shared/rpc-contract/cross-store-parent-params.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { isWorkspaceKey } from '../workspace-scope' import type { CrossStoreParentRef } from '../worktree/lineage-types' diff --git a/src/shared/rpc-contract/rpc-param-primitives.ts b/src/shared/rpc-contract/rpc-param-primitives.ts index a9ee6d2b5e7..ddbf7306a0e 100644 --- a/src/shared/rpc-contract/rpc-param-primitives.ts +++ b/src/shared/rpc-contract/rpc-param-primitives.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { isAbsoluteBrowserUrl } from '../browser/client-hosting/browser-expected-url' import { memoizeStringResult } from '../string-result-cache' diff --git a/src/shared/rpc-contract/speech-params.ts b/src/shared/rpc-contract/speech-params.ts index e73d653ed11..df5ba2a9a8c 100644 --- a/src/shared/rpc-contract/speech-params.ts +++ b/src/shared/rpc-contract/speech-params.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { OptionalString, requiredString } from './rpc-param-primitives' export const AUDIO_BASE64_PATTERN = /^[A-Za-z0-9+/]*={0,2}$/ diff --git a/src/shared/rpc-contract/structured-agent-session-create-tab-params.ts b/src/shared/rpc-contract/structured-agent-session-create-tab-params.ts index a156cf1e022..e9e2b223f00 100644 --- a/src/shared/rpc-contract/structured-agent-session-create-tab-params.ts +++ b/src/shared/rpc-contract/structured-agent-session-create-tab-params.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { isAgentSessionSurfaceTabId } from '../agent-session/view/agent-session-surface-tab-id' import { Identifier } from './structured-agent-session-identifiers' diff --git a/src/shared/rpc-contract/structured-agent-session-identifiers.ts b/src/shared/rpc-contract/structured-agent-session-identifiers.ts index 470f9f3f4b6..0ef257ab305 100644 --- a/src/shared/rpc-contract/structured-agent-session-identifiers.ts +++ b/src/shared/rpc-contract/structured-agent-session-identifiers.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { isAgentSessionId } from '../agent-session/lifecycle/agent-session-record' import { AGENT_SESSION_ID_MAX_LENGTH } from '../agent-session/agent-session-wire' diff --git a/src/shared/rpc-contract/structured-agent-session-message-params.ts b/src/shared/rpc-contract/structured-agent-session-message-params.ts index a6607dc12c4..d08c319d851 100644 --- a/src/shared/rpc-contract/structured-agent-session-message-params.ts +++ b/src/shared/rpc-contract/structured-agent-session-message-params.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { isAgentSessionOptions } from '../agent-session/lifecycle/agent-session-record' import { measureUtf8ByteLength } from '../utf8-byte-limits' diff --git a/src/shared/rpc-contract/structured-agent-session-mutation-envelope.ts b/src/shared/rpc-contract/structured-agent-session-mutation-envelope.ts index 412b0e62377..1340f9c867d 100644 --- a/src/shared/rpc-contract/structured-agent-session-mutation-envelope.ts +++ b/src/shared/rpc-contract/structured-agent-session-mutation-envelope.ts @@ -1,5 +1,5 @@ import { Identifier, SessionId } from './structured-agent-session-identifiers' -import { z } from 'zod' +import * as z from 'zod' export const MutationEnvelope = z .object({ diff --git a/src/shared/rpc-contract/structured-agent-session-params.ts b/src/shared/rpc-contract/structured-agent-session-params.ts index cc38e5354eb..463701398a6 100644 --- a/src/shared/rpc-contract/structured-agent-session-params.ts +++ b/src/shared/rpc-contract/structured-agent-session-params.ts @@ -12,7 +12,7 @@ import { MAX_ID_LENGTH, SessionId } from './structured-agent-session-identifiers' -import { z } from 'zod' +import * as z from 'zod' import { CREATE_TAB_FIELDS } from './structured-agent-session-create-tab-params' import { isStructuredAgentId } from '../agent-session/lifecycle/agent-session-provider-handle-encoding' import { normalizeExecutionHostId } from '../execution-host' diff --git a/src/shared/rpc-contract/structured-agent-session-question-params.ts b/src/shared/rpc-contract/structured-agent-session-question-params.ts index 48992576bdc..850cf4443cf 100644 --- a/src/shared/rpc-contract/structured-agent-session-question-params.ts +++ b/src/shared/rpc-contract/structured-agent-session-question-params.ts @@ -1,6 +1,6 @@ import { MAX_PROMPT_BYTES } from './structured-agent-session-message-params' import { Identifier } from './structured-agent-session-identifiers' -import { z } from 'zod' +import * as z from 'zod' import { AGENT_SESSION_QUESTION_ANSWER_MAX_BYTES, AGENT_SESSION_RESPONSE_OPTION_ID_MAX_LENGTH as MAX_RESPONSE_OPTION_ID_LENGTH diff --git a/src/shared/rpc-contract/structured-agent-session-resume-params.ts b/src/shared/rpc-contract/structured-agent-session-resume-params.ts index 253e2e94080..47a5c041830 100644 --- a/src/shared/rpc-contract/structured-agent-session-resume-params.ts +++ b/src/shared/rpc-contract/structured-agent-session-resume-params.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { Identifier, SessionId } from './structured-agent-session-identifiers' /** Identity only: derive transcript/account paths host-side so clients cannot choose imported files or credential directories. */ diff --git a/src/shared/rpc-contract/terminal-unary-params.ts b/src/shared/rpc-contract/terminal-unary-params.ts index 4a703d28f37..48e10f505cd 100644 --- a/src/shared/rpc-contract/terminal-unary-params.ts +++ b/src/shared/rpc-contract/terminal-unary-params.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { TERMINAL_KITTY_FILE_MAX_BYTES } from '../terminal/images/terminal-kitty-file' import { OptionalFiniteNumber, OptionalString, requiredString } from './rpc-param-primitives' import { isTuiAgent } from '../agent-launch/catalog/tui-agent-config' diff --git a/src/shared/rpc-contract/worktree-params.ts b/src/shared/rpc-contract/worktree-params.ts index 057f57b0fbf..500144e9071 100644 --- a/src/shared/rpc-contract/worktree-params.ts +++ b/src/shared/rpc-contract/worktree-params.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { normalizeExecutionHostId } from '../execution-host' import { CLIENT_PROVENANCE_SNAPSHOT_MAX } from '../automation-workspace-provenance' import { isTuiAgent } from '../agent-launch/catalog/tui-agent-config' diff --git a/src/shared/sidebar-list/desktop-sidebar-facts.ts b/src/shared/sidebar-list/desktop-sidebar-facts.ts index f3ff4e92d84..de59b4178ac 100644 --- a/src/shared/sidebar-list/desktop-sidebar-facts.ts +++ b/src/shared/sidebar-list/desktop-sidebar-facts.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' /** Host-owned sidebar facts use ExecutionHostId spellings and each row’s own workspace ID. */ export const DesktopSidebarFactsSchema = z.object({ diff --git a/src/shared/sidebar-list/paired-server-rows.ts b/src/shared/sidebar-list/paired-server-rows.ts index 38c20437bff..1585091a8f7 100644 --- a/src/shared/sidebar-list/paired-server-rows.ts +++ b/src/shared/sidebar-list/paired-server-rows.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { getRepoExecutionHostId, parseExecutionHostId, diff --git a/src/shared/sidebar-list/repo-icon-data-urls-contract.ts b/src/shared/sidebar-list/repo-icon-data-urls-contract.ts index f73cabba803..af689ff5192 100644 --- a/src/shared/sidebar-list/repo-icon-data-urls-contract.ts +++ b/src/shared/sidebar-list/repo-icon-data-urls-contract.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { getRepoExecutionHostId } from '../execution-host' import type { Repo } from '../repo-types' diff --git a/src/shared/sidebar-list/sidebar-feed-domains.ts b/src/shared/sidebar-list/sidebar-feed-domains.ts index 3e1e56d96c5..9f94f9ccc12 100644 --- a/src/shared/sidebar-list/sidebar-feed-domains.ts +++ b/src/shared/sidebar-list/sidebar-feed-domains.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { DesktopSidebarFactsSchema, type DesktopSidebarFacts } from './desktop-sidebar-facts' import type { InstalledSidebarInputs } from './sidebar-inputs-feed-installer' import { diff --git a/src/shared/sidebar-list/sidebar-inputs-feed-contract.ts b/src/shared/sidebar-list/sidebar-inputs-feed-contract.ts index 30a7beee385..2589f9fa5da 100644 --- a/src/shared/sidebar-list/sidebar-inputs-feed-contract.ts +++ b/src/shared/sidebar-list/sidebar-inputs-feed-contract.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { openEnum } from '../zod-salvage' /** The reply's shape; an added optional field keeps it. */ diff --git a/src/shared/sidebar-list/sidebar-temporal-snapshot.ts b/src/shared/sidebar-list/sidebar-temporal-snapshot.ts index e92cb31423f..a0e39ff17d6 100644 --- a/src/shared/sidebar-list/sidebar-temporal-snapshot.ts +++ b/src/shared/sidebar-list/sidebar-temporal-snapshot.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' /** Workspaces "Hide sleeping" keeps through a rebind gap; null while sleeping ones are shown. */ const RetentionSchema = z.object({ diff --git a/src/shared/sidebar-list/workspace-activity-facts.ts b/src/shared/sidebar-list/workspace-activity-facts.ts index 0e17fbf92b2..e227ab435a5 100644 --- a/src/shared/sidebar-list/workspace-activity-facts.ts +++ b/src/shared/sidebar-list/workspace-activity-facts.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { AgentStatusEntry } from '../agent-status/contracts/agent-status-types' import { parseWorktreeHostIdentity, diff --git a/src/shared/sidebar-list/workspace-creations.ts b/src/shared/sidebar-list/workspace-creations.ts index 3f91f616f80..fcdfc94e5b6 100644 --- a/src/shared/sidebar-list/workspace-creations.ts +++ b/src/shared/sidebar-list/workspace-creations.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' const WorkspaceCreationSchema = z.object({ repoId: z.string(), diff --git a/src/shared/sidebar-list/workspace-review-facts.ts b/src/shared/sidebar-list/workspace-review-facts.ts index 4c63cab1d1d..20a84bd12ba 100644 --- a/src/shared/sidebar-list/workspace-review-facts.ts +++ b/src/shared/sidebar-list/workspace-review-facts.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { Repo } from '../repo-types' import type { Worktree } from '../worktree/types' import { getGitHubPRCacheKeyCandidates } from '../github/github-cache-key' diff --git a/src/shared/sidebar-list/workspace-rows.ts b/src/shared/sidebar-list/workspace-rows.ts index 9cdd0a458a4..d406d306155 100644 --- a/src/shared/sidebar-list/workspace-rows.ts +++ b/src/shared/sidebar-list/workspace-rows.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { LOCAL_EXECUTION_HOST_ID, getRepoExecutionHostId, diff --git a/src/shared/task-source-context-schema.ts b/src/shared/task-source-context-schema.ts index ba9e2c67941..64f69ca3038 100644 --- a/src/shared/task-source-context-schema.ts +++ b/src/shared/task-source-context-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import { normalizeStoredTaskSourceContext, type TaskSourceContext } from './task-source-context' export const TaskSourceContextSchema = z.unknown().transform((value, ctx): TaskSourceContext => { diff --git a/src/shared/workspace-attachments/workspace-attachment-schema.ts b/src/shared/workspace-attachments/workspace-attachment-schema.ts index 33ec683e87f..5ef5efdac73 100644 --- a/src/shared/workspace-attachments/workspace-attachment-schema.ts +++ b/src/shared/workspace-attachments/workspace-attachment-schema.ts @@ -1,5 +1,5 @@ import { normalizeWorkspaceAttachmentOrigins } from './workspace-attachment-origins' -import { z } from 'zod' +import * as z from 'zod' import { normalizeWorkspaceAttachment } from './workspace-attachment-normalization' import type { WorkspaceAttachment } from '../worktree/types' diff --git a/src/shared/workspace-attachments/workspace-linked-item-schema.ts b/src/shared/workspace-attachments/workspace-linked-item-schema.ts index c840cad012f..7f4b2ca8998 100644 --- a/src/shared/workspace-attachments/workspace-linked-item-schema.ts +++ b/src/shared/workspace-attachments/workspace-linked-item-schema.ts @@ -1,4 +1,4 @@ -import { z } from 'zod' +import * as z from 'zod' import type { WorkspaceLinkedItem } from '../worktree/types' import { normalizeWorkspaceLinkedItem } from './workspace-linked-item' diff --git a/src/shared/zod-salvage.ts b/src/shared/zod-salvage.ts index ab50c53db70..c9685283796 100644 --- a/src/shared/zod-salvage.ts +++ b/src/shared/zod-salvage.ts @@ -1,5 +1,5 @@ // Zod transforms lack paths, so salvage combinators track bounded diagnostics during parsing. -import { z } from 'zod' +import * as z from 'zod' const MAX_REPORTED_SALVAGE_PATHS = 100 @@ -66,7 +66,7 @@ function parseEntryAt( /** Match z.record string-key acceptance, rejecting non-plain objects/enumerable symbols, without allocating a throwaway copy before revalidating entries. */ function recordEntryKeys(raw: unknown): string[] | null { - if (!z.core.util.isPlainObject(raw)) { + if (!z.util.isPlainObject(raw)) { return null } for (const symbol of Object.getOwnPropertySymbols(raw)) {