From 2018e2c8e0bd095db83baa12648f8702f24aad3a Mon Sep 17 00:00:00 2001 From: Bersabel Tadesse Date: Thu, 30 Jul 2026 14:31:00 -0700 Subject: [PATCH 1/5] Repair plugin artifacts for SDK 0.4.1 --- package-lock.json | 32 +- package.json | 2 +- .../thread-history-maintenance/package.json | 2 +- plugins/design-doctrine/dist/app.css | 2 +- plugins/design-doctrine/dist/app.js | 4 +- plugins/design-doctrine/dist/app.meta.json | 4 +- plugins/design-doctrine/dist/server.meta.json | 4 +- plugins/design-doctrine/package.json | 4 +- .../types/bb-plugin-sdk-app.d.ts | 44 +- .../design-doctrine/types/bb-plugin-sdk.d.ts | 485 +- plugins/improve-prompt/app.test.tsx | 2 +- plugins/improve-prompt/dist/app.css | 5 +- plugins/improve-prompt/dist/app.js | 4 +- plugins/improve-prompt/dist/app.meta.json | 4 +- plugins/improve-prompt/dist/server.meta.json | 4 +- plugins/improve-prompt/package.json | 4 +- .../types/bb-plugin-sdk-app.d.ts | 44 +- .../improve-prompt/types/bb-plugin-sdk.d.ts | 485 +- plugins/thread-hover-cards/dist/app.css | 5 +- plugins/thread-hover-cards/dist/app.js | 4 +- plugins/thread-hover-cards/dist/app.meta.json | 4 +- .../thread-hover-cards/dist/server.meta.json | 4 +- plugins/thread-hover-cards/package.json | 2 +- .../types/bb-plugin-sdk-app.d.ts | 44 +- .../types/bb-plugin-sdk.d.ts | 485 +- plugins/thread-organizer/app.ts | 2 +- plugins/thread-organizer/dist/app.css | 263 + plugins/thread-organizer/dist/app.js | 233 + plugins/thread-organizer/dist/app.meta.json | 11 + plugins/thread-organizer/dist/server.js | 1077 ++ plugins/thread-organizer/dist/server.js.map | 7 + .../thread-organizer/dist/server.meta.json | 11 + plugins/thread-organizer/package.json | 4 +- .../types/bb-plugin-sdk-app.d.ts | 44 +- .../thread-organizer/types/bb-plugin-sdk.d.ts | 485 +- plugins/timeline-comments/app.tsx | 4 +- plugins/timeline-comments/dist/app.css | 924 + plugins/timeline-comments/dist/app.js | 1870 ++ plugins/timeline-comments/dist/app.meta.json | 11 + plugins/timeline-comments/dist/server.js | 15537 ++++++++++++++++ plugins/timeline-comments/dist/server.js.map | 7 + .../timeline-comments/dist/server.meta.json | 11 + plugins/timeline-comments/package.json | 4 +- .../test/plugin-sdk-app-harness.js | 16 +- .../types/bb-plugin-sdk-app.d.ts | 44 +- .../types/bb-plugin-sdk.d.ts | 485 +- plugins/ui-patterns/composer-action.test.tsx | 2 +- plugins/ui-patterns/composer-action.tsx | 2 +- plugins/ui-patterns/dist/app.css | 2 +- plugins/ui-patterns/dist/app.js | 6 +- plugins/ui-patterns/dist/app.meta.json | 4 +- plugins/ui-patterns/dist/server.meta.json | 4 +- plugins/ui-patterns/package.json | 4 +- plugins/ui-patterns/tests/contract.test.mjs | 4 +- .../ui-patterns/types/bb-plugin-sdk-app.d.ts | 44 +- plugins/ui-patterns/types/bb-plugin-sdk.d.ts | 485 +- tooling/check-repository.mjs | 21 +- tooling/create-plugin.mjs | 9 +- tooling/plugin-sdk-provenance.mjs | 21 + tooling/publish-install-refs.mjs | 222 +- tooling/scaffold-smoke.mjs | 22 +- tooling/validate-plugin-artifacts.mjs | 60 +- tooling/vendor/bb-plugin-build-0.0.34.mjs | 2332 ++- tooling/vendor/bb-plugin-sdk-0.4.0.tgz | Bin 100346 -> 0 bytes tooling/vendor/bb-plugin-sdk-0.4.1.tgz | Bin 0 -> 102670 bytes tooling/vendor/plugin-build-provenance.json | 4 +- tooling/vendor/sdk-provenance.json | 8 +- 67 files changed, 25042 insertions(+), 947 deletions(-) create mode 100644 plugins/thread-organizer/dist/app.css create mode 100644 plugins/thread-organizer/dist/app.js create mode 100644 plugins/thread-organizer/dist/app.meta.json create mode 100644 plugins/thread-organizer/dist/server.js create mode 100644 plugins/thread-organizer/dist/server.js.map create mode 100644 plugins/thread-organizer/dist/server.meta.json create mode 100644 plugins/timeline-comments/dist/app.css create mode 100644 plugins/timeline-comments/dist/app.js create mode 100644 plugins/timeline-comments/dist/app.meta.json create mode 100644 plugins/timeline-comments/dist/server.js create mode 100644 plugins/timeline-comments/dist/server.js.map create mode 100644 plugins/timeline-comments/dist/server.meta.json create mode 100644 tooling/plugin-sdk-provenance.mjs delete mode 100644 tooling/vendor/bb-plugin-sdk-0.4.0.tgz create mode 100644 tooling/vendor/bb-plugin-sdk-0.4.1.tgz diff --git a/package-lock.json b/package-lock.json index c5e53ee..ab8bb69 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "packages/*" ], "devDependencies": { - "@bb/plugin-sdk": "file:tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": "file:tooling/vendor/bb-plugin-sdk-0.4.1.tgz", "@tailwindcss/node": "^4.3.0", "@tailwindcss/oxide": "^4.3.0", "esbuild": "^0.28.0", @@ -313,9 +313,9 @@ } }, "node_modules/@bb/plugin-sdk": { - "version": "0.4.0", - "resolved": "file:tooling/vendor/bb-plugin-sdk-0.4.0.tgz", - "integrity": "sha512-pNDmkO4HyI/KOxfT95DmYSGhaPKul7uMj/Rd93t64Wi02zixoRGG8O0dBzlGazclDpsqY/yIXP08bobkyqw+Ng==", + "version": "0.4.1", + "resolved": "file:tooling/vendor/bb-plugin-sdk-0.4.1.tgz", + "integrity": "sha512-2lVIq1QHWjfpBztgZaa6mEJg55b3DVvt/IeHncTxplAEd5HOBNu6rnTPV8ZseRr+/IRmxJFFLH3vOgX9/Gfucg==", "dev": true, "peerDependencies": { "@testing-library/react": "^16.3.2", @@ -6656,7 +6656,7 @@ "name": "@brsbl/bb-thread-history-maintenance", "version": "0.1.0", "devDependencies": { - "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.1.tgz", "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.0.0", "better-sqlite3": "^12.0.0", @@ -6673,7 +6673,7 @@ "zod": "^4.3.6" }, "devDependencies": { - "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.1.tgz", "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.0.0", "@types/react": "^19.0.0", @@ -6687,7 +6687,7 @@ }, "engines": { "bb": ">=0.0.34", - "bbPluginSdk": "^0.4.0" + "bbPluginSdk": "^0.4.1" } }, "plugins/improve-prompt": { @@ -6703,7 +6703,7 @@ "tailwind-merge": "^3.4.0" }, "devDependencies": { - "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.1.tgz", "@radix-ui/react-dialog": "^1.1.19", "@radix-ui/react-tooltip": "^1.2.12", "@testing-library/react": "^16.3.2", @@ -6724,7 +6724,7 @@ }, "engines": { "bb": ">=0.0.34", - "bbPluginSdk": "^0.4.0" + "bbPluginSdk": "^0.4.1" } }, "plugins/thread-hover-cards": { @@ -6746,7 +6746,7 @@ }, "engines": { "bb": ">=0.0.34", - "bbPluginSdk": "^0.4.0" + "bbPluginSdk": "^0.4.1" } }, "plugins/thread-organizer": { @@ -6754,7 +6754,7 @@ "version": "0.1.0", "license": "UNLICENSED", "devDependencies": { - "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.1.tgz", "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.0.0", "better-sqlite3": "^12.10.0", @@ -6767,7 +6767,7 @@ }, "engines": { "bb": ">=0.0.34", - "bbPluginSdk": "^0.4.0" + "bbPluginSdk": "^0.4.1" } }, "plugins/timeline-comments": { @@ -6775,7 +6775,7 @@ "version": "0.1.0", "license": "UNLICENSED", "devDependencies": { - "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.1.tgz", "@testing-library/react": "^16.3.2", "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.0.0", @@ -6796,7 +6796,7 @@ }, "engines": { "bb": ">=0.0.34", - "bbPluginSdk": "^0.4.0" + "bbPluginSdk": "^0.4.1" } }, "plugins/ui-patterns": { @@ -6830,7 +6830,7 @@ "zod": "^4.3.6" }, "devDependencies": { - "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.1.tgz", "@radix-ui/react-dialog": "^1.1.19", "@tailwindcss/node": "4.3.0", "@tailwindcss/oxide": "4.3.0", @@ -6854,7 +6854,7 @@ }, "engines": { "bb": ">=0.34.0", - "bbPluginSdk": "^0.4.0" + "bbPluginSdk": "^0.4.1" } }, "plugins/ui-patterns/node_modules/@tailwindcss/node": { diff --git a/package.json b/package.json index ab5c779..d35b5d8 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "typecheck": "npm run typecheck --workspaces --if-present" }, "devDependencies": { - "@bb/plugin-sdk": "file:tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": "file:tooling/vendor/bb-plugin-sdk-0.4.1.tgz", "@tailwindcss/node": "^4.3.0", "@tailwindcss/oxide": "^4.3.0", "esbuild": "^0.28.0", diff --git a/packages/thread-history-maintenance/package.json b/packages/thread-history-maintenance/package.json index c33cdb0..a6e8b62 100644 --- a/packages/thread-history-maintenance/package.json +++ b/packages/thread-history-maintenance/package.json @@ -12,7 +12,7 @@ "typecheck": "tsc --noEmit" }, "devDependencies": { - "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.1.tgz", "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.0.0", "better-sqlite3": "^12.0.0", diff --git a/plugins/design-doctrine/dist/app.css b/plugins/design-doctrine/dist/app.css index a1b0269..9a63a0b 100644 --- a/plugins/design-doctrine/dist/app.css +++ b/plugins/design-doctrine/dist/app.css @@ -156,7 +156,7 @@ initial-value: 0; } @layer utilities { - @scope ([data-bb-plugin="design-doctrine"], [data-bb-plugin-root]:not([data-bb-plugin]), [data-bb-plugin-decoration="design-doctrine"]) { + @scope ([data-bb-plugin="design-doctrine"], [data-bb-plugin-root]:not([data-bb-plugin])) { .pointer-events-auto { pointer-events: auto; } diff --git a/plugins/design-doctrine/dist/app.js b/plugins/design-doctrine/dist/app.js index e6ab7f2..713ee46 100644 --- a/plugins/design-doctrine/dist/app.js +++ b/plugins/design-doctrine/dist/app.js @@ -56,9 +56,9 @@ if (runtime2 == null || runtime2.pluginSdkApp == null) { } var mod2 = runtime2.pluginSdkApp; var { + Markdown, + ThreadChat, definePluginApp, - experimental_Markdown, - experimental_ThreadChat, useBbContext, useBbNavigate, useComposer, diff --git a/plugins/design-doctrine/dist/app.meta.json b/plugins/design-doctrine/dist/app.meta.json index fc0d143..8a6e7de 100644 --- a/plugins/design-doctrine/dist/app.meta.json +++ b/plugins/design-doctrine/dist/app.meta.json @@ -1,11 +1,11 @@ { "sdkMajor": 0, - "sdkVersion": "0.4.0", + "sdkVersion": "0.4.1", "artifactFormatVersion": 1, "pluginId": "design-doctrine", "pluginVersion": "0.2.0", "builtWith": { "bbVersion": "0.0.34", - "pluginSdkVersion": "0.4.0" + "pluginSdkVersion": "0.4.1" } } diff --git a/plugins/design-doctrine/dist/server.meta.json b/plugins/design-doctrine/dist/server.meta.json index fc0d143..8a6e7de 100644 --- a/plugins/design-doctrine/dist/server.meta.json +++ b/plugins/design-doctrine/dist/server.meta.json @@ -1,11 +1,11 @@ { "sdkMajor": 0, - "sdkVersion": "0.4.0", + "sdkVersion": "0.4.1", "artifactFormatVersion": 1, "pluginId": "design-doctrine", "pluginVersion": "0.2.0", "builtWith": { "bbVersion": "0.0.34", - "pluginSdkVersion": "0.4.0" + "pluginSdkVersion": "0.4.1" } } diff --git a/plugins/design-doctrine/package.json b/plugins/design-doctrine/package.json index b882f98..98ab6cd 100644 --- a/plugins/design-doctrine/package.json +++ b/plugins/design-doctrine/package.json @@ -6,7 +6,7 @@ "license": "MIT", "engines": { "bb": ">=0.0.34", - "bbPluginSdk": "^0.4.0" + "bbPluginSdk": "^0.4.1" }, "bb": { "name": "Design Doctrine", @@ -40,7 +40,7 @@ "zod": "^4.3.6" }, "devDependencies": { - "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.1.tgz", "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.0.0", "@types/react": "^19.0.0", diff --git a/plugins/design-doctrine/types/bb-plugin-sdk-app.d.ts b/plugins/design-doctrine/types/bb-plugin-sdk-app.d.ts index 22cf8e7..763f78f 100644 --- a/plugins/design-doctrine/types/bb-plugin-sdk-app.d.ts +++ b/plugins/design-doctrine/types/bb-plugin-sdk-app.d.ts @@ -255,7 +255,7 @@ interface PluginThreadPanelActionRegistration { * right for document-like content. "flush" gives the component the full * tab area (no padding, definite height, no host scrolling) — right for * app-like content that manages its own layout, such as - * `experimental_ThreadChat`. + * `ThreadChat`. */ layout?: "padded" | "flush"; /** @@ -274,9 +274,8 @@ interface PluginPendingInteractionRegistration { /** Context handed to a `sidebarFooterAction`'s `run`. */ interface PluginSidebarFooterActionContext { /** - * Navigate to this plugin's Settings detail page - * (`/settings/plugins/`), where declarative settings and - * `settingsSection` slots render. + * Navigate to this plugin's detail page in Tools, where declarative settings + * and `settingsSection` slots render. */ openSettings(): void; } @@ -361,7 +360,7 @@ interface PluginMessageActionContext { /** * Open one of this plugin's `threadPanelAction` components in the current * thread's side panel — the registration-callback equivalent of - * `useBbNavigate().experimental_openThreadPanel`. Returns true when the host + * `useBbNavigate().openThreadPanel`. Returns true when the host * accepted (the action id exists and the surface has a panel); false * otherwise. */ @@ -395,7 +394,7 @@ interface PluginAppSlots { sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void; fileOpener(registration: PluginFileOpenerRegistration): void; messageDirective(registration: PluginMessageDirectiveRegistration): void; - experimental_messageAction(registration: PluginMessageActionRegistration): void; + messageAction(registration: PluginMessageActionRegistration): void; } interface PluginAppComposer { customize(registration: ComposerCustomization): void; @@ -424,14 +423,14 @@ interface PluginContentScriptRegistration { */ mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise; } -/** Experimental lifecycle surface for trusted frontend content scripts. */ +/** Lifecycle surface for trusted frontend content scripts. */ interface PluginAppContentScripts { register(registration: PluginContentScriptRegistration): void; } interface PluginAppBuilder { slots: PluginAppSlots; composer: PluginAppComposer; - experimental_contentScripts: PluginAppContentScripts; + contentScripts: PluginAppContentScripts; } type PluginAppSetup = (app: PluginAppBuilder) => void; /** @@ -563,8 +562,12 @@ interface PluginComposerThreadRowStatus { icon: string; /** Accessible label for the status glyph. */ label: string; - /** Semantic host color for the status glyph. Defaults to the neutral tone. */ - tone?: "default" | "success"; + /** + * Semantic host treatment for the status glyph. `running` automatically + * shimmers; terminal `success` and `error` tones are static. Defaults to the + * neutral tone. + */ + tone?: "default" | "running" | "success" | "error"; } /** An @-mention pill bound to one of the calling plugin's mention providers. */ interface PluginComposerMention { @@ -684,6 +687,15 @@ interface ThreadChatProps { layout?: "contained" | "document"; /** Bump to focus the composer (ignored by `variant: "timeline"`). */ focusRequest?: number; + /** + * Who controls the permission mode sends run with. "inherit" (default) + * pins every send to the thread's own resolved default and renders the + * picker as a dimmed label — a plugin surface can never widen it. + * "editable" gives this chat its own picker, so the user can raise or + * lower permissions for this thread independently of the thread it was + * forked from. Ignored by `variant: "timeline"` (no composer). + */ + permissionPolicy?: "inherit" | "editable"; className?: string; /** Rendered above the conversation, scrolling with it. */ leadingContent?: ReactNode; @@ -738,7 +750,7 @@ interface BbNavigate { * thread surface. Returns false when the surface has no thread side panel or * the action is unavailable. */ - experimental_openThreadPanel(options: { + openThreadPanel(options: { actionId: string; title?: string; params?: JsonValue; @@ -769,18 +781,18 @@ interface PluginSdkApp { * with `Markdown`, the only components the SDK ships — everything else * stays vendored per §5.5. */ - experimental_ThreadChat: ComponentType; + ThreadChat: ComponentType; /** * The host-owned chat-message markdown renderer (see * {@link MarkdownProps}). */ - experimental_Markdown: ComponentType; + Markdown: ComponentType; useComposerView(): ComposerView; } declare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition; -declare const experimental_ThreadChat: react.ComponentType; -declare const experimental_Markdown: react.ComponentType; +declare const ThreadChat: react.ComponentType; +declare const Markdown: react.ComponentType; declare const useRpc: , StandardSchemaV1>>>>() => PluginRpcClient; declare const useRealtime: (channel: string, handler: (payload: unknown) => void) => void; declare const useRealtimeConnectionState: () => PluginRealtimeConnectionState; @@ -790,5 +802,5 @@ declare const useBbNavigate: () => BbNavigate; declare const useComposer: () => PluginComposerApi; declare const useComposerView: () => ComposerView; -export { definePluginApp, experimental_Markdown, experimental_ThreadChat, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings }; +export { Markdown, ThreadChat, definePluginApp, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings }; export type { BbContext, BbNavigate, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtimeConnectionState, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps }; diff --git a/plugins/design-doctrine/types/bb-plugin-sdk.d.ts b/plugins/design-doctrine/types/bb-plugin-sdk.d.ts index 8125dda..aa4ea0e 100644 --- a/plugins/design-doctrine/types/bb-plugin-sdk.d.ts +++ b/plugins/design-doctrine/types/bb-plugin-sdk.d.ts @@ -260,7 +260,7 @@ interface PluginThreadPanelActionRegistration { * right for document-like content. "flush" gives the component the full * tab area (no padding, definite height, no host scrolling) — right for * app-like content that manages its own layout, such as - * `experimental_ThreadChat`. + * `ThreadChat`. */ layout?: "padded" | "flush"; /** @@ -279,9 +279,8 @@ interface PluginPendingInteractionRegistration { /** Context handed to a `sidebarFooterAction`'s `run`. */ interface PluginSidebarFooterActionContext { /** - * Navigate to this plugin's Settings detail page - * (`/settings/plugins/`), where declarative settings and - * `settingsSection` slots render. + * Navigate to this plugin's detail page in Tools, where declarative settings + * and `settingsSection` slots render. */ openSettings(): void; } @@ -366,7 +365,7 @@ interface PluginMessageActionContext { /** * Open one of this plugin's `threadPanelAction` components in the current * thread's side panel — the registration-callback equivalent of - * `useBbNavigate().experimental_openThreadPanel`. Returns true when the host + * `useBbNavigate().openThreadPanel`. Returns true when the host * accepted (the action id exists and the surface has a panel); false * otherwise. */ @@ -400,7 +399,7 @@ interface PluginAppSlots { sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void; fileOpener(registration: PluginFileOpenerRegistration): void; messageDirective(registration: PluginMessageDirectiveRegistration): void; - experimental_messageAction(registration: PluginMessageActionRegistration): void; + messageAction(registration: PluginMessageActionRegistration): void; } interface PluginAppComposer { customize(registration: ComposerCustomization): void; @@ -429,14 +428,14 @@ interface PluginContentScriptRegistration { */ mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise; } -/** Experimental lifecycle surface for trusted frontend content scripts. */ +/** Lifecycle surface for trusted frontend content scripts. */ interface PluginAppContentScripts { register(registration: PluginContentScriptRegistration): void; } interface PluginAppBuilder { slots: PluginAppSlots; composer: PluginAppComposer; - experimental_contentScripts: PluginAppContentScripts; + contentScripts: PluginAppContentScripts; } type PluginAppSetup = (app: PluginAppBuilder) => void; /** @@ -568,8 +567,12 @@ interface PluginComposerThreadRowStatus { icon: string; /** Accessible label for the status glyph. */ label: string; - /** Semantic host color for the status glyph. Defaults to the neutral tone. */ - tone?: "default" | "success"; + /** + * Semantic host treatment for the status glyph. `running` automatically + * shimmers; terminal `success` and `error` tones are static. Defaults to the + * neutral tone. + */ + tone?: "default" | "running" | "success" | "error"; } /** An @-mention pill bound to one of the calling plugin's mention providers. */ interface PluginComposerMention { @@ -689,6 +692,15 @@ interface ThreadChatProps { layout?: "contained" | "document"; /** Bump to focus the composer (ignored by `variant: "timeline"`). */ focusRequest?: number; + /** + * Who controls the permission mode sends run with. "inherit" (default) + * pins every send to the thread's own resolved default and renders the + * picker as a dimmed label — a plugin surface can never widen it. + * "editable" gives this chat its own picker, so the user can raise or + * lower permissions for this thread independently of the thread it was + * forked from. Ignored by `variant: "timeline"` (no composer). + */ + permissionPolicy?: "inherit" | "editable"; className?: string; /** Rendered above the conversation, scrolling with it. */ leadingContent?: ReactNode; @@ -743,7 +755,7 @@ interface BbNavigate { * thread surface. Returns false when the surface has no thread side panel or * the action is unavailable. */ - experimental_openThreadPanel(options: { + openThreadPanel(options: { actionId: string; title?: string; params?: JsonValue$1; @@ -774,12 +786,12 @@ interface PluginSdkApp { * with `Markdown`, the only components the SDK ships — everything else * stays vendored per §5.5. */ - experimental_ThreadChat: ComponentType; + ThreadChat: ComponentType; /** * The host-owned chat-message markdown renderer (see * {@link MarkdownProps}). */ - experimental_Markdown: ComponentType; + Markdown: ComponentType; useComposerView(): ComposerView; } @@ -790,6 +802,7 @@ interface PluginSdkApp { declare const appSettingsSchema: z$1.ZodObject<{ caffeinate: z$1.ZodBoolean; showKeyboardHints: z$1.ZodBoolean; + steerActiveThreadOnEnter: z$1.ZodBoolean; showUnhandledProviderEvents: z$1.ZodBoolean; codexMemoryEnabled: z$1.ZodBoolean; claudeCodeMemoryEnabled: z$1.ZodBoolean; @@ -1011,7 +1024,7 @@ type Environment = z$1.infer; */ declare const experimentsSchema: z$1.ZodObject<{ claudeCodeMockCliTraffic: z$1.ZodBoolean; - plugins: z$1.ZodBoolean; + toolsHub: z$1.ZodBoolean; sideChatPlugin: z$1.ZodBoolean; }, z$1.core.$strip>; type Experiments = z$1.infer; @@ -3110,11 +3123,47 @@ declare const projectCommandsQuerySchema: z$1.ZodObject<{ environmentId: z$1.ZodOptional, z$1.ZodOptional>>; }, z$1.core.$strict>; type ProjectCommandsQuery = z$1.infer; +declare const skillListResponseSchema: z$1.ZodObject<{ + skills: z$1.ZodArray; + provider: z$1.ZodNullable>; + scope: z$1.ZodEnum<{ + plugin: "plugin"; + "bb-builtin": "bb-builtin"; + "bb-user": "bb-user"; + "bb-project": "bb-project"; + "claude-user": "claude-user"; + "claude-project": "claude-project"; + "codex-user": "codex-user"; + "codex-project": "codex-project"; + }>; + pluginId: z$1.ZodNullable; + filePath: z$1.ZodString; + manageable: z$1.ZodBoolean; + registrySkillId: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SkillListResponse = z$1.infer; +declare const skillContentResponseSchema: z$1.ZodObject<{ + content: z$1.ZodString; + revision: z$1.ZodString; +}, z$1.core.$strip>; +type SkillContentResponse = z$1.infer; +declare const skillFilesResponseSchema: z$1.ZodObject<{ + files: z$1.ZodArray; + truncated: z$1.ZodBoolean; +}, z$1.core.$strip>; +type SkillFilesResponse = z$1.infer; declare const projectResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - standard: "standard"; personal: "personal"; + standard: "standard"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable; @@ -3135,8 +3184,8 @@ type ProjectResponse = z$1.infer; declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - standard: "standard"; personal: "personal"; + standard: "standard"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable; @@ -3238,8 +3287,8 @@ declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ ultra: "ultra"; }>; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; }, z$1.core.$strip>>; @@ -3262,6 +3311,61 @@ declare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{ }, z$1.core.$strict>; type CopyProjectAttachmentsRequest = z$1.infer; +declare const registrySkillSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + skillId: z$1.ZodString; + name: z$1.ZodString; + installs: z$1.ZodNumber; + stars: z$1.ZodNullable; + installUrl: z$1.ZodNullable; + url: z$1.ZodString; + topic: z$1.ZodNullable; + summary: z$1.ZodNullable; +}, z$1.core.$strip>; +type RegistrySkill = z$1.infer; +declare const registrySkillsPageSchema: z$1.ZodObject<{ + skills: z$1.ZodArray; + installUrl: z$1.ZodNullable; + url: z$1.ZodString; + topic: z$1.ZodNullable; + summary: z$1.ZodNullable; + }, z$1.core.$strip>>; + pagination: z$1.ZodObject<{ + page: z$1.ZodNumber; + perPage: z$1.ZodNumber; + total: z$1.ZodNumber; + hasMore: z$1.ZodBoolean; + }, z$1.core.$strip>; +}, z$1.core.$strip>; +type RegistrySkillsPage = z$1.infer; +declare const registryRepositoryStarsSchema: z$1.ZodObject<{ + stars: z$1.ZodNumber; +}, z$1.core.$strip>; +type RegistryRepositoryStars = z$1.infer; +declare const registrySkillDetailSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + skillId: z$1.ZodString; + hash: z$1.ZodNullable; + files: z$1.ZodNullable>>; +}, z$1.core.$strip>; +type RegistrySkillDetail = z$1.infer; +declare const registrySkillInstallResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + filePath: z$1.ZodString; +}, z$1.core.$strip>; +type RegistrySkillInstallResponse = z$1.infer; + declare const updateEnvironmentRequestSchema: z$1.ZodObject<{ mergeBaseBranch: z$1.ZodOptional>; name: z$1.ZodOptional>; @@ -3373,8 +3477,8 @@ declare const environmentDiffFileResponseSchema: z$1.ZodObject<{ path: z$1.ZodString; content: z$1.ZodString; contentEncoding: z$1.ZodEnum<{ - utf8: "utf8"; base64: "base64"; + utf8: "utf8"; }>; mimeType: z$1.ZodOptional; sizeBytes: z$1.ZodNumber; @@ -3986,16 +4090,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4079,9 +4183,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4160,9 +4264,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4253,9 +4357,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4334,9 +4438,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4399,16 +4503,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4517,12 +4621,13 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; - projectId: z$1.ZodString; - providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; - providerThreadId: z$1.ZodString; }, z$1.core.$strict>; target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ mode: z$1.ZodLiteral<"start">; @@ -4653,8 +4757,8 @@ declare const hostDaemonCommandRegistry: { }, z$1.core.$strip>], "mode">; }, z$1.core.$strict>, z$1.ZodObject<{ appliedAs: z$1.ZodEnum<{ - steer: "steer"; "new-turn": "new-turn"; + steer: "steer"; }>; }, z$1.core.$strip>, "settled", false>; "thread.stop": HostDaemonCommandDescriptor<"thread.stop", z$1.ZodObject<{ @@ -4695,16 +4799,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4813,12 +4917,13 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; - projectId: z$1.ZodString; - providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; - providerThreadId: z$1.ZodString; }, z$1.core.$strict>; }, z$1.core.$strict>, z$1.ZodObject<{ cleared: z$1.ZodBoolean; @@ -5095,9 +5199,9 @@ declare const hostDaemonCommandRegistry: { text: z$1.ZodString; startedAt: z$1.ZodOptional; status: z$1.ZodOptional>; metadata: z$1.ZodOptional>; }, z$1.core.$strip>>; @@ -5325,13 +5429,91 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - project: "project"; user: "user"; + project: "project"; }>; description: z$1.ZodNullable; argumentHint: z$1.ZodNullable; }, z$1.core.$strip>>; }, z$1.core.$strip>, "onlineRpc", true>; + "host.list_skills": HostDaemonCommandDescriptor<"host.list_skills", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.list_skills">; + providerId: z$1.ZodString; + cwd: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + skills: z$1.ZodArray; + filePath: z$1.ZodString; + rootKind: z$1.ZodEnum<{ + plugin: "plugin"; + "bb-project": "bb-project"; + "bb-data-dir": "bb-data-dir"; + "bb-builtin": "bb-builtin"; + "provider-project": "provider-project"; + "provider-user": "provider-user"; + }>; + linked: z$1.ZodBoolean; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.delete_skill": HostDaemonCommandDescriptor<"host.delete_skill", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.delete_skill">; + scope: z$1.ZodEnum<{ + "bb-project": "bb-project"; + "bb-user": "bb-user"; + "claude-user": "claude-user"; + "claude-project": "claude-project"; + "codex-user": "codex-user"; + "codex-project": "codex-project"; + }>; + name: z$1.ZodString; + cwd: z$1.ZodNullable; + rootPath: z$1.ZodNullable; + }, z$1.core.$strict>, z$1.ZodObject<{ + deletedPath: z$1.ZodString; + }, z$1.core.$strip>, "onlineRpc", false>; + "host.write_skill": HostDaemonCommandDescriptor<"host.write_skill", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.write_skill">; + scope: z$1.ZodEnum<{ + "bb-project": "bb-project"; + "bb-user": "bb-user"; + }>; + name: z$1.ZodString; + cwd: z$1.ZodNullable; + content: z$1.ZodString; + expectedSha256: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"written">; + filePath: z$1.ZodString; + sha256: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"conflict">; + currentSha256: z$1.ZodNullable; + }, z$1.core.$strip>], "outcome">, "onlineRpc", false>; + "host.install_global_skills": HostDaemonCommandDescriptor<"host.install_global_skills", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.install_global_skills">; + skills: z$1.ZodArray>; + }, z$1.core.$strict>, z$1.ZodObject<{ + installations: z$1.ZodArray>; + }, z$1.core.$strict>, "onlineRpc", false>; + "host.global_skills_status": HostDaemonCommandDescriptor<"host.global_skills_status", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.global_skills_status">; + names: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodObject<{ + entries: z$1.ZodArray; + }, z$1.core.$strict>>; + }, z$1.core.$strict>, "onlineRpc", true>; "host.list_branches": HostDaemonCommandDescriptor<"host.list_branches", z$1.ZodObject<{ type: z$1.ZodLiteral<"host.list_branches">; path: z$1.ZodString; @@ -5728,8 +5910,8 @@ declare const hostDaemonCommandRegistry: { npmGlobalPackageVersion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -5751,8 +5933,8 @@ declare const hostDaemonCommandRegistry: { cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - install: "install"; update: "update"; + install: "install"; }>; type: z$1.ZodLiteral<"provider_cli.install">; }, z$1.core.$strict>, z$1.ZodObject<{ @@ -5892,13 +6074,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -5942,13 +6124,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6004,13 +6186,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6052,13 +6234,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6101,9 +6283,9 @@ declare const hostDaemonCommandRegistry: { conclusion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -6211,8 +6393,8 @@ declare const providerCliInstallRequestSchema: z$1.ZodObject<{ cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - install: "install"; update: "update"; + install: "install"; }>; }, z$1.core.$strip>; type ProviderCliInstallRequest = z$1.infer; @@ -6420,6 +6602,7 @@ declare const installedPluginSchema: z$1.ZodObject<{ description: z$1.ZodNullable; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6460,6 +6643,17 @@ declare const installedPluginSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6477,7 +6671,6 @@ declare const installedPluginSchema: z$1.ZodObject<{ }, z$1.core.$strip>; type InstalledPlugin = z$1.infer; declare const pluginListResponseSchema: z$1.ZodObject<{ - enabled: z$1.ZodBoolean; plugins: z$1.ZodArray; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6553,6 +6747,17 @@ declare const pluginListResponseSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6607,6 +6812,7 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{ description: z$1.ZodNullable; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6647,6 +6853,17 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6707,6 +6924,7 @@ declare const pluginCatalogStatusSchema: z$1.ZodObject<{ type PluginCatalogStatus = z$1.infer; declare const pluginCatalogSearchResultSchema: z$1.ZodObject<{ entryId: z$1.ZodString; + pluginId: z$1.ZodString; displayName: z$1.ZodString; description: z$1.ZodString; icon: z$1.ZodNullable; @@ -6730,8 +6948,8 @@ declare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{ supportsUserQuestion: z$1.ZodBoolean; supportsFork: z$1.ZodBoolean; supportedPermissionModes: z$1.ZodArray>; }, z$1.core.$strip>; @@ -6851,6 +7069,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ generalSettings: z$1.ZodObject<{ caffeinate: z$1.ZodBoolean; showKeyboardHints: z$1.ZodBoolean; + steerActiveThreadOnEnter: z$1.ZodBoolean; showUnhandledProviderEvents: z$1.ZodBoolean; codexMemoryEnabled: z$1.ZodBoolean; claudeCodeMemoryEnabled: z$1.ZodBoolean; @@ -7093,7 +7312,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ }, z$1.core.$strict>>; experiments: z$1.ZodObject<{ claudeCodeMockCliTraffic: z$1.ZodBoolean; - plugins: z$1.ZodBoolean; + toolsHub: z$1.ZodBoolean; sideChatPlugin: z$1.ZodBoolean; }, z$1.core.$strip>; appearance: z$1.ZodObject<{ @@ -7120,6 +7339,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ }, z$1.core.$strip>>; featureFlags: z$1.ZodObject<{ placeholder: z$1.ZodBoolean; + timelineWindowEventBudget: z$1.ZodNumber; }, z$1.core.$strip>; hostDaemonPort: z$1.ZodNullable; primaryHostId: z$1.ZodNullable; @@ -7179,6 +7399,46 @@ type SystemVersionResponse = z$1.infer; declare const systemConfigReloadResponseSchema: z$1.ZodObject<{ ok: z$1.ZodLiteral; }, z$1.core.$strip>; +declare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{ + machines: z$1.ZodArray; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SystemCliSkillsStatusResponse = z$1.infer; +/** The machines to copy the built-in bb CLI skills onto. */ +declare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{ + hostIds: z$1.ZodArray; +}, z$1.core.$strip>; +type SystemInstallCliSkillsRequest = z$1.infer; +/** + * One entry per requested machine. A machine that is offline or otherwise + * refuses the install fails on its own without taking the others down, so the + * caller can report exactly which machines got the skills. + */ +declare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{ + results: z$1.ZodArray; + hostId: z$1.ZodString; + hostName: z$1.ZodString; + installations: z$1.ZodArray>; + }, z$1.core.$strip>, z$1.ZodObject<{ + ok: z$1.ZodLiteral; + hostId: z$1.ZodString; + hostName: z$1.ZodString; + errorMessage: z$1.ZodString; + }, z$1.core.$strip>], "ok">>; +}, z$1.core.$strip>; +type SystemInstallCliSkillsResponse = z$1.infer; type SystemConfigReloadResponse = z$1.infer; declare const terminalSessionSchema: z$1.ZodObject<{ @@ -8041,10 +8301,10 @@ declare const createThreadRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional>>>; title: z$1.ZodOptional; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; visibility: z$1.ZodDefault>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -9141,9 +9401,9 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{ isGitRepo: z$1.ZodBoolean; isWorktree: z$1.ZodBoolean; workspaceProvisionType: z$1.ZodEnum<{ - personal: "personal"; - "managed-worktree": "managed-worktree"; unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; }>; branchName: z$1.ZodNullable; baseBranch: z$1.ZodNullable; @@ -9437,8 +9697,8 @@ declare const threadQueuedMessageListResponseSchema: z$1.ZodArray; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -9619,8 +9879,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ activePromptMode: z$1.ZodNullable; providerId: z$1.ZodEnum<{ - codex: "codex"; "claude-code": "claude-code"; + codex: "codex"; }>; prompt: z$1.ZodString; }, z$1.core.$strict>>; @@ -9630,7 +9890,7 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ startedAt: z$1.ZodNumber; updatedAt: z$1.ZodNumber; }, z$1.core.$strip>>; - activeWorkflow: z$1.ZodNullable; @@ -9811,8 +10071,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ originalModel: z$1.ZodString; fallbackModel: z$1.ZodString; reason: z$1.ZodEnum<{ - provider: "provider"; refusal: "refusal"; + provider: "provider"; }>; message: z$1.ZodString; }, z$1.core.$strip>>; @@ -10669,6 +10929,78 @@ interface StatusArea { get(args?: StatusGetArgs): Promise; } +interface SkillWorkspaceArgs { + projectId: string; + environmentId: string | null; +} +interface SkillListArgs extends SkillWorkspaceArgs { + signal?: AbortSignal; +} +interface SkillIdentityArgs extends SkillListArgs { + skillId: string; +} +interface SkillContentArgs extends SkillIdentityArgs { + path: string; +} +interface SkillUpdateArgs extends SkillWorkspaceArgs { + skillId: string; + content: string; + revision: string; +} +interface SkillDeleteArgs extends SkillWorkspaceArgs { + skillId: string; +} +/** + * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans + * out one per card. Callers pass their query's AbortSignal so abandoning a + * page cancels its requests instead of leaving them in flight. + */ +interface AbortableArgs { + signal?: AbortSignal; +} +interface RegistrySkillsSearchArgs extends AbortableArgs { + query?: string; + page?: number; + perPage?: number; +} +interface RegistrySkillIdArgs extends AbortableArgs { + registrySkillId: string; +} +interface RegistrySkillSourceArgs extends AbortableArgs { + source: string; + skillId: string; +} +interface RegistryRepositoryArgs extends AbortableArgs { + source: string; +} +/** + * Install is a mutation and deliberately takes no signal: its body is parsed + * with a strict schema, so an extra key would throw at runtime. + */ +interface RegistrySkillInstallArgs { + registrySkillId: string; +} +interface SkillsRegistryArea { + detail(args: RegistrySkillSourceArgs): Promise; + get(args: RegistrySkillIdArgs): Promise; + install(args: RegistrySkillInstallArgs): Promise; + repositoryStars(args: RegistryRepositoryArgs): Promise; + search(args?: RegistrySkillsSearchArgs): Promise; +} +interface SkillsArea { + getContent(args: SkillContentArgs): Promise; + list(args: SkillListArgs): Promise; + listFiles(args: SkillIdentityArgs): Promise; + registry: SkillsRegistryArea; + remove(args: SkillDeleteArgs): Promise<{ + deletedPath: string; + }>; + update(args: SkillUpdateArgs): Promise<{ + filePath: string; + revision: string; + }>; +} + type ThemeGetResult = AppTheme; type ThemeCatalogResult = ThemeCatalogResponse; type ThemeSetInput = AppThemeSelection; @@ -10719,6 +11051,14 @@ type SystemAttentionResult = SystemAttentionResponse; type SystemConfigResult = SystemConfigResponse; type SystemExecutionOptionsResult = SystemExecutionOptionsResponse; type SystemReloadConfigResult = SystemConfigReloadResponse; +type SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest; +interface SystemCliSkillsStatusArgs { + /** Omit for every enrolled machine. */ + hostIds?: readonly string[]; + signal?: AbortSignal; +} +type SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse; +type SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse; type SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse; type SystemUpdateExperimentsResult = Experiments; type SystemUpdateGeneralSettingsResult = AppSettings; @@ -10729,6 +11069,14 @@ interface SystemArea { attention(args?: SystemAttentionArgs): Promise; config(args?: SystemConfigArgs): Promise; executionOptions(args?: SystemExecutionOptionsArgs): Promise; + /** + * Copy bb's built-in CLI skills into each named machine's global agent skill + * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install + * independently; the result reports each machine's outcome. + */ + /** Per-machine install state of bb's built-in CLI skills. */ + cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise; + installCliSkills(args: SystemInstallCliSkillsArgs): Promise; reloadConfig(): Promise; transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise; updateExperiments(args: Experiments): Promise; @@ -11148,6 +11496,7 @@ interface BbSdk extends BbRealtime { projects: ProjectsArea; plugins: PluginsArea; providers: ProvidersArea; + skills: SkillsArea; status: StatusArea; system: SystemArea; terminals: TerminalsArea; diff --git a/plugins/improve-prompt/app.test.tsx b/plugins/improve-prompt/app.test.tsx index b508c71..dc9c3d3 100644 --- a/plugins/improve-prompt/app.test.tsx +++ b/plugins/improve-prompt/app.test.tsx @@ -169,7 +169,7 @@ describe("Improve Prompt composer action", () => { expect(document.querySelector("style")).toBeNull(); const builtCss = await readFile(resolve("dist/app.css"), "utf8"); expect(builtCss).toContain(".bb-improve-prompt-shimmer"); - expect(builtCss).toContain('[data-bb-plugin-decoration="prompt-shaper"]'); + expect(builtCss).toContain('@scope ([data-bb-plugin="prompt-shaper"]'); expect((improveButton as HTMLButtonElement).disabled).toBe(false); expect(fireEvent.mouseDown(improveButton)).toBe(false); fireEvent.click(improveButton); diff --git a/plugins/improve-prompt/dist/app.css b/plugins/improve-prompt/dist/app.css index bf9b098..83701b1 100644 --- a/plugins/improve-prompt/dist/app.css +++ b/plugins/improve-prompt/dist/app.css @@ -119,7 +119,7 @@ initial-value: 0; } @layer utilities { - @scope ([data-bb-plugin="prompt-shaper"], [data-bb-plugin-root]:not([data-bb-plugin]), [data-bb-plugin-decoration="prompt-shaper"]) { + @scope ([data-bb-plugin="prompt-shaper"], [data-bb-plugin-root]:not([data-bb-plugin])) { .collapse { visibility: collapse; } @@ -1434,7 +1434,6 @@ } } } -@scope ([data-bb-plugin="prompt-shaper"], [data-bb-plugin-root]:not([data-bb-plugin]), [data-bb-plugin-decoration="prompt-shaper"]) { /* app.css */ @keyframes bb-improve-prompt-shimmer { from { @@ -1463,5 +1462,3 @@ animation: none; } } - -} diff --git a/plugins/improve-prompt/dist/app.js b/plugins/improve-prompt/dist/app.js index 8878e5a..15bac8a 100644 --- a/plugins/improve-prompt/dist/app.js +++ b/plugins/improve-prompt/dist/app.js @@ -109,9 +109,9 @@ if (runtime2 == null || runtime2.pluginSdkApp == null) { } var mod2 = runtime2.pluginSdkApp; var { + Markdown, + ThreadChat, definePluginApp, - experimental_Markdown, - experimental_ThreadChat, useBbContext, useBbNavigate, useComposer, diff --git a/plugins/improve-prompt/dist/app.meta.json b/plugins/improve-prompt/dist/app.meta.json index 7f23c52..d360eb6 100644 --- a/plugins/improve-prompt/dist/app.meta.json +++ b/plugins/improve-prompt/dist/app.meta.json @@ -1,11 +1,11 @@ { "sdkMajor": 0, - "sdkVersion": "0.4.0", + "sdkVersion": "0.4.1", "artifactFormatVersion": 1, "pluginId": "prompt-shaper", "pluginVersion": "0.1.0", "builtWith": { "bbVersion": "0.0.34", - "pluginSdkVersion": "0.4.0" + "pluginSdkVersion": "0.4.1" } } diff --git a/plugins/improve-prompt/dist/server.meta.json b/plugins/improve-prompt/dist/server.meta.json index 7f23c52..d360eb6 100644 --- a/plugins/improve-prompt/dist/server.meta.json +++ b/plugins/improve-prompt/dist/server.meta.json @@ -1,11 +1,11 @@ { "sdkMajor": 0, - "sdkVersion": "0.4.0", + "sdkVersion": "0.4.1", "artifactFormatVersion": 1, "pluginId": "prompt-shaper", "pluginVersion": "0.1.0", "builtWith": { "bbVersion": "0.0.34", - "pluginSdkVersion": "0.4.0" + "pluginSdkVersion": "0.4.1" } } diff --git a/plugins/improve-prompt/package.json b/plugins/improve-prompt/package.json index 63fefef..a578d9e 100644 --- a/plugins/improve-prompt/package.json +++ b/plugins/improve-prompt/package.json @@ -10,7 +10,7 @@ ], "engines": { "bb": ">=0.0.34", - "bbPluginSdk": "^0.4.0" + "bbPluginSdk": "^0.4.1" }, "bb": { "name": "Improve Prompt", @@ -34,7 +34,7 @@ "tailwind-merge": "^3.4.0" }, "devDependencies": { - "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.1.tgz", "@testing-library/react": "^16.3.2", "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.0.0", diff --git a/plugins/improve-prompt/types/bb-plugin-sdk-app.d.ts b/plugins/improve-prompt/types/bb-plugin-sdk-app.d.ts index 22cf8e7..763f78f 100644 --- a/plugins/improve-prompt/types/bb-plugin-sdk-app.d.ts +++ b/plugins/improve-prompt/types/bb-plugin-sdk-app.d.ts @@ -255,7 +255,7 @@ interface PluginThreadPanelActionRegistration { * right for document-like content. "flush" gives the component the full * tab area (no padding, definite height, no host scrolling) — right for * app-like content that manages its own layout, such as - * `experimental_ThreadChat`. + * `ThreadChat`. */ layout?: "padded" | "flush"; /** @@ -274,9 +274,8 @@ interface PluginPendingInteractionRegistration { /** Context handed to a `sidebarFooterAction`'s `run`. */ interface PluginSidebarFooterActionContext { /** - * Navigate to this plugin's Settings detail page - * (`/settings/plugins/`), where declarative settings and - * `settingsSection` slots render. + * Navigate to this plugin's detail page in Tools, where declarative settings + * and `settingsSection` slots render. */ openSettings(): void; } @@ -361,7 +360,7 @@ interface PluginMessageActionContext { /** * Open one of this plugin's `threadPanelAction` components in the current * thread's side panel — the registration-callback equivalent of - * `useBbNavigate().experimental_openThreadPanel`. Returns true when the host + * `useBbNavigate().openThreadPanel`. Returns true when the host * accepted (the action id exists and the surface has a panel); false * otherwise. */ @@ -395,7 +394,7 @@ interface PluginAppSlots { sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void; fileOpener(registration: PluginFileOpenerRegistration): void; messageDirective(registration: PluginMessageDirectiveRegistration): void; - experimental_messageAction(registration: PluginMessageActionRegistration): void; + messageAction(registration: PluginMessageActionRegistration): void; } interface PluginAppComposer { customize(registration: ComposerCustomization): void; @@ -424,14 +423,14 @@ interface PluginContentScriptRegistration { */ mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise; } -/** Experimental lifecycle surface for trusted frontend content scripts. */ +/** Lifecycle surface for trusted frontend content scripts. */ interface PluginAppContentScripts { register(registration: PluginContentScriptRegistration): void; } interface PluginAppBuilder { slots: PluginAppSlots; composer: PluginAppComposer; - experimental_contentScripts: PluginAppContentScripts; + contentScripts: PluginAppContentScripts; } type PluginAppSetup = (app: PluginAppBuilder) => void; /** @@ -563,8 +562,12 @@ interface PluginComposerThreadRowStatus { icon: string; /** Accessible label for the status glyph. */ label: string; - /** Semantic host color for the status glyph. Defaults to the neutral tone. */ - tone?: "default" | "success"; + /** + * Semantic host treatment for the status glyph. `running` automatically + * shimmers; terminal `success` and `error` tones are static. Defaults to the + * neutral tone. + */ + tone?: "default" | "running" | "success" | "error"; } /** An @-mention pill bound to one of the calling plugin's mention providers. */ interface PluginComposerMention { @@ -684,6 +687,15 @@ interface ThreadChatProps { layout?: "contained" | "document"; /** Bump to focus the composer (ignored by `variant: "timeline"`). */ focusRequest?: number; + /** + * Who controls the permission mode sends run with. "inherit" (default) + * pins every send to the thread's own resolved default and renders the + * picker as a dimmed label — a plugin surface can never widen it. + * "editable" gives this chat its own picker, so the user can raise or + * lower permissions for this thread independently of the thread it was + * forked from. Ignored by `variant: "timeline"` (no composer). + */ + permissionPolicy?: "inherit" | "editable"; className?: string; /** Rendered above the conversation, scrolling with it. */ leadingContent?: ReactNode; @@ -738,7 +750,7 @@ interface BbNavigate { * thread surface. Returns false when the surface has no thread side panel or * the action is unavailable. */ - experimental_openThreadPanel(options: { + openThreadPanel(options: { actionId: string; title?: string; params?: JsonValue; @@ -769,18 +781,18 @@ interface PluginSdkApp { * with `Markdown`, the only components the SDK ships — everything else * stays vendored per §5.5. */ - experimental_ThreadChat: ComponentType; + ThreadChat: ComponentType; /** * The host-owned chat-message markdown renderer (see * {@link MarkdownProps}). */ - experimental_Markdown: ComponentType; + Markdown: ComponentType; useComposerView(): ComposerView; } declare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition; -declare const experimental_ThreadChat: react.ComponentType; -declare const experimental_Markdown: react.ComponentType; +declare const ThreadChat: react.ComponentType; +declare const Markdown: react.ComponentType; declare const useRpc: , StandardSchemaV1>>>>() => PluginRpcClient; declare const useRealtime: (channel: string, handler: (payload: unknown) => void) => void; declare const useRealtimeConnectionState: () => PluginRealtimeConnectionState; @@ -790,5 +802,5 @@ declare const useBbNavigate: () => BbNavigate; declare const useComposer: () => PluginComposerApi; declare const useComposerView: () => ComposerView; -export { definePluginApp, experimental_Markdown, experimental_ThreadChat, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings }; +export { Markdown, ThreadChat, definePluginApp, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings }; export type { BbContext, BbNavigate, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtimeConnectionState, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps }; diff --git a/plugins/improve-prompt/types/bb-plugin-sdk.d.ts b/plugins/improve-prompt/types/bb-plugin-sdk.d.ts index 8125dda..aa4ea0e 100644 --- a/plugins/improve-prompt/types/bb-plugin-sdk.d.ts +++ b/plugins/improve-prompt/types/bb-plugin-sdk.d.ts @@ -260,7 +260,7 @@ interface PluginThreadPanelActionRegistration { * right for document-like content. "flush" gives the component the full * tab area (no padding, definite height, no host scrolling) — right for * app-like content that manages its own layout, such as - * `experimental_ThreadChat`. + * `ThreadChat`. */ layout?: "padded" | "flush"; /** @@ -279,9 +279,8 @@ interface PluginPendingInteractionRegistration { /** Context handed to a `sidebarFooterAction`'s `run`. */ interface PluginSidebarFooterActionContext { /** - * Navigate to this plugin's Settings detail page - * (`/settings/plugins/`), where declarative settings and - * `settingsSection` slots render. + * Navigate to this plugin's detail page in Tools, where declarative settings + * and `settingsSection` slots render. */ openSettings(): void; } @@ -366,7 +365,7 @@ interface PluginMessageActionContext { /** * Open one of this plugin's `threadPanelAction` components in the current * thread's side panel — the registration-callback equivalent of - * `useBbNavigate().experimental_openThreadPanel`. Returns true when the host + * `useBbNavigate().openThreadPanel`. Returns true when the host * accepted (the action id exists and the surface has a panel); false * otherwise. */ @@ -400,7 +399,7 @@ interface PluginAppSlots { sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void; fileOpener(registration: PluginFileOpenerRegistration): void; messageDirective(registration: PluginMessageDirectiveRegistration): void; - experimental_messageAction(registration: PluginMessageActionRegistration): void; + messageAction(registration: PluginMessageActionRegistration): void; } interface PluginAppComposer { customize(registration: ComposerCustomization): void; @@ -429,14 +428,14 @@ interface PluginContentScriptRegistration { */ mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise; } -/** Experimental lifecycle surface for trusted frontend content scripts. */ +/** Lifecycle surface for trusted frontend content scripts. */ interface PluginAppContentScripts { register(registration: PluginContentScriptRegistration): void; } interface PluginAppBuilder { slots: PluginAppSlots; composer: PluginAppComposer; - experimental_contentScripts: PluginAppContentScripts; + contentScripts: PluginAppContentScripts; } type PluginAppSetup = (app: PluginAppBuilder) => void; /** @@ -568,8 +567,12 @@ interface PluginComposerThreadRowStatus { icon: string; /** Accessible label for the status glyph. */ label: string; - /** Semantic host color for the status glyph. Defaults to the neutral tone. */ - tone?: "default" | "success"; + /** + * Semantic host treatment for the status glyph. `running` automatically + * shimmers; terminal `success` and `error` tones are static. Defaults to the + * neutral tone. + */ + tone?: "default" | "running" | "success" | "error"; } /** An @-mention pill bound to one of the calling plugin's mention providers. */ interface PluginComposerMention { @@ -689,6 +692,15 @@ interface ThreadChatProps { layout?: "contained" | "document"; /** Bump to focus the composer (ignored by `variant: "timeline"`). */ focusRequest?: number; + /** + * Who controls the permission mode sends run with. "inherit" (default) + * pins every send to the thread's own resolved default and renders the + * picker as a dimmed label — a plugin surface can never widen it. + * "editable" gives this chat its own picker, so the user can raise or + * lower permissions for this thread independently of the thread it was + * forked from. Ignored by `variant: "timeline"` (no composer). + */ + permissionPolicy?: "inherit" | "editable"; className?: string; /** Rendered above the conversation, scrolling with it. */ leadingContent?: ReactNode; @@ -743,7 +755,7 @@ interface BbNavigate { * thread surface. Returns false when the surface has no thread side panel or * the action is unavailable. */ - experimental_openThreadPanel(options: { + openThreadPanel(options: { actionId: string; title?: string; params?: JsonValue$1; @@ -774,12 +786,12 @@ interface PluginSdkApp { * with `Markdown`, the only components the SDK ships — everything else * stays vendored per §5.5. */ - experimental_ThreadChat: ComponentType; + ThreadChat: ComponentType; /** * The host-owned chat-message markdown renderer (see * {@link MarkdownProps}). */ - experimental_Markdown: ComponentType; + Markdown: ComponentType; useComposerView(): ComposerView; } @@ -790,6 +802,7 @@ interface PluginSdkApp { declare const appSettingsSchema: z$1.ZodObject<{ caffeinate: z$1.ZodBoolean; showKeyboardHints: z$1.ZodBoolean; + steerActiveThreadOnEnter: z$1.ZodBoolean; showUnhandledProviderEvents: z$1.ZodBoolean; codexMemoryEnabled: z$1.ZodBoolean; claudeCodeMemoryEnabled: z$1.ZodBoolean; @@ -1011,7 +1024,7 @@ type Environment = z$1.infer; */ declare const experimentsSchema: z$1.ZodObject<{ claudeCodeMockCliTraffic: z$1.ZodBoolean; - plugins: z$1.ZodBoolean; + toolsHub: z$1.ZodBoolean; sideChatPlugin: z$1.ZodBoolean; }, z$1.core.$strip>; type Experiments = z$1.infer; @@ -3110,11 +3123,47 @@ declare const projectCommandsQuerySchema: z$1.ZodObject<{ environmentId: z$1.ZodOptional, z$1.ZodOptional>>; }, z$1.core.$strict>; type ProjectCommandsQuery = z$1.infer; +declare const skillListResponseSchema: z$1.ZodObject<{ + skills: z$1.ZodArray; + provider: z$1.ZodNullable>; + scope: z$1.ZodEnum<{ + plugin: "plugin"; + "bb-builtin": "bb-builtin"; + "bb-user": "bb-user"; + "bb-project": "bb-project"; + "claude-user": "claude-user"; + "claude-project": "claude-project"; + "codex-user": "codex-user"; + "codex-project": "codex-project"; + }>; + pluginId: z$1.ZodNullable; + filePath: z$1.ZodString; + manageable: z$1.ZodBoolean; + registrySkillId: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SkillListResponse = z$1.infer; +declare const skillContentResponseSchema: z$1.ZodObject<{ + content: z$1.ZodString; + revision: z$1.ZodString; +}, z$1.core.$strip>; +type SkillContentResponse = z$1.infer; +declare const skillFilesResponseSchema: z$1.ZodObject<{ + files: z$1.ZodArray; + truncated: z$1.ZodBoolean; +}, z$1.core.$strip>; +type SkillFilesResponse = z$1.infer; declare const projectResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - standard: "standard"; personal: "personal"; + standard: "standard"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable; @@ -3135,8 +3184,8 @@ type ProjectResponse = z$1.infer; declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - standard: "standard"; personal: "personal"; + standard: "standard"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable; @@ -3238,8 +3287,8 @@ declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ ultra: "ultra"; }>; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; }, z$1.core.$strip>>; @@ -3262,6 +3311,61 @@ declare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{ }, z$1.core.$strict>; type CopyProjectAttachmentsRequest = z$1.infer; +declare const registrySkillSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + skillId: z$1.ZodString; + name: z$1.ZodString; + installs: z$1.ZodNumber; + stars: z$1.ZodNullable; + installUrl: z$1.ZodNullable; + url: z$1.ZodString; + topic: z$1.ZodNullable; + summary: z$1.ZodNullable; +}, z$1.core.$strip>; +type RegistrySkill = z$1.infer; +declare const registrySkillsPageSchema: z$1.ZodObject<{ + skills: z$1.ZodArray; + installUrl: z$1.ZodNullable; + url: z$1.ZodString; + topic: z$1.ZodNullable; + summary: z$1.ZodNullable; + }, z$1.core.$strip>>; + pagination: z$1.ZodObject<{ + page: z$1.ZodNumber; + perPage: z$1.ZodNumber; + total: z$1.ZodNumber; + hasMore: z$1.ZodBoolean; + }, z$1.core.$strip>; +}, z$1.core.$strip>; +type RegistrySkillsPage = z$1.infer; +declare const registryRepositoryStarsSchema: z$1.ZodObject<{ + stars: z$1.ZodNumber; +}, z$1.core.$strip>; +type RegistryRepositoryStars = z$1.infer; +declare const registrySkillDetailSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + skillId: z$1.ZodString; + hash: z$1.ZodNullable; + files: z$1.ZodNullable>>; +}, z$1.core.$strip>; +type RegistrySkillDetail = z$1.infer; +declare const registrySkillInstallResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + filePath: z$1.ZodString; +}, z$1.core.$strip>; +type RegistrySkillInstallResponse = z$1.infer; + declare const updateEnvironmentRequestSchema: z$1.ZodObject<{ mergeBaseBranch: z$1.ZodOptional>; name: z$1.ZodOptional>; @@ -3373,8 +3477,8 @@ declare const environmentDiffFileResponseSchema: z$1.ZodObject<{ path: z$1.ZodString; content: z$1.ZodString; contentEncoding: z$1.ZodEnum<{ - utf8: "utf8"; base64: "base64"; + utf8: "utf8"; }>; mimeType: z$1.ZodOptional; sizeBytes: z$1.ZodNumber; @@ -3986,16 +4090,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4079,9 +4183,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4160,9 +4264,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4253,9 +4357,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4334,9 +4438,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4399,16 +4503,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4517,12 +4621,13 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; - projectId: z$1.ZodString; - providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; - providerThreadId: z$1.ZodString; }, z$1.core.$strict>; target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ mode: z$1.ZodLiteral<"start">; @@ -4653,8 +4757,8 @@ declare const hostDaemonCommandRegistry: { }, z$1.core.$strip>], "mode">; }, z$1.core.$strict>, z$1.ZodObject<{ appliedAs: z$1.ZodEnum<{ - steer: "steer"; "new-turn": "new-turn"; + steer: "steer"; }>; }, z$1.core.$strip>, "settled", false>; "thread.stop": HostDaemonCommandDescriptor<"thread.stop", z$1.ZodObject<{ @@ -4695,16 +4799,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4813,12 +4917,13 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; - projectId: z$1.ZodString; - providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; - providerThreadId: z$1.ZodString; }, z$1.core.$strict>; }, z$1.core.$strict>, z$1.ZodObject<{ cleared: z$1.ZodBoolean; @@ -5095,9 +5199,9 @@ declare const hostDaemonCommandRegistry: { text: z$1.ZodString; startedAt: z$1.ZodOptional; status: z$1.ZodOptional>; metadata: z$1.ZodOptional>; }, z$1.core.$strip>>; @@ -5325,13 +5429,91 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - project: "project"; user: "user"; + project: "project"; }>; description: z$1.ZodNullable; argumentHint: z$1.ZodNullable; }, z$1.core.$strip>>; }, z$1.core.$strip>, "onlineRpc", true>; + "host.list_skills": HostDaemonCommandDescriptor<"host.list_skills", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.list_skills">; + providerId: z$1.ZodString; + cwd: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + skills: z$1.ZodArray; + filePath: z$1.ZodString; + rootKind: z$1.ZodEnum<{ + plugin: "plugin"; + "bb-project": "bb-project"; + "bb-data-dir": "bb-data-dir"; + "bb-builtin": "bb-builtin"; + "provider-project": "provider-project"; + "provider-user": "provider-user"; + }>; + linked: z$1.ZodBoolean; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.delete_skill": HostDaemonCommandDescriptor<"host.delete_skill", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.delete_skill">; + scope: z$1.ZodEnum<{ + "bb-project": "bb-project"; + "bb-user": "bb-user"; + "claude-user": "claude-user"; + "claude-project": "claude-project"; + "codex-user": "codex-user"; + "codex-project": "codex-project"; + }>; + name: z$1.ZodString; + cwd: z$1.ZodNullable; + rootPath: z$1.ZodNullable; + }, z$1.core.$strict>, z$1.ZodObject<{ + deletedPath: z$1.ZodString; + }, z$1.core.$strip>, "onlineRpc", false>; + "host.write_skill": HostDaemonCommandDescriptor<"host.write_skill", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.write_skill">; + scope: z$1.ZodEnum<{ + "bb-project": "bb-project"; + "bb-user": "bb-user"; + }>; + name: z$1.ZodString; + cwd: z$1.ZodNullable; + content: z$1.ZodString; + expectedSha256: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"written">; + filePath: z$1.ZodString; + sha256: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"conflict">; + currentSha256: z$1.ZodNullable; + }, z$1.core.$strip>], "outcome">, "onlineRpc", false>; + "host.install_global_skills": HostDaemonCommandDescriptor<"host.install_global_skills", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.install_global_skills">; + skills: z$1.ZodArray>; + }, z$1.core.$strict>, z$1.ZodObject<{ + installations: z$1.ZodArray>; + }, z$1.core.$strict>, "onlineRpc", false>; + "host.global_skills_status": HostDaemonCommandDescriptor<"host.global_skills_status", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.global_skills_status">; + names: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodObject<{ + entries: z$1.ZodArray; + }, z$1.core.$strict>>; + }, z$1.core.$strict>, "onlineRpc", true>; "host.list_branches": HostDaemonCommandDescriptor<"host.list_branches", z$1.ZodObject<{ type: z$1.ZodLiteral<"host.list_branches">; path: z$1.ZodString; @@ -5728,8 +5910,8 @@ declare const hostDaemonCommandRegistry: { npmGlobalPackageVersion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -5751,8 +5933,8 @@ declare const hostDaemonCommandRegistry: { cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - install: "install"; update: "update"; + install: "install"; }>; type: z$1.ZodLiteral<"provider_cli.install">; }, z$1.core.$strict>, z$1.ZodObject<{ @@ -5892,13 +6074,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -5942,13 +6124,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6004,13 +6186,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6052,13 +6234,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6101,9 +6283,9 @@ declare const hostDaemonCommandRegistry: { conclusion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -6211,8 +6393,8 @@ declare const providerCliInstallRequestSchema: z$1.ZodObject<{ cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - install: "install"; update: "update"; + install: "install"; }>; }, z$1.core.$strip>; type ProviderCliInstallRequest = z$1.infer; @@ -6420,6 +6602,7 @@ declare const installedPluginSchema: z$1.ZodObject<{ description: z$1.ZodNullable; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6460,6 +6643,17 @@ declare const installedPluginSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6477,7 +6671,6 @@ declare const installedPluginSchema: z$1.ZodObject<{ }, z$1.core.$strip>; type InstalledPlugin = z$1.infer; declare const pluginListResponseSchema: z$1.ZodObject<{ - enabled: z$1.ZodBoolean; plugins: z$1.ZodArray; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6553,6 +6747,17 @@ declare const pluginListResponseSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6607,6 +6812,7 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{ description: z$1.ZodNullable; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6647,6 +6853,17 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6707,6 +6924,7 @@ declare const pluginCatalogStatusSchema: z$1.ZodObject<{ type PluginCatalogStatus = z$1.infer; declare const pluginCatalogSearchResultSchema: z$1.ZodObject<{ entryId: z$1.ZodString; + pluginId: z$1.ZodString; displayName: z$1.ZodString; description: z$1.ZodString; icon: z$1.ZodNullable; @@ -6730,8 +6948,8 @@ declare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{ supportsUserQuestion: z$1.ZodBoolean; supportsFork: z$1.ZodBoolean; supportedPermissionModes: z$1.ZodArray>; }, z$1.core.$strip>; @@ -6851,6 +7069,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ generalSettings: z$1.ZodObject<{ caffeinate: z$1.ZodBoolean; showKeyboardHints: z$1.ZodBoolean; + steerActiveThreadOnEnter: z$1.ZodBoolean; showUnhandledProviderEvents: z$1.ZodBoolean; codexMemoryEnabled: z$1.ZodBoolean; claudeCodeMemoryEnabled: z$1.ZodBoolean; @@ -7093,7 +7312,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ }, z$1.core.$strict>>; experiments: z$1.ZodObject<{ claudeCodeMockCliTraffic: z$1.ZodBoolean; - plugins: z$1.ZodBoolean; + toolsHub: z$1.ZodBoolean; sideChatPlugin: z$1.ZodBoolean; }, z$1.core.$strip>; appearance: z$1.ZodObject<{ @@ -7120,6 +7339,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ }, z$1.core.$strip>>; featureFlags: z$1.ZodObject<{ placeholder: z$1.ZodBoolean; + timelineWindowEventBudget: z$1.ZodNumber; }, z$1.core.$strip>; hostDaemonPort: z$1.ZodNullable; primaryHostId: z$1.ZodNullable; @@ -7179,6 +7399,46 @@ type SystemVersionResponse = z$1.infer; declare const systemConfigReloadResponseSchema: z$1.ZodObject<{ ok: z$1.ZodLiteral; }, z$1.core.$strip>; +declare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{ + machines: z$1.ZodArray; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SystemCliSkillsStatusResponse = z$1.infer; +/** The machines to copy the built-in bb CLI skills onto. */ +declare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{ + hostIds: z$1.ZodArray; +}, z$1.core.$strip>; +type SystemInstallCliSkillsRequest = z$1.infer; +/** + * One entry per requested machine. A machine that is offline or otherwise + * refuses the install fails on its own without taking the others down, so the + * caller can report exactly which machines got the skills. + */ +declare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{ + results: z$1.ZodArray; + hostId: z$1.ZodString; + hostName: z$1.ZodString; + installations: z$1.ZodArray>; + }, z$1.core.$strip>, z$1.ZodObject<{ + ok: z$1.ZodLiteral; + hostId: z$1.ZodString; + hostName: z$1.ZodString; + errorMessage: z$1.ZodString; + }, z$1.core.$strip>], "ok">>; +}, z$1.core.$strip>; +type SystemInstallCliSkillsResponse = z$1.infer; type SystemConfigReloadResponse = z$1.infer; declare const terminalSessionSchema: z$1.ZodObject<{ @@ -8041,10 +8301,10 @@ declare const createThreadRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional>>>; title: z$1.ZodOptional; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; visibility: z$1.ZodDefault>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -9141,9 +9401,9 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{ isGitRepo: z$1.ZodBoolean; isWorktree: z$1.ZodBoolean; workspaceProvisionType: z$1.ZodEnum<{ - personal: "personal"; - "managed-worktree": "managed-worktree"; unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; }>; branchName: z$1.ZodNullable; baseBranch: z$1.ZodNullable; @@ -9437,8 +9697,8 @@ declare const threadQueuedMessageListResponseSchema: z$1.ZodArray; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -9619,8 +9879,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ activePromptMode: z$1.ZodNullable; providerId: z$1.ZodEnum<{ - codex: "codex"; "claude-code": "claude-code"; + codex: "codex"; }>; prompt: z$1.ZodString; }, z$1.core.$strict>>; @@ -9630,7 +9890,7 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ startedAt: z$1.ZodNumber; updatedAt: z$1.ZodNumber; }, z$1.core.$strip>>; - activeWorkflow: z$1.ZodNullable; @@ -9811,8 +10071,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ originalModel: z$1.ZodString; fallbackModel: z$1.ZodString; reason: z$1.ZodEnum<{ - provider: "provider"; refusal: "refusal"; + provider: "provider"; }>; message: z$1.ZodString; }, z$1.core.$strip>>; @@ -10669,6 +10929,78 @@ interface StatusArea { get(args?: StatusGetArgs): Promise; } +interface SkillWorkspaceArgs { + projectId: string; + environmentId: string | null; +} +interface SkillListArgs extends SkillWorkspaceArgs { + signal?: AbortSignal; +} +interface SkillIdentityArgs extends SkillListArgs { + skillId: string; +} +interface SkillContentArgs extends SkillIdentityArgs { + path: string; +} +interface SkillUpdateArgs extends SkillWorkspaceArgs { + skillId: string; + content: string; + revision: string; +} +interface SkillDeleteArgs extends SkillWorkspaceArgs { + skillId: string; +} +/** + * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans + * out one per card. Callers pass their query's AbortSignal so abandoning a + * page cancels its requests instead of leaving them in flight. + */ +interface AbortableArgs { + signal?: AbortSignal; +} +interface RegistrySkillsSearchArgs extends AbortableArgs { + query?: string; + page?: number; + perPage?: number; +} +interface RegistrySkillIdArgs extends AbortableArgs { + registrySkillId: string; +} +interface RegistrySkillSourceArgs extends AbortableArgs { + source: string; + skillId: string; +} +interface RegistryRepositoryArgs extends AbortableArgs { + source: string; +} +/** + * Install is a mutation and deliberately takes no signal: its body is parsed + * with a strict schema, so an extra key would throw at runtime. + */ +interface RegistrySkillInstallArgs { + registrySkillId: string; +} +interface SkillsRegistryArea { + detail(args: RegistrySkillSourceArgs): Promise; + get(args: RegistrySkillIdArgs): Promise; + install(args: RegistrySkillInstallArgs): Promise; + repositoryStars(args: RegistryRepositoryArgs): Promise; + search(args?: RegistrySkillsSearchArgs): Promise; +} +interface SkillsArea { + getContent(args: SkillContentArgs): Promise; + list(args: SkillListArgs): Promise; + listFiles(args: SkillIdentityArgs): Promise; + registry: SkillsRegistryArea; + remove(args: SkillDeleteArgs): Promise<{ + deletedPath: string; + }>; + update(args: SkillUpdateArgs): Promise<{ + filePath: string; + revision: string; + }>; +} + type ThemeGetResult = AppTheme; type ThemeCatalogResult = ThemeCatalogResponse; type ThemeSetInput = AppThemeSelection; @@ -10719,6 +11051,14 @@ type SystemAttentionResult = SystemAttentionResponse; type SystemConfigResult = SystemConfigResponse; type SystemExecutionOptionsResult = SystemExecutionOptionsResponse; type SystemReloadConfigResult = SystemConfigReloadResponse; +type SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest; +interface SystemCliSkillsStatusArgs { + /** Omit for every enrolled machine. */ + hostIds?: readonly string[]; + signal?: AbortSignal; +} +type SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse; +type SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse; type SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse; type SystemUpdateExperimentsResult = Experiments; type SystemUpdateGeneralSettingsResult = AppSettings; @@ -10729,6 +11069,14 @@ interface SystemArea { attention(args?: SystemAttentionArgs): Promise; config(args?: SystemConfigArgs): Promise; executionOptions(args?: SystemExecutionOptionsArgs): Promise; + /** + * Copy bb's built-in CLI skills into each named machine's global agent skill + * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install + * independently; the result reports each machine's outcome. + */ + /** Per-machine install state of bb's built-in CLI skills. */ + cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise; + installCliSkills(args: SystemInstallCliSkillsArgs): Promise; reloadConfig(): Promise; transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise; updateExperiments(args: Experiments): Promise; @@ -11148,6 +11496,7 @@ interface BbSdk extends BbRealtime { projects: ProjectsArea; plugins: PluginsArea; providers: ProvidersArea; + skills: SkillsArea; status: StatusArea; system: SystemArea; terminals: TerminalsArea; diff --git a/plugins/thread-hover-cards/dist/app.css b/plugins/thread-hover-cards/dist/app.css index 34960cc..8da731d 100644 --- a/plugins/thread-hover-cards/dist/app.css +++ b/plugins/thread-hover-cards/dist/app.css @@ -107,7 +107,7 @@ initial-value: 0; } @layer utilities { - @scope ([data-bb-plugin="thread-hover-cards"], [data-bb-plugin-root]:not([data-bb-plugin]), [data-bb-plugin-decoration="thread-hover-cards"]) { + @scope ([data-bb-plugin="thread-hover-cards"], [data-bb-plugin-root]:not([data-bb-plugin])) { .collapse { visibility: collapse; } @@ -150,6 +150,9 @@ .flex { display: flex; } + .grid { + display: grid; + } .hidden { display: none; } diff --git a/plugins/thread-hover-cards/dist/app.js b/plugins/thread-hover-cards/dist/app.js index 249a546..95b75a1 100644 --- a/plugins/thread-hover-cards/dist/app.js +++ b/plugins/thread-hover-cards/dist/app.js @@ -5,9 +5,9 @@ if (runtime == null || runtime.pluginSdkApp == null) { } var mod = runtime.pluginSdkApp; var { + Markdown, + ThreadChat, definePluginApp, - experimental_Markdown, - experimental_ThreadChat, useBbContext, useBbNavigate, useComposer, diff --git a/plugins/thread-hover-cards/dist/app.meta.json b/plugins/thread-hover-cards/dist/app.meta.json index 3dda93a..2065ff8 100644 --- a/plugins/thread-hover-cards/dist/app.meta.json +++ b/plugins/thread-hover-cards/dist/app.meta.json @@ -1,11 +1,11 @@ { "sdkMajor": 0, - "sdkVersion": "0.4.0", + "sdkVersion": "0.4.1", "artifactFormatVersion": 1, "pluginId": "thread-hover-cards", "pluginVersion": "0.1.0", "builtWith": { "bbVersion": "0.0.34", - "pluginSdkVersion": "0.4.0" + "pluginSdkVersion": "0.4.1" } } diff --git a/plugins/thread-hover-cards/dist/server.meta.json b/plugins/thread-hover-cards/dist/server.meta.json index 3dda93a..2065ff8 100644 --- a/plugins/thread-hover-cards/dist/server.meta.json +++ b/plugins/thread-hover-cards/dist/server.meta.json @@ -1,11 +1,11 @@ { "sdkMajor": 0, - "sdkVersion": "0.4.0", + "sdkVersion": "0.4.1", "artifactFormatVersion": 1, "pluginId": "thread-hover-cards", "pluginVersion": "0.1.0", "builtWith": { "bbVersion": "0.0.34", - "pluginSdkVersion": "0.4.0" + "pluginSdkVersion": "0.4.1" } } diff --git a/plugins/thread-hover-cards/package.json b/plugins/thread-hover-cards/package.json index c82571b..1acd497 100644 --- a/plugins/thread-hover-cards/package.json +++ b/plugins/thread-hover-cards/package.json @@ -16,7 +16,7 @@ }, "engines": { "bb": ">=0.0.34", - "bbPluginSdk": "^0.4.0" + "bbPluginSdk": "^0.4.1" }, "bb": { "name": "Thread Hover Cards", diff --git a/plugins/thread-hover-cards/types/bb-plugin-sdk-app.d.ts b/plugins/thread-hover-cards/types/bb-plugin-sdk-app.d.ts index 22cf8e7..763f78f 100644 --- a/plugins/thread-hover-cards/types/bb-plugin-sdk-app.d.ts +++ b/plugins/thread-hover-cards/types/bb-plugin-sdk-app.d.ts @@ -255,7 +255,7 @@ interface PluginThreadPanelActionRegistration { * right for document-like content. "flush" gives the component the full * tab area (no padding, definite height, no host scrolling) — right for * app-like content that manages its own layout, such as - * `experimental_ThreadChat`. + * `ThreadChat`. */ layout?: "padded" | "flush"; /** @@ -274,9 +274,8 @@ interface PluginPendingInteractionRegistration { /** Context handed to a `sidebarFooterAction`'s `run`. */ interface PluginSidebarFooterActionContext { /** - * Navigate to this plugin's Settings detail page - * (`/settings/plugins/`), where declarative settings and - * `settingsSection` slots render. + * Navigate to this plugin's detail page in Tools, where declarative settings + * and `settingsSection` slots render. */ openSettings(): void; } @@ -361,7 +360,7 @@ interface PluginMessageActionContext { /** * Open one of this plugin's `threadPanelAction` components in the current * thread's side panel — the registration-callback equivalent of - * `useBbNavigate().experimental_openThreadPanel`. Returns true when the host + * `useBbNavigate().openThreadPanel`. Returns true when the host * accepted (the action id exists and the surface has a panel); false * otherwise. */ @@ -395,7 +394,7 @@ interface PluginAppSlots { sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void; fileOpener(registration: PluginFileOpenerRegistration): void; messageDirective(registration: PluginMessageDirectiveRegistration): void; - experimental_messageAction(registration: PluginMessageActionRegistration): void; + messageAction(registration: PluginMessageActionRegistration): void; } interface PluginAppComposer { customize(registration: ComposerCustomization): void; @@ -424,14 +423,14 @@ interface PluginContentScriptRegistration { */ mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise; } -/** Experimental lifecycle surface for trusted frontend content scripts. */ +/** Lifecycle surface for trusted frontend content scripts. */ interface PluginAppContentScripts { register(registration: PluginContentScriptRegistration): void; } interface PluginAppBuilder { slots: PluginAppSlots; composer: PluginAppComposer; - experimental_contentScripts: PluginAppContentScripts; + contentScripts: PluginAppContentScripts; } type PluginAppSetup = (app: PluginAppBuilder) => void; /** @@ -563,8 +562,12 @@ interface PluginComposerThreadRowStatus { icon: string; /** Accessible label for the status glyph. */ label: string; - /** Semantic host color for the status glyph. Defaults to the neutral tone. */ - tone?: "default" | "success"; + /** + * Semantic host treatment for the status glyph. `running` automatically + * shimmers; terminal `success` and `error` tones are static. Defaults to the + * neutral tone. + */ + tone?: "default" | "running" | "success" | "error"; } /** An @-mention pill bound to one of the calling plugin's mention providers. */ interface PluginComposerMention { @@ -684,6 +687,15 @@ interface ThreadChatProps { layout?: "contained" | "document"; /** Bump to focus the composer (ignored by `variant: "timeline"`). */ focusRequest?: number; + /** + * Who controls the permission mode sends run with. "inherit" (default) + * pins every send to the thread's own resolved default and renders the + * picker as a dimmed label — a plugin surface can never widen it. + * "editable" gives this chat its own picker, so the user can raise or + * lower permissions for this thread independently of the thread it was + * forked from. Ignored by `variant: "timeline"` (no composer). + */ + permissionPolicy?: "inherit" | "editable"; className?: string; /** Rendered above the conversation, scrolling with it. */ leadingContent?: ReactNode; @@ -738,7 +750,7 @@ interface BbNavigate { * thread surface. Returns false when the surface has no thread side panel or * the action is unavailable. */ - experimental_openThreadPanel(options: { + openThreadPanel(options: { actionId: string; title?: string; params?: JsonValue; @@ -769,18 +781,18 @@ interface PluginSdkApp { * with `Markdown`, the only components the SDK ships — everything else * stays vendored per §5.5. */ - experimental_ThreadChat: ComponentType; + ThreadChat: ComponentType; /** * The host-owned chat-message markdown renderer (see * {@link MarkdownProps}). */ - experimental_Markdown: ComponentType; + Markdown: ComponentType; useComposerView(): ComposerView; } declare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition; -declare const experimental_ThreadChat: react.ComponentType; -declare const experimental_Markdown: react.ComponentType; +declare const ThreadChat: react.ComponentType; +declare const Markdown: react.ComponentType; declare const useRpc: , StandardSchemaV1>>>>() => PluginRpcClient; declare const useRealtime: (channel: string, handler: (payload: unknown) => void) => void; declare const useRealtimeConnectionState: () => PluginRealtimeConnectionState; @@ -790,5 +802,5 @@ declare const useBbNavigate: () => BbNavigate; declare const useComposer: () => PluginComposerApi; declare const useComposerView: () => ComposerView; -export { definePluginApp, experimental_Markdown, experimental_ThreadChat, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings }; +export { Markdown, ThreadChat, definePluginApp, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings }; export type { BbContext, BbNavigate, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtimeConnectionState, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps }; diff --git a/plugins/thread-hover-cards/types/bb-plugin-sdk.d.ts b/plugins/thread-hover-cards/types/bb-plugin-sdk.d.ts index 8125dda..aa4ea0e 100644 --- a/plugins/thread-hover-cards/types/bb-plugin-sdk.d.ts +++ b/plugins/thread-hover-cards/types/bb-plugin-sdk.d.ts @@ -260,7 +260,7 @@ interface PluginThreadPanelActionRegistration { * right for document-like content. "flush" gives the component the full * tab area (no padding, definite height, no host scrolling) — right for * app-like content that manages its own layout, such as - * `experimental_ThreadChat`. + * `ThreadChat`. */ layout?: "padded" | "flush"; /** @@ -279,9 +279,8 @@ interface PluginPendingInteractionRegistration { /** Context handed to a `sidebarFooterAction`'s `run`. */ interface PluginSidebarFooterActionContext { /** - * Navigate to this plugin's Settings detail page - * (`/settings/plugins/`), where declarative settings and - * `settingsSection` slots render. + * Navigate to this plugin's detail page in Tools, where declarative settings + * and `settingsSection` slots render. */ openSettings(): void; } @@ -366,7 +365,7 @@ interface PluginMessageActionContext { /** * Open one of this plugin's `threadPanelAction` components in the current * thread's side panel — the registration-callback equivalent of - * `useBbNavigate().experimental_openThreadPanel`. Returns true when the host + * `useBbNavigate().openThreadPanel`. Returns true when the host * accepted (the action id exists and the surface has a panel); false * otherwise. */ @@ -400,7 +399,7 @@ interface PluginAppSlots { sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void; fileOpener(registration: PluginFileOpenerRegistration): void; messageDirective(registration: PluginMessageDirectiveRegistration): void; - experimental_messageAction(registration: PluginMessageActionRegistration): void; + messageAction(registration: PluginMessageActionRegistration): void; } interface PluginAppComposer { customize(registration: ComposerCustomization): void; @@ -429,14 +428,14 @@ interface PluginContentScriptRegistration { */ mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise; } -/** Experimental lifecycle surface for trusted frontend content scripts. */ +/** Lifecycle surface for trusted frontend content scripts. */ interface PluginAppContentScripts { register(registration: PluginContentScriptRegistration): void; } interface PluginAppBuilder { slots: PluginAppSlots; composer: PluginAppComposer; - experimental_contentScripts: PluginAppContentScripts; + contentScripts: PluginAppContentScripts; } type PluginAppSetup = (app: PluginAppBuilder) => void; /** @@ -568,8 +567,12 @@ interface PluginComposerThreadRowStatus { icon: string; /** Accessible label for the status glyph. */ label: string; - /** Semantic host color for the status glyph. Defaults to the neutral tone. */ - tone?: "default" | "success"; + /** + * Semantic host treatment for the status glyph. `running` automatically + * shimmers; terminal `success` and `error` tones are static. Defaults to the + * neutral tone. + */ + tone?: "default" | "running" | "success" | "error"; } /** An @-mention pill bound to one of the calling plugin's mention providers. */ interface PluginComposerMention { @@ -689,6 +692,15 @@ interface ThreadChatProps { layout?: "contained" | "document"; /** Bump to focus the composer (ignored by `variant: "timeline"`). */ focusRequest?: number; + /** + * Who controls the permission mode sends run with. "inherit" (default) + * pins every send to the thread's own resolved default and renders the + * picker as a dimmed label — a plugin surface can never widen it. + * "editable" gives this chat its own picker, so the user can raise or + * lower permissions for this thread independently of the thread it was + * forked from. Ignored by `variant: "timeline"` (no composer). + */ + permissionPolicy?: "inherit" | "editable"; className?: string; /** Rendered above the conversation, scrolling with it. */ leadingContent?: ReactNode; @@ -743,7 +755,7 @@ interface BbNavigate { * thread surface. Returns false when the surface has no thread side panel or * the action is unavailable. */ - experimental_openThreadPanel(options: { + openThreadPanel(options: { actionId: string; title?: string; params?: JsonValue$1; @@ -774,12 +786,12 @@ interface PluginSdkApp { * with `Markdown`, the only components the SDK ships — everything else * stays vendored per §5.5. */ - experimental_ThreadChat: ComponentType; + ThreadChat: ComponentType; /** * The host-owned chat-message markdown renderer (see * {@link MarkdownProps}). */ - experimental_Markdown: ComponentType; + Markdown: ComponentType; useComposerView(): ComposerView; } @@ -790,6 +802,7 @@ interface PluginSdkApp { declare const appSettingsSchema: z$1.ZodObject<{ caffeinate: z$1.ZodBoolean; showKeyboardHints: z$1.ZodBoolean; + steerActiveThreadOnEnter: z$1.ZodBoolean; showUnhandledProviderEvents: z$1.ZodBoolean; codexMemoryEnabled: z$1.ZodBoolean; claudeCodeMemoryEnabled: z$1.ZodBoolean; @@ -1011,7 +1024,7 @@ type Environment = z$1.infer; */ declare const experimentsSchema: z$1.ZodObject<{ claudeCodeMockCliTraffic: z$1.ZodBoolean; - plugins: z$1.ZodBoolean; + toolsHub: z$1.ZodBoolean; sideChatPlugin: z$1.ZodBoolean; }, z$1.core.$strip>; type Experiments = z$1.infer; @@ -3110,11 +3123,47 @@ declare const projectCommandsQuerySchema: z$1.ZodObject<{ environmentId: z$1.ZodOptional, z$1.ZodOptional>>; }, z$1.core.$strict>; type ProjectCommandsQuery = z$1.infer; +declare const skillListResponseSchema: z$1.ZodObject<{ + skills: z$1.ZodArray; + provider: z$1.ZodNullable>; + scope: z$1.ZodEnum<{ + plugin: "plugin"; + "bb-builtin": "bb-builtin"; + "bb-user": "bb-user"; + "bb-project": "bb-project"; + "claude-user": "claude-user"; + "claude-project": "claude-project"; + "codex-user": "codex-user"; + "codex-project": "codex-project"; + }>; + pluginId: z$1.ZodNullable; + filePath: z$1.ZodString; + manageable: z$1.ZodBoolean; + registrySkillId: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SkillListResponse = z$1.infer; +declare const skillContentResponseSchema: z$1.ZodObject<{ + content: z$1.ZodString; + revision: z$1.ZodString; +}, z$1.core.$strip>; +type SkillContentResponse = z$1.infer; +declare const skillFilesResponseSchema: z$1.ZodObject<{ + files: z$1.ZodArray; + truncated: z$1.ZodBoolean; +}, z$1.core.$strip>; +type SkillFilesResponse = z$1.infer; declare const projectResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - standard: "standard"; personal: "personal"; + standard: "standard"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable; @@ -3135,8 +3184,8 @@ type ProjectResponse = z$1.infer; declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - standard: "standard"; personal: "personal"; + standard: "standard"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable; @@ -3238,8 +3287,8 @@ declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ ultra: "ultra"; }>; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; }, z$1.core.$strip>>; @@ -3262,6 +3311,61 @@ declare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{ }, z$1.core.$strict>; type CopyProjectAttachmentsRequest = z$1.infer; +declare const registrySkillSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + skillId: z$1.ZodString; + name: z$1.ZodString; + installs: z$1.ZodNumber; + stars: z$1.ZodNullable; + installUrl: z$1.ZodNullable; + url: z$1.ZodString; + topic: z$1.ZodNullable; + summary: z$1.ZodNullable; +}, z$1.core.$strip>; +type RegistrySkill = z$1.infer; +declare const registrySkillsPageSchema: z$1.ZodObject<{ + skills: z$1.ZodArray; + installUrl: z$1.ZodNullable; + url: z$1.ZodString; + topic: z$1.ZodNullable; + summary: z$1.ZodNullable; + }, z$1.core.$strip>>; + pagination: z$1.ZodObject<{ + page: z$1.ZodNumber; + perPage: z$1.ZodNumber; + total: z$1.ZodNumber; + hasMore: z$1.ZodBoolean; + }, z$1.core.$strip>; +}, z$1.core.$strip>; +type RegistrySkillsPage = z$1.infer; +declare const registryRepositoryStarsSchema: z$1.ZodObject<{ + stars: z$1.ZodNumber; +}, z$1.core.$strip>; +type RegistryRepositoryStars = z$1.infer; +declare const registrySkillDetailSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + skillId: z$1.ZodString; + hash: z$1.ZodNullable; + files: z$1.ZodNullable>>; +}, z$1.core.$strip>; +type RegistrySkillDetail = z$1.infer; +declare const registrySkillInstallResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + filePath: z$1.ZodString; +}, z$1.core.$strip>; +type RegistrySkillInstallResponse = z$1.infer; + declare const updateEnvironmentRequestSchema: z$1.ZodObject<{ mergeBaseBranch: z$1.ZodOptional>; name: z$1.ZodOptional>; @@ -3373,8 +3477,8 @@ declare const environmentDiffFileResponseSchema: z$1.ZodObject<{ path: z$1.ZodString; content: z$1.ZodString; contentEncoding: z$1.ZodEnum<{ - utf8: "utf8"; base64: "base64"; + utf8: "utf8"; }>; mimeType: z$1.ZodOptional; sizeBytes: z$1.ZodNumber; @@ -3986,16 +4090,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4079,9 +4183,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4160,9 +4264,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4253,9 +4357,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4334,9 +4438,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4399,16 +4503,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4517,12 +4621,13 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; - projectId: z$1.ZodString; - providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; - providerThreadId: z$1.ZodString; }, z$1.core.$strict>; target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ mode: z$1.ZodLiteral<"start">; @@ -4653,8 +4757,8 @@ declare const hostDaemonCommandRegistry: { }, z$1.core.$strip>], "mode">; }, z$1.core.$strict>, z$1.ZodObject<{ appliedAs: z$1.ZodEnum<{ - steer: "steer"; "new-turn": "new-turn"; + steer: "steer"; }>; }, z$1.core.$strip>, "settled", false>; "thread.stop": HostDaemonCommandDescriptor<"thread.stop", z$1.ZodObject<{ @@ -4695,16 +4799,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4813,12 +4917,13 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; - projectId: z$1.ZodString; - providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; - providerThreadId: z$1.ZodString; }, z$1.core.$strict>; }, z$1.core.$strict>, z$1.ZodObject<{ cleared: z$1.ZodBoolean; @@ -5095,9 +5199,9 @@ declare const hostDaemonCommandRegistry: { text: z$1.ZodString; startedAt: z$1.ZodOptional; status: z$1.ZodOptional>; metadata: z$1.ZodOptional>; }, z$1.core.$strip>>; @@ -5325,13 +5429,91 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - project: "project"; user: "user"; + project: "project"; }>; description: z$1.ZodNullable; argumentHint: z$1.ZodNullable; }, z$1.core.$strip>>; }, z$1.core.$strip>, "onlineRpc", true>; + "host.list_skills": HostDaemonCommandDescriptor<"host.list_skills", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.list_skills">; + providerId: z$1.ZodString; + cwd: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + skills: z$1.ZodArray; + filePath: z$1.ZodString; + rootKind: z$1.ZodEnum<{ + plugin: "plugin"; + "bb-project": "bb-project"; + "bb-data-dir": "bb-data-dir"; + "bb-builtin": "bb-builtin"; + "provider-project": "provider-project"; + "provider-user": "provider-user"; + }>; + linked: z$1.ZodBoolean; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.delete_skill": HostDaemonCommandDescriptor<"host.delete_skill", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.delete_skill">; + scope: z$1.ZodEnum<{ + "bb-project": "bb-project"; + "bb-user": "bb-user"; + "claude-user": "claude-user"; + "claude-project": "claude-project"; + "codex-user": "codex-user"; + "codex-project": "codex-project"; + }>; + name: z$1.ZodString; + cwd: z$1.ZodNullable; + rootPath: z$1.ZodNullable; + }, z$1.core.$strict>, z$1.ZodObject<{ + deletedPath: z$1.ZodString; + }, z$1.core.$strip>, "onlineRpc", false>; + "host.write_skill": HostDaemonCommandDescriptor<"host.write_skill", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.write_skill">; + scope: z$1.ZodEnum<{ + "bb-project": "bb-project"; + "bb-user": "bb-user"; + }>; + name: z$1.ZodString; + cwd: z$1.ZodNullable; + content: z$1.ZodString; + expectedSha256: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"written">; + filePath: z$1.ZodString; + sha256: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"conflict">; + currentSha256: z$1.ZodNullable; + }, z$1.core.$strip>], "outcome">, "onlineRpc", false>; + "host.install_global_skills": HostDaemonCommandDescriptor<"host.install_global_skills", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.install_global_skills">; + skills: z$1.ZodArray>; + }, z$1.core.$strict>, z$1.ZodObject<{ + installations: z$1.ZodArray>; + }, z$1.core.$strict>, "onlineRpc", false>; + "host.global_skills_status": HostDaemonCommandDescriptor<"host.global_skills_status", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.global_skills_status">; + names: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodObject<{ + entries: z$1.ZodArray; + }, z$1.core.$strict>>; + }, z$1.core.$strict>, "onlineRpc", true>; "host.list_branches": HostDaemonCommandDescriptor<"host.list_branches", z$1.ZodObject<{ type: z$1.ZodLiteral<"host.list_branches">; path: z$1.ZodString; @@ -5728,8 +5910,8 @@ declare const hostDaemonCommandRegistry: { npmGlobalPackageVersion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -5751,8 +5933,8 @@ declare const hostDaemonCommandRegistry: { cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - install: "install"; update: "update"; + install: "install"; }>; type: z$1.ZodLiteral<"provider_cli.install">; }, z$1.core.$strict>, z$1.ZodObject<{ @@ -5892,13 +6074,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -5942,13 +6124,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6004,13 +6186,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6052,13 +6234,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6101,9 +6283,9 @@ declare const hostDaemonCommandRegistry: { conclusion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -6211,8 +6393,8 @@ declare const providerCliInstallRequestSchema: z$1.ZodObject<{ cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - install: "install"; update: "update"; + install: "install"; }>; }, z$1.core.$strip>; type ProviderCliInstallRequest = z$1.infer; @@ -6420,6 +6602,7 @@ declare const installedPluginSchema: z$1.ZodObject<{ description: z$1.ZodNullable; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6460,6 +6643,17 @@ declare const installedPluginSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6477,7 +6671,6 @@ declare const installedPluginSchema: z$1.ZodObject<{ }, z$1.core.$strip>; type InstalledPlugin = z$1.infer; declare const pluginListResponseSchema: z$1.ZodObject<{ - enabled: z$1.ZodBoolean; plugins: z$1.ZodArray; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6553,6 +6747,17 @@ declare const pluginListResponseSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6607,6 +6812,7 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{ description: z$1.ZodNullable; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6647,6 +6853,17 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6707,6 +6924,7 @@ declare const pluginCatalogStatusSchema: z$1.ZodObject<{ type PluginCatalogStatus = z$1.infer; declare const pluginCatalogSearchResultSchema: z$1.ZodObject<{ entryId: z$1.ZodString; + pluginId: z$1.ZodString; displayName: z$1.ZodString; description: z$1.ZodString; icon: z$1.ZodNullable; @@ -6730,8 +6948,8 @@ declare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{ supportsUserQuestion: z$1.ZodBoolean; supportsFork: z$1.ZodBoolean; supportedPermissionModes: z$1.ZodArray>; }, z$1.core.$strip>; @@ -6851,6 +7069,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ generalSettings: z$1.ZodObject<{ caffeinate: z$1.ZodBoolean; showKeyboardHints: z$1.ZodBoolean; + steerActiveThreadOnEnter: z$1.ZodBoolean; showUnhandledProviderEvents: z$1.ZodBoolean; codexMemoryEnabled: z$1.ZodBoolean; claudeCodeMemoryEnabled: z$1.ZodBoolean; @@ -7093,7 +7312,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ }, z$1.core.$strict>>; experiments: z$1.ZodObject<{ claudeCodeMockCliTraffic: z$1.ZodBoolean; - plugins: z$1.ZodBoolean; + toolsHub: z$1.ZodBoolean; sideChatPlugin: z$1.ZodBoolean; }, z$1.core.$strip>; appearance: z$1.ZodObject<{ @@ -7120,6 +7339,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ }, z$1.core.$strip>>; featureFlags: z$1.ZodObject<{ placeholder: z$1.ZodBoolean; + timelineWindowEventBudget: z$1.ZodNumber; }, z$1.core.$strip>; hostDaemonPort: z$1.ZodNullable; primaryHostId: z$1.ZodNullable; @@ -7179,6 +7399,46 @@ type SystemVersionResponse = z$1.infer; declare const systemConfigReloadResponseSchema: z$1.ZodObject<{ ok: z$1.ZodLiteral; }, z$1.core.$strip>; +declare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{ + machines: z$1.ZodArray; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SystemCliSkillsStatusResponse = z$1.infer; +/** The machines to copy the built-in bb CLI skills onto. */ +declare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{ + hostIds: z$1.ZodArray; +}, z$1.core.$strip>; +type SystemInstallCliSkillsRequest = z$1.infer; +/** + * One entry per requested machine. A machine that is offline or otherwise + * refuses the install fails on its own without taking the others down, so the + * caller can report exactly which machines got the skills. + */ +declare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{ + results: z$1.ZodArray; + hostId: z$1.ZodString; + hostName: z$1.ZodString; + installations: z$1.ZodArray>; + }, z$1.core.$strip>, z$1.ZodObject<{ + ok: z$1.ZodLiteral; + hostId: z$1.ZodString; + hostName: z$1.ZodString; + errorMessage: z$1.ZodString; + }, z$1.core.$strip>], "ok">>; +}, z$1.core.$strip>; +type SystemInstallCliSkillsResponse = z$1.infer; type SystemConfigReloadResponse = z$1.infer; declare const terminalSessionSchema: z$1.ZodObject<{ @@ -8041,10 +8301,10 @@ declare const createThreadRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional>>>; title: z$1.ZodOptional; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; visibility: z$1.ZodDefault>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -9141,9 +9401,9 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{ isGitRepo: z$1.ZodBoolean; isWorktree: z$1.ZodBoolean; workspaceProvisionType: z$1.ZodEnum<{ - personal: "personal"; - "managed-worktree": "managed-worktree"; unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; }>; branchName: z$1.ZodNullable; baseBranch: z$1.ZodNullable; @@ -9437,8 +9697,8 @@ declare const threadQueuedMessageListResponseSchema: z$1.ZodArray; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -9619,8 +9879,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ activePromptMode: z$1.ZodNullable; providerId: z$1.ZodEnum<{ - codex: "codex"; "claude-code": "claude-code"; + codex: "codex"; }>; prompt: z$1.ZodString; }, z$1.core.$strict>>; @@ -9630,7 +9890,7 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ startedAt: z$1.ZodNumber; updatedAt: z$1.ZodNumber; }, z$1.core.$strip>>; - activeWorkflow: z$1.ZodNullable; @@ -9811,8 +10071,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ originalModel: z$1.ZodString; fallbackModel: z$1.ZodString; reason: z$1.ZodEnum<{ - provider: "provider"; refusal: "refusal"; + provider: "provider"; }>; message: z$1.ZodString; }, z$1.core.$strip>>; @@ -10669,6 +10929,78 @@ interface StatusArea { get(args?: StatusGetArgs): Promise; } +interface SkillWorkspaceArgs { + projectId: string; + environmentId: string | null; +} +interface SkillListArgs extends SkillWorkspaceArgs { + signal?: AbortSignal; +} +interface SkillIdentityArgs extends SkillListArgs { + skillId: string; +} +interface SkillContentArgs extends SkillIdentityArgs { + path: string; +} +interface SkillUpdateArgs extends SkillWorkspaceArgs { + skillId: string; + content: string; + revision: string; +} +interface SkillDeleteArgs extends SkillWorkspaceArgs { + skillId: string; +} +/** + * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans + * out one per card. Callers pass their query's AbortSignal so abandoning a + * page cancels its requests instead of leaving them in flight. + */ +interface AbortableArgs { + signal?: AbortSignal; +} +interface RegistrySkillsSearchArgs extends AbortableArgs { + query?: string; + page?: number; + perPage?: number; +} +interface RegistrySkillIdArgs extends AbortableArgs { + registrySkillId: string; +} +interface RegistrySkillSourceArgs extends AbortableArgs { + source: string; + skillId: string; +} +interface RegistryRepositoryArgs extends AbortableArgs { + source: string; +} +/** + * Install is a mutation and deliberately takes no signal: its body is parsed + * with a strict schema, so an extra key would throw at runtime. + */ +interface RegistrySkillInstallArgs { + registrySkillId: string; +} +interface SkillsRegistryArea { + detail(args: RegistrySkillSourceArgs): Promise; + get(args: RegistrySkillIdArgs): Promise; + install(args: RegistrySkillInstallArgs): Promise; + repositoryStars(args: RegistryRepositoryArgs): Promise; + search(args?: RegistrySkillsSearchArgs): Promise; +} +interface SkillsArea { + getContent(args: SkillContentArgs): Promise; + list(args: SkillListArgs): Promise; + listFiles(args: SkillIdentityArgs): Promise; + registry: SkillsRegistryArea; + remove(args: SkillDeleteArgs): Promise<{ + deletedPath: string; + }>; + update(args: SkillUpdateArgs): Promise<{ + filePath: string; + revision: string; + }>; +} + type ThemeGetResult = AppTheme; type ThemeCatalogResult = ThemeCatalogResponse; type ThemeSetInput = AppThemeSelection; @@ -10719,6 +11051,14 @@ type SystemAttentionResult = SystemAttentionResponse; type SystemConfigResult = SystemConfigResponse; type SystemExecutionOptionsResult = SystemExecutionOptionsResponse; type SystemReloadConfigResult = SystemConfigReloadResponse; +type SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest; +interface SystemCliSkillsStatusArgs { + /** Omit for every enrolled machine. */ + hostIds?: readonly string[]; + signal?: AbortSignal; +} +type SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse; +type SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse; type SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse; type SystemUpdateExperimentsResult = Experiments; type SystemUpdateGeneralSettingsResult = AppSettings; @@ -10729,6 +11069,14 @@ interface SystemArea { attention(args?: SystemAttentionArgs): Promise; config(args?: SystemConfigArgs): Promise; executionOptions(args?: SystemExecutionOptionsArgs): Promise; + /** + * Copy bb's built-in CLI skills into each named machine's global agent skill + * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install + * independently; the result reports each machine's outcome. + */ + /** Per-machine install state of bb's built-in CLI skills. */ + cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise; + installCliSkills(args: SystemInstallCliSkillsArgs): Promise; reloadConfig(): Promise; transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise; updateExperiments(args: Experiments): Promise; @@ -11148,6 +11496,7 @@ interface BbSdk extends BbRealtime { projects: ProjectsArea; plugins: PluginsArea; providers: ProvidersArea; + skills: SkillsArea; status: StatusArea; system: SystemArea; terminals: TerminalsArea; diff --git a/plugins/thread-organizer/app.ts b/plugins/thread-organizer/app.ts index d1a7bf1..08d6001 100644 --- a/plugins/thread-organizer/app.ts +++ b/plugins/thread-organizer/app.ts @@ -3,7 +3,7 @@ import { definePluginApp } from "@bb/plugin-sdk/app"; import { mountInboxSectionCollapser } from "./sidebar-controller.js"; export default definePluginApp((app) => { - app.experimental_contentScripts.register({ + app.contentScripts.register({ id: "collapse-unpinned-destination", mount: ({ signal }) => mountInboxSectionCollapser({ signal }), }); diff --git a/plugins/thread-organizer/dist/app.css b/plugins/thread-organizer/dist/app.css new file mode 100644 index 0000000..3ba6d71 --- /dev/null +++ b/plugins/thread-organizer/dist/app.css @@ -0,0 +1,263 @@ +/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */ +@layer properties; +@layer theme, utilities; +@layer theme { + :root, :host { + --font-sans: var(--font-sans); + --font-serif: var(--font-serif); + --font-mono: var(--font-mono); + --shadow-2xs: var(--shadow-2xs); + --shadow-xs: var(--shadow-xs); + --shadow-sm: var(--shadow-sm); + --shadow-md: var(--shadow-md); + --shadow-lg: var(--shadow-lg); + --shadow-xl: var(--shadow-xl); + --shadow-2xl: var(--shadow-2xl); + --default-transition-duration: 150ms; + --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + --shadow: var(--shadow); + --shadow-lift: var(--shadow-lift); + } +} +@property --tw-animation-delay { + syntax: "*"; + inherits: false; + initial-value: 0s; +} +@property --tw-animation-direction { + syntax: "*"; + inherits: false; + initial-value: normal; +} +@property --tw-animation-duration { + syntax: "*"; + inherits: false; +} +@property --tw-animation-fill-mode { + syntax: "*"; + inherits: false; + initial-value: none; +} +@property --tw-animation-iteration-count { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-enter-blur { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-enter-opacity { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-enter-rotate { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-enter-scale { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-enter-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-enter-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-exit-blur { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-exit-opacity { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-exit-rotate { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-exit-scale { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-exit-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-exit-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@layer utilities { + @scope ([data-bb-plugin="thread-organizer"], [data-bb-plugin-root]:not([data-bb-plugin])) { + .collapse { + visibility: collapse; + } + .visible { + visibility: visible; + } + .absolute { + position: absolute; + } + .relative { + position: relative; + } + .static { + position: static; + } + .container { + width: 100%; + @media (width >= 40rem) { + max-width: 40rem; + } + @media (width >= 48rem) { + max-width: 48rem; + } + @media (width >= 64rem) { + max-width: 64rem; + } + @media (width >= 80rem) { + max-width: 80rem; + } + @media (width >= 96rem) { + max-width: 96rem; + } + } + .block { + display: block; + } + .contents { + display: contents; + } + .grid { + display: grid; + } + .hidden { + display: none; + } + .inline { + display: inline; + } + .lowercase { + text-transform: lowercase; + } + .filter { + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .transition { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .paused { + animation-play-state: paused; + } + .running { + animation-play-state: running; + } + } +} +@property --tw-blur { + syntax: "*"; + inherits: false; +} +@property --tw-brightness { + syntax: "*"; + inherits: false; +} +@property --tw-contrast { + syntax: "*"; + inherits: false; +} +@property --tw-grayscale { + syntax: "*"; + inherits: false; +} +@property --tw-hue-rotate { + syntax: "*"; + inherits: false; +} +@property --tw-invert { + syntax: "*"; + inherits: false; +} +@property --tw-opacity { + syntax: "*"; + inherits: false; +} +@property --tw-saturate { + syntax: "*"; + inherits: false; +} +@property --tw-sepia { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-drop-shadow-size { + syntax: "*"; + inherits: false; +} +@layer properties { + @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { + *, ::before, ::after, ::backdrop { + --tw-animation-delay: 0s; + --tw-animation-direction: normal; + --tw-animation-duration: initial; + --tw-animation-fill-mode: none; + --tw-animation-iteration-count: 1; + --tw-enter-blur: 0; + --tw-enter-opacity: 1; + --tw-enter-rotate: 0; + --tw-enter-scale: 1; + --tw-enter-translate-x: 0; + --tw-enter-translate-y: 0; + --tw-exit-blur: 0; + --tw-exit-opacity: 1; + --tw-exit-rotate: 0; + --tw-exit-scale: 1; + --tw-exit-translate-x: 0; + --tw-exit-translate-y: 0; + --tw-blur: initial; + --tw-brightness: initial; + --tw-contrast: initial; + --tw-grayscale: initial; + --tw-hue-rotate: initial; + --tw-invert: initial; + --tw-opacity: initial; + --tw-saturate: initial; + --tw-sepia: initial; + --tw-drop-shadow: initial; + --tw-drop-shadow-color: initial; + --tw-drop-shadow-alpha: 100%; + --tw-drop-shadow-size: initial; + } + } +} diff --git a/plugins/thread-organizer/dist/app.js b/plugins/thread-organizer/dist/app.js new file mode 100644 index 0000000..ecfed80 --- /dev/null +++ b/plugins/thread-organizer/dist/app.js @@ -0,0 +1,233 @@ +// bb-plugin-runtime-shim:@bb/plugin-sdk/app +var runtime = globalThis.__bbPluginRuntime; +if (runtime == null || runtime.pluginSdkApp == null) { + throw new Error('Cannot load "@bb/plugin-sdk/app": this bundle must be loaded by the BB app, which provides the shared plugin runtime (globalThis.__bbPluginRuntime).'); +} +var mod = runtime.pluginSdkApp; +var { + Markdown, + ThreadChat, + definePluginApp, + useBbContext, + useBbNavigate, + useComposer, + useComposerView, + useRealtime, + useRealtimeConnectionState, + useRpc, + useSettings +} = mod; + +// sidebar-controller.ts +var SIDEBAR_SELECTOR = '[data-sidebar="sidebar"]'; +var STICKY_GROUP_SELECTOR = "[data-sidebar-sticky-group]"; +var THREAD_SELECTOR = "[data-sidebar-thread-id]"; +var SECTION_TOGGLE_SELECTOR = 'button[aria-expanded][aria-label$=" section"]'; +var SECTION_ROW_TOGGLE_SELECTOR = 'button[aria-hidden="true"][tabindex="-1"]'; +function groupToggle(group) { + for (const button of group.querySelectorAll( + SECTION_TOGGLE_SELECTOR + )) { + if (button.closest(STICKY_GROUP_SELECTOR) === group) return button; + } + return null; +} +function isNativePinnedGroup(group) { + const toggle = groupToggle(group); + if (!/^(?:Expand|Collapse) Pinned section$/.test( + toggle?.getAttribute("aria-label") ?? "" + )) { + return false; + } + for (const button of group.querySelectorAll( + `${SECTION_ROW_TOGGLE_SELECTOR}, button[aria-label="Pinned section actions"], button[aria-label="New thread in Pinned"]` + )) { + if (button.closest(STICKY_GROUP_SELECTOR) === group) return false; + } + return true; +} +function visibleThreadGroups(sidebar) { + const groups = /* @__PURE__ */ new Map(); + for (const row of sidebar.querySelectorAll(THREAD_SELECTOR)) { + const id = row.dataset.sidebarThreadId; + const group = row.closest(STICKY_GROUP_SELECTOR); + if (id && group) groups.set(id, group); + } + return groups; +} +function addExpandedGroupAndAncestors(controls, group, userExpandedGroups, pendingUserExpandedGroups) { + let current = group; + while (current) { + const toggle = groupToggle(current); + if (!isNativePinnedGroup(current) && toggle?.getAttribute("aria-expanded") === "true" && !userExpandedGroups.has(current) && !pendingUserExpandedGroups.has(current)) { + controls.add(toggle); + } + current = current.parentElement?.closest(STICKY_GROUP_SELECTOR) ?? null; + } +} +function mountSidebarCollapser(sidebar, signal) { + const expandedByGroup = /* @__PURE__ */ new WeakMap(); + const userExpandedGroups = /* @__PURE__ */ new WeakSet(); + const pendingUserExpandedGroups = /* @__PURE__ */ new WeakSet(); + const controllerCollapseControls = /* @__PURE__ */ new WeakSet(); + const pendingExpansionTimers = /* @__PURE__ */ new Set(); + const knownThreadGroups = visibleThreadGroups(sidebar); + let scheduled = false; + const reconcile = () => { + scheduled = false; + if (signal.aborted || !sidebar.isConnected) return; + const currentThreadGroups = visibleThreadGroups(sidebar); + const controls = /* @__PURE__ */ new Set(); + for (const group of sidebar.querySelectorAll(STICKY_GROUP_SELECTOR)) { + const toggle = groupToggle(group); + if (toggle === null || isNativePinnedGroup(group)) continue; + const expanded = toggle.getAttribute("aria-expanded") === "true"; + const wasExpanded = expandedByGroup.get(group); + if (!expanded) userExpandedGroups.delete(group); + if (expanded && !userExpandedGroups.has(group) && !pendingUserExpandedGroups.has(group) && (wasExpanded === void 0 || wasExpanded === false)) { + controls.add(toggle); + } + } + for (const [id, currentGroup] of currentThreadGroups) { + const previousGroup = knownThreadGroups.get(id); + if (previousGroup && previousGroup !== currentGroup) { + addExpandedGroupAndAncestors( + controls, + currentGroup, + userExpandedGroups, + pendingUserExpandedGroups + ); + } + knownThreadGroups.set(id, currentGroup); + } + for (const control of controls) { + if (control.isConnected && control.getAttribute("aria-expanded") === "true") { + const collapse = (remainingAttempts) => { + if (signal.aborted || !control.isConnected || control.getAttribute("aria-expanded") !== "true") { + return; + } + controllerCollapseControls.add(control); + try { + control.click(); + } finally { + controllerCollapseControls.delete(control); + } + if (remainingAttempts > 1 && control.getAttribute("aria-expanded") === "true") { + queueMicrotask(() => collapse(remainingAttempts - 1)); + } + }; + collapse(2); + } + } + for (const group of sidebar.querySelectorAll(STICKY_GROUP_SELECTOR)) { + const toggle = groupToggle(group); + if (toggle !== null) { + expandedByGroup.set( + group, + toggle.getAttribute("aria-expanded") === "true" + ); + } + } + }; + const recordUserExpansion = (event) => { + const target = event.target; + if (!(target instanceof Element)) return; + const button = target.closest( + `${SECTION_TOGGLE_SELECTOR}, ${SECTION_ROW_TOGGLE_SELECTOR}` + ); + if (button === null) return; + if (controllerCollapseControls.has(button)) return; + const group = button.closest(STICKY_GROUP_SELECTOR); + if (group === null) return; + const toggle = groupToggle(group); + if (toggle?.getAttribute("aria-expanded") === "true") { + userExpandedGroups.add(group); + return; + } + if (toggle !== null) { + pendingUserExpandedGroups.add(group); + const timer = setTimeout(() => { + pendingExpansionTimers.delete(timer); + pendingUserExpandedGroups.delete(group); + if (!signal.aborted && group.isConnected && groupToggle(group)?.getAttribute("aria-expanded") === "true") { + userExpandedGroups.add(group); + } + scheduleReconcile(); + }, 0); + pendingExpansionTimers.add(timer); + } + }; + sidebar.addEventListener("click", recordUserExpansion, true); + const scheduleReconcile = () => { + if (scheduled || signal.aborted) return; + scheduled = true; + queueMicrotask(reconcile); + }; + const observer = new MutationObserver(scheduleReconcile); + observer.observe(sidebar, { + attributeFilter: ["aria-expanded", "aria-label"], + attributes: true, + childList: true, + subtree: true + }); + reconcile(); + signal.addEventListener( + "abort", + () => { + observer.disconnect(); + for (const timer of pendingExpansionTimers) clearTimeout(timer); + pendingExpansionTimers.clear(); + sidebar.removeEventListener("click", recordUserExpansion, true); + }, + { once: true } + ); + return () => { + observer.disconnect(); + for (const timer of pendingExpansionTimers) clearTimeout(timer); + pendingExpansionTimers.clear(); + sidebar.removeEventListener("click", recordUserExpansion, true); + }; +} +function mountInboxSectionCollapser({ + document: targetDocument = document, + signal +}) { + const disposers = /* @__PURE__ */ new Map(); + const mountSidebars = () => { + for (const [sidebar, stop] of disposers) { + if (!sidebar.isConnected) { + stop(); + disposers.delete(sidebar); + } + } + for (const sidebar of targetDocument.querySelectorAll(SIDEBAR_SELECTOR)) { + if (!disposers.has(sidebar)) { + disposers.set(sidebar, mountSidebarCollapser(sidebar, signal)); + } + } + }; + mountSidebars(); + const discoveryObserver = new MutationObserver(mountSidebars); + discoveryObserver.observe(targetDocument.documentElement, { + childList: true, + subtree: true + }); + const dispose = () => { + discoveryObserver.disconnect(); + for (const stop of disposers.values()) stop(); + disposers.clear(); + }; + signal.addEventListener("abort", dispose, { once: true }); + return dispose; +} + +// app.ts +var app_default = definePluginApp((app) => { + app.contentScripts.register({ + id: "collapse-unpinned-destination", + mount: ({ signal }) => mountInboxSectionCollapser({ signal }) + }); +}); +export { + app_default as default +}; diff --git a/plugins/thread-organizer/dist/app.meta.json b/plugins/thread-organizer/dist/app.meta.json new file mode 100644 index 0000000..96e54fd --- /dev/null +++ b/plugins/thread-organizer/dist/app.meta.json @@ -0,0 +1,11 @@ +{ + "sdkMajor": 0, + "sdkVersion": "0.4.1", + "artifactFormatVersion": 1, + "pluginId": "thread-organizer", + "pluginVersion": "0.1.0", + "builtWith": { + "bbVersion": "0.0.34", + "pluginSdkVersion": "0.4.1" + } +} diff --git a/plugins/thread-organizer/dist/server.js b/plugins/thread-organizer/dist/server.js new file mode 100644 index 0000000..db82d51 --- /dev/null +++ b/plugins/thread-organizer/dist/server.js @@ -0,0 +1,1077 @@ +import { createRequire as __createRequire } from "node:module"; +import { dirname as __pathDirname } from "node:path"; +import { fileURLToPath as __fileURLToPath } from "node:url"; +const require = __createRequire(import.meta.url); +var __filename = __fileURLToPath(import.meta.url); +var __dirname = __pathDirname(__filename); + +// core.ts +var SECTION_ALIASES = { + bb: ["bb", "bb quick fixes"], + design: ["design"], + extensions: ["extensions", "bb extensions"], + moss: ["moss"], + qa: ["qa", "quality assurance"], + writing: ["writing"] +}; +var LOW_INFORMATION = /* @__PURE__ */ new Set([ + "continue", + "do it", + "fix", + "go ahead", + "help", + "help me", + "investigate", + "ok", + "okay", + "proceed", + "root cause this", + "sounds good", + "yes" +]); +var ACTION_PATTERNS = [ + { expression: /^take\s+over\b/i, title: "Take Over" }, + { expression: /^clean\s+up\b/i, title: "Clean Up" }, + { expression: /^root\s+cause\b/i, title: "Investigate" }, + { expression: /^investigate\b/i, title: "Investigate" }, + { expression: /^implement\b/i, title: "Implement" }, + { expression: /^optimize\b/i, title: "Optimize" }, + { expression: /^reorganize\b/i, title: "Reorganize" }, + { expression: /^refactor\b/i, title: "Refactor" }, + { expression: /^analyze\b/i, title: "Analyze" }, + { expression: /^create\b/i, title: "Create" }, + { expression: /^design\b/i, title: "Design" }, + { expression: /^rewrite\b/i, title: "Rewrite" }, + { expression: /^refresh\b/i, title: "Refresh" }, + { expression: /^profile\b/i, title: "Profile" }, + { expression: /^review\b/i, title: "Review" }, + { expression: /^rename\b/i, title: "Rename" }, + { expression: /^update\b/i, title: "Update" }, + { expression: /^render\b/i, title: "Render" }, + { expression: /^archive\b/i, title: "Archive" }, + { expression: /^debug\b/i, title: "Debug" }, + { expression: /^build\b/i, title: "Build" }, + { expression: /^write\b/i, title: "Write" }, + { expression: /^style\b/i, title: "Style" }, + { expression: /^move\b/i, title: "Move" }, + { expression: /^open\b/i, title: "Open" }, + { expression: /^audit\b/i, title: "Audit" }, + { expression: /^add\b/i, title: "Add" }, + { expression: /^fix\b/i, title: "Fix" } +]; +var GENERIC_TITLE_WORDS = /* @__PURE__ */ new Set([ + "agent", + "automation", + "bb", + "issue", + "plugin", + "problem", + "task", + "thing", + "this", + "thread" +]); +var TITLE_CONNECTORS = /* @__PURE__ */ new Set([ + "and", + "for", + "from", + "in", + "of", + "on", + "or", + "to", + "with" +]); +var TITLE_ACRONYMS = /* @__PURE__ */ new Set([ + "api", + "bb", + "ci", + "cpu", + "css", + "ds", + "html", + "http", + "https", + "mcp", + "pr", + "qa", + "sdk", + "ui", + "url", + "ux" +]); +function normalize(value) { + return value.normalize("NFKC").replace(/\r\n?/g, "\n").replace(/[ \t]+/g, " ").trim().toLowerCase(); +} +function matches(value, expression) { + expression.lastIndex = 0; + return expression.test(value); +} +function isSubstantiveText(value) { + const normalized = normalize(value).replace(/^\/[a-z0-9:_-]+\s*/i, "").replace(/[.!?]+$/g, "").trim(); + if (normalized.length < 4 || LOW_INFORMATION.has(normalized)) return false; + return !/^(?:https?:\/\/\S+|@[a-z0-9:_-]+)$/i.test(normalized); +} +function isManageableThread(thread) { + return thread.visibility === "visible" && thread.parentThreadId === null && thread.sourceThreadId === null && thread.originKind === null && thread.childOrigin === null && thread.originPluginId === null && thread.archivedAt === null && thread.deletedAt === null; +} +function isEligibleThread(thread) { + return isManageableThread(thread) && thread.status !== "error" && thread.status !== "stopping"; +} +function setScore(scores, target, confidence, reason) { + const current = scores.get(target); + if (current === void 0 || confidence > current.confidence) { + scores.set(target, { confidence, reasons: [reason] }); + return; + } + if (confidence === current.confidence && !current.reasons.includes(reason)) { + current.reasons.push(reason); + } +} +function classifySection(input) { + const project = normalize(input.projectName); + const substantive = input.texts.filter(isSubstantiveText).map(normalize); + const corpus = substantive.join("\n"); + const scores = /* @__PURE__ */ new Map(); + if (matches( + corpus, + /\b(blog(?:\s+post)?|article|essay|positioning|product copy|website copy|editorial)\b/i + )) { + setScore(scores, "writing", 0.96, "explicit editorial intent"); + } + if (project === "ui pattern atlas" || matches( + corpus, + /\b(design system|ui patterns?|information architecture|interaction model|product direction|api surface|figma)\b|design\s*[↔<>-]\s*code/i + )) { + setScore( + scores, + "design", + project === "ui pattern atlas" ? 0.97 : 0.95, + project === "ui pattern atlas" ? "design project identity" : "durable design-system intent" + ); + } + if (matches( + corpus, + /\b(review-only|code review|qa|quality assurance|regression (?:review|test|coverage)|test audit|coverage audit|audit (?:a |the )?(?:pull request|pr|release|tests?))\b/i + )) { + setScore(scores, "qa", 0.98, "explicit verification intent"); + } + const hasCrossCuttingIntent = scores.has("design") || scores.has("qa") || scores.has("writing"); + if (!hasCrossCuttingIntent && ([ + "bb plugins", + "design doctrine", + "loop-machine", + "moss-skills", + "ottonomous", + "prompt shaper" + ].includes(project) || project !== "bb" && matches( + corpus, + /\b(bb\s+plugin|plugin|skill|automation|agent tool|agent tooling)\b/i + ))) { + setScore( + scores, + "extensions", + [ + "bb plugins", + "design doctrine", + "loop-machine", + "moss-skills", + "ottonomous", + "prompt shaper" + ].includes(project) ? 0.98 : 0.96, + [ + "bb plugins", + "design doctrine", + "loop-machine", + "moss-skills", + "ottonomous", + "prompt shaper" + ].includes(project) ? "extension project identity" : "explicit extension intent" + ); + } + const hasSpecificIntent = [...scores.keys()].some( + (target) => ["design", "extensions", "qa", "writing"].includes(target) + ); + if (!hasSpecificIntent && (["moss", "moss collab recovery", "moss-collab"].includes(project) || matches(corpus, /\bmoss(?:-collab)?\b/i))) { + setScore( + scores, + "moss", + ["moss", "moss collab recovery", "moss-collab"].includes(project) ? 0.97 : 0.94, + ["moss", "moss collab recovery", "moss-collab"].includes(project) ? "moss project identity" : "explicit moss product intent" + ); + } + if (project !== "bb" && !hasSpecificIntent && !scores.has("extensions") && matches(corpus, /\bbb\b/i)) { + setScore(scores, "bb", 0.94, "explicit bb product intent"); + } + if (project === "bb" && !hasCrossCuttingIntent) { + setScore(scores, "bb", 0.9, "bb project identity"); + if (matches( + corpus, + /\b(fix|debug|investigate|implement|build|review|refactor|test|ci|server|daemon|sync|branch|pull request|pr\s*#?\d+|issue\s*#?\d+)\b/i + )) { + setScore(scores, "bb", 0.96, "bb engineering intent"); + } + } + const ranked = [...scores.entries()].map(([target, value]) => ({ target, ...value })).sort( + (left, right) => right.confidence - left.confidence || left.target.localeCompare(right.target) + ); + const winner = ranked[0]; + if (winner === void 0) return null; + const runnerUp = ranked[1] ?? null; + return { + confidence: winner.confidence, + margin: winner.confidence - (runnerUp?.confidence ?? 0), + reasons: winner.reasons, + runnerUp: runnerUp?.target ?? null, + target: winner.target + }; +} +function resolveSectionId(sections, target) { + const aliases = new Set(SECTION_ALIASES[target]); + const matches2 = sections.filter( + (section) => aliases.has(normalize(section.name)) + ); + return matches2.length === 1 ? matches2[0].id : null; +} +function stripPromptPreamble(value) { + let result = value.normalize("NFKC").replace(/\r\n?/g, "\n").replace(/^\s*(?:[-*]|\d+[.)])\s+/, "").replace(/^\/[a-z0-9:_-]+\s+/i, "").trim(); + const preambles = [ + /^(?:can|could|would)\s+you\s+/i, + /^can\s+i\s+/i, + /^please\s+/i, + /^i\s+(?:want|need)\s+to\s+/i, + /^i(?:'d| would)\s+like\s+to\s+/i, + /^help\s+me\s+(?:to\s+)?/i, + /^let(?:'s| us)\s+/i + ]; + for (const preamble of preambles) result = result.replace(preamble, ""); + return result.trim(); +} +function displayTitleWord(word, index) { + const lower = word.toLowerCase(); + if (TITLE_ACRONYMS.has(lower)) return lower.toUpperCase(); + if (index > 0 && TITLE_CONNECTORS.has(lower)) return lower; + if (/[0-9↔<>+#./-]/.test(word) && /[A-Z]/.test(word)) return word; + return `${word.charAt(0).toUpperCase()}${word.slice(1).toLowerCase()}`; +} +function deriveTaskTitle(value) { + let prompt = stripPromptPreamble(value); + if (prompt.length === 0 || /^(?:https?:\/\/|@)/i.test(prompt) || !isSubstantiveText(prompt)) { + return null; + } + const action = ACTION_PATTERNS.find( + ({ expression }) => matches(prompt, expression) + ); + if (action === void 0) return null; + prompt = prompt.replace(action.expression, "").trim(); + prompt = prompt.split(/\b(?:so that|because|and then|then|which|that)\b|[\n.!?;:]/i, 1)[0].replace(/^[\s"'`([{]+|[\s"'`\])}]+$/g, "").trim(); + const words = prompt.match(/[A-Za-z0-9][A-Za-z0-9+#./↔<>-]*/g)?.filter(Boolean) ?? []; + while (words.length > 0 && /^(?:a|an|my|our|the|this|these|those)$/i.test(words[0])) { + words.shift(); + } + const actionWordCount = action.title.split(/\s+/).length; + const objectWords = words.slice(0, Math.max(1, 5 - actionWordCount)); + while (objectWords.length > 0 && TITLE_CONNECTORS.has(objectWords.at(-1).toLowerCase())) { + objectWords.pop(); + } + const specificWords = objectWords.filter((word) => { + const normalized = word.toLowerCase(); + return !GENERIC_TITLE_WORDS.has(normalized) && !TITLE_CONNECTORS.has(normalized) && normalized.length > 1; + }); + if (objectWords.length === 0 || specificWords.length === 0) return null; + const objectTitle = objectWords.map((word, index) => displayTitleWord(word, index + actionWordCount)).join(" "); + return { + confidence: 0.92, + title: `${action.title} ${objectTitle}`.trim() + }; +} +function nextEvaluationMilestone(current) { + return current <= 1 ? 5 : current + 10; +} +function advanceEvaluationMilestone(current, completedTurns) { + let next = current; + while (next <= completedTurns) next = nextEvaluationMilestone(next); + return next; +} + +// server.ts +var STATE_PREFIX = "thread:v1:"; +var PERSONAL_PROJECT_ID = "proj_personal"; +var NEW_SECTION_CONFIDENCE = 0.85; +var NEW_SECTION_MARGIN = 0.2; +var MOVE_SECTION_CONFIDENCE = 0.92; +var MOVE_SECTION_MARGIN = 0.25; +var TITLE_CONFIDENCE = 0.9; +var MAX_COMPLETED_EVENT_DRAIN = 100; +var THREAD_LIST_PAGE_SIZE = 100; +var RECONCILIATION_CONCURRENCY = 4; +var RECONCILIATION_INTERVAL_MS = 5 * 6e4; +var RECONCILIATION_RETRY_DELAYS_MS = [100, 500]; +var SECTION_CLASSIFIER_VERSION = 2; +function stateKey(threadId) { + return `${STATE_PREFIX}${threadId}`; +} +function initialState(thread) { + return { + completedTurns: 0, + createdAt: thread.createdAt, + hasAppliedSection: false, + hasAppliedTitle: false, + inboxManagedPinnedAt: null, + inboxObservedPinned: false, + inboxPendingPin: false, + inboxPendingUnpin: false, + inboxLastPhase: null, + inboxSnoozed: false, + lastAppliedSectionId: null, + lastAppliedTitle: null, + lastCompletedSeq: 0, + nextEvaluationTurn: 1, + pendingSectionId: null, + pendingSectionStreak: 0, + sectionClassification: null, + sectionLocked: thread.sectionId !== null, + titleLocked: thread.title !== null, + version: 1 + }; +} +function isThreadState(value) { + if (typeof value !== "object" || value === null) return false; + const state = value; + return state.version === 1 && typeof state.completedTurns === "number" && typeof state.createdAt === "number" && typeof state.hasAppliedSection === "boolean" && typeof state.hasAppliedTitle === "boolean" && (typeof state.inboxManagedPinnedAt === "number" || state.inboxManagedPinnedAt === null || state.inboxManagedPinnedAt === void 0) && (typeof state.inboxObservedPinned === "boolean" || state.inboxObservedPinned === void 0) && (typeof state.inboxPendingPin === "boolean" || state.inboxPendingPin === void 0) && (typeof state.inboxPendingUnpin === "boolean" || state.inboxPendingUnpin === void 0) && (state.inboxLastPhase === "active" || state.inboxLastPhase === "failed" || state.inboxLastPhase === "idle" || state.inboxLastPhase === null || state.inboxLastPhase === void 0) && (typeof state.inboxSnoozed === "boolean" || state.inboxSnoozed === void 0) && (typeof state.lastAppliedSectionId === "string" || state.lastAppliedSectionId === null) && (typeof state.lastAppliedTitle === "string" || state.lastAppliedTitle === null) && typeof state.lastCompletedSeq === "number" && typeof state.nextEvaluationTurn === "number" && (typeof state.pendingSectionId === "string" || state.pendingSectionId === null) && typeof state.pendingSectionStreak === "number" && (state.sectionClassification === void 0 || state.sectionClassification === null || typeof state.sectionClassification === "object" && typeof state.sectionClassification.classifierVersion === "number" && typeof state.sectionClassification.completedTurns === "number" && typeof state.sectionClassification.contextAvailable === "boolean" && (state.sectionClassification.decision === null || typeof state.sectionClassification.decision === "object") && typeof state.sectionClassification.evaluatedAt === "number") && typeof state.sectionLocked === "boolean" && typeof state.titleLocked === "boolean"; +} +function normalizeThreadState(state) { + return { + ...state, + inboxManagedPinnedAt: state.inboxManagedPinnedAt ?? null, + inboxObservedPinned: state.inboxObservedPinned ?? false, + inboxPendingPin: state.inboxPendingPin ?? false, + inboxPendingUnpin: state.inboxPendingUnpin ?? false, + inboxLastPhase: state.inboxLastPhase ?? null, + inboxSnoozed: state.inboxSnoozed ?? false, + sectionClassification: state.sectionClassification ?? null + }; +} +function syncManualLocks(state, thread) { + let changed = false; + if (!state.titleLocked) { + const externalTitle = state.hasAppliedTitle ? thread.title !== state.lastAppliedTitle : thread.title !== null; + if (externalTitle) { + state.titleLocked = true; + changed = true; + } + } + if (!state.sectionLocked) { + const externalSection = state.hasAppliedSection ? thread.sectionId !== state.lastAppliedSectionId : thread.sectionId !== null; + if (externalSection) { + state.sectionLocked = true; + changed = true; + } + } + return changed; +} +function promptTexts(history) { + return [...history].sort((left, right) => left.createdAt - right.createdAt).flatMap( + (entry) => entry.input.flatMap( + (item) => item.type === "text" && item.visibility !== "agent-only" ? [item.text] : [] + ) + ); +} +function mostRecentSubstantiveText(texts) { + for (let index = texts.length - 1; index >= 0; index -= 1) { + const text = texts[index]; + if (isSubstantiveText(text)) return text; + } + return null; +} +function classificationSummary(decision) { + return [ + `target=${decision.target}`, + `confidence=${decision.confidence.toFixed(2)}`, + `margin=${decision.margin.toFixed(2)}`, + `reason=${decision.reasons.join(",")}` + ].join(" "); +} +function delay(milliseconds) { + return new Promise((resolve) => setTimeout(resolve, milliseconds)); +} +function abortableDelay(milliseconds, signal) { + if (signal.aborted) return Promise.resolve(); + return new Promise((resolve) => { + const timeout = setTimeout(finish, milliseconds); + signal.addEventListener("abort", finish, { once: true }); + function finish() { + clearTimeout(timeout); + signal.removeEventListener("abort", finish); + resolve(); + } + }); +} +function plugin(bb) { + const settings = bb.settings.define({ + inboxMode: { + type: "select", + label: "Mode", + description: "Apply organizes threads automatically. Observe only logs proposed changes.", + options: ["observe", "apply"], + default: "apply" + } + }); + const queues = /* @__PURE__ */ new Map(); + let acceptingWork = true; + let disposed = false; + async function readState(threadId) { + const stored = await bb.storage.kv.get(stateKey(threadId)); + if (stored === void 0) return null; + if (isThreadState(stored)) return normalizeThreadState(stored); + bb.log.warn(`thread=${threadId} action=ignore-invalid-state`); + return null; + } + async function saveState(threadId, state) { + await bb.storage.kv.set(stateKey(threadId), state); + } + function enqueue(threadId, work, containErrors = true) { + if (!acceptingWork) return Promise.resolve(); + const previous = queues.get(threadId) ?? Promise.resolve(); + const workPromise = previous.catch(() => void 0).then(async () => { + if (!disposed) await work(); + }); + const contained = containErrors ? workPromise.catch((error) => { + const message = error instanceof Error ? error.message : String(error); + bb.log.error( + `thread=${threadId} action=queue-failed error=${message}` + ); + }) : workPromise; + const current = contained.finally(() => { + if (queues.get(threadId) === current) queues.delete(threadId); + }); + queues.set(threadId, current); + return current; + } + async function loadContextTexts(thread, attempts) { + let loaded = []; + for (let attempt = 0; attempt < attempts; attempt += 1) { + try { + loaded = promptTexts( + await bb.sdk.threads.promptHistory({ + threadId: thread.id, + limit: "6" + }) + ); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + bb.log.debug( + `thread=${thread.id} action=prompt-history-unavailable attempt=${attempt + 1} error=${message}` + ); + } + if (loaded.some(isSubstantiveText) || attempt === attempts - 1) break; + await delay(attempt === 0 ? 150 : 600); + } + return loaded; + } + async function reconcileInbox(thread, state, phase, signal, runStartPinnedAt) { + const { inboxMode } = await settings.get(); + if (signal?.aborted) return; + const threadId = thread.id; + const startedNewRun = phase === "active" && state.inboxLastPhase !== "active"; + if (startedNewRun && thread.pinnedAt === null && state.inboxObservedPinned && runStartPinnedAt === void 0) { + bb.log.debug( + `thread=${threadId} phase=${phase} action=await-run-start-pin-observation` + ); + return; + } + state.inboxLastPhase = phase; + if (startedNewRun) state.inboxSnoozed = false; + if (state.inboxPendingPin && thread.pinnedAt !== null) { + state.inboxManagedPinnedAt = thread.pinnedAt; + state.inboxObservedPinned = true; + state.inboxPendingPin = false; + bb.log.info( + `thread=${threadId} phase=${phase} action=inbox-pin-adopted` + ); + } + let recoveredManagedUnpin = false; + if (state.inboxPendingUnpin && thread.pinnedAt === null) { + state.inboxManagedPinnedAt = null; + state.inboxObservedPinned = false; + state.inboxPendingUnpin = false; + recoveredManagedUnpin = true; + bb.log.info( + `thread=${threadId} phase=${phase} action=inbox-unpin-adopted` + ); + } + if (thread.pinnedAt === null && state.inboxObservedPinned && !recoveredManagedUnpin) { + state.inboxManagedPinnedAt = null; + state.inboxObservedPinned = false; + state.inboxPendingPin = false; + state.inboxPendingUnpin = false; + if (startedNewRun && runStartPinnedAt === null) { + bb.log.info( + `thread=${threadId} phase=${phase} action=prior-run-unpin-observed` + ); + } else { + state.inboxSnoozed = true; + bb.log.info( + `thread=${threadId} phase=${phase} action=inbox-snoozed` + ); + } + } + if (phase !== "active") { + if (thread.pinnedAt !== null) { + if (state.inboxManagedPinnedAt !== null && state.inboxManagedPinnedAt !== thread.pinnedAt) { + state.inboxManagedPinnedAt = null; + } + state.inboxObservedPinned = true; + return; + } + if (state.inboxSnoozed) return; + if (inboxMode !== "apply") { + bb.log.info( + `thread=${threadId} phase=${phase} mode=observe action=propose-inbox-pin` + ); + return; + } + if (signal?.aborted) return; + if (!state.inboxPendingPin) { + state.inboxPendingPin = true; + await saveState(threadId, state); + } + if (signal?.aborted) return; + let pinned; + try { + pinned = await bb.sdk.threads.pin({ threadId }); + } catch (error) { + const fresh = await bb.sdk.threads.get({ threadId }); + state.inboxPendingPin = false; + if (fresh.pinnedAt === null) { + state.inboxManagedPinnedAt = null; + state.inboxObservedPinned = false; + } else { + state.inboxManagedPinnedAt = null; + state.inboxObservedPinned = true; + } + await saveState(threadId, state); + throw error; + } + state.inboxManagedPinnedAt = pinned.pinnedAt; + state.inboxObservedPinned = true; + state.inboxPendingPin = false; + bb.log.info( + `thread=${threadId} phase=${phase} mode=apply action=inbox-pinned` + ); + return; + } + if (thread.pinnedAt === null) { + state.inboxManagedPinnedAt = null; + state.inboxObservedPinned = false; + state.inboxPendingPin = false; + state.inboxPendingUnpin = false; + return; + } + state.inboxObservedPinned = true; + if (state.inboxManagedPinnedAt !== thread.pinnedAt) { + state.inboxManagedPinnedAt = null; + return; + } + if (inboxMode !== "apply") { + bb.log.info( + `thread=${threadId} phase=${phase} mode=observe action=propose-inbox-unpin` + ); + return; + } + if (signal?.aborted) return; + if (!state.inboxPendingUnpin) { + state.inboxPendingUnpin = true; + await saveState(threadId, state); + } + if (signal?.aborted) return; + try { + await bb.sdk.threads.unpin({ threadId }); + } catch (error) { + const fresh = await bb.sdk.threads.get({ threadId }); + state.inboxPendingUnpin = false; + if (fresh.pinnedAt === null) { + state.inboxManagedPinnedAt = null; + state.inboxObservedPinned = false; + state.inboxSnoozed = true; + } else { + if (fresh.pinnedAt !== state.inboxManagedPinnedAt) { + state.inboxManagedPinnedAt = null; + } + state.inboxObservedPinned = true; + } + await saveState(threadId, state); + throw error; + } + state.inboxManagedPinnedAt = null; + state.inboxObservedPinned = false; + state.inboxPendingUnpin = false; + bb.log.info( + `thread=${threadId} phase=${phase} mode=apply action=inbox-unpinned` + ); + } + async function applySection(thread, state, phase, decision, targetSectionId, mode) { + if (state.sectionLocked) return; + const movingManagedSection = thread.sectionId !== null; + if (movingManagedSection && (!state.hasAppliedSection || phase !== "turn")) { + return; + } + const minimumConfidence = movingManagedSection ? MOVE_SECTION_CONFIDENCE : NEW_SECTION_CONFIDENCE; + const minimumMargin = movingManagedSection ? MOVE_SECTION_MARGIN : NEW_SECTION_MARGIN; + if (decision.confidence < minimumConfidence || decision.margin < minimumMargin) { + state.pendingSectionId = null; + state.pendingSectionStreak = 0; + return; + } + if (thread.sectionId === targetSectionId) { + state.pendingSectionId = null; + state.pendingSectionStreak = 0; + return; + } + if (movingManagedSection) { + if (state.pendingSectionId === targetSectionId) { + state.pendingSectionStreak += 1; + } else { + state.pendingSectionId = targetSectionId; + state.pendingSectionStreak = 1; + } + if (state.pendingSectionStreak < 2) return; + } + if (mode !== "apply") { + bb.log.info( + `thread=${thread.id} phase=${phase} mode=observe action=propose-section ${classificationSummary(decision)}` + ); + return; + } + const fresh = await bb.sdk.threads.get({ + threadId: thread.id + }); + syncManualLocks(state, fresh); + if (state.sectionLocked || !isEligibleThread(fresh) || fresh.sectionId !== thread.sectionId) { + return; + } + const updated = await bb.sdk.threads.update({ + threadId: thread.id, + sectionId: targetSectionId + }); + state.hasAppliedSection = true; + state.lastAppliedSectionId = updated.sectionId; + state.pendingSectionId = null; + state.pendingSectionStreak = 0; + bb.log.info( + `thread=${thread.id} phase=${phase} mode=apply action=section-updated ${classificationSummary(decision)}` + ); + } + async function applyTitle(thread, state, phase, texts, mode) { + if (phase !== "turn" || state.titleLocked || thread.title !== null) return; + const source = texts.find(isSubstantiveText) ?? thread.titleFallback ?? void 0; + if (source === void 0) return; + const candidate = deriveTaskTitle(source); + if (candidate === null || candidate.confidence < TITLE_CONFIDENCE) return; + if (mode !== "apply") { + bb.log.info( + `thread=${thread.id} phase=${phase} mode=observe action=propose-title confidence=${candidate.confidence.toFixed(2)} title=${JSON.stringify(candidate.title)}` + ); + return; + } + const fresh = await bb.sdk.threads.get({ + threadId: thread.id + }); + syncManualLocks(state, fresh); + if (state.titleLocked || !isEligibleThread(fresh) || fresh.title !== null) { + return; + } + const updated = await bb.sdk.threads.update({ + threadId: thread.id, + title: candidate.title + }); + state.hasAppliedTitle = true; + state.lastAppliedTitle = updated.title; + bb.log.info( + `thread=${thread.id} phase=${phase} mode=apply action=title-updated confidence=${candidate.confidence.toFixed(2)} title=${JSON.stringify(candidate.title)}` + ); + } + async function evaluate(threadId, phase, signal) { + const state = await readState(threadId); + if (state === null) return; + if (signal?.aborted) return; + const thread = await bb.sdk.threads.get({ threadId }); + if (signal?.aborted) return; + const locksChanged = syncManualLocks(state, thread); + if (locksChanged) { + bb.log.info( + `thread=${threadId} action=manual-lock title=${state.titleLocked} section=${state.sectionLocked}` + ); + } + if (thread.archivedAt !== null || thread.deletedAt !== null) { + await bb.storage.kv.delete(stateKey(threadId)); + return; + } + if (!isEligibleThread(thread)) { + await saveState(threadId, state); + return; + } + const { inboxMode } = await settings.get(); + if (signal?.aborted) return; + const movingManagedSection = state.hasAppliedSection && thread.sectionId !== null; + const canManageSection = !state.sectionLocked && (!movingManagedSection || phase === "turn"); + const cachedClassification = state.sectionClassification; + const needsClassification = canManageSection && (cachedClassification === null || cachedClassification.classifierVersion !== SECTION_CLASSIFIER_VERSION || phase === "active" && (!cachedClassification.contextAvailable || cachedClassification.decision === null) || phase === "turn" && cachedClassification.completedTurns < state.completedTurns); + const needsHistory = needsClassification || phase === "turn"; + const historyTexts = needsHistory ? await loadContextTexts( + thread, + phase === "active" || phase === "created" ? 3 : 1 + ) : []; + if (signal?.aborted) return; + const texts = [ + ...thread.title === null ? [] : [thread.title], + ...thread.titleFallback === null ? [] : [thread.titleFallback], + ...historyTexts + ]; + const latestPromptText = mostRecentSubstantiveText(historyTexts); + const sectionTexts = phase === "turn" && state.hasAppliedSection && thread.sectionId !== null ? latestPromptText === null ? [] : [latestPromptText] : texts; + if (canManageSection) { + try { + let decision = cachedClassification?.decision ?? null; + if (needsClassification) { + const projectName = thread.projectId === PERSONAL_PROJECT_ID ? "Personal" : (await bb.sdk.projects.get({ + projectId: thread.projectId + })).name; + decision = classifySection({ + projectName, + texts: sectionTexts + }); + state.sectionClassification = { + classifierVersion: SECTION_CLASSIFIER_VERSION, + completedTurns: state.completedTurns, + contextAvailable: sectionTexts.some(isSubstantiveText), + decision, + evaluatedAt: Date.now() + }; + bb.log.info( + decision === null ? `thread=${threadId} phase=${phase} action=section-classified target=none` : `thread=${threadId} phase=${phase} action=section-classified ${classificationSummary(decision)}` + ); + } else { + bb.log.debug( + `thread=${threadId} phase=${phase} action=section-cache-hit target=${decision?.target ?? "none"}` + ); + } + if (decision !== null) { + const sectionId = resolveSectionId( + await bb.sdk.threadSections.list(), + decision.target + ); + if (sectionId === null) { + bb.log.warn( + `thread=${threadId} phase=${phase} action=section-unavailable target=${decision.target}` + ); + } else { + await applySection( + thread, + state, + phase, + decision, + sectionId, + inboxMode + ); + } + } else { + state.pendingSectionId = null; + state.pendingSectionStreak = 0; + } + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + bb.log.warn( + `thread=${threadId} phase=${phase} action=section-evaluation-failed error=${message}` + ); + } + } + try { + await applyTitle(thread, state, phase, historyTexts, inboxMode); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + bb.log.warn( + `thread=${threadId} phase=${phase} action=title-evaluation-failed error=${message}` + ); + } + await saveState(threadId, state); + } + async function consumeCompletedTurns(threadId, state) { + let drained = 0; + while (drained < MAX_COMPLETED_EVENT_DRAIN) { + const event = await bb.sdk.threads.events.wait({ + threadId, + type: "turn/completed", + waitMs: "1", + ...state.lastCompletedSeq === 0 ? {} : { afterSeq: String(state.lastCompletedSeq) } + }); + if (event === null) break; + state.lastCompletedSeq = event.seq; + if (event.type === "turn/completed" && event.data.status === "completed") { + state.completedTurns += 1; + } + drained += 1; + } + if (drained === MAX_COMPLETED_EVENT_DRAIN) { + bb.log.warn( + `thread=${threadId} action=turn-drain-capped limit=${MAX_COMPLETED_EVENT_DRAIN}` + ); + } + } + function inboxPhase(thread) { + if (thread.status === "idle") return "idle"; + if (thread.status === "error") return "failed"; + return "active"; + } + async function reconcileManagedThread(threadId, signal) { + if (signal?.aborted) return; + const fresh = await bb.sdk.threads.get({ threadId }); + if (signal?.aborted) return; + if (!isManageableThread(fresh)) { + if (!signal?.aborted) { + await bb.storage.kv.delete(stateKey(threadId)); + } + return; + } + let state = await readState(threadId); + if (signal?.aborted) return; + const adopted = state === null; + if (state === null) { + state = initialState(fresh); + } + if (signal?.aborted) return; + await reconcileInbox(fresh, state, inboxPhase(fresh), signal); + if (signal?.aborted) return; + await saveState(threadId, state); + if (isEligibleThread(fresh) && (adopted || state.sectionClassification?.classifierVersion !== SECTION_CLASSIFIER_VERSION)) { + await evaluate(threadId, "settings", signal); + } + } + async function discoverThreadIds(signal) { + const discovered = /* @__PURE__ */ new Set(); + let foundNewIds = true; + while (foundNewIds && !disposed && !signal.aborted) { + foundNewIds = false; + let offset = 0; + while (!disposed && !signal.aborted) { + const page = await bb.sdk.threads.list({ + archived: false, + excludeSideChats: true, + hasParent: false, + limit: THREAD_LIST_PAGE_SIZE, + offset, + signal + }); + for (const thread of page) { + if (!discovered.has(thread.id)) { + discovered.add(thread.id); + foundNewIds = true; + } + } + if (page.length < THREAD_LIST_PAGE_SIZE) break; + offset += THREAD_LIST_PAGE_SIZE; + } + } + return [...discovered]; + } + async function reconcileWithRetry(threadId, signal) { + for (let attempt = 0; attempt <= RECONCILIATION_RETRY_DELAYS_MS.length; attempt += 1) { + if (signal.aborted) return; + try { + await enqueue( + threadId, + () => reconcileManagedThread(threadId, signal), + false + ); + return; + } catch (error) { + if (signal.aborted) return; + const retryDelay = RECONCILIATION_RETRY_DELAYS_MS[attempt]; + if (retryDelay === void 0) throw error; + const message = error instanceof Error ? error.message : String(error); + bb.log.warn( + `thread=${threadId} action=reconciliation-retry attempt=${attempt + 1} error=${message}` + ); + await abortableDelay(retryDelay, signal); + } + } + } + async function reconcileExistingThreads(signal) { + const threadIds = await discoverThreadIds(signal); + let nextIndex = 0; + let firstError; + const workerCount = Math.min( + RECONCILIATION_CONCURRENCY, + threadIds.length + ); + const workers = Array.from({ length: workerCount }, async () => { + while (!signal.aborted && firstError === void 0) { + const threadId = threadIds[nextIndex]; + nextIndex += 1; + if (threadId === void 0 || signal.aborted) return; + try { + await reconcileWithRetry(threadId, signal); + } catch (error) { + firstError ??= error; + } + } + }); + await Promise.all(workers); + if (firstError !== void 0) throw firstError; + } + bb.events.on( + "thread.created", + ({ thread }) => enqueue(thread.id, async () => { + if (!isEligibleThread(thread)) return; + if (await readState(thread.id) !== null) return; + await saveState(thread.id, initialState(thread)); + await evaluate(thread.id, "created"); + }) + ); + bb.events.on( + "thread.active", + ({ thread }) => enqueue(thread.id, async () => { + await evaluate(thread.id, "active"); + const state = await readState(thread.id); + if (state === null) return; + const fresh = await bb.sdk.threads.get({ + threadId: thread.id + }); + if (!isManageableThread(fresh)) { + await bb.storage.kv.delete(stateKey(thread.id)); + return; + } + await reconcileInbox( + fresh, + state, + inboxPhase(fresh), + void 0, + thread.pinnedAt + ); + await saveState(thread.id, state); + }) + ); + bb.events.on( + "thread.idle", + ({ thread }) => enqueue(thread.id, async () => { + const state = await readState(thread.id); + if (state === null) return; + try { + await consumeCompletedTurns(thread.id, state); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + bb.log.warn( + `thread=${thread.id} action=turn-count-failed error=${message}` + ); + } + const due = state.completedTurns >= state.nextEvaluationTurn; + if (due) { + state.nextEvaluationTurn = advanceEvaluationMilestone( + state.nextEvaluationTurn, + state.completedTurns + ); + } + const fresh = await bb.sdk.threads.get({ + threadId: thread.id + }); + if (!isManageableThread(fresh)) { + await bb.storage.kv.delete(stateKey(thread.id)); + return; + } + await reconcileInbox(fresh, state, inboxPhase(fresh)); + await saveState(thread.id, state); + if (due) await evaluate(thread.id, "turn"); + }) + ); + bb.events.on( + "thread.failed", + ({ thread }) => enqueue(thread.id, async () => { + const state = await readState(thread.id); + if (state === null) return; + const fresh = await bb.sdk.threads.get({ + threadId: thread.id + }); + if (!isManageableThread(fresh)) { + await bb.storage.kv.delete(stateKey(thread.id)); + return; + } + await reconcileInbox(fresh, state, inboxPhase(fresh)); + await saveState(thread.id, state); + }) + ); + const forget = (threadId) => enqueue(threadId, async () => { + await bb.storage.kv.delete(stateKey(threadId)); + }); + bb.events.on("thread.archived", ({ thread }) => forget(thread.id)); + bb.events.on("thread.deleted", ({ thread }) => forget(thread.id)); + let unsubscribeThreadChanges = () => void 0; + try { + unsubscribeThreadChanges = bb.sdk.subscribe({ + event: "thread:changed", + callback(event) { + const threadId = event.id; + if (threadId === void 0 || !event.changes.includes("pin-state-changed") && !event.changes.includes("status-changed")) { + return; + } + void enqueue(threadId, () => reconcileManagedThread(threadId)); + } + }); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + bb.log.warn(`action=realtime-subscribe-failed error=${message}`); + } + settings.onChange((next, previous) => { + if (next.inboxMode === previous.inboxMode) return; + bb.log.info( + `action=mode-changed previous=${previous.inboxMode} next=${next.inboxMode}` + ); + if (next.inboxMode !== "apply") return; + void bb.storage.kv.list(STATE_PREFIX).then(async (keys) => { + for (const key of keys) { + const threadId = key.slice(STATE_PREFIX.length); + await enqueue(threadId, async () => { + const state = await readState(threadId); + if (state === null) return; + const thread = await bb.sdk.threads.get({ + threadId + }); + if (!isManageableThread(thread)) { + await bb.storage.kv.delete(stateKey(threadId)); + return; + } + await reconcileInbox(thread, state, inboxPhase(thread)); + await saveState(threadId, state); + await evaluate(threadId, "settings"); + }); + } + }).catch((error) => { + const message = error instanceof Error ? error.message : String(error); + bb.log.error(`action=apply-mode-evaluation-failed error=${message}`); + }); + }); + bb.background.service("inbox-reconciliation", { + async start(signal) { + while (!signal.aborted) { + await reconcileExistingThreads(signal); + if (signal.aborted) return; + await abortableDelay(RECONCILIATION_INTERVAL_MS, signal); + } + } + }); + bb.onDispose(async () => { + acceptingWork = false; + unsubscribeThreadChanges(); + await Promise.allSettled([...queues.values()]); + disposed = true; + }); + void settings.get().then( + ({ inboxMode }) => bb.log.info(`Thread Organizer loaded mode=${inboxMode}`) + ).catch((error) => { + const message = error instanceof Error ? error.message : String(error); + bb.log.warn(`action=mode-read-failed error=${message}`); + }); +} +export { + plugin as default +}; +//# sourceMappingURL=server.js.map diff --git a/plugins/thread-organizer/dist/server.js.map b/plugins/thread-organizer/dist/server.js.map new file mode 100644 index 0000000..4712d72 --- /dev/null +++ b/plugins/thread-organizer/dist/server.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../core.ts", "../../server.ts"], + "sourcesContent": ["export const SECTION_TARGETS = [\n \"bb\",\n \"extensions\",\n \"design\",\n \"moss\",\n \"qa\",\n \"writing\",\n] as const;\n\nexport type SectionTarget = (typeof SECTION_TARGETS)[number];\n\nexport interface OrganizableThread {\n archivedAt: number | null;\n childOrigin: \"fork\" | \"side-chat\" | null;\n deletedAt: number | null;\n originKind: \"fork\" | \"side-chat\" | null;\n originPluginId: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n status: \"active\" | \"error\" | \"idle\" | \"starting\" | \"stopping\";\n visibility: \"hidden\" | \"visible\";\n}\n\nexport interface SectionClassification {\n confidence: number;\n margin: number;\n reasons: string[];\n runnerUp: SectionTarget | null;\n target: SectionTarget;\n}\n\nexport interface SectionDescriptor {\n id: string;\n name: string;\n}\n\nexport interface TitleCandidate {\n confidence: number;\n title: string;\n}\n\nconst SECTION_ALIASES: Record = {\n bb: [\"bb\", \"bb quick fixes\"],\n design: [\"design\"],\n extensions: [\"extensions\", \"bb extensions\"],\n moss: [\"moss\"],\n qa: [\"qa\", \"quality assurance\"],\n writing: [\"writing\"],\n};\n\nconst LOW_INFORMATION = new Set([\n \"continue\",\n \"do it\",\n \"fix\",\n \"go ahead\",\n \"help\",\n \"help me\",\n \"investigate\",\n \"ok\",\n \"okay\",\n \"proceed\",\n \"root cause this\",\n \"sounds good\",\n \"yes\",\n]);\n\nconst ACTION_PATTERNS: Array<{\n expression: RegExp;\n title: string;\n}> = [\n { expression: /^take\\s+over\\b/i, title: \"Take Over\" },\n { expression: /^clean\\s+up\\b/i, title: \"Clean Up\" },\n { expression: /^root\\s+cause\\b/i, title: \"Investigate\" },\n { expression: /^investigate\\b/i, title: \"Investigate\" },\n { expression: /^implement\\b/i, title: \"Implement\" },\n { expression: /^optimize\\b/i, title: \"Optimize\" },\n { expression: /^reorganize\\b/i, title: \"Reorganize\" },\n { expression: /^refactor\\b/i, title: \"Refactor\" },\n { expression: /^analyze\\b/i, title: \"Analyze\" },\n { expression: /^create\\b/i, title: \"Create\" },\n { expression: /^design\\b/i, title: \"Design\" },\n { expression: /^rewrite\\b/i, title: \"Rewrite\" },\n { expression: /^refresh\\b/i, title: \"Refresh\" },\n { expression: /^profile\\b/i, title: \"Profile\" },\n { expression: /^review\\b/i, title: \"Review\" },\n { expression: /^rename\\b/i, title: \"Rename\" },\n { expression: /^update\\b/i, title: \"Update\" },\n { expression: /^render\\b/i, title: \"Render\" },\n { expression: /^archive\\b/i, title: \"Archive\" },\n { expression: /^debug\\b/i, title: \"Debug\" },\n { expression: /^build\\b/i, title: \"Build\" },\n { expression: /^write\\b/i, title: \"Write\" },\n { expression: /^style\\b/i, title: \"Style\" },\n { expression: /^move\\b/i, title: \"Move\" },\n { expression: /^open\\b/i, title: \"Open\" },\n { expression: /^audit\\b/i, title: \"Audit\" },\n { expression: /^add\\b/i, title: \"Add\" },\n { expression: /^fix\\b/i, title: \"Fix\" },\n];\n\nconst GENERIC_TITLE_WORDS = new Set([\n \"agent\",\n \"automation\",\n \"bb\",\n \"issue\",\n \"plugin\",\n \"problem\",\n \"task\",\n \"thing\",\n \"this\",\n \"thread\",\n]);\n\nconst TITLE_CONNECTORS = new Set([\n \"and\",\n \"for\",\n \"from\",\n \"in\",\n \"of\",\n \"on\",\n \"or\",\n \"to\",\n \"with\",\n]);\n\nconst TITLE_ACRONYMS = new Set([\n \"api\",\n \"bb\",\n \"ci\",\n \"cpu\",\n \"css\",\n \"ds\",\n \"html\",\n \"http\",\n \"https\",\n \"mcp\",\n \"pr\",\n \"qa\",\n \"sdk\",\n \"ui\",\n \"url\",\n \"ux\",\n]);\n\nfunction normalize(value: string): string {\n return value\n .normalize(\"NFKC\")\n .replace(/\\r\\n?/g, \"\\n\")\n .replace(/[ \\t]+/g, \" \")\n .trim()\n .toLowerCase();\n}\n\nfunction matches(value: string, expression: RegExp): boolean {\n expression.lastIndex = 0;\n return expression.test(value);\n}\n\nexport function isSubstantiveText(value: string): boolean {\n const normalized = normalize(value)\n .replace(/^\\/[a-z0-9:_-]+\\s*/i, \"\")\n .replace(/[.!?]+$/g, \"\")\n .trim();\n if (normalized.length < 4 || LOW_INFORMATION.has(normalized)) return false;\n return !/^(?:https?:\\/\\/\\S+|@[a-z0-9:_-]+)$/i.test(normalized);\n}\n\nexport function isManageableThread(thread: OrganizableThread): boolean {\n return (\n thread.visibility === \"visible\" &&\n thread.parentThreadId === null &&\n thread.sourceThreadId === null &&\n thread.originKind === null &&\n thread.childOrigin === null &&\n thread.originPluginId === null &&\n thread.archivedAt === null &&\n thread.deletedAt === null\n );\n}\n\nexport function isEligibleThread(thread: OrganizableThread): boolean {\n return (\n isManageableThread(thread) &&\n thread.status !== \"error\" &&\n thread.status !== \"stopping\"\n );\n}\n\nfunction setScore(\n scores: Map,\n target: SectionTarget,\n confidence: number,\n reason: string,\n): void {\n const current = scores.get(target);\n if (current === undefined || confidence > current.confidence) {\n scores.set(target, { confidence, reasons: [reason] });\n return;\n }\n if (confidence === current.confidence && !current.reasons.includes(reason)) {\n current.reasons.push(reason);\n }\n}\n\nexport function classifySection(input: {\n projectName: string;\n texts: string[];\n}): SectionClassification | null {\n const project = normalize(input.projectName);\n const substantive = input.texts.filter(isSubstantiveText).map(normalize);\n const corpus = substantive.join(\"\\n\");\n const scores = new Map<\n SectionTarget,\n { confidence: number; reasons: string[] }\n >();\n\n if (\n matches(\n corpus,\n /\\b(blog(?:\\s+post)?|article|essay|positioning|product copy|website copy|editorial)\\b/i,\n )\n ) {\n setScore(scores, \"writing\", 0.96, \"explicit editorial intent\");\n }\n\n if (\n project === \"ui pattern atlas\" ||\n matches(\n corpus,\n /\\b(design system|ui patterns?|information architecture|interaction model|product direction|api surface|figma)\\b|design\\s*[\u2194<>-]\\s*code/i,\n )\n ) {\n setScore(\n scores,\n \"design\",\n project === \"ui pattern atlas\" ? 0.97 : 0.95,\n project === \"ui pattern atlas\"\n ? \"design project identity\"\n : \"durable design-system intent\",\n );\n }\n\n if (\n matches(\n corpus,\n /\\b(review-only|code review|qa|quality assurance|regression (?:review|test|coverage)|test audit|coverage audit|audit (?:a |the )?(?:pull request|pr|release|tests?))\\b/i,\n )\n ) {\n setScore(scores, \"qa\", 0.98, \"explicit verification intent\");\n }\n\n const hasCrossCuttingIntent =\n scores.has(\"design\") || scores.has(\"qa\") || scores.has(\"writing\");\n if (\n !hasCrossCuttingIntent &&\n ([\n \"bb plugins\",\n \"design doctrine\",\n \"loop-machine\",\n \"moss-skills\",\n \"ottonomous\",\n \"prompt shaper\",\n ].includes(project) ||\n (project !== \"bb\" &&\n matches(\n corpus,\n /\\b(bb\\s+plugin|plugin|skill|automation|agent tool|agent tooling)\\b/i,\n )))\n ) {\n setScore(\n scores,\n \"extensions\",\n [\n \"bb plugins\",\n \"design doctrine\",\n \"loop-machine\",\n \"moss-skills\",\n \"ottonomous\",\n \"prompt shaper\",\n ].includes(project)\n ? 0.98\n : 0.96,\n [\n \"bb plugins\",\n \"design doctrine\",\n \"loop-machine\",\n \"moss-skills\",\n \"ottonomous\",\n \"prompt shaper\",\n ].includes(project)\n ? \"extension project identity\"\n : \"explicit extension intent\",\n );\n }\n\n const hasSpecificIntent = [...scores.keys()].some((target) =>\n [\"design\", \"extensions\", \"qa\", \"writing\"].includes(target),\n );\n if (\n !hasSpecificIntent &&\n ([\"moss\", \"moss collab recovery\", \"moss-collab\"].includes(project) ||\n matches(corpus, /\\bmoss(?:-collab)?\\b/i))\n ) {\n setScore(\n scores,\n \"moss\",\n [\"moss\", \"moss collab recovery\", \"moss-collab\"].includes(project)\n ? 0.97\n : 0.94,\n [\"moss\", \"moss collab recovery\", \"moss-collab\"].includes(project)\n ? \"moss project identity\"\n : \"explicit moss product intent\",\n );\n }\n\n if (\n project !== \"bb\" &&\n !hasSpecificIntent &&\n !scores.has(\"extensions\") &&\n matches(corpus, /\\bbb\\b/i)\n ) {\n setScore(scores, \"bb\", 0.94, \"explicit bb product intent\");\n }\n\n if (project === \"bb\" && !hasCrossCuttingIntent) {\n setScore(scores, \"bb\", 0.9, \"bb project identity\");\n if (\n matches(\n corpus,\n /\\b(fix|debug|investigate|implement|build|review|refactor|test|ci|server|daemon|sync|branch|pull request|pr\\s*#?\\d+|issue\\s*#?\\d+)\\b/i,\n )\n ) {\n setScore(scores, \"bb\", 0.96, \"bb engineering intent\");\n }\n }\n\n const ranked = [...scores.entries()]\n .map(([target, value]) => ({ target, ...value }))\n .sort(\n (left, right) =>\n right.confidence - left.confidence ||\n left.target.localeCompare(right.target),\n );\n const winner = ranked[0];\n if (winner === undefined) return null;\n const runnerUp = ranked[1] ?? null;\n return {\n confidence: winner.confidence,\n margin: winner.confidence - (runnerUp?.confidence ?? 0),\n reasons: winner.reasons,\n runnerUp: runnerUp?.target ?? null,\n target: winner.target,\n };\n}\n\nexport function resolveSectionId(\n sections: SectionDescriptor[],\n target: SectionTarget,\n): string | null {\n const aliases = new Set(SECTION_ALIASES[target]);\n const matches = sections.filter((section) =>\n aliases.has(normalize(section.name)),\n );\n return matches.length === 1 ? matches[0]!.id : null;\n}\n\nfunction stripPromptPreamble(value: string): string {\n let result = value\n .normalize(\"NFKC\")\n .replace(/\\r\\n?/g, \"\\n\")\n .replace(/^\\s*(?:[-*]|\\d+[.)])\\s+/, \"\")\n .replace(/^\\/[a-z0-9:_-]+\\s+/i, \"\")\n .trim();\n const preambles = [\n /^(?:can|could|would)\\s+you\\s+/i,\n /^can\\s+i\\s+/i,\n /^please\\s+/i,\n /^i\\s+(?:want|need)\\s+to\\s+/i,\n /^i(?:'d| would)\\s+like\\s+to\\s+/i,\n /^help\\s+me\\s+(?:to\\s+)?/i,\n /^let(?:'s| us)\\s+/i,\n ];\n for (const preamble of preambles) result = result.replace(preamble, \"\");\n return result.trim();\n}\n\nfunction displayTitleWord(word: string, index: number): string {\n const lower = word.toLowerCase();\n if (TITLE_ACRONYMS.has(lower)) return lower.toUpperCase();\n if (index > 0 && TITLE_CONNECTORS.has(lower)) return lower;\n if (/[0-9\u2194<>+#./-]/.test(word) && /[A-Z]/.test(word)) return word;\n return `${word.charAt(0).toUpperCase()}${word.slice(1).toLowerCase()}`;\n}\n\nexport function deriveTaskTitle(value: string): TitleCandidate | null {\n let prompt = stripPromptPreamble(value);\n if (\n prompt.length === 0 ||\n /^(?:https?:\\/\\/|@)/i.test(prompt) ||\n !isSubstantiveText(prompt)\n ) {\n return null;\n }\n\n const action = ACTION_PATTERNS.find(({ expression }) =>\n matches(prompt, expression),\n );\n if (action === undefined) return null;\n prompt = prompt.replace(action.expression, \"\").trim();\n prompt = prompt\n .split(/\\b(?:so that|because|and then|then|which|that)\\b|[\\n.!?;:]/i, 1)[0]!\n .replace(/^[\\s\"'`([{]+|[\\s\"'`\\])}]+$/g, \"\")\n .trim();\n\n const words =\n prompt.match(/[A-Za-z0-9][A-Za-z0-9+#./\u2194<>-]*/g)?.filter(Boolean) ?? [];\n while (\n words.length > 0 &&\n /^(?:a|an|my|our|the|this|these|those)$/i.test(words[0]!)\n ) {\n words.shift();\n }\n\n const actionWordCount = action.title.split(/\\s+/).length;\n const objectWords = words.slice(0, Math.max(1, 5 - actionWordCount));\n while (\n objectWords.length > 0 &&\n TITLE_CONNECTORS.has(objectWords.at(-1)!.toLowerCase())\n ) {\n objectWords.pop();\n }\n const specificWords = objectWords.filter((word) => {\n const normalized = word.toLowerCase();\n return (\n !GENERIC_TITLE_WORDS.has(normalized) &&\n !TITLE_CONNECTORS.has(normalized) &&\n normalized.length > 1\n );\n });\n if (objectWords.length === 0 || specificWords.length === 0) return null;\n\n const objectTitle = objectWords\n .map((word, index) => displayTitleWord(word, index + actionWordCount))\n .join(\" \");\n return {\n confidence: 0.92,\n title: `${action.title} ${objectTitle}`.trim(),\n };\n}\n\nexport function nextEvaluationMilestone(current: number): number {\n return current <= 1 ? 5 : current + 10;\n}\n\nexport function advanceEvaluationMilestone(\n current: number,\n completedTurns: number,\n): number {\n let next = current;\n while (next <= completedTurns) next = nextEvaluationMilestone(next);\n return next;\n}\n", "import type { BbPluginApi } from \"@bb/plugin-sdk\";\n\nimport {\n advanceEvaluationMilestone,\n classifySection,\n deriveTaskTitle,\n isEligibleThread,\n isManageableThread,\n isSubstantiveText,\n resolveSectionId,\n type SectionClassification,\n} from \"./core.js\";\n\nconst STATE_PREFIX = \"thread:v1:\";\nconst PERSONAL_PROJECT_ID = \"proj_personal\";\nconst NEW_SECTION_CONFIDENCE = 0.85;\nconst NEW_SECTION_MARGIN = 0.2;\nconst MOVE_SECTION_CONFIDENCE = 0.92;\nconst MOVE_SECTION_MARGIN = 0.25;\nconst TITLE_CONFIDENCE = 0.9;\nconst MAX_COMPLETED_EVENT_DRAIN = 100;\nconst THREAD_LIST_PAGE_SIZE = 100;\nconst RECONCILIATION_CONCURRENCY = 4;\nconst RECONCILIATION_INTERVAL_MS = 5 * 60_000;\nconst RECONCILIATION_RETRY_DELAYS_MS = [100, 500] as const;\nconst SECTION_CLASSIFIER_VERSION = 2;\n\ntype Thread = Awaited>;\ntype ThreadSeed = Pick;\ntype EvaluationPhase = \"active\" | \"created\" | \"settings\" | \"turn\";\n\ninterface SectionClassificationCache {\n classifierVersion: number;\n completedTurns: number;\n contextAvailable: boolean;\n decision: SectionClassification | null;\n evaluatedAt: number;\n}\n\ninterface ThreadState {\n completedTurns: number;\n createdAt: number;\n hasAppliedSection: boolean;\n hasAppliedTitle: boolean;\n inboxManagedPinnedAt: number | null;\n inboxObservedPinned: boolean;\n inboxPendingPin: boolean;\n inboxPendingUnpin: boolean;\n inboxLastPhase: \"active\" | \"failed\" | \"idle\" | null;\n inboxSnoozed: boolean;\n lastAppliedSectionId: string | null;\n lastAppliedTitle: string | null;\n lastCompletedSeq: number;\n nextEvaluationTurn: number;\n pendingSectionId: string | null;\n pendingSectionStreak: number;\n sectionClassification: SectionClassificationCache | null;\n sectionLocked: boolean;\n titleLocked: boolean;\n version: 1;\n}\n\nfunction stateKey(threadId: string): string {\n return `${STATE_PREFIX}${threadId}`;\n}\n\nfunction initialState(thread: ThreadSeed): ThreadState {\n return {\n completedTurns: 0,\n createdAt: thread.createdAt,\n hasAppliedSection: false,\n hasAppliedTitle: false,\n inboxManagedPinnedAt: null,\n inboxObservedPinned: false,\n inboxPendingPin: false,\n inboxPendingUnpin: false,\n inboxLastPhase: null,\n inboxSnoozed: false,\n lastAppliedSectionId: null,\n lastAppliedTitle: null,\n lastCompletedSeq: 0,\n nextEvaluationTurn: 1,\n pendingSectionId: null,\n pendingSectionStreak: 0,\n sectionClassification: null,\n sectionLocked: thread.sectionId !== null,\n titleLocked: thread.title !== null,\n version: 1,\n };\n}\n\nfunction isThreadState(value: unknown): value is ThreadState {\n if (typeof value !== \"object\" || value === null) return false;\n const state = value as Partial;\n return (\n state.version === 1 &&\n typeof state.completedTurns === \"number\" &&\n typeof state.createdAt === \"number\" &&\n typeof state.hasAppliedSection === \"boolean\" &&\n typeof state.hasAppliedTitle === \"boolean\" &&\n (typeof state.inboxManagedPinnedAt === \"number\" ||\n state.inboxManagedPinnedAt === null ||\n state.inboxManagedPinnedAt === undefined) &&\n (typeof state.inboxObservedPinned === \"boolean\" ||\n state.inboxObservedPinned === undefined) &&\n (typeof state.inboxPendingPin === \"boolean\" ||\n state.inboxPendingPin === undefined) &&\n (typeof state.inboxPendingUnpin === \"boolean\" ||\n state.inboxPendingUnpin === undefined) &&\n (state.inboxLastPhase === \"active\" ||\n state.inboxLastPhase === \"failed\" ||\n state.inboxLastPhase === \"idle\" ||\n state.inboxLastPhase === null ||\n state.inboxLastPhase === undefined) &&\n (typeof state.inboxSnoozed === \"boolean\" ||\n state.inboxSnoozed === undefined) &&\n (typeof state.lastAppliedSectionId === \"string\" ||\n state.lastAppliedSectionId === null) &&\n (typeof state.lastAppliedTitle === \"string\" ||\n state.lastAppliedTitle === null) &&\n typeof state.lastCompletedSeq === \"number\" &&\n typeof state.nextEvaluationTurn === \"number\" &&\n (typeof state.pendingSectionId === \"string\" ||\n state.pendingSectionId === null) &&\n typeof state.pendingSectionStreak === \"number\" &&\n (state.sectionClassification === undefined ||\n state.sectionClassification === null ||\n (typeof state.sectionClassification === \"object\" &&\n typeof state.sectionClassification.classifierVersion === \"number\" &&\n typeof state.sectionClassification.completedTurns === \"number\" &&\n typeof state.sectionClassification.contextAvailable === \"boolean\" &&\n (state.sectionClassification.decision === null ||\n typeof state.sectionClassification.decision === \"object\") &&\n typeof state.sectionClassification.evaluatedAt === \"number\")) &&\n typeof state.sectionLocked === \"boolean\" &&\n typeof state.titleLocked === \"boolean\"\n );\n}\n\nfunction normalizeThreadState(state: ThreadState): ThreadState {\n return {\n ...state,\n inboxManagedPinnedAt: state.inboxManagedPinnedAt ?? null,\n inboxObservedPinned: state.inboxObservedPinned ?? false,\n inboxPendingPin: state.inboxPendingPin ?? false,\n inboxPendingUnpin: state.inboxPendingUnpin ?? false,\n inboxLastPhase: state.inboxLastPhase ?? null,\n inboxSnoozed: state.inboxSnoozed ?? false,\n sectionClassification: state.sectionClassification ?? null,\n };\n}\n\nfunction syncManualLocks(state: ThreadState, thread: Thread): boolean {\n let changed = false;\n if (!state.titleLocked) {\n const externalTitle =\n state.hasAppliedTitle\n ? thread.title !== state.lastAppliedTitle\n : thread.title !== null;\n if (externalTitle) {\n state.titleLocked = true;\n changed = true;\n }\n }\n if (!state.sectionLocked) {\n const externalSection =\n state.hasAppliedSection\n ? thread.sectionId !== state.lastAppliedSectionId\n : thread.sectionId !== null;\n if (externalSection) {\n state.sectionLocked = true;\n changed = true;\n }\n }\n return changed;\n}\n\nfunction promptTexts(\n history: Awaited<\n ReturnType\n >,\n): string[] {\n return [...history]\n .sort((left, right) => left.createdAt - right.createdAt)\n .flatMap((entry) =>\n entry.input.flatMap((item) =>\n item.type === \"text\" && item.visibility !== \"agent-only\"\n ? [item.text]\n : [],\n ),\n );\n}\n\nfunction mostRecentSubstantiveText(texts: string[]): string | null {\n for (let index = texts.length - 1; index >= 0; index -= 1) {\n const text = texts[index]!;\n if (isSubstantiveText(text)) return text;\n }\n return null;\n}\n\nfunction classificationSummary(decision: SectionClassification): string {\n return [\n `target=${decision.target}`,\n `confidence=${decision.confidence.toFixed(2)}`,\n `margin=${decision.margin.toFixed(2)}`,\n `reason=${decision.reasons.join(\",\")}`,\n ].join(\" \");\n}\n\nfunction delay(milliseconds: number): Promise {\n return new Promise((resolve) => setTimeout(resolve, milliseconds));\n}\n\nfunction abortableDelay(\n milliseconds: number,\n signal: AbortSignal,\n): Promise {\n if (signal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const timeout = setTimeout(finish, milliseconds);\n signal.addEventListener(\"abort\", finish, { once: true });\n\n function finish(): void {\n clearTimeout(timeout);\n signal.removeEventListener(\"abort\", finish);\n resolve();\n }\n });\n}\n\nexport default function plugin(bb: BbPluginApi): void {\n const settings = bb.settings.define({\n inboxMode: {\n type: \"select\",\n label: \"Mode\",\n description:\n \"Apply organizes threads automatically. Observe only logs proposed changes.\",\n options: [\"observe\", \"apply\"],\n default: \"apply\",\n },\n });\n const queues = new Map>();\n let acceptingWork = true;\n let disposed = false;\n\n async function readState(threadId: string): Promise {\n const stored = await bb.storage.kv.get(stateKey(threadId));\n if (stored === undefined) return null;\n if (isThreadState(stored)) return normalizeThreadState(stored);\n bb.log.warn(`thread=${threadId} action=ignore-invalid-state`);\n return null;\n }\n\n async function saveState(\n threadId: string,\n state: ThreadState,\n ): Promise {\n await bb.storage.kv.set(stateKey(threadId), state);\n }\n\n function enqueue(\n threadId: string,\n work: () => Promise,\n containErrors = true,\n ): Promise {\n if (!acceptingWork) return Promise.resolve();\n const previous = queues.get(threadId) ?? Promise.resolve();\n const workPromise = previous\n .catch(() => undefined)\n .then(async () => {\n if (!disposed) await work();\n });\n const contained = containErrors\n ? workPromise.catch((error: unknown) => {\n const message =\n error instanceof Error ? error.message : String(error);\n bb.log.error(\n `thread=${threadId} action=queue-failed error=${message}`,\n );\n })\n : workPromise;\n const current = contained\n .finally(() => {\n if (queues.get(threadId) === current) queues.delete(threadId);\n });\n queues.set(threadId, current);\n return current;\n }\n\n async function loadContextTexts(\n thread: Thread,\n attempts: number,\n ): Promise {\n let loaded: string[] = [];\n for (let attempt = 0; attempt < attempts; attempt += 1) {\n try {\n loaded = promptTexts(\n await bb.sdk.threads.promptHistory({\n threadId: thread.id,\n limit: \"6\",\n }),\n );\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.debug(\n `thread=${thread.id} action=prompt-history-unavailable attempt=${attempt + 1} error=${message}`,\n );\n }\n if (loaded.some(isSubstantiveText) || attempt === attempts - 1) break;\n await delay(attempt === 0 ? 150 : 600);\n }\n return loaded;\n }\n\n async function reconcileInbox(\n thread: Thread,\n state: ThreadState,\n phase: \"active\" | \"failed\" | \"idle\",\n signal?: AbortSignal,\n runStartPinnedAt?: number | null,\n ): Promise {\n const { inboxMode } = await settings.get();\n if (signal?.aborted) return;\n const threadId = thread.id;\n const startedNewRun =\n phase === \"active\" && state.inboxLastPhase !== \"active\";\n if (\n startedNewRun &&\n thread.pinnedAt === null &&\n state.inboxObservedPinned &&\n runStartPinnedAt === undefined\n ) {\n bb.log.debug(\n `thread=${threadId} phase=${phase} action=await-run-start-pin-observation`,\n );\n return;\n }\n state.inboxLastPhase = phase;\n if (startedNewRun) state.inboxSnoozed = false;\n\n if (state.inboxPendingPin && thread.pinnedAt !== null) {\n state.inboxManagedPinnedAt = thread.pinnedAt;\n state.inboxObservedPinned = true;\n state.inboxPendingPin = false;\n bb.log.info(\n `thread=${threadId} phase=${phase} action=inbox-pin-adopted`,\n );\n }\n\n let recoveredManagedUnpin = false;\n if (state.inboxPendingUnpin && thread.pinnedAt === null) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxPendingUnpin = false;\n recoveredManagedUnpin = true;\n bb.log.info(\n `thread=${threadId} phase=${phase} action=inbox-unpin-adopted`,\n );\n }\n\n if (\n thread.pinnedAt === null &&\n state.inboxObservedPinned &&\n !recoveredManagedUnpin\n ) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxPendingPin = false;\n state.inboxPendingUnpin = false;\n if (startedNewRun && runStartPinnedAt === null) {\n bb.log.info(\n `thread=${threadId} phase=${phase} action=prior-run-unpin-observed`,\n );\n } else {\n state.inboxSnoozed = true;\n bb.log.info(\n `thread=${threadId} phase=${phase} action=inbox-snoozed`,\n );\n }\n }\n\n if (phase !== \"active\") {\n if (thread.pinnedAt !== null) {\n if (\n state.inboxManagedPinnedAt !== null &&\n state.inboxManagedPinnedAt !== thread.pinnedAt\n ) {\n state.inboxManagedPinnedAt = null;\n }\n state.inboxObservedPinned = true;\n return;\n }\n if (state.inboxSnoozed) return;\n if (inboxMode !== \"apply\") {\n bb.log.info(\n `thread=${threadId} phase=${phase} mode=observe action=propose-inbox-pin`,\n );\n return;\n }\n if (signal?.aborted) return;\n if (!state.inboxPendingPin) {\n state.inboxPendingPin = true;\n await saveState(threadId, state);\n }\n if (signal?.aborted) return;\n let pinned: Thread;\n try {\n pinned = await bb.sdk.threads.pin({ threadId });\n } catch (error: unknown) {\n const fresh = (await bb.sdk.threads.get({ threadId })) as Thread;\n state.inboxPendingPin = false;\n if (fresh.pinnedAt === null) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n } else {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = true;\n }\n await saveState(threadId, state);\n throw error;\n }\n state.inboxManagedPinnedAt = pinned.pinnedAt;\n state.inboxObservedPinned = true;\n state.inboxPendingPin = false;\n bb.log.info(\n `thread=${threadId} phase=${phase} mode=apply action=inbox-pinned`,\n );\n return;\n }\n\n if (thread.pinnedAt === null) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxPendingPin = false;\n state.inboxPendingUnpin = false;\n return;\n }\n state.inboxObservedPinned = true;\n if (state.inboxManagedPinnedAt !== thread.pinnedAt) {\n state.inboxManagedPinnedAt = null;\n return;\n }\n if (inboxMode !== \"apply\") {\n bb.log.info(\n `thread=${threadId} phase=${phase} mode=observe action=propose-inbox-unpin`,\n );\n return;\n }\n if (signal?.aborted) return;\n if (!state.inboxPendingUnpin) {\n state.inboxPendingUnpin = true;\n await saveState(threadId, state);\n }\n if (signal?.aborted) return;\n try {\n await bb.sdk.threads.unpin({ threadId });\n } catch (error: unknown) {\n const fresh = (await bb.sdk.threads.get({ threadId })) as Thread;\n state.inboxPendingUnpin = false;\n if (fresh.pinnedAt === null) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxSnoozed = true;\n } else {\n if (fresh.pinnedAt !== state.inboxManagedPinnedAt) {\n state.inboxManagedPinnedAt = null;\n }\n state.inboxObservedPinned = true;\n }\n await saveState(threadId, state);\n throw error;\n }\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxPendingUnpin = false;\n bb.log.info(\n `thread=${threadId} phase=${phase} mode=apply action=inbox-unpinned`,\n );\n }\n\n async function applySection(\n thread: Thread,\n state: ThreadState,\n phase: EvaluationPhase,\n decision: SectionClassification,\n targetSectionId: string,\n mode: string,\n ): Promise {\n if (state.sectionLocked) return;\n\n const movingManagedSection = thread.sectionId !== null;\n if (\n movingManagedSection &&\n (!state.hasAppliedSection || phase !== \"turn\")\n ) {\n return;\n }\n const minimumConfidence = movingManagedSection\n ? MOVE_SECTION_CONFIDENCE\n : NEW_SECTION_CONFIDENCE;\n const minimumMargin = movingManagedSection\n ? MOVE_SECTION_MARGIN\n : NEW_SECTION_MARGIN;\n if (\n decision.confidence < minimumConfidence ||\n decision.margin < minimumMargin\n ) {\n state.pendingSectionId = null;\n state.pendingSectionStreak = 0;\n return;\n }\n if (thread.sectionId === targetSectionId) {\n state.pendingSectionId = null;\n state.pendingSectionStreak = 0;\n return;\n }\n\n if (movingManagedSection) {\n if (state.pendingSectionId === targetSectionId) {\n state.pendingSectionStreak += 1;\n } else {\n state.pendingSectionId = targetSectionId;\n state.pendingSectionStreak = 1;\n }\n if (state.pendingSectionStreak < 2) return;\n }\n\n if (mode !== \"apply\") {\n bb.log.info(\n `thread=${thread.id} phase=${phase} mode=observe action=propose-section ${classificationSummary(decision)}`,\n );\n return;\n }\n\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n syncManualLocks(state, fresh);\n if (\n state.sectionLocked ||\n !isEligibleThread(fresh) ||\n fresh.sectionId !== thread.sectionId\n ) {\n return;\n }\n const updated = await bb.sdk.threads.update({\n threadId: thread.id,\n sectionId: targetSectionId,\n });\n state.hasAppliedSection = true;\n state.lastAppliedSectionId = updated.sectionId;\n state.pendingSectionId = null;\n state.pendingSectionStreak = 0;\n bb.log.info(\n `thread=${thread.id} phase=${phase} mode=apply action=section-updated ${classificationSummary(decision)}`,\n );\n }\n\n async function applyTitle(\n thread: Thread,\n state: ThreadState,\n phase: EvaluationPhase,\n texts: string[],\n mode: string,\n ): Promise {\n if (phase !== \"turn\" || state.titleLocked || thread.title !== null) return;\n const source =\n texts.find(isSubstantiveText) ?? thread.titleFallback ?? undefined;\n if (source === undefined) return;\n const candidate = deriveTaskTitle(source);\n if (candidate === null || candidate.confidence < TITLE_CONFIDENCE) return;\n\n if (mode !== \"apply\") {\n bb.log.info(\n `thread=${thread.id} phase=${phase} mode=observe action=propose-title confidence=${candidate.confidence.toFixed(2)} title=${JSON.stringify(candidate.title)}`,\n );\n return;\n }\n\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n syncManualLocks(state, fresh);\n if (state.titleLocked || !isEligibleThread(fresh) || fresh.title !== null) {\n return;\n }\n const updated = await bb.sdk.threads.update({\n threadId: thread.id,\n title: candidate.title,\n });\n state.hasAppliedTitle = true;\n state.lastAppliedTitle = updated.title;\n bb.log.info(\n `thread=${thread.id} phase=${phase} mode=apply action=title-updated confidence=${candidate.confidence.toFixed(2)} title=${JSON.stringify(candidate.title)}`,\n );\n }\n\n async function evaluate(\n threadId: string,\n phase: EvaluationPhase,\n signal?: AbortSignal,\n ): Promise {\n const state = await readState(threadId);\n if (state === null) return;\n if (signal?.aborted) return;\n const thread = (await bb.sdk.threads.get({ threadId })) as Thread;\n if (signal?.aborted) return;\n const locksChanged = syncManualLocks(state, thread);\n if (locksChanged) {\n bb.log.info(\n `thread=${threadId} action=manual-lock title=${state.titleLocked} section=${state.sectionLocked}`,\n );\n }\n if (thread.archivedAt !== null || thread.deletedAt !== null) {\n await bb.storage.kv.delete(stateKey(threadId));\n return;\n }\n if (!isEligibleThread(thread)) {\n await saveState(threadId, state);\n return;\n }\n\n const { inboxMode } = await settings.get();\n if (signal?.aborted) return;\n const movingManagedSection =\n state.hasAppliedSection && thread.sectionId !== null;\n const canManageSection =\n !state.sectionLocked &&\n (!movingManagedSection || phase === \"turn\");\n const cachedClassification = state.sectionClassification;\n const needsClassification =\n canManageSection &&\n (cachedClassification === null ||\n cachedClassification.classifierVersion !== SECTION_CLASSIFIER_VERSION ||\n (phase === \"active\" &&\n (!cachedClassification.contextAvailable ||\n cachedClassification.decision === null)) ||\n (phase === \"turn\" &&\n cachedClassification.completedTurns < state.completedTurns));\n const needsHistory = needsClassification || phase === \"turn\";\n const historyTexts = needsHistory\n ? await loadContextTexts(\n thread,\n phase === \"active\" || phase === \"created\" ? 3 : 1,\n )\n : [];\n if (signal?.aborted) return;\n const texts = [\n ...(thread.title === null ? [] : [thread.title]),\n ...(thread.titleFallback === null ? [] : [thread.titleFallback]),\n ...historyTexts,\n ];\n const latestPromptText = mostRecentSubstantiveText(historyTexts);\n const sectionTexts =\n phase === \"turn\" &&\n state.hasAppliedSection &&\n thread.sectionId !== null\n ? latestPromptText === null\n ? []\n : [latestPromptText]\n : texts;\n\n if (canManageSection) {\n try {\n let decision = cachedClassification?.decision ?? null;\n if (needsClassification) {\n const projectName =\n thread.projectId === PERSONAL_PROJECT_ID\n ? \"Personal\"\n : (\n await bb.sdk.projects.get({\n projectId: thread.projectId,\n })\n ).name;\n decision = classifySection({\n projectName,\n texts: sectionTexts,\n });\n state.sectionClassification = {\n classifierVersion: SECTION_CLASSIFIER_VERSION,\n completedTurns: state.completedTurns,\n contextAvailable: sectionTexts.some(isSubstantiveText),\n decision,\n evaluatedAt: Date.now(),\n };\n bb.log.info(\n decision === null\n ? `thread=${threadId} phase=${phase} action=section-classified target=none`\n : `thread=${threadId} phase=${phase} action=section-classified ${classificationSummary(decision)}`,\n );\n } else {\n bb.log.debug(\n `thread=${threadId} phase=${phase} action=section-cache-hit target=${decision?.target ?? \"none\"}`,\n );\n }\n if (decision !== null) {\n const sectionId = resolveSectionId(\n await bb.sdk.threadSections.list(),\n decision.target,\n );\n if (sectionId === null) {\n bb.log.warn(\n `thread=${threadId} phase=${phase} action=section-unavailable target=${decision.target}`,\n );\n } else {\n await applySection(\n thread,\n state,\n phase,\n decision,\n sectionId,\n inboxMode,\n );\n }\n } else {\n state.pendingSectionId = null;\n state.pendingSectionStreak = 0;\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(\n `thread=${threadId} phase=${phase} action=section-evaluation-failed error=${message}`,\n );\n }\n }\n\n try {\n await applyTitle(thread, state, phase, historyTexts, inboxMode);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(\n `thread=${threadId} phase=${phase} action=title-evaluation-failed error=${message}`,\n );\n }\n await saveState(threadId, state);\n }\n\n async function consumeCompletedTurns(\n threadId: string,\n state: ThreadState,\n ): Promise {\n let drained = 0;\n while (drained < MAX_COMPLETED_EVENT_DRAIN) {\n const event = await bb.sdk.threads.events.wait({\n threadId,\n type: \"turn/completed\",\n waitMs: \"1\",\n ...(state.lastCompletedSeq === 0\n ? {}\n : { afterSeq: String(state.lastCompletedSeq) }),\n });\n if (event === null) break;\n state.lastCompletedSeq = event.seq;\n if (\n event.type === \"turn/completed\" &&\n event.data.status === \"completed\"\n ) {\n state.completedTurns += 1;\n }\n drained += 1;\n }\n if (drained === MAX_COMPLETED_EVENT_DRAIN) {\n bb.log.warn(\n `thread=${threadId} action=turn-drain-capped limit=${MAX_COMPLETED_EVENT_DRAIN}`,\n );\n }\n }\n\n function inboxPhase(thread: Thread): \"active\" | \"failed\" | \"idle\" {\n if (thread.status === \"idle\") return \"idle\";\n if (thread.status === \"error\") return \"failed\";\n return \"active\";\n }\n\n async function reconcileManagedThread(\n threadId: string,\n signal?: AbortSignal,\n ): Promise {\n if (signal?.aborted) return;\n const fresh = (await bb.sdk.threads.get({ threadId })) as Thread;\n if (signal?.aborted) return;\n if (!isManageableThread(fresh)) {\n if (!signal?.aborted) {\n await bb.storage.kv.delete(stateKey(threadId));\n }\n return;\n }\n let state = await readState(threadId);\n if (signal?.aborted) return;\n const adopted = state === null;\n if (state === null) {\n state = initialState(fresh);\n }\n if (signal?.aborted) return;\n await reconcileInbox(fresh, state, inboxPhase(fresh), signal);\n if (signal?.aborted) return;\n await saveState(threadId, state);\n if (\n isEligibleThread(fresh) &&\n (adopted ||\n state.sectionClassification?.classifierVersion !==\n SECTION_CLASSIFIER_VERSION)\n ) {\n await evaluate(threadId, \"settings\", signal);\n }\n }\n\n async function discoverThreadIds(signal: AbortSignal): Promise {\n const discovered = new Set();\n let foundNewIds = true;\n while (foundNewIds && !disposed && !signal.aborted) {\n foundNewIds = false;\n let offset = 0;\n while (!disposed && !signal.aborted) {\n const page = await bb.sdk.threads.list({\n archived: false,\n excludeSideChats: true,\n hasParent: false,\n limit: THREAD_LIST_PAGE_SIZE,\n offset,\n signal,\n });\n for (const thread of page) {\n if (!discovered.has(thread.id)) {\n discovered.add(thread.id);\n foundNewIds = true;\n }\n }\n if (page.length < THREAD_LIST_PAGE_SIZE) break;\n offset += THREAD_LIST_PAGE_SIZE;\n }\n }\n return [...discovered];\n }\n\n async function reconcileWithRetry(\n threadId: string,\n signal: AbortSignal,\n ): Promise {\n for (\n let attempt = 0;\n attempt <= RECONCILIATION_RETRY_DELAYS_MS.length;\n attempt += 1\n ) {\n if (signal.aborted) return;\n try {\n await enqueue(\n threadId,\n () => reconcileManagedThread(threadId, signal),\n false,\n );\n return;\n } catch (error: unknown) {\n if (signal.aborted) return;\n const retryDelay = RECONCILIATION_RETRY_DELAYS_MS[attempt];\n if (retryDelay === undefined) throw error;\n const message =\n error instanceof Error ? error.message : String(error);\n bb.log.warn(\n `thread=${threadId} action=reconciliation-retry attempt=${attempt + 1} error=${message}`,\n );\n await abortableDelay(retryDelay, signal);\n }\n }\n }\n\n async function reconcileExistingThreads(signal: AbortSignal): Promise {\n const threadIds = await discoverThreadIds(signal);\n let nextIndex = 0;\n let firstError: unknown;\n const workerCount = Math.min(\n RECONCILIATION_CONCURRENCY,\n threadIds.length,\n );\n const workers = Array.from({ length: workerCount }, async () => {\n while (!signal.aborted && firstError === undefined) {\n const threadId = threadIds[nextIndex];\n nextIndex += 1;\n if (threadId === undefined || signal.aborted) return;\n try {\n await reconcileWithRetry(threadId, signal);\n } catch (error: unknown) {\n firstError ??= error;\n }\n }\n });\n await Promise.all(workers);\n if (firstError !== undefined) throw firstError;\n }\n\n bb.events.on(\"thread.created\", ({ thread }) =>\n enqueue(thread.id, async () => {\n if (!isEligibleThread(thread)) return;\n if ((await readState(thread.id)) !== null) return;\n await saveState(thread.id, initialState(thread));\n await evaluate(thread.id, \"created\");\n }),\n );\n\n bb.events.on(\"thread.active\", ({ thread }) =>\n enqueue(thread.id, async () => {\n await evaluate(thread.id, \"active\");\n const state = await readState(thread.id);\n if (state === null) return;\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n if (!isManageableThread(fresh)) {\n await bb.storage.kv.delete(stateKey(thread.id));\n return;\n }\n await reconcileInbox(\n fresh,\n state,\n inboxPhase(fresh),\n undefined,\n thread.pinnedAt,\n );\n await saveState(thread.id, state);\n }),\n );\n\n bb.events.on(\"thread.idle\", ({ thread }) =>\n enqueue(thread.id, async () => {\n const state = await readState(thread.id);\n if (state === null) return;\n try {\n await consumeCompletedTurns(thread.id, state);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(\n `thread=${thread.id} action=turn-count-failed error=${message}`,\n );\n }\n const due = state.completedTurns >= state.nextEvaluationTurn;\n if (due) {\n state.nextEvaluationTurn = advanceEvaluationMilestone(\n state.nextEvaluationTurn,\n state.completedTurns,\n );\n }\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n if (!isManageableThread(fresh)) {\n await bb.storage.kv.delete(stateKey(thread.id));\n return;\n }\n await reconcileInbox(fresh, state, inboxPhase(fresh));\n await saveState(thread.id, state);\n if (due) await evaluate(thread.id, \"turn\");\n }),\n );\n\n bb.events.on(\"thread.failed\", ({ thread }) =>\n enqueue(thread.id, async () => {\n const state = await readState(thread.id);\n if (state === null) return;\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n if (!isManageableThread(fresh)) {\n await bb.storage.kv.delete(stateKey(thread.id));\n return;\n }\n await reconcileInbox(fresh, state, inboxPhase(fresh));\n await saveState(thread.id, state);\n }),\n );\n\n const forget = (threadId: string) =>\n enqueue(threadId, async () => {\n await bb.storage.kv.delete(stateKey(threadId));\n });\n bb.events.on(\"thread.archived\", ({ thread }) => forget(thread.id));\n bb.events.on(\"thread.deleted\", ({ thread }) => forget(thread.id));\n\n let unsubscribeThreadChanges: () => void = () => undefined;\n try {\n unsubscribeThreadChanges = bb.sdk.subscribe({\n event: \"thread:changed\",\n callback(event) {\n const threadId = event.id;\n if (\n threadId === undefined ||\n (!event.changes.includes(\"pin-state-changed\") &&\n !event.changes.includes(\"status-changed\"))\n ) {\n return;\n }\n void enqueue(threadId, () => reconcileManagedThread(threadId));\n },\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(`action=realtime-subscribe-failed error=${message}`);\n }\n\n settings.onChange((next, previous) => {\n if (next.inboxMode === previous.inboxMode) return;\n bb.log.info(\n `action=mode-changed previous=${previous.inboxMode} next=${next.inboxMode}`,\n );\n if (next.inboxMode !== \"apply\") return;\n void bb.storage.kv\n .list(STATE_PREFIX)\n .then(async (keys) => {\n for (const key of keys) {\n const threadId = key.slice(STATE_PREFIX.length);\n await enqueue(threadId, async () => {\n const state = await readState(threadId);\n if (state === null) return;\n const thread = (await bb.sdk.threads.get({\n threadId,\n })) as Thread;\n if (!isManageableThread(thread)) {\n await bb.storage.kv.delete(stateKey(threadId));\n return;\n }\n await reconcileInbox(thread, state, inboxPhase(thread));\n await saveState(threadId, state);\n await evaluate(threadId, \"settings\");\n });\n }\n })\n .catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.error(`action=apply-mode-evaluation-failed error=${message}`);\n });\n });\n\n bb.background.service(\"inbox-reconciliation\", {\n async start(signal) {\n while (!signal.aborted) {\n await reconcileExistingThreads(signal);\n if (signal.aborted) return;\n await abortableDelay(RECONCILIATION_INTERVAL_MS, signal);\n }\n },\n });\n\n bb.onDispose(async () => {\n acceptingWork = false;\n unsubscribeThreadChanges();\n await Promise.allSettled([...queues.values()]);\n disposed = true;\n });\n void settings\n .get()\n .then(({ inboxMode }) =>\n bb.log.info(`Thread Organizer loaded mode=${inboxMode}`),\n )\n .catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(`action=mode-read-failed error=${message}`);\n });\n}\n"], + "mappings": ";;;;;;;;AAyCA,IAAM,kBAA4D;AAAA,EAChE,IAAI,CAAC,MAAM,gBAAgB;AAAA,EAC3B,QAAQ,CAAC,QAAQ;AAAA,EACjB,YAAY,CAAC,cAAc,eAAe;AAAA,EAC1C,MAAM,CAAC,MAAM;AAAA,EACb,IAAI,CAAC,MAAM,mBAAmB;AAAA,EAC9B,SAAS,CAAC,SAAS;AACrB;AAEA,IAAM,kBAAkB,oBAAI,IAAI;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,kBAGD;AAAA,EACH,EAAE,YAAY,mBAAmB,OAAO,YAAY;AAAA,EACpD,EAAE,YAAY,kBAAkB,OAAO,WAAW;AAAA,EAClD,EAAE,YAAY,oBAAoB,OAAO,cAAc;AAAA,EACvD,EAAE,YAAY,mBAAmB,OAAO,cAAc;AAAA,EACtD,EAAE,YAAY,iBAAiB,OAAO,YAAY;AAAA,EAClD,EAAE,YAAY,gBAAgB,OAAO,WAAW;AAAA,EAChD,EAAE,YAAY,kBAAkB,OAAO,aAAa;AAAA,EACpD,EAAE,YAAY,gBAAgB,OAAO,WAAW;AAAA,EAChD,EAAE,YAAY,eAAe,OAAO,UAAU;AAAA,EAC9C,EAAE,YAAY,cAAc,OAAO,SAAS;AAAA,EAC5C,EAAE,YAAY,cAAc,OAAO,SAAS;AAAA,EAC5C,EAAE,YAAY,eAAe,OAAO,UAAU;AAAA,EAC9C,EAAE,YAAY,eAAe,OAAO,UAAU;AAAA,EAC9C,EAAE,YAAY,eAAe,OAAO,UAAU;AAAA,EAC9C,EAAE,YAAY,cAAc,OAAO,SAAS;AAAA,EAC5C,EAAE,YAAY,cAAc,OAAO,SAAS;AAAA,EAC5C,EAAE,YAAY,cAAc,OAAO,SAAS;AAAA,EAC5C,EAAE,YAAY,cAAc,OAAO,SAAS;AAAA,EAC5C,EAAE,YAAY,eAAe,OAAO,UAAU;AAAA,EAC9C,EAAE,YAAY,aAAa,OAAO,QAAQ;AAAA,EAC1C,EAAE,YAAY,aAAa,OAAO,QAAQ;AAAA,EAC1C,EAAE,YAAY,aAAa,OAAO,QAAQ;AAAA,EAC1C,EAAE,YAAY,aAAa,OAAO,QAAQ;AAAA,EAC1C,EAAE,YAAY,YAAY,OAAO,OAAO;AAAA,EACxC,EAAE,YAAY,YAAY,OAAO,OAAO;AAAA,EACxC,EAAE,YAAY,aAAa,OAAO,QAAQ;AAAA,EAC1C,EAAE,YAAY,WAAW,OAAO,MAAM;AAAA,EACtC,EAAE,YAAY,WAAW,OAAO,MAAM;AACxC;AAEA,IAAM,sBAAsB,oBAAI,IAAI;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,mBAAmB,oBAAI,IAAI;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,iBAAiB,oBAAI,IAAI;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,UAAU,OAAuB;AACxC,SAAO,MACJ,UAAU,MAAM,EAChB,QAAQ,UAAU,IAAI,EACtB,QAAQ,WAAW,GAAG,EACtB,KAAK,EACL,YAAY;AACjB;AAEA,SAAS,QAAQ,OAAe,YAA6B;AAC3D,aAAW,YAAY;AACvB,SAAO,WAAW,KAAK,KAAK;AAC9B;AAEO,SAAS,kBAAkB,OAAwB;AACxD,QAAM,aAAa,UAAU,KAAK,EAC/B,QAAQ,uBAAuB,EAAE,EACjC,QAAQ,YAAY,EAAE,EACtB,KAAK;AACR,MAAI,WAAW,SAAS,KAAK,gBAAgB,IAAI,UAAU,EAAG,QAAO;AACrE,SAAO,CAAC,sCAAsC,KAAK,UAAU;AAC/D;AAEO,SAAS,mBAAmB,QAAoC;AACrE,SACE,OAAO,eAAe,aACtB,OAAO,mBAAmB,QAC1B,OAAO,mBAAmB,QAC1B,OAAO,eAAe,QACtB,OAAO,gBAAgB,QACvB,OAAO,mBAAmB,QAC1B,OAAO,eAAe,QACtB,OAAO,cAAc;AAEzB;AAEO,SAAS,iBAAiB,QAAoC;AACnE,SACE,mBAAmB,MAAM,KACzB,OAAO,WAAW,WAClB,OAAO,WAAW;AAEtB;AAEA,SAAS,SACP,QACA,QACA,YACA,QACM;AACN,QAAM,UAAU,OAAO,IAAI,MAAM;AACjC,MAAI,YAAY,UAAa,aAAa,QAAQ,YAAY;AAC5D,WAAO,IAAI,QAAQ,EAAE,YAAY,SAAS,CAAC,MAAM,EAAE,CAAC;AACpD;AAAA,EACF;AACA,MAAI,eAAe,QAAQ,cAAc,CAAC,QAAQ,QAAQ,SAAS,MAAM,GAAG;AAC1E,YAAQ,QAAQ,KAAK,MAAM;AAAA,EAC7B;AACF;AAEO,SAAS,gBAAgB,OAGC;AAC/B,QAAM,UAAU,UAAU,MAAM,WAAW;AAC3C,QAAM,cAAc,MAAM,MAAM,OAAO,iBAAiB,EAAE,IAAI,SAAS;AACvE,QAAM,SAAS,YAAY,KAAK,IAAI;AACpC,QAAM,SAAS,oBAAI,IAGjB;AAEF,MACE;AAAA,IACE;AAAA,IACA;AAAA,EACF,GACA;AACA,aAAS,QAAQ,WAAW,MAAM,2BAA2B;AAAA,EAC/D;AAEA,MACE,YAAY,sBACZ;AAAA,IACE;AAAA,IACA;AAAA,EACF,GACA;AACA;AAAA,MACE;AAAA,MACA;AAAA,MACA,YAAY,qBAAqB,OAAO;AAAA,MACxC,YAAY,qBACR,4BACA;AAAA,IACN;AAAA,EACF;AAEA,MACE;AAAA,IACE;AAAA,IACA;AAAA,EACF,GACA;AACA,aAAS,QAAQ,MAAM,MAAM,8BAA8B;AAAA,EAC7D;AAEA,QAAM,wBACJ,OAAO,IAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,IAAI,SAAS;AAClE,MACE,CAAC,0BACA;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,SAAS,OAAO,KACf,YAAY,QACX;AAAA,IACE;AAAA,IACA;AAAA,EACF,IACJ;AACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EAAE,SAAS,OAAO,IACd,OACA;AAAA,MACJ;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EAAE,SAAS,OAAO,IACd,+BACA;AAAA,IACN;AAAA,EACF;AAEA,QAAM,oBAAoB,CAAC,GAAG,OAAO,KAAK,CAAC,EAAE;AAAA,IAAK,CAAC,WACjD,CAAC,UAAU,cAAc,MAAM,SAAS,EAAE,SAAS,MAAM;AAAA,EAC3D;AACA,MACE,CAAC,sBACA,CAAC,QAAQ,wBAAwB,aAAa,EAAE,SAAS,OAAO,KAC/D,QAAQ,QAAQ,uBAAuB,IACzC;AACA;AAAA,MACE;AAAA,MACA;AAAA,MACA,CAAC,QAAQ,wBAAwB,aAAa,EAAE,SAAS,OAAO,IAC5D,OACA;AAAA,MACJ,CAAC,QAAQ,wBAAwB,aAAa,EAAE,SAAS,OAAO,IAC5D,0BACA;AAAA,IACN;AAAA,EACF;AAEA,MACE,YAAY,QACZ,CAAC,qBACD,CAAC,OAAO,IAAI,YAAY,KACxB,QAAQ,QAAQ,SAAS,GACzB;AACA,aAAS,QAAQ,MAAM,MAAM,4BAA4B;AAAA,EAC3D;AAEA,MAAI,YAAY,QAAQ,CAAC,uBAAuB;AAC9C,aAAS,QAAQ,MAAM,KAAK,qBAAqB;AACjD,QACE;AAAA,MACE;AAAA,MACA;AAAA,IACF,GACA;AACA,eAAS,QAAQ,MAAM,MAAM,uBAAuB;AAAA,IACtD;AAAA,EACF;AAEA,QAAM,SAAS,CAAC,GAAG,OAAO,QAAQ,CAAC,EAChC,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,EAAE,QAAQ,GAAG,MAAM,EAAE,EAC/C;AAAA,IACC,CAAC,MAAM,UACL,MAAM,aAAa,KAAK,cACxB,KAAK,OAAO,cAAc,MAAM,MAAM;AAAA,EAC1C;AACF,QAAM,SAAS,OAAO,CAAC;AACvB,MAAI,WAAW,OAAW,QAAO;AACjC,QAAM,WAAW,OAAO,CAAC,KAAK;AAC9B,SAAO;AAAA,IACL,YAAY,OAAO;AAAA,IACnB,QAAQ,OAAO,cAAc,UAAU,cAAc;AAAA,IACrD,SAAS,OAAO;AAAA,IAChB,UAAU,UAAU,UAAU;AAAA,IAC9B,QAAQ,OAAO;AAAA,EACjB;AACF;AAEO,SAAS,iBACd,UACA,QACe;AACf,QAAM,UAAU,IAAI,IAAI,gBAAgB,MAAM,CAAC;AAC/C,QAAMA,WAAU,SAAS;AAAA,IAAO,CAAC,YAC/B,QAAQ,IAAI,UAAU,QAAQ,IAAI,CAAC;AAAA,EACrC;AACA,SAAOA,SAAQ,WAAW,IAAIA,SAAQ,CAAC,EAAG,KAAK;AACjD;AAEA,SAAS,oBAAoB,OAAuB;AAClD,MAAI,SAAS,MACV,UAAU,MAAM,EAChB,QAAQ,UAAU,IAAI,EACtB,QAAQ,2BAA2B,EAAE,EACrC,QAAQ,uBAAuB,EAAE,EACjC,KAAK;AACR,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,aAAW,YAAY,UAAW,UAAS,OAAO,QAAQ,UAAU,EAAE;AACtE,SAAO,OAAO,KAAK;AACrB;AAEA,SAAS,iBAAiB,MAAc,OAAuB;AAC7D,QAAM,QAAQ,KAAK,YAAY;AAC/B,MAAI,eAAe,IAAI,KAAK,EAAG,QAAO,MAAM,YAAY;AACxD,MAAI,QAAQ,KAAK,iBAAiB,IAAI,KAAK,EAAG,QAAO;AACrD,MAAI,gBAAgB,KAAK,IAAI,KAAK,QAAQ,KAAK,IAAI,EAAG,QAAO;AAC7D,SAAO,GAAG,KAAK,OAAO,CAAC,EAAE,YAAY,CAAC,GAAG,KAAK,MAAM,CAAC,EAAE,YAAY,CAAC;AACtE;AAEO,SAAS,gBAAgB,OAAsC;AACpE,MAAI,SAAS,oBAAoB,KAAK;AACtC,MACE,OAAO,WAAW,KAClB,sBAAsB,KAAK,MAAM,KACjC,CAAC,kBAAkB,MAAM,GACzB;AACA,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,gBAAgB;AAAA,IAAK,CAAC,EAAE,WAAW,MAChD,QAAQ,QAAQ,UAAU;AAAA,EAC5B;AACA,MAAI,WAAW,OAAW,QAAO;AACjC,WAAS,OAAO,QAAQ,OAAO,YAAY,EAAE,EAAE,KAAK;AACpD,WAAS,OACN,MAAM,+DAA+D,CAAC,EAAE,CAAC,EACzE,QAAQ,+BAA+B,EAAE,EACzC,KAAK;AAER,QAAM,QACJ,OAAO,MAAM,kCAAkC,GAAG,OAAO,OAAO,KAAK,CAAC;AACxE,SACE,MAAM,SAAS,KACf,0CAA0C,KAAK,MAAM,CAAC,CAAE,GACxD;AACA,UAAM,MAAM;AAAA,EACd;AAEA,QAAM,kBAAkB,OAAO,MAAM,MAAM,KAAK,EAAE;AAClD,QAAM,cAAc,MAAM,MAAM,GAAG,KAAK,IAAI,GAAG,IAAI,eAAe,CAAC;AACnE,SACE,YAAY,SAAS,KACrB,iBAAiB,IAAI,YAAY,GAAG,EAAE,EAAG,YAAY,CAAC,GACtD;AACA,gBAAY,IAAI;AAAA,EAClB;AACA,QAAM,gBAAgB,YAAY,OAAO,CAAC,SAAS;AACjD,UAAM,aAAa,KAAK,YAAY;AACpC,WACE,CAAC,oBAAoB,IAAI,UAAU,KACnC,CAAC,iBAAiB,IAAI,UAAU,KAChC,WAAW,SAAS;AAAA,EAExB,CAAC;AACD,MAAI,YAAY,WAAW,KAAK,cAAc,WAAW,EAAG,QAAO;AAEnE,QAAM,cAAc,YACjB,IAAI,CAAC,MAAM,UAAU,iBAAiB,MAAM,QAAQ,eAAe,CAAC,EACpE,KAAK,GAAG;AACX,SAAO;AAAA,IACL,YAAY;AAAA,IACZ,OAAO,GAAG,OAAO,KAAK,IAAI,WAAW,GAAG,KAAK;AAAA,EAC/C;AACF;AAEO,SAAS,wBAAwB,SAAyB;AAC/D,SAAO,WAAW,IAAI,IAAI,UAAU;AACtC;AAEO,SAAS,2BACd,SACA,gBACQ;AACR,MAAI,OAAO;AACX,SAAO,QAAQ,eAAgB,QAAO,wBAAwB,IAAI;AAClE,SAAO;AACT;;;AChcA,IAAM,eAAe;AACrB,IAAM,sBAAsB;AAC5B,IAAM,yBAAyB;AAC/B,IAAM,qBAAqB;AAC3B,IAAM,0BAA0B;AAChC,IAAM,sBAAsB;AAC5B,IAAM,mBAAmB;AACzB,IAAM,4BAA4B;AAClC,IAAM,wBAAwB;AAC9B,IAAM,6BAA6B;AACnC,IAAM,6BAA6B,IAAI;AACvC,IAAM,iCAAiC,CAAC,KAAK,GAAG;AAChD,IAAM,6BAA6B;AAqCnC,SAAS,SAAS,UAA0B;AAC1C,SAAO,GAAG,YAAY,GAAG,QAAQ;AACnC;AAEA,SAAS,aAAa,QAAiC;AACrD,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,WAAW,OAAO;AAAA,IAClB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,IACrB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,sBAAsB;AAAA,IACtB,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,IACvB,eAAe,OAAO,cAAc;AAAA,IACpC,aAAa,OAAO,UAAU;AAAA,IAC9B,SAAS;AAAA,EACX;AACF;AAEA,SAAS,cAAc,OAAsC;AAC3D,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,QAAM,QAAQ;AACd,SACE,MAAM,YAAY,KAClB,OAAO,MAAM,mBAAmB,YAChC,OAAO,MAAM,cAAc,YAC3B,OAAO,MAAM,sBAAsB,aACnC,OAAO,MAAM,oBAAoB,cAChC,OAAO,MAAM,yBAAyB,YACrC,MAAM,yBAAyB,QAC/B,MAAM,yBAAyB,YAChC,OAAO,MAAM,wBAAwB,aACpC,MAAM,wBAAwB,YAC/B,OAAO,MAAM,oBAAoB,aAChC,MAAM,oBAAoB,YAC3B,OAAO,MAAM,sBAAsB,aAClC,MAAM,sBAAsB,YAC7B,MAAM,mBAAmB,YACxB,MAAM,mBAAmB,YACzB,MAAM,mBAAmB,UACzB,MAAM,mBAAmB,QACzB,MAAM,mBAAmB,YAC1B,OAAO,MAAM,iBAAiB,aAC7B,MAAM,iBAAiB,YACxB,OAAO,MAAM,yBAAyB,YACrC,MAAM,yBAAyB,UAChC,OAAO,MAAM,qBAAqB,YACjC,MAAM,qBAAqB,SAC7B,OAAO,MAAM,qBAAqB,YAClC,OAAO,MAAM,uBAAuB,aACnC,OAAO,MAAM,qBAAqB,YACjC,MAAM,qBAAqB,SAC7B,OAAO,MAAM,yBAAyB,aACrC,MAAM,0BAA0B,UAC/B,MAAM,0BAA0B,QAC/B,OAAO,MAAM,0BAA0B,YACtC,OAAO,MAAM,sBAAsB,sBAAsB,YACzD,OAAO,MAAM,sBAAsB,mBAAmB,YACtD,OAAO,MAAM,sBAAsB,qBAAqB,cACvD,MAAM,sBAAsB,aAAa,QACxC,OAAO,MAAM,sBAAsB,aAAa,aAClD,OAAO,MAAM,sBAAsB,gBAAgB,aACvD,OAAO,MAAM,kBAAkB,aAC/B,OAAO,MAAM,gBAAgB;AAEjC;AAEA,SAAS,qBAAqB,OAAiC;AAC7D,SAAO;AAAA,IACL,GAAG;AAAA,IACH,sBAAsB,MAAM,wBAAwB;AAAA,IACpD,qBAAqB,MAAM,uBAAuB;AAAA,IAClD,iBAAiB,MAAM,mBAAmB;AAAA,IAC1C,mBAAmB,MAAM,qBAAqB;AAAA,IAC9C,gBAAgB,MAAM,kBAAkB;AAAA,IACxC,cAAc,MAAM,gBAAgB;AAAA,IACpC,uBAAuB,MAAM,yBAAyB;AAAA,EACxD;AACF;AAEA,SAAS,gBAAgB,OAAoB,QAAyB;AACpE,MAAI,UAAU;AACd,MAAI,CAAC,MAAM,aAAa;AACtB,UAAM,gBACJ,MAAM,kBACF,OAAO,UAAU,MAAM,mBACvB,OAAO,UAAU;AACvB,QAAI,eAAe;AACjB,YAAM,cAAc;AACpB,gBAAU;AAAA,IACZ;AAAA,EACF;AACA,MAAI,CAAC,MAAM,eAAe;AACxB,UAAM,kBACJ,MAAM,oBACF,OAAO,cAAc,MAAM,uBAC3B,OAAO,cAAc;AAC3B,QAAI,iBAAiB;AACnB,YAAM,gBAAgB;AACtB,gBAAU;AAAA,IACZ;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,YACP,SAGU;AACV,SAAO,CAAC,GAAG,OAAO,EACf,KAAK,CAAC,MAAM,UAAU,KAAK,YAAY,MAAM,SAAS,EACtD;AAAA,IAAQ,CAAC,UACR,MAAM,MAAM;AAAA,MAAQ,CAAC,SACnB,KAAK,SAAS,UAAU,KAAK,eAAe,eACxC,CAAC,KAAK,IAAI,IACV,CAAC;AAAA,IACP;AAAA,EACF;AACJ;AAEA,SAAS,0BAA0B,OAAgC;AACjE,WAAS,QAAQ,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG;AACzD,UAAM,OAAO,MAAM,KAAK;AACxB,QAAI,kBAAkB,IAAI,EAAG,QAAO;AAAA,EACtC;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,UAAyC;AACtE,SAAO;AAAA,IACL,UAAU,SAAS,MAAM;AAAA,IACzB,cAAc,SAAS,WAAW,QAAQ,CAAC,CAAC;AAAA,IAC5C,UAAU,SAAS,OAAO,QAAQ,CAAC,CAAC;AAAA,IACpC,UAAU,SAAS,QAAQ,KAAK,GAAG,CAAC;AAAA,EACtC,EAAE,KAAK,GAAG;AACZ;AAEA,SAAS,MAAM,cAAqC;AAClD,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,YAAY,CAAC;AACnE;AAEA,SAAS,eACP,cACA,QACe;AACf,MAAI,OAAO,QAAS,QAAO,QAAQ,QAAQ;AAC3C,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAM,UAAU,WAAW,QAAQ,YAAY;AAC/C,WAAO,iBAAiB,SAAS,QAAQ,EAAE,MAAM,KAAK,CAAC;AAEvD,aAAS,SAAe;AACtB,mBAAa,OAAO;AACpB,aAAO,oBAAoB,SAAS,MAAM;AAC1C,cAAQ;AAAA,IACV;AAAA,EACF,CAAC;AACH;AAEe,SAAR,OAAwB,IAAuB;AACpD,QAAM,WAAW,GAAG,SAAS,OAAO;AAAA,IAClC,WAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aACE;AAAA,MACF,SAAS,CAAC,WAAW,OAAO;AAAA,MAC5B,SAAS;AAAA,IACX;AAAA,EACF,CAAC;AACD,QAAM,SAAS,oBAAI,IAA2B;AAC9C,MAAI,gBAAgB;AACpB,MAAI,WAAW;AAEf,iBAAe,UAAU,UAA+C;AACtE,UAAM,SAAS,MAAM,GAAG,QAAQ,GAAG,IAAa,SAAS,QAAQ,CAAC;AAClE,QAAI,WAAW,OAAW,QAAO;AACjC,QAAI,cAAc,MAAM,EAAG,QAAO,qBAAqB,MAAM;AAC7D,OAAG,IAAI,KAAK,UAAU,QAAQ,8BAA8B;AAC5D,WAAO;AAAA,EACT;AAEA,iBAAe,UACb,UACA,OACe;AACf,UAAM,GAAG,QAAQ,GAAG,IAAI,SAAS,QAAQ,GAAG,KAAK;AAAA,EACnD;AAEA,WAAS,QACP,UACA,MACA,gBAAgB,MACD;AACf,QAAI,CAAC,cAAe,QAAO,QAAQ,QAAQ;AAC3C,UAAM,WAAW,OAAO,IAAI,QAAQ,KAAK,QAAQ,QAAQ;AACzD,UAAM,cAAc,SACjB,MAAM,MAAM,MAAS,EACrB,KAAK,YAAY;AAChB,UAAI,CAAC,SAAU,OAAM,KAAK;AAAA,IAC5B,CAAC;AACH,UAAM,YAAY,gBACd,YAAY,MAAM,CAAC,UAAmB;AACpC,YAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACvD,SAAG,IAAI;AAAA,QACL,UAAU,QAAQ,8BAA8B,OAAO;AAAA,MACzD;AAAA,IACF,CAAC,IACD;AACJ,UAAM,UAAU,UACb,QAAQ,MAAM;AACb,UAAI,OAAO,IAAI,QAAQ,MAAM,QAAS,QAAO,OAAO,QAAQ;AAAA,IAC9D,CAAC;AACH,WAAO,IAAI,UAAU,OAAO;AAC5B,WAAO;AAAA,EACT;AAEA,iBAAe,iBACb,QACA,UACmB;AACnB,QAAI,SAAmB,CAAC;AACxB,aAAS,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG;AACtD,UAAI;AACF,iBAAS;AAAA,UACP,MAAM,GAAG,IAAI,QAAQ,cAAc;AAAA,YACjC,UAAU,OAAO;AAAA,YACjB,OAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,MACF,SAAS,OAAgB;AACvB,cAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,WAAG,IAAI;AAAA,UACL,UAAU,OAAO,EAAE,8CAA8C,UAAU,CAAC,UAAU,OAAO;AAAA,QAC/F;AAAA,MACF;AACA,UAAI,OAAO,KAAK,iBAAiB,KAAK,YAAY,WAAW,EAAG;AAChE,YAAM,MAAM,YAAY,IAAI,MAAM,GAAG;AAAA,IACvC;AACA,WAAO;AAAA,EACT;AAEA,iBAAe,eACb,QACA,OACA,OACA,QACA,kBACe;AACf,UAAM,EAAE,UAAU,IAAI,MAAM,SAAS,IAAI;AACzC,QAAI,QAAQ,QAAS;AACrB,UAAM,WAAW,OAAO;AACxB,UAAM,gBACJ,UAAU,YAAY,MAAM,mBAAmB;AACjD,QACE,iBACA,OAAO,aAAa,QACpB,MAAM,uBACN,qBAAqB,QACrB;AACA,SAAG,IAAI;AAAA,QACL,UAAU,QAAQ,UAAU,KAAK;AAAA,MACnC;AACA;AAAA,IACF;AACA,UAAM,iBAAiB;AACvB,QAAI,cAAe,OAAM,eAAe;AAExC,QAAI,MAAM,mBAAmB,OAAO,aAAa,MAAM;AACrD,YAAM,uBAAuB,OAAO;AACpC,YAAM,sBAAsB;AAC5B,YAAM,kBAAkB;AACxB,SAAG,IAAI;AAAA,QACL,UAAU,QAAQ,UAAU,KAAK;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,wBAAwB;AAC5B,QAAI,MAAM,qBAAqB,OAAO,aAAa,MAAM;AACvD,YAAM,uBAAuB;AAC7B,YAAM,sBAAsB;AAC5B,YAAM,oBAAoB;AAC1B,8BAAwB;AACxB,SAAG,IAAI;AAAA,QACL,UAAU,QAAQ,UAAU,KAAK;AAAA,MACnC;AAAA,IACF;AAEA,QACE,OAAO,aAAa,QACpB,MAAM,uBACN,CAAC,uBACD;AACA,YAAM,uBAAuB;AAC7B,YAAM,sBAAsB;AAC5B,YAAM,kBAAkB;AACxB,YAAM,oBAAoB;AAC1B,UAAI,iBAAiB,qBAAqB,MAAM;AAC9C,WAAG,IAAI;AAAA,UACL,UAAU,QAAQ,UAAU,KAAK;AAAA,QACnC;AAAA,MACF,OAAO;AACL,cAAM,eAAe;AACrB,WAAG,IAAI;AAAA,UACL,UAAU,QAAQ,UAAU,KAAK;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU,UAAU;AACtB,UAAI,OAAO,aAAa,MAAM;AAC5B,YACE,MAAM,yBAAyB,QAC/B,MAAM,yBAAyB,OAAO,UACtC;AACA,gBAAM,uBAAuB;AAAA,QAC/B;AACA,cAAM,sBAAsB;AAC5B;AAAA,MACF;AACA,UAAI,MAAM,aAAc;AACxB,UAAI,cAAc,SAAS;AACzB,WAAG,IAAI;AAAA,UACL,UAAU,QAAQ,UAAU,KAAK;AAAA,QACnC;AACA;AAAA,MACF;AACA,UAAI,QAAQ,QAAS;AACrB,UAAI,CAAC,MAAM,iBAAiB;AAC1B,cAAM,kBAAkB;AACxB,cAAM,UAAU,UAAU,KAAK;AAAA,MACjC;AACA,UAAI,QAAQ,QAAS;AACrB,UAAI;AACJ,UAAI;AACF,iBAAS,MAAM,GAAG,IAAI,QAAQ,IAAI,EAAE,SAAS,CAAC;AAAA,MAChD,SAAS,OAAgB;AACvB,cAAM,QAAS,MAAM,GAAG,IAAI,QAAQ,IAAI,EAAE,SAAS,CAAC;AACpD,cAAM,kBAAkB;AACxB,YAAI,MAAM,aAAa,MAAM;AAC3B,gBAAM,uBAAuB;AAC7B,gBAAM,sBAAsB;AAAA,QAC9B,OAAO;AACL,gBAAM,uBAAuB;AAC7B,gBAAM,sBAAsB;AAAA,QAC9B;AACA,cAAM,UAAU,UAAU,KAAK;AAC/B,cAAM;AAAA,MACR;AACA,YAAM,uBAAuB,OAAO;AACpC,YAAM,sBAAsB;AAC5B,YAAM,kBAAkB;AACxB,SAAG,IAAI;AAAA,QACL,UAAU,QAAQ,UAAU,KAAK;AAAA,MACnC;AACA;AAAA,IACF;AAEA,QAAI,OAAO,aAAa,MAAM;AAC5B,YAAM,uBAAuB;AAC7B,YAAM,sBAAsB;AAC5B,YAAM,kBAAkB;AACxB,YAAM,oBAAoB;AAC1B;AAAA,IACF;AACA,UAAM,sBAAsB;AAC5B,QAAI,MAAM,yBAAyB,OAAO,UAAU;AAClD,YAAM,uBAAuB;AAC7B;AAAA,IACF;AACA,QAAI,cAAc,SAAS;AACzB,SAAG,IAAI;AAAA,QACL,UAAU,QAAQ,UAAU,KAAK;AAAA,MACnC;AACA;AAAA,IACF;AACA,QAAI,QAAQ,QAAS;AACrB,QAAI,CAAC,MAAM,mBAAmB;AAC5B,YAAM,oBAAoB;AAC1B,YAAM,UAAU,UAAU,KAAK;AAAA,IACjC;AACA,QAAI,QAAQ,QAAS;AACrB,QAAI;AACF,YAAM,GAAG,IAAI,QAAQ,MAAM,EAAE,SAAS,CAAC;AAAA,IACzC,SAAS,OAAgB;AACvB,YAAM,QAAS,MAAM,GAAG,IAAI,QAAQ,IAAI,EAAE,SAAS,CAAC;AACpD,YAAM,oBAAoB;AAC1B,UAAI,MAAM,aAAa,MAAM;AAC3B,cAAM,uBAAuB;AAC7B,cAAM,sBAAsB;AAC5B,cAAM,eAAe;AAAA,MACvB,OAAO;AACL,YAAI,MAAM,aAAa,MAAM,sBAAsB;AACjD,gBAAM,uBAAuB;AAAA,QAC/B;AACA,cAAM,sBAAsB;AAAA,MAC9B;AACA,YAAM,UAAU,UAAU,KAAK;AAC/B,YAAM;AAAA,IACR;AACA,UAAM,uBAAuB;AAC7B,UAAM,sBAAsB;AAC5B,UAAM,oBAAoB;AAC1B,OAAG,IAAI;AAAA,MACL,UAAU,QAAQ,UAAU,KAAK;AAAA,IACnC;AAAA,EACF;AAEA,iBAAe,aACb,QACA,OACA,OACA,UACA,iBACA,MACe;AACf,QAAI,MAAM,cAAe;AAEzB,UAAM,uBAAuB,OAAO,cAAc;AAClD,QACE,yBACC,CAAC,MAAM,qBAAqB,UAAU,SACvC;AACA;AAAA,IACF;AACA,UAAM,oBAAoB,uBACtB,0BACA;AACJ,UAAM,gBAAgB,uBAClB,sBACA;AACJ,QACE,SAAS,aAAa,qBACtB,SAAS,SAAS,eAClB;AACA,YAAM,mBAAmB;AACzB,YAAM,uBAAuB;AAC7B;AAAA,IACF;AACA,QAAI,OAAO,cAAc,iBAAiB;AACxC,YAAM,mBAAmB;AACzB,YAAM,uBAAuB;AAC7B;AAAA,IACF;AAEA,QAAI,sBAAsB;AACxB,UAAI,MAAM,qBAAqB,iBAAiB;AAC9C,cAAM,wBAAwB;AAAA,MAChC,OAAO;AACL,cAAM,mBAAmB;AACzB,cAAM,uBAAuB;AAAA,MAC/B;AACA,UAAI,MAAM,uBAAuB,EAAG;AAAA,IACtC;AAEA,QAAI,SAAS,SAAS;AACpB,SAAG,IAAI;AAAA,QACL,UAAU,OAAO,EAAE,UAAU,KAAK,wCAAwC,sBAAsB,QAAQ,CAAC;AAAA,MAC3G;AACA;AAAA,IACF;AAEA,UAAM,QAAS,MAAM,GAAG,IAAI,QAAQ,IAAI;AAAA,MACtC,UAAU,OAAO;AAAA,IACnB,CAAC;AACD,oBAAgB,OAAO,KAAK;AAC5B,QACE,MAAM,iBACN,CAAC,iBAAiB,KAAK,KACvB,MAAM,cAAc,OAAO,WAC3B;AACA;AAAA,IACF;AACA,UAAM,UAAU,MAAM,GAAG,IAAI,QAAQ,OAAO;AAAA,MAC1C,UAAU,OAAO;AAAA,MACjB,WAAW;AAAA,IACb,CAAC;AACD,UAAM,oBAAoB;AAC1B,UAAM,uBAAuB,QAAQ;AACrC,UAAM,mBAAmB;AACzB,UAAM,uBAAuB;AAC7B,OAAG,IAAI;AAAA,MACL,UAAU,OAAO,EAAE,UAAU,KAAK,sCAAsC,sBAAsB,QAAQ,CAAC;AAAA,IACzG;AAAA,EACF;AAEA,iBAAe,WACb,QACA,OACA,OACA,OACA,MACe;AACf,QAAI,UAAU,UAAU,MAAM,eAAe,OAAO,UAAU,KAAM;AACpE,UAAM,SACJ,MAAM,KAAK,iBAAiB,KAAK,OAAO,iBAAiB;AAC3D,QAAI,WAAW,OAAW;AAC1B,UAAM,YAAY,gBAAgB,MAAM;AACxC,QAAI,cAAc,QAAQ,UAAU,aAAa,iBAAkB;AAEnE,QAAI,SAAS,SAAS;AACpB,SAAG,IAAI;AAAA,QACL,UAAU,OAAO,EAAE,UAAU,KAAK,iDAAiD,UAAU,WAAW,QAAQ,CAAC,CAAC,UAAU,KAAK,UAAU,UAAU,KAAK,CAAC;AAAA,MAC7J;AACA;AAAA,IACF;AAEA,UAAM,QAAS,MAAM,GAAG,IAAI,QAAQ,IAAI;AAAA,MACtC,UAAU,OAAO;AAAA,IACnB,CAAC;AACD,oBAAgB,OAAO,KAAK;AAC5B,QAAI,MAAM,eAAe,CAAC,iBAAiB,KAAK,KAAK,MAAM,UAAU,MAAM;AACzE;AAAA,IACF;AACA,UAAM,UAAU,MAAM,GAAG,IAAI,QAAQ,OAAO;AAAA,MAC1C,UAAU,OAAO;AAAA,MACjB,OAAO,UAAU;AAAA,IACnB,CAAC;AACD,UAAM,kBAAkB;AACxB,UAAM,mBAAmB,QAAQ;AACjC,OAAG,IAAI;AAAA,MACL,UAAU,OAAO,EAAE,UAAU,KAAK,+CAA+C,UAAU,WAAW,QAAQ,CAAC,CAAC,UAAU,KAAK,UAAU,UAAU,KAAK,CAAC;AAAA,IAC3J;AAAA,EACF;AAEA,iBAAe,SACb,UACA,OACA,QACe;AACf,UAAM,QAAQ,MAAM,UAAU,QAAQ;AACtC,QAAI,UAAU,KAAM;AACpB,QAAI,QAAQ,QAAS;AACrB,UAAM,SAAU,MAAM,GAAG,IAAI,QAAQ,IAAI,EAAE,SAAS,CAAC;AACrD,QAAI,QAAQ,QAAS;AACrB,UAAM,eAAe,gBAAgB,OAAO,MAAM;AAClD,QAAI,cAAc;AAChB,SAAG,IAAI;AAAA,QACL,UAAU,QAAQ,6BAA6B,MAAM,WAAW,YAAY,MAAM,aAAa;AAAA,MACjG;AAAA,IACF;AACA,QAAI,OAAO,eAAe,QAAQ,OAAO,cAAc,MAAM;AAC3D,YAAM,GAAG,QAAQ,GAAG,OAAO,SAAS,QAAQ,CAAC;AAC7C;AAAA,IACF;AACA,QAAI,CAAC,iBAAiB,MAAM,GAAG;AAC7B,YAAM,UAAU,UAAU,KAAK;AAC/B;AAAA,IACF;AAEA,UAAM,EAAE,UAAU,IAAI,MAAM,SAAS,IAAI;AACzC,QAAI,QAAQ,QAAS;AACrB,UAAM,uBACJ,MAAM,qBAAqB,OAAO,cAAc;AAClD,UAAM,mBACJ,CAAC,MAAM,kBACN,CAAC,wBAAwB,UAAU;AACtC,UAAM,uBAAuB,MAAM;AACnC,UAAM,sBACJ,qBACC,yBAAyB,QACxB,qBAAqB,sBAAsB,8BAC1C,UAAU,aACR,CAAC,qBAAqB,oBACrB,qBAAqB,aAAa,SACrC,UAAU,UACT,qBAAqB,iBAAiB,MAAM;AAClD,UAAM,eAAe,uBAAuB,UAAU;AACtD,UAAM,eAAe,eACjB,MAAM;AAAA,MACJ;AAAA,MACA,UAAU,YAAY,UAAU,YAAY,IAAI;AAAA,IAClD,IACA,CAAC;AACL,QAAI,QAAQ,QAAS;AACrB,UAAM,QAAQ;AAAA,MACZ,GAAI,OAAO,UAAU,OAAO,CAAC,IAAI,CAAC,OAAO,KAAK;AAAA,MAC9C,GAAI,OAAO,kBAAkB,OAAO,CAAC,IAAI,CAAC,OAAO,aAAa;AAAA,MAC9D,GAAG;AAAA,IACL;AACA,UAAM,mBAAmB,0BAA0B,YAAY;AAC/D,UAAM,eACJ,UAAU,UACV,MAAM,qBACN,OAAO,cAAc,OACjB,qBAAqB,OACnB,CAAC,IACD,CAAC,gBAAgB,IACnB;AAEN,QAAI,kBAAkB;AACpB,UAAI;AACF,YAAI,WAAW,sBAAsB,YAAY;AACjD,YAAI,qBAAqB;AACvB,gBAAM,cACJ,OAAO,cAAc,sBACjB,cAEE,MAAM,GAAG,IAAI,SAAS,IAAI;AAAA,YACxB,WAAW,OAAO;AAAA,UACpB,CAAC,GACD;AACR,qBAAW,gBAAgB;AAAA,YACzB;AAAA,YACA,OAAO;AAAA,UACT,CAAC;AACD,gBAAM,wBAAwB;AAAA,YAC5B,mBAAmB;AAAA,YACnB,gBAAgB,MAAM;AAAA,YACtB,kBAAkB,aAAa,KAAK,iBAAiB;AAAA,YACrD;AAAA,YACA,aAAa,KAAK,IAAI;AAAA,UACxB;AACA,aAAG,IAAI;AAAA,YACL,aAAa,OACT,UAAU,QAAQ,UAAU,KAAK,2CACjC,UAAU,QAAQ,UAAU,KAAK,8BAA8B,sBAAsB,QAAQ,CAAC;AAAA,UACpG;AAAA,QACF,OAAO;AACL,aAAG,IAAI;AAAA,YACL,UAAU,QAAQ,UAAU,KAAK,oCAAoC,UAAU,UAAU,MAAM;AAAA,UACjG;AAAA,QACF;AACA,YAAI,aAAa,MAAM;AACrB,gBAAM,YAAY;AAAA,YAChB,MAAM,GAAG,IAAI,eAAe,KAAK;AAAA,YACjC,SAAS;AAAA,UACX;AACA,cAAI,cAAc,MAAM;AACtB,eAAG,IAAI;AAAA,cACL,UAAU,QAAQ,UAAU,KAAK,sCAAsC,SAAS,MAAM;AAAA,YACxF;AAAA,UACF,OAAO;AACL,kBAAM;AAAA,cACJ;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF,OAAO;AACL,gBAAM,mBAAmB;AACzB,gBAAM,uBAAuB;AAAA,QAC/B;AAAA,MACF,SAAS,OAAgB;AACvB,cAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,WAAG,IAAI;AAAA,UACL,UAAU,QAAQ,UAAU,KAAK,2CAA2C,OAAO;AAAA,QACrF;AAAA,MACF;AAAA,IACF;AAEA,QAAI;AACF,YAAM,WAAW,QAAQ,OAAO,OAAO,cAAc,SAAS;AAAA,IAChE,SAAS,OAAgB;AACvB,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,SAAG,IAAI;AAAA,QACL,UAAU,QAAQ,UAAU,KAAK,yCAAyC,OAAO;AAAA,MACnF;AAAA,IACF;AACA,UAAM,UAAU,UAAU,KAAK;AAAA,EACjC;AAEA,iBAAe,sBACb,UACA,OACe;AACf,QAAI,UAAU;AACd,WAAO,UAAU,2BAA2B;AAC1C,YAAM,QAAQ,MAAM,GAAG,IAAI,QAAQ,OAAO,KAAK;AAAA,QAC7C;AAAA,QACA,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,GAAI,MAAM,qBAAqB,IAC3B,CAAC,IACD,EAAE,UAAU,OAAO,MAAM,gBAAgB,EAAE;AAAA,MACjD,CAAC;AACD,UAAI,UAAU,KAAM;AACpB,YAAM,mBAAmB,MAAM;AAC/B,UACE,MAAM,SAAS,oBACf,MAAM,KAAK,WAAW,aACtB;AACA,cAAM,kBAAkB;AAAA,MAC1B;AACA,iBAAW;AAAA,IACb;AACA,QAAI,YAAY,2BAA2B;AACzC,SAAG,IAAI;AAAA,QACL,UAAU,QAAQ,mCAAmC,yBAAyB;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AAEA,WAAS,WAAW,QAA8C;AAChE,QAAI,OAAO,WAAW,OAAQ,QAAO;AACrC,QAAI,OAAO,WAAW,QAAS,QAAO;AACtC,WAAO;AAAA,EACT;AAEA,iBAAe,uBACb,UACA,QACe;AACf,QAAI,QAAQ,QAAS;AACrB,UAAM,QAAS,MAAM,GAAG,IAAI,QAAQ,IAAI,EAAE,SAAS,CAAC;AACpD,QAAI,QAAQ,QAAS;AACrB,QAAI,CAAC,mBAAmB,KAAK,GAAG;AAC9B,UAAI,CAAC,QAAQ,SAAS;AACpB,cAAM,GAAG,QAAQ,GAAG,OAAO,SAAS,QAAQ,CAAC;AAAA,MAC/C;AACA;AAAA,IACF;AACA,QAAI,QAAQ,MAAM,UAAU,QAAQ;AACpC,QAAI,QAAQ,QAAS;AACrB,UAAM,UAAU,UAAU;AAC1B,QAAI,UAAU,MAAM;AAClB,cAAQ,aAAa,KAAK;AAAA,IAC5B;AACA,QAAI,QAAQ,QAAS;AACrB,UAAM,eAAe,OAAO,OAAO,WAAW,KAAK,GAAG,MAAM;AAC5D,QAAI,QAAQ,QAAS;AACrB,UAAM,UAAU,UAAU,KAAK;AAC/B,QACE,iBAAiB,KAAK,MACrB,WACC,MAAM,uBAAuB,sBAC3B,6BACJ;AACA,YAAM,SAAS,UAAU,YAAY,MAAM;AAAA,IAC7C;AAAA,EACF;AAEA,iBAAe,kBAAkB,QAAwC;AACvE,UAAM,aAAa,oBAAI,IAAY;AACnC,QAAI,cAAc;AAClB,WAAO,eAAe,CAAC,YAAY,CAAC,OAAO,SAAS;AAClD,oBAAc;AACd,UAAI,SAAS;AACb,aAAO,CAAC,YAAY,CAAC,OAAO,SAAS;AACnC,cAAM,OAAO,MAAM,GAAG,IAAI,QAAQ,KAAK;AAAA,UACrC,UAAU;AAAA,UACV,kBAAkB;AAAA,UAClB,WAAW;AAAA,UACX,OAAO;AAAA,UACP;AAAA,UACA;AAAA,QACF,CAAC;AACD,mBAAW,UAAU,MAAM;AACzB,cAAI,CAAC,WAAW,IAAI,OAAO,EAAE,GAAG;AAC9B,uBAAW,IAAI,OAAO,EAAE;AACxB,0BAAc;AAAA,UAChB;AAAA,QACF;AACA,YAAI,KAAK,SAAS,sBAAuB;AACzC,kBAAU;AAAA,MACZ;AAAA,IACF;AACA,WAAO,CAAC,GAAG,UAAU;AAAA,EACvB;AAEA,iBAAe,mBACb,UACA,QACe;AACf,aACM,UAAU,GACd,WAAW,+BAA+B,QAC1C,WAAW,GACX;AACA,UAAI,OAAO,QAAS;AACpB,UAAI;AACF,cAAM;AAAA,UACJ;AAAA,UACA,MAAM,uBAAuB,UAAU,MAAM;AAAA,UAC7C;AAAA,QACF;AACA;AAAA,MACF,SAAS,OAAgB;AACvB,YAAI,OAAO,QAAS;AACpB,cAAM,aAAa,+BAA+B,OAAO;AACzD,YAAI,eAAe,OAAW,OAAM;AACpC,cAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACvD,WAAG,IAAI;AAAA,UACL,UAAU,QAAQ,wCAAwC,UAAU,CAAC,UAAU,OAAO;AAAA,QACxF;AACA,cAAM,eAAe,YAAY,MAAM;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAEA,iBAAe,yBAAyB,QAAoC;AAC1E,UAAM,YAAY,MAAM,kBAAkB,MAAM;AAChD,QAAI,YAAY;AAChB,QAAI;AACJ,UAAM,cAAc,KAAK;AAAA,MACvB;AAAA,MACA,UAAU;AAAA,IACZ;AACA,UAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,YAAY,GAAG,YAAY;AAC9D,aAAO,CAAC,OAAO,WAAW,eAAe,QAAW;AAClD,cAAM,WAAW,UAAU,SAAS;AACpC,qBAAa;AACb,YAAI,aAAa,UAAa,OAAO,QAAS;AAC9C,YAAI;AACF,gBAAM,mBAAmB,UAAU,MAAM;AAAA,QAC3C,SAAS,OAAgB;AACvB,yBAAe;AAAA,QACjB;AAAA,MACF;AAAA,IACF,CAAC;AACD,UAAM,QAAQ,IAAI,OAAO;AACzB,QAAI,eAAe,OAAW,OAAM;AAAA,EACtC;AAEA,KAAG,OAAO;AAAA,IAAG;AAAA,IAAkB,CAAC,EAAE,OAAO,MACvC,QAAQ,OAAO,IAAI,YAAY;AAC7B,UAAI,CAAC,iBAAiB,MAAM,EAAG;AAC/B,UAAK,MAAM,UAAU,OAAO,EAAE,MAAO,KAAM;AAC3C,YAAM,UAAU,OAAO,IAAI,aAAa,MAAM,CAAC;AAC/C,YAAM,SAAS,OAAO,IAAI,SAAS;AAAA,IACrC,CAAC;AAAA,EACH;AAEA,KAAG,OAAO;AAAA,IAAG;AAAA,IAAiB,CAAC,EAAE,OAAO,MACtC,QAAQ,OAAO,IAAI,YAAY;AAC7B,YAAM,SAAS,OAAO,IAAI,QAAQ;AAClC,YAAM,QAAQ,MAAM,UAAU,OAAO,EAAE;AACvC,UAAI,UAAU,KAAM;AACpB,YAAM,QAAS,MAAM,GAAG,IAAI,QAAQ,IAAI;AAAA,QACtC,UAAU,OAAO;AAAA,MACnB,CAAC;AACD,UAAI,CAAC,mBAAmB,KAAK,GAAG;AAC9B,cAAM,GAAG,QAAQ,GAAG,OAAO,SAAS,OAAO,EAAE,CAAC;AAC9C;AAAA,MACF;AACA,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,WAAW,KAAK;AAAA,QAChB;AAAA,QACA,OAAO;AAAA,MACT;AACA,YAAM,UAAU,OAAO,IAAI,KAAK;AAAA,IAClC,CAAC;AAAA,EACH;AAEA,KAAG,OAAO;AAAA,IAAG;AAAA,IAAe,CAAC,EAAE,OAAO,MACpC,QAAQ,OAAO,IAAI,YAAY;AAC7B,YAAM,QAAQ,MAAM,UAAU,OAAO,EAAE;AACvC,UAAI,UAAU,KAAM;AACpB,UAAI;AACF,cAAM,sBAAsB,OAAO,IAAI,KAAK;AAAA,MAC9C,SAAS,OAAgB;AACvB,cAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,WAAG,IAAI;AAAA,UACL,UAAU,OAAO,EAAE,mCAAmC,OAAO;AAAA,QAC/D;AAAA,MACF;AACA,YAAM,MAAM,MAAM,kBAAkB,MAAM;AAC1C,UAAI,KAAK;AACP,cAAM,qBAAqB;AAAA,UACzB,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF;AACA,YAAM,QAAS,MAAM,GAAG,IAAI,QAAQ,IAAI;AAAA,QACtC,UAAU,OAAO;AAAA,MACnB,CAAC;AACD,UAAI,CAAC,mBAAmB,KAAK,GAAG;AAC9B,cAAM,GAAG,QAAQ,GAAG,OAAO,SAAS,OAAO,EAAE,CAAC;AAC9C;AAAA,MACF;AACA,YAAM,eAAe,OAAO,OAAO,WAAW,KAAK,CAAC;AACpD,YAAM,UAAU,OAAO,IAAI,KAAK;AAChC,UAAI,IAAK,OAAM,SAAS,OAAO,IAAI,MAAM;AAAA,IAC3C,CAAC;AAAA,EACH;AAEA,KAAG,OAAO;AAAA,IAAG;AAAA,IAAiB,CAAC,EAAE,OAAO,MACtC,QAAQ,OAAO,IAAI,YAAY;AAC7B,YAAM,QAAQ,MAAM,UAAU,OAAO,EAAE;AACvC,UAAI,UAAU,KAAM;AACpB,YAAM,QAAS,MAAM,GAAG,IAAI,QAAQ,IAAI;AAAA,QACtC,UAAU,OAAO;AAAA,MACnB,CAAC;AACD,UAAI,CAAC,mBAAmB,KAAK,GAAG;AAC9B,cAAM,GAAG,QAAQ,GAAG,OAAO,SAAS,OAAO,EAAE,CAAC;AAC9C;AAAA,MACF;AACA,YAAM,eAAe,OAAO,OAAO,WAAW,KAAK,CAAC;AACpD,YAAM,UAAU,OAAO,IAAI,KAAK;AAAA,IAClC,CAAC;AAAA,EACH;AAEA,QAAM,SAAS,CAAC,aACd,QAAQ,UAAU,YAAY;AAC5B,UAAM,GAAG,QAAQ,GAAG,OAAO,SAAS,QAAQ,CAAC;AAAA,EAC/C,CAAC;AACH,KAAG,OAAO,GAAG,mBAAmB,CAAC,EAAE,OAAO,MAAM,OAAO,OAAO,EAAE,CAAC;AACjE,KAAG,OAAO,GAAG,kBAAkB,CAAC,EAAE,OAAO,MAAM,OAAO,OAAO,EAAE,CAAC;AAEhE,MAAI,2BAAuC,MAAM;AACjD,MAAI;AACF,+BAA2B,GAAG,IAAI,UAAU;AAAA,MAC1C,OAAO;AAAA,MACP,SAAS,OAAO;AACd,cAAM,WAAW,MAAM;AACvB,YACE,aAAa,UACZ,CAAC,MAAM,QAAQ,SAAS,mBAAmB,KAC1C,CAAC,MAAM,QAAQ,SAAS,gBAAgB,GAC1C;AACA;AAAA,QACF;AACA,aAAK,QAAQ,UAAU,MAAM,uBAAuB,QAAQ,CAAC;AAAA,MAC/D;AAAA,IACF,CAAC;AAAA,EACH,SAAS,OAAgB;AACvB,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,OAAG,IAAI,KAAK,0CAA0C,OAAO,EAAE;AAAA,EACjE;AAEA,WAAS,SAAS,CAAC,MAAM,aAAa;AACpC,QAAI,KAAK,cAAc,SAAS,UAAW;AAC3C,OAAG,IAAI;AAAA,MACL,gCAAgC,SAAS,SAAS,SAAS,KAAK,SAAS;AAAA,IAC3E;AACA,QAAI,KAAK,cAAc,QAAS;AAChC,SAAK,GAAG,QAAQ,GACb,KAAK,YAAY,EACjB,KAAK,OAAO,SAAS;AACpB,iBAAW,OAAO,MAAM;AACtB,cAAM,WAAW,IAAI,MAAM,aAAa,MAAM;AAC9C,cAAM,QAAQ,UAAU,YAAY;AAClC,gBAAM,QAAQ,MAAM,UAAU,QAAQ;AACtC,cAAI,UAAU,KAAM;AACpB,gBAAM,SAAU,MAAM,GAAG,IAAI,QAAQ,IAAI;AAAA,YACvC;AAAA,UACF,CAAC;AACD,cAAI,CAAC,mBAAmB,MAAM,GAAG;AAC/B,kBAAM,GAAG,QAAQ,GAAG,OAAO,SAAS,QAAQ,CAAC;AAC7C;AAAA,UACF;AACA,gBAAM,eAAe,QAAQ,OAAO,WAAW,MAAM,CAAC;AACtD,gBAAM,UAAU,UAAU,KAAK;AAC/B,gBAAM,SAAS,UAAU,UAAU;AAAA,QACrC,CAAC;AAAA,MACH;AAAA,IACF,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,SAAG,IAAI,MAAM,6CAA6C,OAAO,EAAE;AAAA,IACrE,CAAC;AAAA,EACL,CAAC;AAED,KAAG,WAAW,QAAQ,wBAAwB;AAAA,IAC5C,MAAM,MAAM,QAAQ;AAClB,aAAO,CAAC,OAAO,SAAS;AACtB,cAAM,yBAAyB,MAAM;AACrC,YAAI,OAAO,QAAS;AACpB,cAAM,eAAe,4BAA4B,MAAM;AAAA,MACzD;AAAA,IACF;AAAA,EACF,CAAC;AAED,KAAG,UAAU,YAAY;AACvB,oBAAgB;AAChB,6BAAyB;AACzB,UAAM,QAAQ,WAAW,CAAC,GAAG,OAAO,OAAO,CAAC,CAAC;AAC7C,eAAW;AAAA,EACb,CAAC;AACD,OAAK,SACF,IAAI,EACJ;AAAA,IAAK,CAAC,EAAE,UAAU,MACjB,GAAG,IAAI,KAAK,gCAAgC,SAAS,EAAE;AAAA,EACzD,EACC,MAAM,CAAC,UAAmB;AACzB,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,OAAG,IAAI,KAAK,iCAAiC,OAAO,EAAE;AAAA,EACxD,CAAC;AACL;", + "names": ["matches"] +} diff --git a/plugins/thread-organizer/dist/server.meta.json b/plugins/thread-organizer/dist/server.meta.json new file mode 100644 index 0000000..96e54fd --- /dev/null +++ b/plugins/thread-organizer/dist/server.meta.json @@ -0,0 +1,11 @@ +{ + "sdkMajor": 0, + "sdkVersion": "0.4.1", + "artifactFormatVersion": 1, + "pluginId": "thread-organizer", + "pluginVersion": "0.1.0", + "builtWith": { + "bbVersion": "0.0.34", + "pluginSdkVersion": "0.4.1" + } +} diff --git a/plugins/thread-organizer/package.json b/plugins/thread-organizer/package.json index b046758..baea95d 100644 --- a/plugins/thread-organizer/package.json +++ b/plugins/thread-organizer/package.json @@ -17,7 +17,7 @@ }, "engines": { "bb": ">=0.0.34", - "bbPluginSdk": "^0.4.0" + "bbPluginSdk": "^0.4.1" }, "bb": { "name": "Thread Organizer", @@ -30,7 +30,7 @@ "skills": [] }, "devDependencies": { - "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.1.tgz", "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.0.0", "better-sqlite3": "^12.10.0", diff --git a/plugins/thread-organizer/types/bb-plugin-sdk-app.d.ts b/plugins/thread-organizer/types/bb-plugin-sdk-app.d.ts index 22cf8e7..763f78f 100644 --- a/plugins/thread-organizer/types/bb-plugin-sdk-app.d.ts +++ b/plugins/thread-organizer/types/bb-plugin-sdk-app.d.ts @@ -255,7 +255,7 @@ interface PluginThreadPanelActionRegistration { * right for document-like content. "flush" gives the component the full * tab area (no padding, definite height, no host scrolling) — right for * app-like content that manages its own layout, such as - * `experimental_ThreadChat`. + * `ThreadChat`. */ layout?: "padded" | "flush"; /** @@ -274,9 +274,8 @@ interface PluginPendingInteractionRegistration { /** Context handed to a `sidebarFooterAction`'s `run`. */ interface PluginSidebarFooterActionContext { /** - * Navigate to this plugin's Settings detail page - * (`/settings/plugins/`), where declarative settings and - * `settingsSection` slots render. + * Navigate to this plugin's detail page in Tools, where declarative settings + * and `settingsSection` slots render. */ openSettings(): void; } @@ -361,7 +360,7 @@ interface PluginMessageActionContext { /** * Open one of this plugin's `threadPanelAction` components in the current * thread's side panel — the registration-callback equivalent of - * `useBbNavigate().experimental_openThreadPanel`. Returns true when the host + * `useBbNavigate().openThreadPanel`. Returns true when the host * accepted (the action id exists and the surface has a panel); false * otherwise. */ @@ -395,7 +394,7 @@ interface PluginAppSlots { sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void; fileOpener(registration: PluginFileOpenerRegistration): void; messageDirective(registration: PluginMessageDirectiveRegistration): void; - experimental_messageAction(registration: PluginMessageActionRegistration): void; + messageAction(registration: PluginMessageActionRegistration): void; } interface PluginAppComposer { customize(registration: ComposerCustomization): void; @@ -424,14 +423,14 @@ interface PluginContentScriptRegistration { */ mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise; } -/** Experimental lifecycle surface for trusted frontend content scripts. */ +/** Lifecycle surface for trusted frontend content scripts. */ interface PluginAppContentScripts { register(registration: PluginContentScriptRegistration): void; } interface PluginAppBuilder { slots: PluginAppSlots; composer: PluginAppComposer; - experimental_contentScripts: PluginAppContentScripts; + contentScripts: PluginAppContentScripts; } type PluginAppSetup = (app: PluginAppBuilder) => void; /** @@ -563,8 +562,12 @@ interface PluginComposerThreadRowStatus { icon: string; /** Accessible label for the status glyph. */ label: string; - /** Semantic host color for the status glyph. Defaults to the neutral tone. */ - tone?: "default" | "success"; + /** + * Semantic host treatment for the status glyph. `running` automatically + * shimmers; terminal `success` and `error` tones are static. Defaults to the + * neutral tone. + */ + tone?: "default" | "running" | "success" | "error"; } /** An @-mention pill bound to one of the calling plugin's mention providers. */ interface PluginComposerMention { @@ -684,6 +687,15 @@ interface ThreadChatProps { layout?: "contained" | "document"; /** Bump to focus the composer (ignored by `variant: "timeline"`). */ focusRequest?: number; + /** + * Who controls the permission mode sends run with. "inherit" (default) + * pins every send to the thread's own resolved default and renders the + * picker as a dimmed label — a plugin surface can never widen it. + * "editable" gives this chat its own picker, so the user can raise or + * lower permissions for this thread independently of the thread it was + * forked from. Ignored by `variant: "timeline"` (no composer). + */ + permissionPolicy?: "inherit" | "editable"; className?: string; /** Rendered above the conversation, scrolling with it. */ leadingContent?: ReactNode; @@ -738,7 +750,7 @@ interface BbNavigate { * thread surface. Returns false when the surface has no thread side panel or * the action is unavailable. */ - experimental_openThreadPanel(options: { + openThreadPanel(options: { actionId: string; title?: string; params?: JsonValue; @@ -769,18 +781,18 @@ interface PluginSdkApp { * with `Markdown`, the only components the SDK ships — everything else * stays vendored per §5.5. */ - experimental_ThreadChat: ComponentType; + ThreadChat: ComponentType; /** * The host-owned chat-message markdown renderer (see * {@link MarkdownProps}). */ - experimental_Markdown: ComponentType; + Markdown: ComponentType; useComposerView(): ComposerView; } declare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition; -declare const experimental_ThreadChat: react.ComponentType; -declare const experimental_Markdown: react.ComponentType; +declare const ThreadChat: react.ComponentType; +declare const Markdown: react.ComponentType; declare const useRpc: , StandardSchemaV1>>>>() => PluginRpcClient; declare const useRealtime: (channel: string, handler: (payload: unknown) => void) => void; declare const useRealtimeConnectionState: () => PluginRealtimeConnectionState; @@ -790,5 +802,5 @@ declare const useBbNavigate: () => BbNavigate; declare const useComposer: () => PluginComposerApi; declare const useComposerView: () => ComposerView; -export { definePluginApp, experimental_Markdown, experimental_ThreadChat, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings }; +export { Markdown, ThreadChat, definePluginApp, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings }; export type { BbContext, BbNavigate, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtimeConnectionState, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps }; diff --git a/plugins/thread-organizer/types/bb-plugin-sdk.d.ts b/plugins/thread-organizer/types/bb-plugin-sdk.d.ts index 8125dda..aa4ea0e 100644 --- a/plugins/thread-organizer/types/bb-plugin-sdk.d.ts +++ b/plugins/thread-organizer/types/bb-plugin-sdk.d.ts @@ -260,7 +260,7 @@ interface PluginThreadPanelActionRegistration { * right for document-like content. "flush" gives the component the full * tab area (no padding, definite height, no host scrolling) — right for * app-like content that manages its own layout, such as - * `experimental_ThreadChat`. + * `ThreadChat`. */ layout?: "padded" | "flush"; /** @@ -279,9 +279,8 @@ interface PluginPendingInteractionRegistration { /** Context handed to a `sidebarFooterAction`'s `run`. */ interface PluginSidebarFooterActionContext { /** - * Navigate to this plugin's Settings detail page - * (`/settings/plugins/`), where declarative settings and - * `settingsSection` slots render. + * Navigate to this plugin's detail page in Tools, where declarative settings + * and `settingsSection` slots render. */ openSettings(): void; } @@ -366,7 +365,7 @@ interface PluginMessageActionContext { /** * Open one of this plugin's `threadPanelAction` components in the current * thread's side panel — the registration-callback equivalent of - * `useBbNavigate().experimental_openThreadPanel`. Returns true when the host + * `useBbNavigate().openThreadPanel`. Returns true when the host * accepted (the action id exists and the surface has a panel); false * otherwise. */ @@ -400,7 +399,7 @@ interface PluginAppSlots { sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void; fileOpener(registration: PluginFileOpenerRegistration): void; messageDirective(registration: PluginMessageDirectiveRegistration): void; - experimental_messageAction(registration: PluginMessageActionRegistration): void; + messageAction(registration: PluginMessageActionRegistration): void; } interface PluginAppComposer { customize(registration: ComposerCustomization): void; @@ -429,14 +428,14 @@ interface PluginContentScriptRegistration { */ mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise; } -/** Experimental lifecycle surface for trusted frontend content scripts. */ +/** Lifecycle surface for trusted frontend content scripts. */ interface PluginAppContentScripts { register(registration: PluginContentScriptRegistration): void; } interface PluginAppBuilder { slots: PluginAppSlots; composer: PluginAppComposer; - experimental_contentScripts: PluginAppContentScripts; + contentScripts: PluginAppContentScripts; } type PluginAppSetup = (app: PluginAppBuilder) => void; /** @@ -568,8 +567,12 @@ interface PluginComposerThreadRowStatus { icon: string; /** Accessible label for the status glyph. */ label: string; - /** Semantic host color for the status glyph. Defaults to the neutral tone. */ - tone?: "default" | "success"; + /** + * Semantic host treatment for the status glyph. `running` automatically + * shimmers; terminal `success` and `error` tones are static. Defaults to the + * neutral tone. + */ + tone?: "default" | "running" | "success" | "error"; } /** An @-mention pill bound to one of the calling plugin's mention providers. */ interface PluginComposerMention { @@ -689,6 +692,15 @@ interface ThreadChatProps { layout?: "contained" | "document"; /** Bump to focus the composer (ignored by `variant: "timeline"`). */ focusRequest?: number; + /** + * Who controls the permission mode sends run with. "inherit" (default) + * pins every send to the thread's own resolved default and renders the + * picker as a dimmed label — a plugin surface can never widen it. + * "editable" gives this chat its own picker, so the user can raise or + * lower permissions for this thread independently of the thread it was + * forked from. Ignored by `variant: "timeline"` (no composer). + */ + permissionPolicy?: "inherit" | "editable"; className?: string; /** Rendered above the conversation, scrolling with it. */ leadingContent?: ReactNode; @@ -743,7 +755,7 @@ interface BbNavigate { * thread surface. Returns false when the surface has no thread side panel or * the action is unavailable. */ - experimental_openThreadPanel(options: { + openThreadPanel(options: { actionId: string; title?: string; params?: JsonValue$1; @@ -774,12 +786,12 @@ interface PluginSdkApp { * with `Markdown`, the only components the SDK ships — everything else * stays vendored per §5.5. */ - experimental_ThreadChat: ComponentType; + ThreadChat: ComponentType; /** * The host-owned chat-message markdown renderer (see * {@link MarkdownProps}). */ - experimental_Markdown: ComponentType; + Markdown: ComponentType; useComposerView(): ComposerView; } @@ -790,6 +802,7 @@ interface PluginSdkApp { declare const appSettingsSchema: z$1.ZodObject<{ caffeinate: z$1.ZodBoolean; showKeyboardHints: z$1.ZodBoolean; + steerActiveThreadOnEnter: z$1.ZodBoolean; showUnhandledProviderEvents: z$1.ZodBoolean; codexMemoryEnabled: z$1.ZodBoolean; claudeCodeMemoryEnabled: z$1.ZodBoolean; @@ -1011,7 +1024,7 @@ type Environment = z$1.infer; */ declare const experimentsSchema: z$1.ZodObject<{ claudeCodeMockCliTraffic: z$1.ZodBoolean; - plugins: z$1.ZodBoolean; + toolsHub: z$1.ZodBoolean; sideChatPlugin: z$1.ZodBoolean; }, z$1.core.$strip>; type Experiments = z$1.infer; @@ -3110,11 +3123,47 @@ declare const projectCommandsQuerySchema: z$1.ZodObject<{ environmentId: z$1.ZodOptional, z$1.ZodOptional>>; }, z$1.core.$strict>; type ProjectCommandsQuery = z$1.infer; +declare const skillListResponseSchema: z$1.ZodObject<{ + skills: z$1.ZodArray; + provider: z$1.ZodNullable>; + scope: z$1.ZodEnum<{ + plugin: "plugin"; + "bb-builtin": "bb-builtin"; + "bb-user": "bb-user"; + "bb-project": "bb-project"; + "claude-user": "claude-user"; + "claude-project": "claude-project"; + "codex-user": "codex-user"; + "codex-project": "codex-project"; + }>; + pluginId: z$1.ZodNullable; + filePath: z$1.ZodString; + manageable: z$1.ZodBoolean; + registrySkillId: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SkillListResponse = z$1.infer; +declare const skillContentResponseSchema: z$1.ZodObject<{ + content: z$1.ZodString; + revision: z$1.ZodString; +}, z$1.core.$strip>; +type SkillContentResponse = z$1.infer; +declare const skillFilesResponseSchema: z$1.ZodObject<{ + files: z$1.ZodArray; + truncated: z$1.ZodBoolean; +}, z$1.core.$strip>; +type SkillFilesResponse = z$1.infer; declare const projectResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - standard: "standard"; personal: "personal"; + standard: "standard"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable; @@ -3135,8 +3184,8 @@ type ProjectResponse = z$1.infer; declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - standard: "standard"; personal: "personal"; + standard: "standard"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable; @@ -3238,8 +3287,8 @@ declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ ultra: "ultra"; }>; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; }, z$1.core.$strip>>; @@ -3262,6 +3311,61 @@ declare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{ }, z$1.core.$strict>; type CopyProjectAttachmentsRequest = z$1.infer; +declare const registrySkillSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + skillId: z$1.ZodString; + name: z$1.ZodString; + installs: z$1.ZodNumber; + stars: z$1.ZodNullable; + installUrl: z$1.ZodNullable; + url: z$1.ZodString; + topic: z$1.ZodNullable; + summary: z$1.ZodNullable; +}, z$1.core.$strip>; +type RegistrySkill = z$1.infer; +declare const registrySkillsPageSchema: z$1.ZodObject<{ + skills: z$1.ZodArray; + installUrl: z$1.ZodNullable; + url: z$1.ZodString; + topic: z$1.ZodNullable; + summary: z$1.ZodNullable; + }, z$1.core.$strip>>; + pagination: z$1.ZodObject<{ + page: z$1.ZodNumber; + perPage: z$1.ZodNumber; + total: z$1.ZodNumber; + hasMore: z$1.ZodBoolean; + }, z$1.core.$strip>; +}, z$1.core.$strip>; +type RegistrySkillsPage = z$1.infer; +declare const registryRepositoryStarsSchema: z$1.ZodObject<{ + stars: z$1.ZodNumber; +}, z$1.core.$strip>; +type RegistryRepositoryStars = z$1.infer; +declare const registrySkillDetailSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + skillId: z$1.ZodString; + hash: z$1.ZodNullable; + files: z$1.ZodNullable>>; +}, z$1.core.$strip>; +type RegistrySkillDetail = z$1.infer; +declare const registrySkillInstallResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + filePath: z$1.ZodString; +}, z$1.core.$strip>; +type RegistrySkillInstallResponse = z$1.infer; + declare const updateEnvironmentRequestSchema: z$1.ZodObject<{ mergeBaseBranch: z$1.ZodOptional>; name: z$1.ZodOptional>; @@ -3373,8 +3477,8 @@ declare const environmentDiffFileResponseSchema: z$1.ZodObject<{ path: z$1.ZodString; content: z$1.ZodString; contentEncoding: z$1.ZodEnum<{ - utf8: "utf8"; base64: "base64"; + utf8: "utf8"; }>; mimeType: z$1.ZodOptional; sizeBytes: z$1.ZodNumber; @@ -3986,16 +4090,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4079,9 +4183,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4160,9 +4264,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4253,9 +4357,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4334,9 +4438,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4399,16 +4503,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4517,12 +4621,13 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; - projectId: z$1.ZodString; - providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; - providerThreadId: z$1.ZodString; }, z$1.core.$strict>; target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ mode: z$1.ZodLiteral<"start">; @@ -4653,8 +4757,8 @@ declare const hostDaemonCommandRegistry: { }, z$1.core.$strip>], "mode">; }, z$1.core.$strict>, z$1.ZodObject<{ appliedAs: z$1.ZodEnum<{ - steer: "steer"; "new-turn": "new-turn"; + steer: "steer"; }>; }, z$1.core.$strip>, "settled", false>; "thread.stop": HostDaemonCommandDescriptor<"thread.stop", z$1.ZodObject<{ @@ -4695,16 +4799,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4813,12 +4917,13 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; - projectId: z$1.ZodString; - providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; - providerThreadId: z$1.ZodString; }, z$1.core.$strict>; }, z$1.core.$strict>, z$1.ZodObject<{ cleared: z$1.ZodBoolean; @@ -5095,9 +5199,9 @@ declare const hostDaemonCommandRegistry: { text: z$1.ZodString; startedAt: z$1.ZodOptional; status: z$1.ZodOptional>; metadata: z$1.ZodOptional>; }, z$1.core.$strip>>; @@ -5325,13 +5429,91 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - project: "project"; user: "user"; + project: "project"; }>; description: z$1.ZodNullable; argumentHint: z$1.ZodNullable; }, z$1.core.$strip>>; }, z$1.core.$strip>, "onlineRpc", true>; + "host.list_skills": HostDaemonCommandDescriptor<"host.list_skills", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.list_skills">; + providerId: z$1.ZodString; + cwd: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + skills: z$1.ZodArray; + filePath: z$1.ZodString; + rootKind: z$1.ZodEnum<{ + plugin: "plugin"; + "bb-project": "bb-project"; + "bb-data-dir": "bb-data-dir"; + "bb-builtin": "bb-builtin"; + "provider-project": "provider-project"; + "provider-user": "provider-user"; + }>; + linked: z$1.ZodBoolean; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.delete_skill": HostDaemonCommandDescriptor<"host.delete_skill", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.delete_skill">; + scope: z$1.ZodEnum<{ + "bb-project": "bb-project"; + "bb-user": "bb-user"; + "claude-user": "claude-user"; + "claude-project": "claude-project"; + "codex-user": "codex-user"; + "codex-project": "codex-project"; + }>; + name: z$1.ZodString; + cwd: z$1.ZodNullable; + rootPath: z$1.ZodNullable; + }, z$1.core.$strict>, z$1.ZodObject<{ + deletedPath: z$1.ZodString; + }, z$1.core.$strip>, "onlineRpc", false>; + "host.write_skill": HostDaemonCommandDescriptor<"host.write_skill", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.write_skill">; + scope: z$1.ZodEnum<{ + "bb-project": "bb-project"; + "bb-user": "bb-user"; + }>; + name: z$1.ZodString; + cwd: z$1.ZodNullable; + content: z$1.ZodString; + expectedSha256: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"written">; + filePath: z$1.ZodString; + sha256: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"conflict">; + currentSha256: z$1.ZodNullable; + }, z$1.core.$strip>], "outcome">, "onlineRpc", false>; + "host.install_global_skills": HostDaemonCommandDescriptor<"host.install_global_skills", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.install_global_skills">; + skills: z$1.ZodArray>; + }, z$1.core.$strict>, z$1.ZodObject<{ + installations: z$1.ZodArray>; + }, z$1.core.$strict>, "onlineRpc", false>; + "host.global_skills_status": HostDaemonCommandDescriptor<"host.global_skills_status", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.global_skills_status">; + names: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodObject<{ + entries: z$1.ZodArray; + }, z$1.core.$strict>>; + }, z$1.core.$strict>, "onlineRpc", true>; "host.list_branches": HostDaemonCommandDescriptor<"host.list_branches", z$1.ZodObject<{ type: z$1.ZodLiteral<"host.list_branches">; path: z$1.ZodString; @@ -5728,8 +5910,8 @@ declare const hostDaemonCommandRegistry: { npmGlobalPackageVersion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -5751,8 +5933,8 @@ declare const hostDaemonCommandRegistry: { cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - install: "install"; update: "update"; + install: "install"; }>; type: z$1.ZodLiteral<"provider_cli.install">; }, z$1.core.$strict>, z$1.ZodObject<{ @@ -5892,13 +6074,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -5942,13 +6124,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6004,13 +6186,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6052,13 +6234,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6101,9 +6283,9 @@ declare const hostDaemonCommandRegistry: { conclusion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -6211,8 +6393,8 @@ declare const providerCliInstallRequestSchema: z$1.ZodObject<{ cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - install: "install"; update: "update"; + install: "install"; }>; }, z$1.core.$strip>; type ProviderCliInstallRequest = z$1.infer; @@ -6420,6 +6602,7 @@ declare const installedPluginSchema: z$1.ZodObject<{ description: z$1.ZodNullable; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6460,6 +6643,17 @@ declare const installedPluginSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6477,7 +6671,6 @@ declare const installedPluginSchema: z$1.ZodObject<{ }, z$1.core.$strip>; type InstalledPlugin = z$1.infer; declare const pluginListResponseSchema: z$1.ZodObject<{ - enabled: z$1.ZodBoolean; plugins: z$1.ZodArray; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6553,6 +6747,17 @@ declare const pluginListResponseSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6607,6 +6812,7 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{ description: z$1.ZodNullable; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6647,6 +6853,17 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6707,6 +6924,7 @@ declare const pluginCatalogStatusSchema: z$1.ZodObject<{ type PluginCatalogStatus = z$1.infer; declare const pluginCatalogSearchResultSchema: z$1.ZodObject<{ entryId: z$1.ZodString; + pluginId: z$1.ZodString; displayName: z$1.ZodString; description: z$1.ZodString; icon: z$1.ZodNullable; @@ -6730,8 +6948,8 @@ declare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{ supportsUserQuestion: z$1.ZodBoolean; supportsFork: z$1.ZodBoolean; supportedPermissionModes: z$1.ZodArray>; }, z$1.core.$strip>; @@ -6851,6 +7069,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ generalSettings: z$1.ZodObject<{ caffeinate: z$1.ZodBoolean; showKeyboardHints: z$1.ZodBoolean; + steerActiveThreadOnEnter: z$1.ZodBoolean; showUnhandledProviderEvents: z$1.ZodBoolean; codexMemoryEnabled: z$1.ZodBoolean; claudeCodeMemoryEnabled: z$1.ZodBoolean; @@ -7093,7 +7312,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ }, z$1.core.$strict>>; experiments: z$1.ZodObject<{ claudeCodeMockCliTraffic: z$1.ZodBoolean; - plugins: z$1.ZodBoolean; + toolsHub: z$1.ZodBoolean; sideChatPlugin: z$1.ZodBoolean; }, z$1.core.$strip>; appearance: z$1.ZodObject<{ @@ -7120,6 +7339,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ }, z$1.core.$strip>>; featureFlags: z$1.ZodObject<{ placeholder: z$1.ZodBoolean; + timelineWindowEventBudget: z$1.ZodNumber; }, z$1.core.$strip>; hostDaemonPort: z$1.ZodNullable; primaryHostId: z$1.ZodNullable; @@ -7179,6 +7399,46 @@ type SystemVersionResponse = z$1.infer; declare const systemConfigReloadResponseSchema: z$1.ZodObject<{ ok: z$1.ZodLiteral; }, z$1.core.$strip>; +declare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{ + machines: z$1.ZodArray; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SystemCliSkillsStatusResponse = z$1.infer; +/** The machines to copy the built-in bb CLI skills onto. */ +declare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{ + hostIds: z$1.ZodArray; +}, z$1.core.$strip>; +type SystemInstallCliSkillsRequest = z$1.infer; +/** + * One entry per requested machine. A machine that is offline or otherwise + * refuses the install fails on its own without taking the others down, so the + * caller can report exactly which machines got the skills. + */ +declare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{ + results: z$1.ZodArray; + hostId: z$1.ZodString; + hostName: z$1.ZodString; + installations: z$1.ZodArray>; + }, z$1.core.$strip>, z$1.ZodObject<{ + ok: z$1.ZodLiteral; + hostId: z$1.ZodString; + hostName: z$1.ZodString; + errorMessage: z$1.ZodString; + }, z$1.core.$strip>], "ok">>; +}, z$1.core.$strip>; +type SystemInstallCliSkillsResponse = z$1.infer; type SystemConfigReloadResponse = z$1.infer; declare const terminalSessionSchema: z$1.ZodObject<{ @@ -8041,10 +8301,10 @@ declare const createThreadRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional>>>; title: z$1.ZodOptional; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; visibility: z$1.ZodDefault>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -9141,9 +9401,9 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{ isGitRepo: z$1.ZodBoolean; isWorktree: z$1.ZodBoolean; workspaceProvisionType: z$1.ZodEnum<{ - personal: "personal"; - "managed-worktree": "managed-worktree"; unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; }>; branchName: z$1.ZodNullable; baseBranch: z$1.ZodNullable; @@ -9437,8 +9697,8 @@ declare const threadQueuedMessageListResponseSchema: z$1.ZodArray; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -9619,8 +9879,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ activePromptMode: z$1.ZodNullable; providerId: z$1.ZodEnum<{ - codex: "codex"; "claude-code": "claude-code"; + codex: "codex"; }>; prompt: z$1.ZodString; }, z$1.core.$strict>>; @@ -9630,7 +9890,7 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ startedAt: z$1.ZodNumber; updatedAt: z$1.ZodNumber; }, z$1.core.$strip>>; - activeWorkflow: z$1.ZodNullable; @@ -9811,8 +10071,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ originalModel: z$1.ZodString; fallbackModel: z$1.ZodString; reason: z$1.ZodEnum<{ - provider: "provider"; refusal: "refusal"; + provider: "provider"; }>; message: z$1.ZodString; }, z$1.core.$strip>>; @@ -10669,6 +10929,78 @@ interface StatusArea { get(args?: StatusGetArgs): Promise; } +interface SkillWorkspaceArgs { + projectId: string; + environmentId: string | null; +} +interface SkillListArgs extends SkillWorkspaceArgs { + signal?: AbortSignal; +} +interface SkillIdentityArgs extends SkillListArgs { + skillId: string; +} +interface SkillContentArgs extends SkillIdentityArgs { + path: string; +} +interface SkillUpdateArgs extends SkillWorkspaceArgs { + skillId: string; + content: string; + revision: string; +} +interface SkillDeleteArgs extends SkillWorkspaceArgs { + skillId: string; +} +/** + * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans + * out one per card. Callers pass their query's AbortSignal so abandoning a + * page cancels its requests instead of leaving them in flight. + */ +interface AbortableArgs { + signal?: AbortSignal; +} +interface RegistrySkillsSearchArgs extends AbortableArgs { + query?: string; + page?: number; + perPage?: number; +} +interface RegistrySkillIdArgs extends AbortableArgs { + registrySkillId: string; +} +interface RegistrySkillSourceArgs extends AbortableArgs { + source: string; + skillId: string; +} +interface RegistryRepositoryArgs extends AbortableArgs { + source: string; +} +/** + * Install is a mutation and deliberately takes no signal: its body is parsed + * with a strict schema, so an extra key would throw at runtime. + */ +interface RegistrySkillInstallArgs { + registrySkillId: string; +} +interface SkillsRegistryArea { + detail(args: RegistrySkillSourceArgs): Promise; + get(args: RegistrySkillIdArgs): Promise; + install(args: RegistrySkillInstallArgs): Promise; + repositoryStars(args: RegistryRepositoryArgs): Promise; + search(args?: RegistrySkillsSearchArgs): Promise; +} +interface SkillsArea { + getContent(args: SkillContentArgs): Promise; + list(args: SkillListArgs): Promise; + listFiles(args: SkillIdentityArgs): Promise; + registry: SkillsRegistryArea; + remove(args: SkillDeleteArgs): Promise<{ + deletedPath: string; + }>; + update(args: SkillUpdateArgs): Promise<{ + filePath: string; + revision: string; + }>; +} + type ThemeGetResult = AppTheme; type ThemeCatalogResult = ThemeCatalogResponse; type ThemeSetInput = AppThemeSelection; @@ -10719,6 +11051,14 @@ type SystemAttentionResult = SystemAttentionResponse; type SystemConfigResult = SystemConfigResponse; type SystemExecutionOptionsResult = SystemExecutionOptionsResponse; type SystemReloadConfigResult = SystemConfigReloadResponse; +type SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest; +interface SystemCliSkillsStatusArgs { + /** Omit for every enrolled machine. */ + hostIds?: readonly string[]; + signal?: AbortSignal; +} +type SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse; +type SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse; type SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse; type SystemUpdateExperimentsResult = Experiments; type SystemUpdateGeneralSettingsResult = AppSettings; @@ -10729,6 +11069,14 @@ interface SystemArea { attention(args?: SystemAttentionArgs): Promise; config(args?: SystemConfigArgs): Promise; executionOptions(args?: SystemExecutionOptionsArgs): Promise; + /** + * Copy bb's built-in CLI skills into each named machine's global agent skill + * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install + * independently; the result reports each machine's outcome. + */ + /** Per-machine install state of bb's built-in CLI skills. */ + cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise; + installCliSkills(args: SystemInstallCliSkillsArgs): Promise; reloadConfig(): Promise; transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise; updateExperiments(args: Experiments): Promise; @@ -11148,6 +11496,7 @@ interface BbSdk extends BbRealtime { projects: ProjectsArea; plugins: PluginsArea; providers: ProvidersArea; + skills: SkillsArea; status: StatusArea; system: SystemArea; terminals: TerminalsArea; diff --git a/plugins/timeline-comments/app.tsx b/plugins/timeline-comments/app.tsx index 039d2a6..bf3bf24 100644 --- a/plugins/timeline-comments/app.tsx +++ b/plugins/timeline-comments/app.tsx @@ -316,7 +316,7 @@ function CommentPanel({ threadId, revealMessage }: PluginThreadPanelProps) { } export default definePluginApp((app) => { - app.experimental_contentScripts.register({ + app.contentScripts.register({ id: "timeline-comment-anchors", mount: mountTimelineCommentsController, }); @@ -332,7 +332,7 @@ export default definePluginApp((app) => { component: CommentPanel, layout: "flush", }); - app.slots.experimental_messageAction({ + app.slots.messageAction({ id: "comment-selection", title: "Comment", icon: "MessageSquare", diff --git a/plugins/timeline-comments/dist/app.css b/plugins/timeline-comments/dist/app.css new file mode 100644 index 0000000..0351add --- /dev/null +++ b/plugins/timeline-comments/dist/app.css @@ -0,0 +1,924 @@ +/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */ +@layer properties; +@layer theme, utilities; +@layer theme { + :root, :host { + --font-sans: var(--font-sans); + --font-serif: var(--font-serif); + --font-mono: var(--font-mono); + --shadow-2xs: var(--shadow-2xs); + --shadow-xs: var(--shadow-xs); + --shadow-sm: var(--shadow-sm); + --shadow-md: var(--shadow-md); + --shadow-lg: var(--shadow-lg); + --shadow-xl: var(--shadow-xl); + --shadow-2xl: var(--shadow-2xl); + --default-transition-duration: 150ms; + --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + --shadow: var(--shadow); + --shadow-lift: var(--shadow-lift); + } +} +@property --tw-animation-delay { + syntax: "*"; + inherits: false; + initial-value: 0s; +} +@property --tw-animation-direction { + syntax: "*"; + inherits: false; + initial-value: normal; +} +@property --tw-animation-duration { + syntax: "*"; + inherits: false; +} +@property --tw-animation-fill-mode { + syntax: "*"; + inherits: false; + initial-value: none; +} +@property --tw-animation-iteration-count { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-enter-blur { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-enter-opacity { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-enter-rotate { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-enter-scale { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-enter-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-enter-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-exit-blur { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-exit-opacity { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-exit-rotate { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-exit-scale { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-exit-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-exit-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@layer utilities { + @scope ([data-bb-plugin="timeline-comments"], [data-bb-plugin-root]:not([data-bb-plugin])) { + .collapse { + visibility: collapse; + } + .visible { + visibility: visible; + } + .absolute { + position: absolute; + } + .relative { + position: relative; + } + .static { + position: static; + } + .container { + width: 100%; + @media (width >= 40rem) { + max-width: 40rem; + } + @media (width >= 48rem) { + max-width: 48rem; + } + @media (width >= 64rem) { + max-width: 64rem; + } + @media (width >= 80rem) { + max-width: 80rem; + } + @media (width >= 96rem) { + max-width: 96rem; + } + } + .block { + display: block; + } + .contents { + display: contents; + } + .grid { + display: grid; + } + .hidden { + display: none; + } + .inline { + display: inline; + } + .grow { + flex-grow: 1; + } + .resize { + resize: both; + } + .border { + border-style: var(--tw-border-style); + border-width: 1px; + } + .lowercase { + text-transform: lowercase; + } + .underline { + text-decoration-line: underline; + } + .blur { + --tw-blur: blur(8px); + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .filter { + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .transition { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .paused { + animation-play-state: paused; + } + .running { + animation-play-state: running; + } + } +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-blur { + syntax: "*"; + inherits: false; +} +@property --tw-brightness { + syntax: "*"; + inherits: false; +} +@property --tw-contrast { + syntax: "*"; + inherits: false; +} +@property --tw-grayscale { + syntax: "*"; + inherits: false; +} +@property --tw-hue-rotate { + syntax: "*"; + inherits: false; +} +@property --tw-invert { + syntax: "*"; + inherits: false; +} +@property --tw-opacity { + syntax: "*"; + inherits: false; +} +@property --tw-saturate { + syntax: "*"; + inherits: false; +} +@property --tw-sepia { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-drop-shadow-size { + syntax: "*"; + inherits: false; +} +@layer properties { + @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { + *, ::before, ::after, ::backdrop { + --tw-animation-delay: 0s; + --tw-animation-direction: normal; + --tw-animation-duration: initial; + --tw-animation-fill-mode: none; + --tw-animation-iteration-count: 1; + --tw-enter-blur: 0; + --tw-enter-opacity: 1; + --tw-enter-rotate: 0; + --tw-enter-scale: 1; + --tw-enter-translate-x: 0; + --tw-enter-translate-y: 0; + --tw-exit-blur: 0; + --tw-exit-opacity: 1; + --tw-exit-rotate: 0; + --tw-exit-scale: 1; + --tw-exit-translate-x: 0; + --tw-exit-translate-y: 0; + --tw-border-style: solid; + --tw-blur: initial; + --tw-brightness: initial; + --tw-contrast: initial; + --tw-grayscale: initial; + --tw-hue-rotate: initial; + --tw-invert: initial; + --tw-opacity: initial; + --tw-saturate: initial; + --tw-sepia: initial; + --tw-drop-shadow: initial; + --tw-drop-shadow-color: initial; + --tw-drop-shadow-alpha: 100%; + --tw-drop-shadow-size: initial; + } + } +} +/* app.css */ +.bb-comments-overlay { + position: fixed; + inset: 0; + z-index: 52; + pointer-events: none; +} +.bb-comments-marker { + position: fixed; + display: grid; + width: 32px; + height: 32px; + place-items: center; + padding: 0; + border: 0; + border-radius: 999px; + background: transparent; + box-shadow: none; + color: var(--muted-foreground); + font: + 600 10px/1 ui-sans-serif, + system-ui, + sans-serif; + pointer-events: auto; + cursor: pointer; +} +.bb-comments-marker svg { + width: 20px; + height: 20px; +} +.bb-comments-marker-cluster { + display: flex; + align-items: center; + justify-content: center; + gap: 2px; +} +[data-bb-comment-gutter=left].bb-comments-marker-cluster { + flex-direction: row-reverse; +} +.bb-comments-marker-cluster svg { + width: 20px; + height: 20px; +} +.bb-comments-marker-count { + min-width: 6px; + font-size: 9px; + line-height: 1; +} +.bb-comments-marker:hover, +.bb-comments-marker:focus-visible { + background: var(--surface-recessed); + color: var(--foreground); + outline: none; +} +.bb-comments-composer-action-wrap { + display: inline-flex; + align-items: center; + gap: 4px; +} +.bb-comments-composer-action-error { + color: var(--destructive-text, var(--muted-foreground)); + font-size: 10px; + line-height: 1; + white-space: nowrap; +} +.bb-comments-composer-action { + display: grid; + width: 28px; + height: 28px; + place-items: center; + padding: 0; + border: 0; + border-radius: 6px; + background: transparent; + color: var(--muted-foreground); + cursor: pointer; +} +.bb-comments-composer-action:hover { + background: var(--surface-recessed); + color: var(--foreground); +} +.bb-comments-composer-action:focus-visible { + outline: 2px solid var(--ring); + outline-offset: 1px; +} +.bb-comments-composer, +.bb-comments-popover { + position: fixed; + z-index: 54; + border: 1px solid var(--border); + border-radius: 11px; + background: var(--popover); + box-shadow: 0 8px 24px color-mix(in oklab, var(--foreground) 12%, transparent); + color: var(--popover-foreground); + outline: none; + font: + 13px/1.45 ui-sans-serif, + system-ui, + sans-serif; +} +.bb-comments-composer { + width: 288px; + overflow: hidden; + padding: 0; +} +.bb-comments-textarea, +.bb-comments-reply-input, +.bb-comments-edit-input, +.bb-comments-panel textarea { + width: 100%; + box-sizing: border-box; + resize: vertical; + border: 1px solid var(--border); + border-radius: 7px; + background: var(--background); + color: var(--foreground); + font: inherit; + outline: none; +} +.bb-comments-textarea { + min-height: 64px; + padding: 10px 12px; + border: 0; + background: transparent; + resize: none; +} +.bb-comments-textarea:focus, +.bb-comments-reply-input:focus, +.bb-comments-edit-input:focus, +.bb-comments-panel textarea:focus { + box-shadow: 0 0 0 1px var(--ring); +} +.bb-comments-edit-input:focus, +.bb-comments-panel-edit textarea:focus { + box-shadow: none; +} +.bb-comments-composer-footer, +.bb-comments-thread-header, +.bb-comments-comment-actions, +.bb-comments-header-actions { + display: flex; + align-items: center; + justify-content: space-between; + gap: 6px; +} +.bb-comments-composer-footer { + min-height: 38px; + padding: 6px 8px 6px 12px; + border-top: 1px solid var(--border-seam, var(--border)); + background: color-mix(in oklab, var(--surface-recessed) 42%, var(--popover)); +} +.bb-comments-composer > .bb-comments-error { + padding-right: 12px; + padding-left: 12px; +} +.bb-comments-hint { + color: var(--muted-foreground); + font-size: 10px; +} +.bb-comments-primary, +.bb-comments-quiet, +.bb-comments-icon-button, +.bb-comments-icon-control, +.bb-comments-cluster-row, +.bb-comments-panel button { + font: inherit; + cursor: pointer; +} +.bb-comments-primary { + min-height: 28px; + padding: 0 9px; + border: 0; + border-radius: 6px; + background: var(--primary); + color: var(--primary-foreground); + font-size: 11px; + font-weight: 600; +} +.bb-comments-primary:disabled { + cursor: default; + opacity: 0.45; +} +.bb-comments-icon-control { + display: grid; + width: 24px; + height: 24px; + flex: 0 0 24px; + place-items: center; + padding: 0; + border: 0; + border-radius: 5px; + background: transparent; + color: var(--muted-foreground); +} +.bb-comments-icon-control:hover, +.bb-comments-icon-control[aria-pressed=true] { + background: var(--surface-recessed); + color: var(--foreground); +} +.bb-comments-icon-control:focus-visible { + outline: 1px solid var(--ring); + outline-offset: 1px; +} +.bb-comments-icon-control:disabled { + cursor: default; + opacity: 0.4; +} +.bb-comments-icon-control svg { + width: 14px; + height: 14px; +} +.bb-comments-error, +.bb-comments-panel-error { + padding: 6px 0; + color: var(--destructive-text, var(--foreground)); + font-size: 11px; +} +.bb-comments-thread { + display: flex; + width: 384px; + max-width: calc(100vw - 32px); + max-height: min(82vh, calc(100vh - 72px)); + flex-direction: column; + overflow: hidden; + border-radius: 12px; +} +.bb-comments-thread-header { + min-height: 34px; + box-sizing: border-box; + flex: 0 0 auto; + padding: 8px 10px 8px 12px; + border-bottom: 1px solid var(--border-seam, var(--border)); + background: color-mix(in oklab, var(--surface-recessed) 58%, var(--popover)); +} +.bb-comments-thread-source { + display: flex; + align-items: center; + gap: 5px; + min-width: 0; + margin-right: 4px; + overflow: hidden; + color: var(--foreground); + font-size: 12px; + font-weight: 500; + text-overflow: ellipsis; + white-space: nowrap; +} +.bb-comments-thread-source svg { + width: 13px; + height: 13px; + color: var(--muted-foreground); +} +.bb-comments-quiet, +.bb-comments-icon-button { + border: 0; + border-radius: 6px; + background: transparent; + color: var(--muted-foreground); + font-size: 11px; +} +.bb-comments-quiet { + min-height: 28px; + padding: 0 6px; + white-space: nowrap; +} +.bb-comments-quiet:hover, +.bb-comments-icon-button:hover { + background: var(--surface-recessed); + color: var(--foreground); +} +.bb-comments-destructive:hover, +.bb-comments-destructive:focus-visible { + color: var(--destructive-text, var(--foreground)); +} +.bb-comments-icon-button { + width: 24px; + height: 24px; + font-size: 18px; +} +.bb-comments-thread-comments { + min-height: 0; + overflow-y: auto; +} +.bb-comments-comment { + position: relative; + padding: 14px 14px 10px; + border-bottom: 1px solid color-mix(in oklab, var(--border-seam, var(--border)) 55%, transparent); +} +.bb-comments-comment[data-editing=true] { + background: transparent; +} +.bb-comments-comment-meta { + color: var(--muted-foreground); + font-size: 10px; +} +.bb-comments-message-header { + display: flex; + min-height: 20px; + align-items: center; + justify-content: space-between; + gap: 8px; + padding: 0; +} +.bb-comments-message-header > div:first-child { + display: flex; + min-width: 0; + align-items: center; + gap: 6px; +} +.bb-comments-message-header strong { + color: var(--foreground); + font-size: 10px; + font-weight: 600; +} +.bb-comments-message-header time { + color: var(--muted-foreground); + font-size: 10px; + font-weight: 300; +} +.bb-comments-comment-body { + margin: 6px 0 0; + white-space: pre-wrap; + overflow-wrap: anywhere; + line-height: 1.55; +} +.bb-comments-comment-actions { + gap: 2px; + justify-content: flex-end; +} +.bb-comments-reply { + display: block; + padding: 10px 12px; + border-top: 1px solid var(--border-seam, var(--border)); + background: color-mix(in oklab, var(--surface-recessed) 42%, var(--popover)); +} +.bb-comments-thread[data-editing=true] .bb-comments-reply { + display: none; +} +.bb-comments-reply .bb-comments-error { + grid-column: 1 / -1; + padding: 0; +} +.bb-comments-reply-input { + field-sizing: content; + min-height: 24px; + max-height: 128px; + padding: 2px 0; + border: 0; + background: transparent; + line-height: 1.5; + resize: none; +} +.bb-comments-edit-input { + field-sizing: content; + min-height: 24px; + max-height: 128px; + padding: 2px 0; + border: 0; + background: transparent; + line-height: 1.5; + resize: none; +} +.bb-comments-inline-composer { + position: relative; + display: block; + box-sizing: border-box; + min-height: 38px; + margin-top: 8px; + padding: 4px 8px; + border: 1px solid color-mix(in oklab, var(--border) 55%, transparent); + border-radius: 12px; + background: color-mix(in oklab, var(--surface-recessed) 44%, var(--popover)); + transition: border-color 120ms ease; +} +.bb-comments-reply .bb-comments-inline-composer { + margin-top: 0; +} +.bb-comments-inline-composer:focus-within { + border-color: var(--border); +} +.bb-comments-inline-composer :is(.bb-comments-reply-input, .bb-comments-edit-input) { + padding-right: 41px; +} +.bb-comments-inline-composer[data-multiline=true] { + padding-bottom: 32px; +} +.bb-comments-inline-composer[data-multiline=true] :is(.bb-comments-reply-input, .bb-comments-edit-input) { + padding-right: 0; +} +.bb-comments-submit-shortcut { + position: absolute; + right: 8px; + bottom: 6px; + display: flex; + min-width: 36px; + height: 24px; + align-items: center; + justify-content: center; + gap: 1px; + padding: 0 5px; + border: 0; + border-radius: 6px; + background: transparent; + color: var(--muted-foreground); + font: inherit; + font-size: 10px; + cursor: pointer; +} +.bb-comments-submit-shortcut svg { + width: 13px; + height: 13px; +} +.bb-comments-submit-shortcut:hover:not(:disabled) { + background: var(--surface-recessed); + color: var(--foreground); +} +.bb-comments-submit-shortcut:disabled { + cursor: default; + opacity: 0.3; +} +.bb-comments-actions-menu { + flex: 0 0 auto; +} +.bb-comments-actions-popover { + position: fixed; + z-index: 56; + display: grid; + min-width: 132px; + max-width: calc(100vw - 16px); + max-height: calc(100vh - 16px); + overflow: auto; + padding: 4px; + border: 1px solid var(--border); + border-radius: 7px; + background: var(--popover); + box-shadow: 0 8px 24px color-mix(in oklab, var(--foreground) 14%, transparent); +} +.bb-comments-actions-popover button { + display: flex; + min-height: 28px; + align-items: center; + gap: 7px; + padding: 0 8px; + border: 0; + border-radius: 5px; + background: transparent; + color: var(--foreground); + font-size: 11px; + text-align: left; +} +.bb-comments-actions-popover button svg { + width: 13px; + height: 13px; + color: var(--muted-foreground); +} +.bb-comments-actions-popover button:hover { + background: var(--surface-recessed); +} +.bb-comments-loading { + padding: 14px; + color: var(--muted-foreground); + text-align: center; +} +.bb-comments-cluster { + padding: 4px; +} +.bb-comments-cluster-row { + display: block; + width: 100%; + padding: 7px 8px; + overflow: hidden; + border: 0; + border-radius: 6px; + background: transparent; + color: var(--foreground); + text-align: left; + text-overflow: ellipsis; + white-space: nowrap; +} +.bb-comments-cluster-row:hover { + background: var(--surface-recessed); +} +.bb-comments-panel { + display: flex; + height: 100%; + min-height: 0; + flex-direction: column; + background: var(--background); + color: var(--foreground); + font: + 13px/1.45 ui-sans-serif, + system-ui, + sans-serif; +} +.bb-comments-filters { + display: flex; + gap: 3px; + padding: 6px 10px; + border-bottom: 1px solid var(--border-seam, var(--border)); + background: color-mix(in oklab, var(--surface-recessed) 45%, transparent); +} +.bb-comments-filters button { + min-height: 26px; + padding: 0 8px; + border: 0; + border-radius: 6px; + background: transparent; + color: var(--muted-foreground); + font-size: 11px; +} +.bb-comments-filters button[aria-pressed=true] { + background: var(--surface-recessed); + color: var(--foreground); +} +.bb-comments-panel-error { + padding: 8px 12px; + border-bottom: 1px solid var(--border); +} +.bb-comments-panel-list { + min-height: 0; + flex: 1; + overflow-y: auto; +} +.bb-comments-panel-row { + border-bottom: 1px solid color-mix(in oklab, var(--border-seam, var(--border)) 68%, transparent); +} +.bb-comments-panel-row[data-active=true] { + background: color-mix(in oklab, var(--surface-recessed) 72%, transparent); +} +.bb-comments-row-summary { + display: grid; + width: 100%; + gap: 2px; + padding: 9px 12px; + border: 0; + background: transparent; + color: var(--foreground); + text-align: left; +} +.bb-comments-row-summary:hover { + background: var(--surface-recessed); +} +.bb-comments-row-source { + overflow: hidden; + color: var(--muted-foreground); + font-size: 10px; + text-overflow: ellipsis; + white-space: nowrap; +} +.bb-comments-row-body { + font-size: 12px; + line-height: 1.45; +} +.bb-comments-row-meta { + color: var(--muted-foreground); + font-size: 10px; +} +.bb-comments-panel-thread { + margin: 0 8px 8px; + overflow: visible; + border: 1px solid var(--border-seam, var(--border)); + border-radius: 12px; + background: var(--popover); +} +.bb-comments-panel-thread-header { + display: flex; + min-height: 34px; + align-items: center; + justify-content: space-between; + gap: 8px; + padding: 5px 7px 5px 10px; + border-bottom: 1px solid var(--border-seam, var(--border)); + background: color-mix(in oklab, var(--surface-recessed) 55%, var(--popover)); +} +.bb-comments-panel-thread-header > span { + min-width: 0; + overflow: hidden; + color: var(--foreground); + font-size: 12px; + font-weight: 500; + text-overflow: ellipsis; + white-space: nowrap; +} +.bb-comments-panel-comment { + position: relative; + padding: 14px 14px 10px; + border-bottom: 1px solid color-mix(in oklab, var(--border-seam, var(--border)) 55%, transparent); +} +.bb-comments-panel-comment[data-editing=true] { + background: transparent; +} +.bb-comments-panel-comment p { + margin: 6px 0 0; + white-space: pre-wrap; + overflow-wrap: anywhere; + line-height: 1.55; +} +.bb-comments-panel-edit { + display: grid; + margin-top: 8px; +} +.bb-comments-panel-edit textarea { + field-sizing: content; + min-height: 34px; + max-height: 180px; + padding: 4px 6px; + border: 0; + background: transparent; + resize: none; +} +.bb-comments-panel-reply { + display: block; + padding: 10px 12px; + background: color-mix(in oklab, var(--surface-recessed) 42%, var(--popover)); +} +.bb-comments-panel-reply textarea { + min-height: 28px; + max-height: 112px; + padding: 4px 6px; + border: 0; + background: transparent; + resize: none; +} +.bb-comments-load-more { + display: block; + margin: 10px auto; + padding: 5px 8px; + border: 1px solid var(--border); + border-radius: 6px; + background: var(--background); + color: var(--muted-foreground); + font-size: 11px; +} +.bb-comments-empty { + padding: 28px 16px; + color: var(--muted-foreground); + text-align: center; +} diff --git a/plugins/timeline-comments/dist/app.js b/plugins/timeline-comments/dist/app.js new file mode 100644 index 0000000..2b4097b --- /dev/null +++ b/plugins/timeline-comments/dist/app.js @@ -0,0 +1,1870 @@ +// bb-plugin-runtime-shim:react +var runtime = globalThis.__bbPluginRuntime; +if (runtime == null || runtime.react == null) { + throw new Error('Cannot load "react": this bundle must be loaded by the BB app, which provides the shared plugin runtime (globalThis.__bbPluginRuntime).'); +} +var mod = runtime.react; +var { + Activity, + Children, + Component, + Fragment, + Profiler, + PureComponent, + StrictMode, + Suspense, + act, + cache, + cacheSignal, + captureOwnerStack, + cloneElement, + createContext, + createElement, + createRef, + forwardRef, + isValidElement, + lazy, + memo, + startTransition, + unstable_useCacheRefresh, + use, + useActionState, + useCallback, + useContext, + useDebugValue, + useDeferredValue, + useEffect, + useEffectEvent, + useId, + useImperativeHandle, + useInsertionEffect, + useLayoutEffect, + useMemo, + useOptimistic, + useReducer, + useRef, + useState, + useSyncExternalStore, + useTransition, + version +} = mod; + +// ../../node_modules/lucide-react/dist/esm/shared/src/utils.js +var toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(); +var mergeClasses = (...classes) => classes.filter((className, index, array) => { + return Boolean(className) && className.trim() !== "" && array.indexOf(className) === index; +}).join(" ").trim(); + +// ../../node_modules/lucide-react/dist/esm/defaultAttributes.js +var defaultAttributes = { + xmlns: "http://www.w3.org/2000/svg", + width: 24, + height: 24, + viewBox: "0 0 24 24", + fill: "none", + stroke: "currentColor", + strokeWidth: 2, + strokeLinecap: "round", + strokeLinejoin: "round" +}; + +// ../../node_modules/lucide-react/dist/esm/Icon.js +var Icon = forwardRef( + ({ + color = "currentColor", + size = 24, + strokeWidth = 2, + absoluteStrokeWidth, + className = "", + children, + iconNode, + ...rest + }, ref) => { + return createElement( + "svg", + { + ref, + ...defaultAttributes, + width: size, + height: size, + stroke: color, + strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth, + className: mergeClasses("lucide", className), + ...rest + }, + [ + ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)), + ...Array.isArray(children) ? children : [children] + ] + ); + } +); + +// ../../node_modules/lucide-react/dist/esm/createLucideIcon.js +var createLucideIcon = (iconName, iconNode) => { + const Component2 = forwardRef( + ({ className, ...props }, ref) => createElement(Icon, { + ref, + iconNode, + className: mergeClasses(`lucide-${toKebabCase(iconName)}`, className), + ...props + }) + ); + Component2.displayName = `${iconName}`; + return Component2; +}; + +// ../../node_modules/lucide-react/dist/esm/icons/message-square-text.js +var __iconNode = [ + ["path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z", key: "1lielz" }], + ["path", { d: "M13 8H7", key: "14i4kc" }], + ["path", { d: "M17 12H7", key: "16if0g" }] +]; +var MessageSquareText = createLucideIcon("MessageSquareText", __iconNode); + +// bb-plugin-runtime-shim:@bb/plugin-sdk/app +var runtime2 = globalThis.__bbPluginRuntime; +if (runtime2 == null || runtime2.pluginSdkApp == null) { + throw new Error('Cannot load "@bb/plugin-sdk/app": this bundle must be loaded by the BB app, which provides the shared plugin runtime (globalThis.__bbPluginRuntime).'); +} +var mod2 = runtime2.pluginSdkApp; +var { + Markdown, + ThreadChat, + definePluginApp, + useBbContext, + useBbNavigate, + useComposer, + useComposerView, + useRealtime, + useRealtimeConnectionState, + useRpc, + useSettings +} = mod2; + +// bridge.ts +var activeController = null; +var anchorHealthSnapshot = /* @__PURE__ */ new Map(); +var anchorHealthListeners = /* @__PURE__ */ new Set(); +function publishTimelineCommentAnchorHealth(health) { + anchorHealthSnapshot = new Map(health); + for (const listener of anchorHealthListeners) listener(); +} +function getTimelineCommentAnchorHealth() { + return anchorHealthSnapshot; +} +function subscribeTimelineCommentAnchorHealth(listener) { + anchorHealthListeners.add(listener); + return () => anchorHealthListeners.delete(listener); +} +function installTimelineCommentsController(controller) { + activeController = controller; + return () => { + if (activeController === controller) activeController = null; + }; +} +function beginTimelineComment(context) { + activeController?.beginComment(context); +} +async function focusTimelineComment(commentThreadId) { + return await activeController?.focusThread(commentThreadId) ?? false; +} + +// ../../node_modules/lucide/dist/esm/createElement.js +var createElement2 = (tag, attrs, children = []) => { + const element2 = document.createElementNS("http://www.w3.org/2000/svg", tag); + Object.keys(attrs).forEach((name) => { + element2.setAttribute(name, String(attrs[name])); + }); + if (children.length) { + children.forEach((child) => { + const childElement = createElement2(...child); + element2.appendChild(childElement); + }); + } + return element2; +}; +var createElement$1 = ([tag, attrs, children]) => createElement2(tag, attrs, children); + +// ../../node_modules/lucide/dist/esm/defaultAttributes.js +var defaultAttributes2 = { + xmlns: "http://www.w3.org/2000/svg", + width: 24, + height: 24, + viewBox: "0 0 24 24", + fill: "none", + stroke: "currentColor", + "stroke-width": 2, + "stroke-linecap": "round", + "stroke-linejoin": "round" +}; + +// ../../node_modules/lucide/dist/esm/icons/check-check.js +var CheckCheck = [ + "svg", + defaultAttributes2, + [ + ["path", { d: "M18 6 7 17l-5-5" }], + ["path", { d: "m22 10-7.5 7.5L13 16" }] + ] +]; + +// ../../node_modules/lucide/dist/esm/icons/command.js +var Command = [ + "svg", + defaultAttributes2, + [["path", { d: "M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3" }]] +]; + +// ../../node_modules/lucide/dist/esm/icons/corner-down-left.js +var CornerDownLeft = [ + "svg", + defaultAttributes2, + [ + ["polyline", { points: "9 10 4 15 9 20" }], + ["path", { d: "M20 4v7a4 4 0 0 1-4 4H4" }] + ] +]; + +// ../../node_modules/lucide/dist/esm/icons/ellipsis-vertical.js +var EllipsisVertical = [ + "svg", + defaultAttributes2, + [ + ["circle", { cx: "12", cy: "12", r: "1" }], + ["circle", { cx: "12", cy: "5", r: "1" }], + ["circle", { cx: "12", cy: "19", r: "1" }] + ] +]; + +// ../../node_modules/lucide/dist/esm/icons/pencil.js +var Pencil = [ + "svg", + defaultAttributes2, + [ + [ + "path", + { + d: "M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z" + } + ], + ["path", { d: "m15 5 4 4" }] + ] +]; + +// ../../node_modules/lucide/dist/esm/icons/sticky-note.js +var StickyNote = [ + "svg", + defaultAttributes2, + [ + ["path", { d: "M16 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V8Z" }], + ["path", { d: "M15 3v4a2 2 0 0 0 2 2h4" }] + ] +]; + +// ../../node_modules/lucide/dist/esm/icons/trash-2.js +var Trash2 = [ + "svg", + defaultAttributes2, + [ + ["path", { d: "M3 6h18" }], + ["path", { d: "M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6" }], + ["path", { d: "M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2" }], + ["line", { x1: "10", x2: "10", y1: "11", y2: "17" }], + ["line", { x1: "14", x2: "14", y1: "11", y2: "17" }] + ] +]; + +// anchors.ts +function indexText(root) { + const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT); + const segments = []; + let text = ""; + for (let node = walker.nextNode(); node !== null; node = walker.nextNode()) { + const value = node.nodeValue ?? ""; + segments.push({ + node, + start: text.length, + end: text.length + value.length + }); + text += value; + } + return { text, segments }; +} +function boundaryAt(segments, offset, preferNext) { + for (const [index, segment] of segments.entries()) { + if (offset < segment.end || offset === segment.end && (!preferNext || index === segments.length - 1)) { + return { node: segment.node, offset: offset - segment.start }; + } + if (preferNext && offset === segment.end) continue; + } + return null; +} +function rangeForOffsets(segments, start, end) { + const startBoundary = boundaryAt(segments, start, true); + const endBoundary = boundaryAt(segments, end, false); + if (startBoundary === null || endBoundary === null) return null; + const range = document.createRange(); + range.setStart(startBoundary.node, startBoundary.offset); + range.setEnd(endBoundary.node, endBoundary.offset); + return range; +} +function contextMatches(text, at, selector) { + const prefix = text.slice(Math.max(0, at - selector.prefix.length), at); + const suffixStart = at + selector.exact.length; + const suffix = text.slice(suffixStart, suffixStart + selector.suffix.length); + return prefix === selector.prefix && suffix === selector.suffix; +} +function restoreSelector(root, selector) { + const { text, segments } = indexText(root); + if (text.slice(selector.start, selector.end) === selector.exact && contextMatches(text, selector.start, selector)) { + const range2 = rangeForOffsets(segments, selector.start, selector.end); + return range2 === null ? null : { range: range2, strategy: "offset" }; + } + const occurrences = []; + const candidates = []; + let at = text.indexOf(selector.exact); + while (at !== -1) { + occurrences.push(at); + if (contextMatches(text, at, selector)) candidates.push(at); + at = text.indexOf(selector.exact, at + 1); + } + const start = candidates.length === 1 ? candidates[0] : occurrences.length === 1 ? occurrences[0] : void 0; + if (start === void 0) return null; + const range = rangeForOffsets(segments, start, start + selector.exact.length); + return range === null ? null : { range, strategy: "context" }; +} +function chooseNearestGutter(fragments, rail) { + if (rail.width < 520 || fragments.length === 0) return "right"; + const leftDistance = Math.min( + ...fragments.map((rect) => Math.abs(rect.left - rail.left)) + ); + const rightDistance = Math.min( + ...fragments.map((rect) => Math.abs(rail.right - rect.right)) + ); + return leftDistance < rightDistance ? "left" : "right"; +} +function layoutGutterMarkers(candidates, top, bottom, markerSize = 24, gap = 4) { + if (candidates.length === 0 || bottom <= top) return []; + const sorted = [...candidates].sort( + (a, b) => a.desiredY - b.desiredY || a.id.localeCompare(b.id) + ); + const capacity = Math.max( + 1, + Math.floor((bottom - top + gap) / (markerSize + gap)) + ); + const proximityGroups = []; + for (const candidate of sorted) { + const previous = proximityGroups.at(-1); + const previousDesiredY = previous?.at(-1)?.desiredY; + if (previous !== void 0 && previousDesiredY !== void 0 && candidate.desiredY - previousDesiredY < markerSize + gap) { + previous.push(candidate); + } else { + proximityGroups.push([candidate]); + } + } + const groups = proximityGroups.length <= capacity ? proximityGroups : [ + ...proximityGroups.slice(0, capacity - 1), + proximityGroups.slice(capacity - 1).flat() + ]; + const placements = groups.map((group) => ({ + ids: group.map(({ id }) => id), + y: Math.min( + bottom - markerSize, + Math.max( + top, + group.reduce((sum, item) => sum + item.desiredY, 0) / group.length - markerSize / 2 + ) + ) + })); + for (let index = 1; index < placements.length; index += 1) { + placements[index].y = Math.max( + placements[index].y, + placements[index - 1].y + markerSize + gap + ); + } + const overflow = placements.at(-1).y + markerSize - bottom; + if (overflow > 0) { + for (const placement of placements) placement.y -= overflow; + } + return placements; +} + +// comment-body.ts +var COMMENT_BODY_CODE_POINT_LIMIT = 1e4; +function commentBodyError(value) { + if (value.trim() === "") return "Comment body is required"; + if (Array.from(value).length > COMMENT_BODY_CODE_POINT_LIMIT) + return "Comment body must be at most 10,000 Unicode code points"; + return null; +} + +// controller.ts +var OWNED = "data-bb-timeline-comments-owned"; +var NORMAL_HIGHLIGHT = "bb-timeline-comments"; +var ACTIVE_HIGHLIGHT = "bb-timeline-comments-active"; +var DRAFT_TTL = 24 * 60 * 60 * 1e3; +var PLUGIN_DECORATION = "data-bb-plugin-decoration"; +var MARKER_SIZE = 32; +var MARKER_TEXT_GAP = 8; +function readDraft(key) { + const saved = sessionStorage.getItem(key); + if (saved === null) return null; + try { + const parsed = JSON.parse(saved); + if (typeof parsed.body === "string" && typeof parsed.expiresAt === "number" && parsed.expiresAt > Date.now()) { + return parsed.body; + } + } catch { + } + sessionStorage.removeItem(key); + return null; +} +function writeDraft(key, body) { + if (body.trim() === "") { + sessionStorage.removeItem(key); + return; + } + sessionStorage.setItem( + key, + JSON.stringify({ body, expiresAt: Date.now() + DRAFT_TTL }) + ); +} +function element(tag, className, text) { + const node = document.createElement(tag); + node.setAttribute(OWNED, ""); + if (className !== void 0) node.className = className; + if (text !== void 0) node.textContent = text; + return node; +} +function decorateRoot(node) { + node.setAttribute(PLUGIN_DECORATION, "timeline-comments"); + return node; +} +function escapeSelector(value) { + return globalThis.CSS?.escape?.(value) ?? value.replace(/[^a-zA-Z0-9_-]/gu, "\\$&"); +} +function sourceExcerpt(text) { + return text.length > 120 ? `${text.slice(0, 117)}\u2026` : text; +} +function formatTime(value) { + return new Intl.DateTimeFormat(void 0, { + month: "short", + day: "numeric", + hour: "numeric", + minute: "2-digit" + }).format(value); +} +function relativeTime(value) { + const elapsed = Math.max(0, Date.now() - value); + if (elapsed < 6e4) return "just now"; + if (elapsed < 36e5) { + const minutes = Math.floor(elapsed / 6e4); + return `${minutes} ${minutes === 1 ? "minute" : "minutes"} ago`; + } + if (elapsed < 864e5) { + const hours = Math.floor(elapsed / 36e5); + return `${hours} ${hours === 1 ? "hour" : "hours"} ago`; + } + if (elapsed < 6048e5) { + const days = Math.floor(elapsed / 864e5); + return `${days} ${days === 1 ? "day" : "days"} ago`; + } + return new Intl.DateTimeFormat(void 0, { + month: "short", + day: "numeric" + }).format(value); +} +function icon(node) { + const svg = createElement$1(node); + svg.setAttribute(OWNED, ""); + svg.setAttribute("width", "16"); + svg.setAttribute("height", "16"); + svg.setAttribute("stroke-width", "1.5"); + svg.setAttribute("aria-hidden", "true"); + return svg; +} +function errorMessage(error) { + return error instanceof Error ? error.message : "Something went wrong"; +} +var inlineComposerAnimations = /* @__PURE__ */ new WeakMap(); +var inlineComposerNaturalHeights = /* @__PURE__ */ new WeakMap(); +function syncInlineComposerLayout(textarea, composer, animate = true) { + const styles = getComputedStyle(textarea); + const lineHeight = Number.parseFloat(styles.lineHeight) || 20; + const verticalPadding = (Number.parseFloat(styles.paddingTop) || 0) + (Number.parseFloat(styles.paddingBottom) || 0); + const currentMultiline = composer.dataset.multiline === "true"; + const hasText = textarea.value.trim() !== ""; + const requestsMultiline = textarea.value.includes("\n") || textarea.scrollHeight - verticalPadding > lineHeight + 1; + const nextMultiline = hasText && (currentMultiline || requestsMultiline); + const running = inlineComposerAnimations.get(composer); + const startHeight = running === void 0 ? inlineComposerNaturalHeights.get(composer) ?? composer.getBoundingClientRect().height : composer.getBoundingClientRect().height; + running?.cancel(); + inlineComposerAnimations.delete(composer); + composer.style.removeProperty("overflow"); + composer.dataset.multiline = nextMultiline ? "true" : "false"; + const endHeight = composer.getBoundingClientRect().height; + inlineComposerNaturalHeights.set(composer, endHeight); + if (!animate || Math.abs(endHeight - startHeight) < 0.5 || typeof composer.animate !== "function" || matchMedia("(prefers-reduced-motion: reduce)").matches) { + return; + } + composer.style.overflow = "hidden"; + const animation = composer.animate( + [{ height: `${startHeight}px` }, { height: `${endHeight}px` }], + { + duration: 150, + easing: "cubic-bezier(0.22, 1, 0.36, 1)" + } + ); + inlineComposerAnimations.set(composer, animation); + const finish = () => { + if (inlineComposerAnimations.get(composer) !== animation) return; + inlineComposerAnimations.delete(composer); + composer.style.removeProperty("overflow"); + }; + animation.addEventListener("finish", finish, { once: true }); + animation.addEventListener("cancel", finish, { once: true }); +} +function isRelevantMutation(record) { + const selector = "[data-bb-thread-window], [data-bb-conversation-message-id], [data-bb-message-prose-root]"; + return [...record.addedNodes, ...record.removedNodes].some( + (node) => node instanceof Element && (node.matches(selector) || node.querySelector(selector) !== null) + ); +} +var TimelineCommentsController = class { + #rpc; + #navigate; + #portal = decorateRoot(element("div", "bb-comments-portal")); + #overlay = element("div", "bb-comments-overlay"); + #highlightStyle = element("style"); + #anchors = /* @__PURE__ */ new Map(); + #restored = /* @__PURE__ */ new Map(); + #disposers = []; + #observer; + #resizeObserver; + #refreshNonce = 0; + #refreshing = null; + #frame = null; + #popover = null; + #composer = null; + #activeIds = /* @__PURE__ */ new Set(); + #provisionalRange = null; + #openThreadId = null; + #destroyed = false; + #sawConnected = false; + #focusNonce = 0; + #outsideComposer = null; + #outsidePopover = null; + #popoverKeydown = null; + #popoverInvoker = null; + #actionsMenu = null; + #actionsTrigger = null; + #outsideActionsMenu = null; + constructor(context) { + this.#rpc = context.rpc; + this.#navigate = context.navigate; + this.#overlay.setAttribute("aria-live", "polite"); + this.#highlightStyle.textContent = ` + ::highlight(${NORMAL_HIGHLIGHT}) { + text-decoration: underline; + text-decoration-color: color-mix(in oklab, var(--foreground) 62%, transparent); + text-decoration-thickness: 1px; + text-underline-offset: 3px; + } + ::highlight(${ACTIVE_HIGHLIGHT}) { + background: color-mix(in oklab, var(--primary) 12%, transparent); + text-decoration: underline; + text-decoration-color: var(--foreground); + text-decoration-thickness: 2px; + text-underline-offset: 3px; + } + `; + this.#portal.append(this.#overlay); + document.body.append(this.#highlightStyle, this.#portal); + this.#observer = new MutationObserver((records) => { + if (records.some(isRelevantMutation)) this.scheduleRefresh(); + }); + this.#observer.observe(document.body, { childList: true, subtree: true }); + this.#resizeObserver = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(() => this.scheduleLayout()); + const onViewportChange = () => this.scheduleLayout(); + document.addEventListener("scroll", onViewportChange, true); + window.addEventListener("resize", onViewportChange); + this.#disposers.push( + () => document.removeEventListener("scroll", onViewportChange, true) + ); + this.#disposers.push( + () => window.removeEventListener("resize", onViewportChange) + ); + this.#disposers.push( + context.realtime.subscribe( + "comments-changed", + () => this.scheduleRefresh() + ) + ); + this.#disposers.push( + context.realtime.subscribeConnectionState((state) => { + if (state === "connected") { + if (this.#sawConnected) this.scheduleRefresh(); + this.#sawConnected = true; + } + }) + ); + this.#sawConnected = context.realtime.getConnectionState() === "connected"; + this.#disposers.push(installTimelineCommentsController(this)); + this.scheduleRefresh(); + } + beginComment(context) { + if (context.selection === void 0 || context.selectedText === void 0) + return; + this.closeComposer(); + const root = this.findProse(context.threadId, context.message.id); + const restored = root === null ? null : restoreSelector(root, context.selection); + this.#provisionalRange = restored?.range ?? null; + this.rebuildHighlights(); + const key = `bb.timeline-comments.draft:${context.threadId}:${context.message.id}:${context.selection.start}:${context.selection.end}`; + const shell = element("form", "bb-comments-composer"); + shell.setAttribute("role", "dialog"); + shell.setAttribute("aria-label", "Add comment"); + const textarea = element( + "textarea", + "bb-comments-textarea" + ); + textarea.placeholder = "Add a comment\u2026"; + textarea.maxLength = 2e4; + textarea.value = readDraft(key) ?? ""; + const footer = element("div", "bb-comments-composer-footer"); + footer.append(element("span", "bb-comments-hint", "\u2318/Ctrl Enter")); + const submit = element( + "button", + "bb-comments-primary", + "Comment" + ); + submit.type = "submit"; + footer.append(submit); + const error = element("div", "bb-comments-error"); + error.setAttribute("role", "status"); + shell.append(textarea, error, footer); + const firstRect = context.selection.rects[0]; + const x = firstRect?.x ?? window.innerWidth / 2; + const y = context.selection.rects.at(-1)?.y ?? window.innerHeight / 2; + shell.style.left = `${Math.max(8, Math.min(window.innerWidth - 328, x))}px`; + shell.style.top = `${Math.max(8, Math.min(window.innerHeight - 180, y + 22))}px`; + const validate = () => { + const message = commentBodyError(textarea.value); + submit.disabled = message !== null; + error.textContent = message !== null && textarea.value.trim() !== "" ? message : ""; + return message; + }; + const persist = () => writeDraft(key, textarea.value); + textarea.addEventListener("input", () => { + persist(); + validate(); + }); + textarea.addEventListener("keydown", (event) => { + if (event.key === "Escape") { + event.preventDefault(); + persist(); + this.closeComposer(); + } + if (event.key === "Enter" && (event.metaKey || event.ctrlKey)) { + event.preventDefault(); + shell.requestSubmit(); + } + }); + shell.addEventListener("submit", (event) => { + event.preventDefault(); + if (validate() !== null) return; + submit.disabled = true; + error.textContent = ""; + void this.#rpc.call("createThread", { + bbThreadId: context.threadId, + message: context.message, + selector: { + ...context.selection, + rects: context.selection.rects.map((rect) => ({ ...rect })) + }, + body: textarea.value + }).then((detail) => { + sessionStorage.removeItem(key); + this.closeComposer(); + this.#openThreadId = detail.thread.id; + return this.refresh(); + }).then(() => this.openThread(detailId(this.#openThreadId))).catch((caught) => { + submit.disabled = false; + error.textContent = errorMessage(caught); + }); + }); + validate(); + this.#composer = shell; + this.#portal.append(shell); + this.#outsideComposer = (event) => { + if (event.target instanceof Node && shell.contains(event.target)) return; + persist(); + this.closeComposer(); + }; + document.addEventListener("pointerdown", this.#outsideComposer, true); + requestAnimationFrame(() => textarea.focus()); + } + async focusThread(commentThreadId) { + const request = ++this.#focusNonce; + this.#openThreadId = commentThreadId; + await this.refresh(); + if (request !== this.#focusNonce || this.#destroyed) return false; + const restored = this.#restored.get(commentThreadId); + if (restored === void 0) return false; + const scrollRoot = restored.window.querySelector( + "[data-bb-thread-scroll-root]" + ); + if (scrollRoot === null) return false; + const rangeRect = restored.range.getBoundingClientRect(); + const scrollRect = scrollRoot.getBoundingClientRect(); + scrollRoot.scrollBy({ + top: rangeRect.top + rangeRect.height / 2 - (scrollRect.top + scrollRect.height / 2), + behavior: "smooth" + }); + this.setActive([commentThreadId]); + await new Promise( + (resolve) => requestAnimationFrame(() => resolve()) + ); + if (request !== this.#focusNonce || this.#destroyed) return false; + this.scheduleLayout(); + restored.marker?.focus({ preventScroll: true }); + await this.openThread(commentThreadId); + return true; + } + scheduleRefresh() { + this.#refreshNonce += 1; + queueMicrotask(() => { + void this.refresh().catch((error) => { + if (!this.#destroyed) + console.error("timeline-comments refresh failed", error); + }); + }); + } + async refresh() { + if (this.#destroyed) return; + if (this.#refreshing !== null) { + await this.#refreshing; + if (!this.#destroyed) return this.refresh(); + return; + } + const nonce = this.#refreshNonce; + this.#refreshing = this.loadAnchors(); + try { + await this.#refreshing; + } finally { + this.#refreshing = null; + } + if (nonce !== this.#refreshNonce && !this.#destroyed) await this.refresh(); + } + async loadAnchors() { + const threadIds = [ + ...document.querySelectorAll("[data-bb-thread-window]") + ].map((node) => node.dataset.bbThreadWindow).filter((id) => typeof id === "string" && id !== "").filter((id, index, all) => all.indexOf(id) === index).slice(0, 20); + this.#anchors.clear(); + if (threadIds.length > 0) { + let cursor; + do { + const page = await this.#rpc.call("listOpenAnchors", { + threadIds, + ...cursor !== void 0 ? { cursor } : {} + }); + if (this.#destroyed) return; + for (const anchor of page.anchors) + this.#anchors.set(anchor.id, anchor); + cursor = page.nextCursor ?? void 0; + } while (cursor !== void 0 && !this.#destroyed); + } + if (this.#destroyed) return; + this.restoreAll(); + } + findWindow(threadId) { + return document.querySelector( + `[data-bb-thread-window="${escapeSelector(threadId)}"]` + ); + } + findProse(threadId, messageId) { + const windowNode = this.findWindow(threadId); + const row = windowNode?.querySelector( + `[data-bb-conversation-message-id="${escapeSelector(messageId)}"]` + ); + return row?.querySelector("[data-bb-message-prose-root]") ?? null; + } + restoreAll() { + this.#restored.clear(); + this.#overlay.replaceChildren(); + this.#resizeObserver?.disconnect(); + const health = /* @__PURE__ */ new Map(); + for (const anchor of this.#anchors.values()) { + const windowNode = this.findWindow(anchor.bbThreadId); + const prose = this.findProse(anchor.bbThreadId, anchor.messageId); + if (windowNode === null || prose === null) { + health.set(anchor.id, "not-mounted"); + continue; + } + const restored = restoreSelector(prose, anchor.selector); + if (restored === null) { + health.set(anchor.id, "unanchored"); + continue; + } + health.set(anchor.id, "anchored"); + this.#resizeObserver?.observe(windowNode); + this.#resizeObserver?.observe(prose); + const fragments = [...restored.range.getClientRects()].filter( + (rect) => rect.width > 0 || rect.height > 0 + ); + const fallback = restored.range.getBoundingClientRect(); + const rects = fragments.length > 0 ? fragments : [fallback]; + const proseRect = prose.getBoundingClientRect(); + const side = chooseNearestGutter(rects, { + left: proseRect.left, + right: proseRect.right, + width: windowNode.getBoundingClientRect().width + }); + const desiredY = rects.reduce((sum, rect) => sum + rect.top + rect.height / 2, 0) / rects.length; + this.#restored.set(anchor.id, { + anchor, + range: restored.range, + marker: null, + side, + desiredY, + window: windowNode, + prose + }); + } + publishTimelineCommentAnchorHealth(health); + this.rebuildHighlights(); + this.layoutMarkers(); + } + rebuildHighlights() { + const registry = globalThis.CSS?.highlights; + const HighlightClass = globalThis.Highlight; + if (registry === void 0 || HighlightClass === void 0) return; + const normal = new HighlightClass(); + const active = new HighlightClass(); + for (const [id, restored] of this.#restored) { + const paintRange = typeof globalThis.StaticRange === "undefined" ? restored.range : new StaticRange({ + startContainer: restored.range.startContainer, + startOffset: restored.range.startOffset, + endContainer: restored.range.endContainer, + endOffset: restored.range.endOffset + }); + normal.add(paintRange); + if (this.#activeIds.has(id)) active.add(paintRange); + } + if (this.#provisionalRange !== null) { + const range = this.#provisionalRange; + active.add( + typeof globalThis.StaticRange === "undefined" ? range : new StaticRange({ + startContainer: range.startContainer, + startOffset: range.startOffset, + endContainer: range.endContainer, + endOffset: range.endOffset + }) + ); + } + registry.set(NORMAL_HIGHLIGHT, normal); + registry.set(ACTIVE_HIGHLIGHT, active); + } + scheduleLayout() { + if (this.#frame !== null) return; + this.#frame = requestAnimationFrame(() => { + this.#frame = null; + this.layoutMarkers(); + this.positionPopover(); + this.positionActionsMenu(); + }); + } + layoutMarkers() { + this.#overlay.replaceChildren(); + for (const restored of this.#restored.values()) { + const rects = [...restored.range.getClientRects()]; + const bounding = restored.range.getBoundingClientRect(); + const fragments = rects.length > 0 ? rects : [bounding]; + restored.desiredY = fragments.reduce((sum, rect) => sum + rect.top + rect.height / 2, 0) / fragments.length; + const proseRect = restored.prose.getBoundingClientRect(); + restored.side = chooseNearestGutter(fragments, { + left: proseRect.left, + right: proseRect.right, + width: restored.window.getBoundingClientRect().width + }); + restored.marker = null; + } + const groups = /* @__PURE__ */ new Map(); + for (const restored of this.#restored.values()) { + const key = `${restored.anchor.bbThreadId}:${restored.side}`; + const list = groups.get(key) ?? []; + list.push(restored); + groups.set(key, list); + } + for (const list of groups.values()) { + const windowRect = list[0].window.getBoundingClientRect(); + const top = Math.max(8, windowRect.top); + const bottom = Math.min(window.innerHeight - 8, windowRect.bottom); + for (const placement of layoutGutterMarkers( + list.map(({ anchor, desiredY }) => ({ id: anchor.id, desiredY })), + top, + bottom + )) { + const threads = placement.ids.map((id) => this.#restored.get(id)).filter(Boolean); + const marker = element( + "button", + "bb-comments-marker" + ); + marker.type = "button"; + marker.dataset.bbCommentGutter = threads[0].side; + marker.style.top = `${placement.y}px`; + const proseRects = threads.map( + ({ prose }) => prose.getBoundingClientRect() + ); + const gutterX = threads[0].side === "left" ? Math.min(...proseRects.map(({ left }) => left)) - MARKER_SIZE - MARKER_TEXT_GAP : Math.max(...proseRects.map(({ right }) => right)) + MARKER_TEXT_GAP; + marker.style.left = `${Math.max( + 8, + Math.min(window.innerWidth - MARKER_SIZE - 8, gutterX) + )}px`; + marker.setAttribute( + "aria-label", + threads.length === 1 ? `Open comment thread${threads[0].anchor.replyCount > 0 ? ` with ${threads[0].anchor.replyCount} ${threads[0].anchor.replyCount === 1 ? "reply" : "replies"}` : ""}` : `Open ${threads.length} comment threads` + ); + marker.append(icon(StickyNote)); + if (threads.length > 1) { + marker.classList.add("bb-comments-marker-cluster"); + marker.append( + element( + "span", + "bb-comments-marker-count", + String(threads.length) + ) + ); + } + marker.addEventListener( + "mouseenter", + () => this.setActive(placement.ids) + ); + marker.addEventListener("mouseleave", () => this.setActive([])); + marker.addEventListener("focus", () => this.setActive(placement.ids)); + marker.addEventListener("blur", () => this.setActive([])); + marker.addEventListener("click", () => { + if (threads.length === 1) void this.openThread(threads[0].anchor.id); + else this.openCluster(marker, threads); + }); + this.#overlay.append(marker); + for (const thread of threads) thread.marker = marker; + } + } + } + setActive(ids) { + this.#activeIds = new Set(ids); + this.rebuildHighlights(); + } + openCluster(marker, threads) { + this.closePopover(); + const menu = element("div", "bb-comments-popover bb-comments-cluster"); + menu.setAttribute("role", "dialog"); + menu.setAttribute("aria-label", "Comment threads"); + let first = null; + for (const thread of threads) { + const button = element( + "button", + "bb-comments-cluster-row" + ); + button.type = "button"; + button.textContent = sourceExcerpt(thread.anchor.selector.exact); + button.addEventListener( + "click", + () => void this.openThread(thread.anchor.id) + ); + first ??= button; + menu.append(button); + } + this.#popover = menu; + this.#portal.append(menu); + this.installPopoverDismissal(marker); + this.positionNear(marker, menu); + first?.focus({ preventScroll: true }); + } + async openThread(commentThreadId) { + const anchor = this.#anchors.get(commentThreadId) ?? this.#restored.get(commentThreadId)?.anchor; + if (anchor === void 0) return; + this.#openThreadId = commentThreadId; + this.closePopover(false); + this.setActive([commentThreadId]); + const popover = element( + "section", + "bb-comments-popover bb-comments-thread" + ); + popover.setAttribute("role", "dialog"); + popover.setAttribute("aria-label", "Comment thread"); + popover.tabIndex = -1; + popover.append(element("div", "bb-comments-loading", "Loading\u2026")); + this.#popover = popover; + this.#portal.append(popover); + this.installPopoverDismissal( + this.#restored.get(commentThreadId)?.marker ?? null + ); + this.positionPopover(); + popover.focus({ preventScroll: true }); + try { + const detail = await this.loadThread(anchor.bbThreadId, commentThreadId); + if (this.#popover !== popover) return; + this.renderThreadPopover(popover, detail); + this.positionPopover(); + } catch (caught) { + popover.replaceChildren( + element("div", "bb-comments-error", errorMessage(caught)) + ); + } + } + async loadThread(bbThreadId, commentThreadId) { + let cursor; + let detail = null; + do { + const page = await this.#rpc.call("getCommentThread", { + bbThreadId, + commentThreadId, + ...cursor !== void 0 ? { cursor } : {} + }); + detail = detail === null ? page : { ...page, comments: [...detail.comments, ...page.comments] }; + cursor = page.nextCursor ?? void 0; + } while (cursor !== void 0); + return detail; + } + renderThreadPopover(popover, detail) { + this.closeActionsMenu(); + delete popover.dataset.editing; + popover.replaceChildren(); + const header = element("header", "bb-comments-thread-header"); + const source = element("div", "bb-comments-thread-source"); + source.append(icon(StickyNote), document.createTextNode("Comment")); + const headerActions = element("div", "bb-comments-header-actions"); + const resolve = element( + "button", + "bb-comments-icon-control" + ); + resolve.type = "button"; + resolve.setAttribute( + "aria-label", + detail.thread.resolvedAt === null ? "Resolve thread" : "Reopen thread" + ); + resolve.title = detail.thread.resolvedAt === null ? "Resolve thread" : "Reopen thread"; + resolve.setAttribute( + "aria-pressed", + String(detail.thread.resolvedAt !== null) + ); + resolve.append(icon(CheckCheck)); + resolve.addEventListener("click", () => { + resolve.disabled = true; + void this.#rpc.call("setThreadResolved", { + bbThreadId: detail.thread.bbThreadId, + commentThreadId: detail.thread.id, + expectedVersion: detail.thread.version, + resolved: detail.thread.resolvedAt === null + }).then(() => { + this.closePopover(); + this.scheduleRefresh(); + }).catch((caught) => { + resolve.disabled = false; + this.handlePopoverMutationError(popover, detail, caught); + }); + }); + const removeThread = element( + "button", + "bb-comments-icon-control bb-comments-destructive" + ); + removeThread.type = "button"; + removeThread.setAttribute("aria-label", "Delete thread"); + removeThread.title = "Delete thread"; + removeThread.append(icon(Trash2)); + removeThread.addEventListener("click", () => { + if (!window.confirm("Delete this comment thread?")) return; + const root = detail.comments.find(({ parentId }) => parentId === null); + if (root === void 0) return; + removeThread.disabled = true; + void this.#rpc.call("deleteComment", { + bbThreadId: detail.thread.bbThreadId, + commentId: root.id, + expectedVersion: root.version, + expectedThreadVersion: detail.thread.version + }).then(() => { + this.closePopover(); + this.scheduleRefresh(); + }).catch((caught) => { + removeThread.disabled = false; + this.handlePopoverMutationError(popover, detail, caught); + }); + }); + headerActions.append(resolve, removeThread); + header.append(source, headerActions); + popover.append(header); + const comments = element("div", "bb-comments-thread-comments"); + for (const comment of detail.comments) + comments.append(this.renderComment(detail, comment, popover)); + popover.append(comments); + if (detail.thread.resolvedAt === null) { + const reply = element("form", "bb-comments-reply"); + const replyComposer = element("div", "bb-comments-inline-composer"); + const draftKey = `bb.timeline-comments.reply:${detail.thread.id}`; + const textarea = element( + "textarea", + "bb-comments-reply-input" + ); + textarea.placeholder = "Reply..."; + textarea.maxLength = 2e4; + textarea.value = readDraft(draftKey) ?? ""; + const send = element( + "button", + "bb-comments-submit-shortcut" + ); + send.type = "submit"; + send.setAttribute("aria-label", "Reply"); + send.title = "Reply \xB7 \u2318/Ctrl Enter"; + send.append(icon(Command), icon(CornerDownLeft)); + const error = element("div", "bb-comments-error"); + error.setAttribute("role", "status"); + const validate = () => { + const message = commentBodyError(textarea.value); + send.disabled = message !== null; + error.textContent = message !== null && textarea.value.trim() !== "" ? message : ""; + return message; + }; + textarea.addEventListener("input", () => { + writeDraft(draftKey, textarea.value); + syncInlineComposerLayout(textarea, replyComposer); + validate(); + }); + textarea.addEventListener("keydown", (event) => { + if (event.key === "Enter" && (event.metaKey || event.ctrlKey)) { + event.preventDefault(); + reply.requestSubmit(); + } + }); + replyComposer.append(textarea, send); + reply.append(replyComposer, error); + reply.addEventListener("submit", (event) => { + event.preventDefault(); + if (validate() !== null) return; + send.disabled = true; + void this.#rpc.call("reply", { + bbThreadId: detail.thread.bbThreadId, + commentThreadId: detail.thread.id, + body: textarea.value + }).then(() => { + sessionStorage.removeItem(draftKey); + return this.openThread(detail.thread.id); + }).catch((caught) => { + send.disabled = false; + this.handlePopoverMutationError(popover, detail, caught); + }); + }); + validate(); + popover.append(reply); + syncInlineComposerLayout(textarea, replyComposer, false); + } + } + renderComment(detail, comment, popover) { + const row = element("article", "bb-comments-comment"); + row.dataset.bbCommentId = comment.id; + const buildHeader = (action) => { + const header = element("header", "bb-comments-message-header"); + const byline = element("div"); + byline.append(element("strong", void 0, "Me")); + const timestamp = element("time", void 0, relativeTime(comment.createdAt)); + timestamp.dateTime = new Date(comment.createdAt).toISOString(); + timestamp.title = formatTime(comment.createdAt); + byline.append(timestamp); + header.append(byline, action); + return header; + }; + const body = element("p", "bb-comments-comment-body", comment.body); + const actions = element("div", "bb-comments-actions-menu"); + const actionsTrigger = element( + "button", + "bb-comments-icon-control" + ); + actionsTrigger.type = "button"; + actionsTrigger.setAttribute("aria-label", "Comment actions"); + actionsTrigger.setAttribute("aria-haspopup", "menu"); + actionsTrigger.setAttribute("aria-expanded", "false"); + actionsTrigger.title = "Comment actions"; + actionsTrigger.append(icon(EllipsisVertical)); + const actionsMenu = element("div", "bb-comments-actions-popover"); + actionsMenu.setAttribute("role", "menu"); + const menuItems = () => [...actionsMenu.querySelectorAll('[role="menuitem"]')].filter((item) => !item.disabled); + actionsMenu.addEventListener("keydown", (event) => { + const items = menuItems(); + const current = items.indexOf(document.activeElement); + let next; + if (event.key === "ArrowDown") + next = items[(current + 1 + items.length) % items.length]; + if (event.key === "ArrowUp") + next = items[(current - 1 + items.length) % items.length]; + if (event.key === "Home") next = items[0]; + if (event.key === "End") next = items.at(-1); + if (next !== void 0) { + event.preventDefault(); + next.focus({ preventScroll: true }); + return; + } + if (event.key !== "Tab") return; + event.preventDefault(); + this.focusAdjacentToActionsTrigger(actionsTrigger, event.shiftKey); + this.closeActionsMenu(); + }); + actionsMenu.addEventListener("focusout", () => { + queueMicrotask(() => { + if (this.#actionsMenu === actionsMenu && !actionsMenu.contains(document.activeElement)) { + this.closeActionsMenu(); + } + }); + }); + actionsTrigger.addEventListener("click", () => { + if (this.#actionsTrigger === actionsTrigger) { + this.closeActionsMenu(); + return; + } + this.openActionsMenu(actionsTrigger, actionsMenu); + }); + const edit = element("button"); + edit.type = "button"; + edit.tabIndex = -1; + edit.setAttribute("role", "menuitem"); + edit.append(icon(Pencil), document.createTextNode("Edit")); + edit.addEventListener("click", () => { + const draftKey = `bb.timeline-comments.edit:${comment.id}`; + popover.dataset.editing = "true"; + row.dataset.editing = "true"; + this.closeActionsMenu(); + const textarea = element( + "textarea", + "bb-comments-edit-input" + ); + textarea.setAttribute("aria-label", "Edit comment"); + textarea.maxLength = 2e4; + textarea.value = readDraft(draftKey) ?? comment.body; + const editComposer = element("div", "bb-comments-inline-composer"); + const save = element( + "button", + "bb-comments-submit-shortcut" + ); + save.type = "button"; + save.append(icon(Command), icon(CornerDownLeft)); + save.setAttribute("aria-label", "Save comment"); + save.title = "Save comment \xB7 \u2318/Ctrl Enter"; + const error = element("div", "bb-comments-error"); + error.setAttribute("role", "status"); + const validate = () => { + const message = commentBodyError(textarea.value); + save.disabled = message !== null; + error.textContent = message !== null && textarea.value.trim() !== "" ? message : ""; + return message; + }; + const cancelEdit = () => { + sessionStorage.removeItem(draftKey); + this.renderThreadPopover(popover, detail); + popover.querySelector( + `[data-bb-comment-id="${escapeSelector(comment.id)}"] .bb-comments-actions-menu > button[aria-label="Comment actions"]` + )?.focus({ preventScroll: true }); + }; + textarea.addEventListener("input", () => { + if (textarea.value === comment.body) sessionStorage.removeItem(draftKey); + else writeDraft(draftKey, textarea.value); + syncInlineComposerLayout(textarea, editComposer); + validate(); + }); + textarea.addEventListener("keydown", (event) => { + if (event.key === "Escape") { + event.preventDefault(); + cancelEdit(); + } + if (event.key === "Enter" && (event.metaKey || event.ctrlKey)) { + event.preventDefault(); + save.click(); + } + }); + save.addEventListener("click", () => { + if (validate() !== null) return; + const body2 = textarea.value.trim(); + if (body2 === comment.body) { + cancelEdit(); + return; + } + save.disabled = true; + void this.#rpc.call("updateComment", { + bbThreadId: detail.thread.bbThreadId, + commentId: comment.id, + expectedVersion: comment.version, + body: body2 + }).then(() => { + sessionStorage.removeItem(draftKey); + return this.openThread(detail.thread.id); + }).catch((caught) => { + save.disabled = false; + this.handlePopoverMutationError(popover, detail, caught); + }); + }); + editComposer.append(textarea, save); + row.replaceChildren(buildHeader(actions), editComposer, error); + syncInlineComposerLayout(textarea, editComposer, false); + validate(); + textarea.focus(); + }); + const remove = element( + "button", + "bb-comments-destructive" + ); + remove.type = "button"; + remove.tabIndex = -1; + remove.setAttribute("role", "menuitem"); + remove.append(icon(Trash2), document.createTextNode("Delete")); + remove.addEventListener("click", () => { + if (!window.confirm( + comment.parentId === null ? "Delete this comment thread?" : "Delete this reply?" + )) + return; + remove.disabled = true; + void this.#rpc.call("deleteComment", { + bbThreadId: detail.thread.bbThreadId, + commentId: comment.id, + expectedVersion: comment.version, + expectedThreadVersion: detail.thread.version + }).then((result) => { + if (result.deletedThreadId !== null) this.closePopover(); + else void this.openThread(detail.thread.id); + this.scheduleRefresh(); + }).catch((caught) => { + remove.disabled = false; + this.handlePopoverMutationError(popover, detail, caught); + }); + }); + actionsMenu.append(edit, remove); + actions.append(actionsTrigger); + row.append(buildHeader(actions), body); + return row; + } + focusAdjacentToActionsTrigger(trigger, backwards) { + const popover = trigger.closest(".bb-comments-thread"); + if (popover === null) { + trigger.focus({ preventScroll: true }); + return; + } + const focusable = [ + ...popover.querySelectorAll( + 'button:not(:disabled), textarea:not(:disabled), input:not(:disabled), [href], [tabindex]:not([tabindex="-1"])' + ) + ].filter((node) => node.getClientRects().length > 0); + const current = focusable.indexOf(trigger); + const adjacent = focusable[current + (backwards ? -1 : 1)] ?? trigger; + adjacent.focus({ preventScroll: true }); + } + openActionsMenu(trigger, menu) { + this.closeActionsMenu(); + this.#actionsMenu = menu; + this.#actionsTrigger = trigger; + trigger.setAttribute("aria-expanded", "true"); + this.#portal.append(menu); + this.positionActionsMenu(); + if (this.#actionsMenu !== menu) return; + this.#outsideActionsMenu = (event) => { + if (event.target instanceof Node && (menu.contains(event.target) || trigger.contains(event.target))) { + return; + } + this.closeActionsMenu(); + }; + document.addEventListener("pointerdown", this.#outsideActionsMenu, true); + menu.querySelector("button")?.focus({ + preventScroll: true + }); + } + positionActionsMenu() { + const menu = this.#actionsMenu; + const trigger = this.#actionsTrigger; + if (menu === null || trigger === null) return; + if (!trigger.isConnected) { + this.closeActionsMenu(); + return; + } + const triggerRect = trigger.getBoundingClientRect(); + const scrollViewport = trigger.closest( + ".bb-comments-thread-comments" + ); + if (scrollViewport !== null) { + const viewportRect = scrollViewport.getBoundingClientRect(); + if (triggerRect.top < viewportRect.top || triggerRect.bottom > viewportRect.bottom) { + this.closeActionsMenu(); + return; + } + } + const menuRect = menu.getBoundingClientRect(); + const gap = 4; + const maxLeft = Math.max(8, window.innerWidth - menuRect.width - 8); + const left = Math.max( + 8, + Math.min( + maxLeft, + triggerRect.right - menuRect.width + ) + ); + const below = triggerRect.bottom + gap; + const candidateTop = below + menuRect.height <= window.innerHeight - 8 ? below : triggerRect.top - menuRect.height - gap; + const maxTop = Math.max(8, window.innerHeight - menuRect.height - 8); + const top = Math.max(8, Math.min(maxTop, candidateTop)); + menu.style.left = `${left}px`; + menu.style.top = `${top}px`; + } + closeActionsMenu(restoreFocus = false) { + const trigger = this.#actionsTrigger; + if (this.#outsideActionsMenu !== null) { + document.removeEventListener( + "pointerdown", + this.#outsideActionsMenu, + true + ); + this.#outsideActionsMenu = null; + } + this.#actionsMenu?.remove(); + this.#actionsMenu = null; + this.#actionsTrigger = null; + trigger?.setAttribute("aria-expanded", "false"); + if (restoreFocus && trigger?.isConnected === true) + trigger.focus({ preventScroll: true }); + } + showPopoverError(popover, error) { + const existing = popover.querySelector(".bb-comments-error"); + const node = existing ?? element("div", "bb-comments-error"); + node.textContent = errorMessage(error); + if (existing === null) popover.append(node); + } + handlePopoverMutationError(popover, detail, error) { + this.showPopoverError(popover, error); + if (!/changed/iu.test(errorMessage(error))) return; + void this.loadThread(detail.thread.bbThreadId, detail.thread.id).then( + (fresh) => { + if (this.#popover !== popover) return; + this.renderThreadPopover(popover, fresh); + this.showPopoverError(popover, error); + } + ); + } + installPopoverDismissal(invoker) { + this.removePopoverDismissal(); + this.#popoverInvoker = invoker; + this.#outsidePopover = (event) => { + if (event.target instanceof Node && (this.#popover?.contains(event.target) === true || this.#popoverInvoker?.contains(event.target) === true || this.#actionsMenu?.contains(event.target) === true)) { + return; + } + this.closePopover(); + }; + this.#popoverKeydown = (event) => { + if (event.key !== "Escape") return; + if (this.#actionsMenu !== null) { + event.preventDefault(); + this.closeActionsMenu(true); + return; + } + if (event.target instanceof Element && event.target.closest(".bb-comments-edit-input") !== null) { + return; + } + event.preventDefault(); + this.closePopover(); + }; + document.addEventListener("pointerdown", this.#outsidePopover, true); + document.addEventListener("keydown", this.#popoverKeydown, true); + } + removePopoverDismissal() { + if (this.#outsidePopover !== null) { + document.removeEventListener("pointerdown", this.#outsidePopover, true); + this.#outsidePopover = null; + } + if (this.#popoverKeydown !== null) { + document.removeEventListener("keydown", this.#popoverKeydown, true); + this.#popoverKeydown = null; + } + } + positionPopover() { + if (this.#popover === null || this.#openThreadId === null) return; + const marker = this.#restored.get(this.#openThreadId)?.marker; + if (marker !== null && marker !== void 0) + this.positionNear(marker, this.#popover); + } + positionNear(anchor, popover) { + const rect = anchor.getBoundingClientRect(); + const width = Math.min(340, window.innerWidth - 16); + popover.style.width = `${width}px`; + const leftOption = rect.left - width - 8; + const rightOption = rect.right + 8; + const fitsLeft = leftOption >= 8; + const fitsRight = rightOption + width <= window.innerWidth - 8; + const gutter = anchor.dataset.bbCommentGutter; + const left = gutter === "left" && fitsLeft ? leftOption : gutter === "right" && fitsRight ? rightOption : fitsRight ? rightOption : leftOption; + popover.style.left = `${Math.max(8, Math.min(window.innerWidth - width - 8, left))}px`; + const height = Math.min( + popover.getBoundingClientRect().height || 300, + window.innerHeight - 16 + ); + popover.style.top = `${Math.max(8, Math.min(window.innerHeight - height - 8, rect.top - 8))}px`; + } + closeComposer() { + if (this.#outsideComposer !== null) { + document.removeEventListener("pointerdown", this.#outsideComposer, true); + this.#outsideComposer = null; + } + this.#composer?.remove(); + this.#composer = null; + this.#provisionalRange = null; + this.rebuildHighlights(); + } + closePopover(clearOpen = true) { + const invoker = this.#popoverInvoker; + const currentMarker = this.#openThreadId === null ? null : this.#restored.get(this.#openThreadId)?.marker ?? null; + const focusTarget = invoker?.isConnected === true ? invoker : currentMarker; + this.closeActionsMenu(); + this.removePopoverDismissal(); + this.#popoverInvoker = null; + this.#popover?.remove(); + this.#popover = null; + if (clearOpen) this.#openThreadId = null; + this.setActive([]); + if (clearOpen && focusTarget?.isConnected === true) { + focusTarget.focus({ preventScroll: true }); + } + } + destroy() { + if (this.#destroyed) return; + this.#destroyed = true; + this.#focusNonce += 1; + this.#observer.disconnect(); + this.#resizeObserver?.disconnect(); + if (this.#frame !== null) cancelAnimationFrame(this.#frame); + for (const dispose of this.#disposers.splice(0).reverse()) dispose(); + this.closeComposer(); + this.closePopover(); + this.#portal.remove(); + this.#highlightStyle.remove(); + publishTimelineCommentAnchorHealth(/* @__PURE__ */ new Map()); + globalThis.CSS?.highlights?.delete(NORMAL_HIGHLIGHT); + globalThis.CSS?.highlights?.delete(ACTIVE_HIGHLIGHT); + } +}; +function detailId(id) { + if (id === null) throw new Error("Comment thread was not created"); + return id; +} +function mountTimelineCommentsController(context) { + const controller = new TimelineCommentsController(context); + return () => controller.destroy(); +} + +// bb-plugin-runtime-shim:react/jsx-runtime +var runtime3 = globalThis.__bbPluginRuntime; +if (runtime3 == null || runtime3.jsxRuntime == null) { + throw new Error('Cannot load "react/jsx-runtime": this bundle must be loaded by the BB app, which provides the shared plugin runtime (globalThis.__bbPluginRuntime).'); +} +var mod3 = runtime3.jsxRuntime; +var { + Fragment: Fragment2, + jsx, + jsxs +} = mod3; + +// app.tsx +function errorMessage2(error) { + return error instanceof Error ? error.message : "Something went wrong"; +} +function excerpt(value, length) { + return value.length > length ? `${value.slice(0, length - 1)}\u2026` : value; +} +function AddCommentsAction() { + const rpc = useRpc(); + const composer = useComposer(); + const [busy, setBusy] = useState(false); + const [error, setError] = useState(null); + const requestGeneration = useRef(0); + const threadId = composer.scope.kind === "thread" ? composer.scope.threadId : null; + const currentThreadId = useRef(threadId); + useLayoutEffect(() => { + currentThreadId.current = threadId; + requestGeneration.current += 1; + setBusy(false); + setError(null); + return () => { + currentThreadId.current = null; + requestGeneration.current += 1; + }; + }, [threadId]); + if (threadId === null) return null; + const addComments = async () => { + const generation = ++requestGeneration.current; + const isCurrentRequest = () => generation === requestGeneration.current && currentThreadId.current === threadId; + setBusy(true); + setError(null); + try { + const summary = await rpc.call("getThreadHandoffSummary", { + bbThreadId: threadId + }); + if (!isCurrentRequest()) return; + if (summary.threadCount === 0) return; + composer.insertMention({ + provider: "thread-comments", + id: threadId, + label: `${summary.commentCount} ${summary.commentCount === 1 ? "comment" : "comments"} from ${summary.threadCount} open ${summary.threadCount === 1 ? "thread" : "threads"}` + }); + composer.focus(); + } catch (caught) { + if (isCurrentRequest()) setError(errorMessage2(caught)); + } finally { + if (isCurrentRequest()) setBusy(false); + } + }; + return /* @__PURE__ */ jsxs("span", { className: "bb-comments-composer-action-wrap", children: [ + error !== null ? /* @__PURE__ */ jsx("span", { className: "bb-comments-composer-action-error", role: "alert", children: "Couldn\u2019t add comments" }) : null, + /* @__PURE__ */ jsx( + "button", + { + type: "button", + className: "bb-comments-composer-action", + "aria-label": error === null ? "Add comments to chat" : "Retry adding comments to chat", + title: error === null ? "Add comments to chat" : `Retry adding comments to chat: ${error}`, + disabled: busy, + onMouseDown: (event) => event.preventDefault(), + onClick: () => void addComments(), + children: /* @__PURE__ */ jsx(MessageSquareText, { "aria-hidden": "true", size: 16, strokeWidth: 1.5 }) + } + ) + ] }); +} +function CommentPanel({ threadId, revealMessage }) { + const rpc = useRpc(); + const connection = useRealtimeConnectionState(); + const anchorHealth = useSyncExternalStore( + subscribeTimelineCommentAnchorHealth, + getTimelineCommentAnchorHealth, + getTimelineCommentAnchorHealth + ); + const previousConnection = useRef(connection); + const revealRequest = useRef(0); + const loadGeneration = useRef(0); + const [filter, setFilter] = useState("open"); + const loadScope = useRef({ filter, threadId }); + const [threads, setThreads] = useState([]); + const [nextCursor, setNextCursor] = useState(null); + const [activeId, setActiveId] = useState(null); + const [unanchored, setUnanchored] = useState(/* @__PURE__ */ new Set()); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + useLayoutEffect(() => { + loadScope.current = { filter, threadId }; + loadGeneration.current += 1; + return () => { + loadGeneration.current += 1; + }; + }, [filter, threadId]); + const loadThreads = useCallback( + async (append = false) => { + if (loadScope.current.threadId !== threadId || loadScope.current.filter !== filter) + return; + const generation = ++loadGeneration.current; + const cursor = append ? nextCursor : null; + const isCurrentLoad = () => generation === loadGeneration.current && loadScope.current.threadId === threadId && loadScope.current.filter === filter; + setLoading(true); + setError(null); + if (!append) { + setThreads([]); + setNextCursor(null); + } + try { + const page = await rpc.call("listCommentThreads", { + bbThreadId: threadId, + filter, + ...cursor !== null ? { cursor } : {} + }); + if (!isCurrentLoad()) return; + setThreads( + (current) => append ? [...current, ...page.threads] : page.threads + ); + setNextCursor(page.nextCursor); + } catch (caught) { + if (!isCurrentLoad()) return; + setError(errorMessage2(caught)); + } finally { + if (isCurrentLoad()) setLoading(false); + } + }, + [filter, nextCursor, rpc, threadId] + ); + const reconcile = useCallback(async () => { + await loadThreads(false); + }, [loadThreads]); + useEffect(() => { + setActiveId(null); + void loadThreads(false); + }, [filter, threadId]); + useEffect( + () => () => { + revealRequest.current += 1; + }, + [threadId] + ); + useRealtime("comments-changed", (payload) => { + if (typeof payload === "object" && payload !== null && payload.bbThreadId === threadId) { + void reconcile(); + } + }); + useEffect(() => { + const previous = previousConnection.current; + previousConnection.current = connection; + if (connection === "connected" && previous === "reconnecting") + void reconcile(); + }, [connection, reconcile]); + const activate = async (item) => { + const request = ++revealRequest.current; + setActiveId(item.id); + setError(null); + try { + const revealed = await revealMessage(item.messageId); + if (request !== revealRequest.current) return; + const anchored = revealed === "revealed" && await focusTimelineComment(item.id); + if (request !== revealRequest.current) return; + setUnanchored((current) => { + const next = new Set(current); + if (anchored) next.delete(item.id); + else next.add(item.id); + return next; + }); + } catch (caught) { + if (request === revealRequest.current) setError(errorMessage2(caught)); + } + }; + return /* @__PURE__ */ jsxs("section", { className: "bb-comments-panel", "aria-label": "Timeline comments", children: [ + /* @__PURE__ */ jsx( + "div", + { + className: "bb-comments-filters", + role: "group", + "aria-label": "Comment state", + children: ["open", "resolved", "all"].map((value) => /* @__PURE__ */ jsx( + "button", + { + type: "button", + "aria-pressed": filter === value, + onClick: () => setFilter(value), + children: value[0].toUpperCase() + value.slice(1) + }, + value + )) + } + ), + error !== null ? /* @__PURE__ */ jsx("div", { className: "bb-comments-panel-error", role: "status", children: error }) : null, + /* @__PURE__ */ jsxs("div", { className: "bb-comments-panel-list", children: [ + !loading && threads.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "bb-comments-empty", children: [ + "No ", + filter === "all" ? "" : `${filter} `, + "comments." + ] }) : null, + threads.map((item) => { + return /* @__PURE__ */ jsx( + "article", + { + className: "bb-comments-panel-row", + "data-active": activeId === item.id ? "true" : void 0, + children: /* @__PURE__ */ jsxs( + "button", + { + type: "button", + className: "bb-comments-row-summary", + onClick: () => void activate(item), + children: [ + /* @__PURE__ */ jsxs("span", { className: "bb-comments-row-source", children: [ + "\u201C", + excerpt(item.selector.exact, 90), + "\u201D" + ] }), + /* @__PURE__ */ jsx("span", { className: "bb-comments-row-body", children: excerpt(item.rootComment.body, 140) }), + /* @__PURE__ */ jsxs("span", { className: "bb-comments-row-meta", children: [ + item.replyCount, + " ", + item.replyCount === 1 ? "reply" : "replies", + item.resolvedAt !== null ? " \xB7 Resolved" : "", + unanchored.has(item.id) || anchorHealth.get(item.id) === "unanchored" ? " \xB7 Unanchored" : "" + ] }) + ] + } + ) + }, + item.id + ); + }), + loading ? /* @__PURE__ */ jsx("div", { className: "bb-comments-loading", children: "Loading\u2026" }) : null, + !loading && nextCursor !== null ? /* @__PURE__ */ jsx( + "button", + { + type: "button", + className: "bb-comments-load-more", + onClick: () => void loadThreads(true), + children: "Load more" + } + ) : null + ] }) + ] }); +} +var app_default = definePluginApp((app) => { + app.contentScripts.register({ + id: "timeline-comment-anchors", + mount: mountTimelineCommentsController + }); + app.composer.customize({ + id: "timeline-comments", + scopes: ["thread"], + actions: [{ id: "add-comments", component: AddCommentsAction }] + }); + app.slots.threadPanelAction({ + id: "comments", + title: "Comments", + icon: "MessageSquare", + component: CommentPanel, + layout: "flush" + }); + app.slots.messageAction({ + id: "comment-selection", + title: "Comment", + icon: "MessageSquare", + placements: ["selection-menu"], + run(context) { + beginTimelineComment(context); + } + }); +}); +export { + app_default as default +}; +/*! Bundled license information: + +lucide-react/dist/esm/shared/src/utils.js: +lucide-react/dist/esm/defaultAttributes.js: +lucide-react/dist/esm/Icon.js: +lucide-react/dist/esm/createLucideIcon.js: +lucide-react/dist/esm/icons/message-square-text.js: +lucide-react/dist/esm/lucide-react.js: + (** + * @license lucide-react v0.474.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + *) + +lucide/dist/esm/createElement.js: +lucide/dist/esm/defaultAttributes.js: +lucide/dist/esm/icons/check-check.js: +lucide/dist/esm/icons/command.js: +lucide/dist/esm/icons/corner-down-left.js: +lucide/dist/esm/icons/ellipsis-vertical.js: +lucide/dist/esm/icons/pencil.js: +lucide/dist/esm/icons/sticky-note.js: +lucide/dist/esm/icons/trash-2.js: +lucide/dist/esm/lucide.js: + (** + * @license lucide v0.474.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + *) +*/ diff --git a/plugins/timeline-comments/dist/app.meta.json b/plugins/timeline-comments/dist/app.meta.json new file mode 100644 index 0000000..ece4a55 --- /dev/null +++ b/plugins/timeline-comments/dist/app.meta.json @@ -0,0 +1,11 @@ +{ + "sdkMajor": 0, + "sdkVersion": "0.4.1", + "artifactFormatVersion": 1, + "pluginId": "timeline-comments", + "pluginVersion": "0.1.0", + "builtWith": { + "bbVersion": "0.0.34", + "pluginSdkVersion": "0.4.1" + } +} diff --git a/plugins/timeline-comments/dist/server.js b/plugins/timeline-comments/dist/server.js new file mode 100644 index 0000000..d9fb3fc --- /dev/null +++ b/plugins/timeline-comments/dist/server.js @@ -0,0 +1,15537 @@ +import { createRequire as __createRequire } from "node:module"; +import { dirname as __pathDirname } from "node:path"; +import { fileURLToPath as __fileURLToPath } from "node:url"; +const require = __createRequire(import.meta.url); +var __filename = __fileURLToPath(import.meta.url); +var __dirname = __pathDirname(__filename); +var __defProp = Object.defineProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; + +// server.ts +import { randomBytes } from "node:crypto"; +import { Buffer as Buffer2 } from "node:buffer"; +import { + defineRpcContract, + PLUGIN_CLI_OUTPUT_MAX_BYTES +} from "@bb/plugin-sdk"; + +// ../../node_modules/zod/v4/classic/external.js +var external_exports = {}; +__export(external_exports, { + $brand: () => $brand, + $input: () => $input, + $output: () => $output, + NEVER: () => NEVER, + TimePrecision: () => TimePrecision, + ZodAny: () => ZodAny, + ZodArray: () => ZodArray, + ZodBase64: () => ZodBase64, + ZodBase64URL: () => ZodBase64URL, + ZodBigInt: () => ZodBigInt, + ZodBigIntFormat: () => ZodBigIntFormat, + ZodBoolean: () => ZodBoolean, + ZodCIDRv4: () => ZodCIDRv4, + ZodCIDRv6: () => ZodCIDRv6, + ZodCUID: () => ZodCUID, + ZodCUID2: () => ZodCUID2, + ZodCatch: () => ZodCatch, + ZodCodec: () => ZodCodec, + ZodCustom: () => ZodCustom, + ZodCustomStringFormat: () => ZodCustomStringFormat, + ZodDate: () => ZodDate, + ZodDefault: () => ZodDefault, + ZodDiscriminatedUnion: () => ZodDiscriminatedUnion, + ZodE164: () => ZodE164, + ZodEmail: () => ZodEmail, + ZodEmoji: () => ZodEmoji, + ZodEnum: () => ZodEnum, + ZodError: () => ZodError, + ZodExactOptional: () => ZodExactOptional, + ZodFile: () => ZodFile, + ZodFirstPartyTypeKind: () => ZodFirstPartyTypeKind, + ZodFunction: () => ZodFunction, + ZodGUID: () => ZodGUID, + ZodIPv4: () => ZodIPv4, + ZodIPv6: () => ZodIPv6, + ZodISODate: () => ZodISODate, + ZodISODateTime: () => ZodISODateTime, + ZodISODuration: () => ZodISODuration, + ZodISOTime: () => ZodISOTime, + ZodIntersection: () => ZodIntersection, + ZodIssueCode: () => ZodIssueCode, + ZodJWT: () => ZodJWT, + ZodKSUID: () => ZodKSUID, + ZodLazy: () => ZodLazy, + ZodLiteral: () => ZodLiteral, + ZodMAC: () => ZodMAC, + ZodMap: () => ZodMap, + ZodNaN: () => ZodNaN, + ZodNanoID: () => ZodNanoID, + ZodNever: () => ZodNever, + ZodNonOptional: () => ZodNonOptional, + ZodNull: () => ZodNull, + ZodNullable: () => ZodNullable, + ZodNumber: () => ZodNumber, + ZodNumberFormat: () => ZodNumberFormat, + ZodObject: () => ZodObject, + ZodOptional: () => ZodOptional, + ZodPipe: () => ZodPipe, + ZodPrefault: () => ZodPrefault, + ZodPreprocess: () => ZodPreprocess, + ZodPromise: () => ZodPromise, + ZodReadonly: () => ZodReadonly, + ZodRealError: () => ZodRealError, + ZodRecord: () => ZodRecord, + ZodSet: () => ZodSet, + ZodString: () => ZodString, + ZodStringFormat: () => ZodStringFormat, + ZodSuccess: () => ZodSuccess, + ZodSymbol: () => ZodSymbol, + ZodTemplateLiteral: () => ZodTemplateLiteral, + ZodTransform: () => ZodTransform, + ZodTuple: () => ZodTuple, + ZodType: () => ZodType, + ZodULID: () => ZodULID, + ZodURL: () => ZodURL, + ZodUUID: () => ZodUUID, + ZodUndefined: () => ZodUndefined, + ZodUnion: () => ZodUnion, + ZodUnknown: () => ZodUnknown, + ZodVoid: () => ZodVoid, + ZodXID: () => ZodXID, + ZodXor: () => ZodXor, + _ZodString: () => _ZodString, + _default: () => _default2, + _function: () => _function, + any: () => any, + array: () => array, + base64: () => base642, + base64url: () => base64url2, + bigint: () => bigint2, + boolean: () => boolean2, + catch: () => _catch2, + check: () => check, + cidrv4: () => cidrv42, + cidrv6: () => cidrv62, + clone: () => clone, + codec: () => codec, + coerce: () => coerce_exports, + config: () => config, + core: () => core_exports2, + cuid: () => cuid3, + cuid2: () => cuid22, + custom: () => custom, + date: () => date3, + decode: () => decode2, + decodeAsync: () => decodeAsync2, + describe: () => describe2, + discriminatedUnion: () => discriminatedUnion, + e164: () => e1642, + email: () => email2, + emoji: () => emoji2, + encode: () => encode2, + encodeAsync: () => encodeAsync2, + endsWith: () => _endsWith, + enum: () => _enum2, + exactOptional: () => exactOptional, + file: () => file, + flattenError: () => flattenError, + float32: () => float32, + float64: () => float64, + formatError: () => formatError, + fromJSONSchema: () => fromJSONSchema, + function: () => _function, + getErrorMap: () => getErrorMap, + globalRegistry: () => globalRegistry, + gt: () => _gt, + gte: () => _gte, + guid: () => guid2, + hash: () => hash, + hex: () => hex2, + hostname: () => hostname2, + httpUrl: () => httpUrl, + includes: () => _includes, + instanceof: () => _instanceof, + int: () => int, + int32: () => int32, + int64: () => int64, + intersection: () => intersection, + invertCodec: () => invertCodec, + ipv4: () => ipv42, + ipv6: () => ipv62, + iso: () => iso_exports, + json: () => json, + jwt: () => jwt, + keyof: () => keyof, + ksuid: () => ksuid2, + lazy: () => lazy, + length: () => _length, + literal: () => literal, + locales: () => locales_exports, + looseObject: () => looseObject, + looseRecord: () => looseRecord, + lowercase: () => _lowercase, + lt: () => _lt, + lte: () => _lte, + mac: () => mac2, + map: () => map, + maxLength: () => _maxLength, + maxSize: () => _maxSize, + meta: () => meta2, + mime: () => _mime, + minLength: () => _minLength, + minSize: () => _minSize, + multipleOf: () => _multipleOf, + nan: () => nan, + nanoid: () => nanoid2, + nativeEnum: () => nativeEnum, + negative: () => _negative, + never: () => never, + nonnegative: () => _nonnegative, + nonoptional: () => nonoptional, + nonpositive: () => _nonpositive, + normalize: () => _normalize, + null: () => _null3, + nullable: () => nullable, + nullish: () => nullish2, + number: () => number2, + object: () => object, + optional: () => optional, + overwrite: () => _overwrite, + parse: () => parse2, + parseAsync: () => parseAsync2, + partialRecord: () => partialRecord, + pipe: () => pipe, + positive: () => _positive, + prefault: () => prefault, + preprocess: () => preprocess, + prettifyError: () => prettifyError, + promise: () => promise, + property: () => _property, + readonly: () => readonly, + record: () => record, + refine: () => refine, + regex: () => _regex, + regexes: () => regexes_exports, + registry: () => registry, + safeDecode: () => safeDecode2, + safeDecodeAsync: () => safeDecodeAsync2, + safeEncode: () => safeEncode2, + safeEncodeAsync: () => safeEncodeAsync2, + safeParse: () => safeParse2, + safeParseAsync: () => safeParseAsync2, + set: () => set, + setErrorMap: () => setErrorMap, + size: () => _size, + slugify: () => _slugify, + startsWith: () => _startsWith, + strictObject: () => strictObject, + string: () => string2, + stringFormat: () => stringFormat, + stringbool: () => stringbool, + success: () => success, + superRefine: () => superRefine, + symbol: () => symbol, + templateLiteral: () => templateLiteral, + toJSONSchema: () => toJSONSchema, + toLowerCase: () => _toLowerCase, + toUpperCase: () => _toUpperCase, + transform: () => transform, + treeifyError: () => treeifyError, + trim: () => _trim, + tuple: () => tuple, + uint32: () => uint32, + uint64: () => uint64, + ulid: () => ulid2, + undefined: () => _undefined3, + union: () => union, + unknown: () => unknown, + uppercase: () => _uppercase, + url: () => url, + util: () => util_exports, + uuid: () => uuid2, + uuidv4: () => uuidv4, + uuidv6: () => uuidv6, + uuidv7: () => uuidv7, + void: () => _void2, + xid: () => xid2, + xor: () => xor +}); + +// ../../node_modules/zod/v4/core/index.js +var core_exports2 = {}; +__export(core_exports2, { + $ZodAny: () => $ZodAny, + $ZodArray: () => $ZodArray, + $ZodAsyncError: () => $ZodAsyncError, + $ZodBase64: () => $ZodBase64, + $ZodBase64URL: () => $ZodBase64URL, + $ZodBigInt: () => $ZodBigInt, + $ZodBigIntFormat: () => $ZodBigIntFormat, + $ZodBoolean: () => $ZodBoolean, + $ZodCIDRv4: () => $ZodCIDRv4, + $ZodCIDRv6: () => $ZodCIDRv6, + $ZodCUID: () => $ZodCUID, + $ZodCUID2: () => $ZodCUID2, + $ZodCatch: () => $ZodCatch, + $ZodCheck: () => $ZodCheck, + $ZodCheckBigIntFormat: () => $ZodCheckBigIntFormat, + $ZodCheckEndsWith: () => $ZodCheckEndsWith, + $ZodCheckGreaterThan: () => $ZodCheckGreaterThan, + $ZodCheckIncludes: () => $ZodCheckIncludes, + $ZodCheckLengthEquals: () => $ZodCheckLengthEquals, + $ZodCheckLessThan: () => $ZodCheckLessThan, + $ZodCheckLowerCase: () => $ZodCheckLowerCase, + $ZodCheckMaxLength: () => $ZodCheckMaxLength, + $ZodCheckMaxSize: () => $ZodCheckMaxSize, + $ZodCheckMimeType: () => $ZodCheckMimeType, + $ZodCheckMinLength: () => $ZodCheckMinLength, + $ZodCheckMinSize: () => $ZodCheckMinSize, + $ZodCheckMultipleOf: () => $ZodCheckMultipleOf, + $ZodCheckNumberFormat: () => $ZodCheckNumberFormat, + $ZodCheckOverwrite: () => $ZodCheckOverwrite, + $ZodCheckProperty: () => $ZodCheckProperty, + $ZodCheckRegex: () => $ZodCheckRegex, + $ZodCheckSizeEquals: () => $ZodCheckSizeEquals, + $ZodCheckStartsWith: () => $ZodCheckStartsWith, + $ZodCheckStringFormat: () => $ZodCheckStringFormat, + $ZodCheckUpperCase: () => $ZodCheckUpperCase, + $ZodCodec: () => $ZodCodec, + $ZodCustom: () => $ZodCustom, + $ZodCustomStringFormat: () => $ZodCustomStringFormat, + $ZodDate: () => $ZodDate, + $ZodDefault: () => $ZodDefault, + $ZodDiscriminatedUnion: () => $ZodDiscriminatedUnion, + $ZodE164: () => $ZodE164, + $ZodEmail: () => $ZodEmail, + $ZodEmoji: () => $ZodEmoji, + $ZodEncodeError: () => $ZodEncodeError, + $ZodEnum: () => $ZodEnum, + $ZodError: () => $ZodError, + $ZodExactOptional: () => $ZodExactOptional, + $ZodFile: () => $ZodFile, + $ZodFunction: () => $ZodFunction, + $ZodGUID: () => $ZodGUID, + $ZodIPv4: () => $ZodIPv4, + $ZodIPv6: () => $ZodIPv6, + $ZodISODate: () => $ZodISODate, + $ZodISODateTime: () => $ZodISODateTime, + $ZodISODuration: () => $ZodISODuration, + $ZodISOTime: () => $ZodISOTime, + $ZodIntersection: () => $ZodIntersection, + $ZodJWT: () => $ZodJWT, + $ZodKSUID: () => $ZodKSUID, + $ZodLazy: () => $ZodLazy, + $ZodLiteral: () => $ZodLiteral, + $ZodMAC: () => $ZodMAC, + $ZodMap: () => $ZodMap, + $ZodNaN: () => $ZodNaN, + $ZodNanoID: () => $ZodNanoID, + $ZodNever: () => $ZodNever, + $ZodNonOptional: () => $ZodNonOptional, + $ZodNull: () => $ZodNull, + $ZodNullable: () => $ZodNullable, + $ZodNumber: () => $ZodNumber, + $ZodNumberFormat: () => $ZodNumberFormat, + $ZodObject: () => $ZodObject, + $ZodObjectJIT: () => $ZodObjectJIT, + $ZodOptional: () => $ZodOptional, + $ZodPipe: () => $ZodPipe, + $ZodPrefault: () => $ZodPrefault, + $ZodPreprocess: () => $ZodPreprocess, + $ZodPromise: () => $ZodPromise, + $ZodReadonly: () => $ZodReadonly, + $ZodRealError: () => $ZodRealError, + $ZodRecord: () => $ZodRecord, + $ZodRegistry: () => $ZodRegistry, + $ZodSet: () => $ZodSet, + $ZodString: () => $ZodString, + $ZodStringFormat: () => $ZodStringFormat, + $ZodSuccess: () => $ZodSuccess, + $ZodSymbol: () => $ZodSymbol, + $ZodTemplateLiteral: () => $ZodTemplateLiteral, + $ZodTransform: () => $ZodTransform, + $ZodTuple: () => $ZodTuple, + $ZodType: () => $ZodType, + $ZodULID: () => $ZodULID, + $ZodURL: () => $ZodURL, + $ZodUUID: () => $ZodUUID, + $ZodUndefined: () => $ZodUndefined, + $ZodUnion: () => $ZodUnion, + $ZodUnknown: () => $ZodUnknown, + $ZodVoid: () => $ZodVoid, + $ZodXID: () => $ZodXID, + $ZodXor: () => $ZodXor, + $brand: () => $brand, + $constructor: () => $constructor, + $input: () => $input, + $output: () => $output, + Doc: () => Doc, + JSONSchema: () => json_schema_exports, + JSONSchemaGenerator: () => JSONSchemaGenerator, + NEVER: () => NEVER, + TimePrecision: () => TimePrecision, + _any: () => _any, + _array: () => _array, + _base64: () => _base64, + _base64url: () => _base64url, + _bigint: () => _bigint, + _boolean: () => _boolean, + _catch: () => _catch, + _check: () => _check, + _cidrv4: () => _cidrv4, + _cidrv6: () => _cidrv6, + _coercedBigint: () => _coercedBigint, + _coercedBoolean: () => _coercedBoolean, + _coercedDate: () => _coercedDate, + _coercedNumber: () => _coercedNumber, + _coercedString: () => _coercedString, + _cuid: () => _cuid, + _cuid2: () => _cuid2, + _custom: () => _custom, + _date: () => _date, + _decode: () => _decode, + _decodeAsync: () => _decodeAsync, + _default: () => _default, + _discriminatedUnion: () => _discriminatedUnion, + _e164: () => _e164, + _email: () => _email, + _emoji: () => _emoji2, + _encode: () => _encode, + _encodeAsync: () => _encodeAsync, + _endsWith: () => _endsWith, + _enum: () => _enum, + _file: () => _file, + _float32: () => _float32, + _float64: () => _float64, + _gt: () => _gt, + _gte: () => _gte, + _guid: () => _guid, + _includes: () => _includes, + _int: () => _int, + _int32: () => _int32, + _int64: () => _int64, + _intersection: () => _intersection, + _ipv4: () => _ipv4, + _ipv6: () => _ipv6, + _isoDate: () => _isoDate, + _isoDateTime: () => _isoDateTime, + _isoDuration: () => _isoDuration, + _isoTime: () => _isoTime, + _jwt: () => _jwt, + _ksuid: () => _ksuid, + _lazy: () => _lazy, + _length: () => _length, + _literal: () => _literal, + _lowercase: () => _lowercase, + _lt: () => _lt, + _lte: () => _lte, + _mac: () => _mac, + _map: () => _map, + _max: () => _lte, + _maxLength: () => _maxLength, + _maxSize: () => _maxSize, + _mime: () => _mime, + _min: () => _gte, + _minLength: () => _minLength, + _minSize: () => _minSize, + _multipleOf: () => _multipleOf, + _nan: () => _nan, + _nanoid: () => _nanoid, + _nativeEnum: () => _nativeEnum, + _negative: () => _negative, + _never: () => _never, + _nonnegative: () => _nonnegative, + _nonoptional: () => _nonoptional, + _nonpositive: () => _nonpositive, + _normalize: () => _normalize, + _null: () => _null2, + _nullable: () => _nullable, + _number: () => _number, + _optional: () => _optional, + _overwrite: () => _overwrite, + _parse: () => _parse, + _parseAsync: () => _parseAsync, + _pipe: () => _pipe, + _positive: () => _positive, + _promise: () => _promise, + _property: () => _property, + _readonly: () => _readonly, + _record: () => _record, + _refine: () => _refine, + _regex: () => _regex, + _safeDecode: () => _safeDecode, + _safeDecodeAsync: () => _safeDecodeAsync, + _safeEncode: () => _safeEncode, + _safeEncodeAsync: () => _safeEncodeAsync, + _safeParse: () => _safeParse, + _safeParseAsync: () => _safeParseAsync, + _set: () => _set, + _size: () => _size, + _slugify: () => _slugify, + _startsWith: () => _startsWith, + _string: () => _string, + _stringFormat: () => _stringFormat, + _stringbool: () => _stringbool, + _success: () => _success, + _superRefine: () => _superRefine, + _symbol: () => _symbol, + _templateLiteral: () => _templateLiteral, + _toLowerCase: () => _toLowerCase, + _toUpperCase: () => _toUpperCase, + _transform: () => _transform, + _trim: () => _trim, + _tuple: () => _tuple, + _uint32: () => _uint32, + _uint64: () => _uint64, + _ulid: () => _ulid, + _undefined: () => _undefined2, + _union: () => _union, + _unknown: () => _unknown, + _uppercase: () => _uppercase, + _url: () => _url, + _uuid: () => _uuid, + _uuidv4: () => _uuidv4, + _uuidv6: () => _uuidv6, + _uuidv7: () => _uuidv7, + _void: () => _void, + _xid: () => _xid, + _xor: () => _xor, + clone: () => clone, + config: () => config, + createStandardJSONSchemaMethod: () => createStandardJSONSchemaMethod, + createToJSONSchemaMethod: () => createToJSONSchemaMethod, + decode: () => decode, + decodeAsync: () => decodeAsync, + describe: () => describe, + encode: () => encode, + encodeAsync: () => encodeAsync, + extractDefs: () => extractDefs, + finalize: () => finalize, + flattenError: () => flattenError, + formatError: () => formatError, + globalConfig: () => globalConfig, + globalRegistry: () => globalRegistry, + initializeContext: () => initializeContext, + isValidBase64: () => isValidBase64, + isValidBase64URL: () => isValidBase64URL, + isValidJWT: () => isValidJWT, + locales: () => locales_exports, + meta: () => meta, + parse: () => parse, + parseAsync: () => parseAsync, + prettifyError: () => prettifyError, + process: () => process, + regexes: () => regexes_exports, + registry: () => registry, + safeDecode: () => safeDecode, + safeDecodeAsync: () => safeDecodeAsync, + safeEncode: () => safeEncode, + safeEncodeAsync: () => safeEncodeAsync, + safeParse: () => safeParse, + safeParseAsync: () => safeParseAsync, + toDotPath: () => toDotPath, + toJSONSchema: () => toJSONSchema, + treeifyError: () => treeifyError, + util: () => util_exports, + version: () => version +}); + +// ../../node_modules/zod/v4/core/core.js +var _a; +var NEVER = /* @__PURE__ */ Object.freeze({ + status: "aborted" +}); +// @__NO_SIDE_EFFECTS__ +function $constructor(name, initializer3, params) { + function init(inst, def) { + if (!inst._zod) { + Object.defineProperty(inst, "_zod", { + value: { + def, + constr: _, + traits: /* @__PURE__ */ new Set() + }, + enumerable: false + }); + } + if (inst._zod.traits.has(name)) { + return; + } + inst._zod.traits.add(name); + initializer3(inst, def); + const proto = _.prototype; + const keys = Object.keys(proto); + for (let i = 0; i < keys.length; i++) { + const k = keys[i]; + if (!(k in inst)) { + inst[k] = proto[k].bind(inst); + } + } + } + const Parent = params?.Parent ?? Object; + class Definition extends Parent { + } + Object.defineProperty(Definition, "name", { value: name }); + function _(def) { + var _a3; + const inst = params?.Parent ? new Definition() : this; + init(inst, def); + (_a3 = inst._zod).deferred ?? (_a3.deferred = []); + for (const fn of inst._zod.deferred) { + fn(); + } + return inst; + } + Object.defineProperty(_, "init", { value: init }); + Object.defineProperty(_, Symbol.hasInstance, { + value: (inst) => { + if (params?.Parent && inst instanceof params.Parent) + return true; + return inst?._zod?.traits?.has(name); + } + }); + Object.defineProperty(_, "name", { value: name }); + return _; +} +var $brand = /* @__PURE__ */ Symbol("zod_brand"); +var $ZodAsyncError = class extends Error { + constructor() { + super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`); + } +}; +var $ZodEncodeError = class extends Error { + constructor(name) { + super(`Encountered unidirectional transform during encode: ${name}`); + this.name = "ZodEncodeError"; + } +}; +(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {}); +var globalConfig = globalThis.__zod_globalConfig; +function config(newConfig) { + if (newConfig) + Object.assign(globalConfig, newConfig); + return globalConfig; +} + +// ../../node_modules/zod/v4/core/util.js +var util_exports = {}; +__export(util_exports, { + BIGINT_FORMAT_RANGES: () => BIGINT_FORMAT_RANGES, + Class: () => Class, + NUMBER_FORMAT_RANGES: () => NUMBER_FORMAT_RANGES, + aborted: () => aborted, + allowsEval: () => allowsEval, + assert: () => assert, + assertEqual: () => assertEqual, + assertIs: () => assertIs, + assertNever: () => assertNever, + assertNotEqual: () => assertNotEqual, + assignProp: () => assignProp, + base64ToUint8Array: () => base64ToUint8Array, + base64urlToUint8Array: () => base64urlToUint8Array, + cached: () => cached, + captureStackTrace: () => captureStackTrace, + cleanEnum: () => cleanEnum, + cleanRegex: () => cleanRegex, + clone: () => clone, + cloneDef: () => cloneDef, + createTransparentProxy: () => createTransparentProxy, + defineLazy: () => defineLazy, + esc: () => esc, + escapeRegex: () => escapeRegex, + explicitlyAborted: () => explicitlyAborted, + extend: () => extend, + finalizeIssue: () => finalizeIssue, + floatSafeRemainder: () => floatSafeRemainder, + getElementAtPath: () => getElementAtPath, + getEnumValues: () => getEnumValues, + getLengthableOrigin: () => getLengthableOrigin, + getParsedType: () => getParsedType, + getSizableOrigin: () => getSizableOrigin, + hexToUint8Array: () => hexToUint8Array, + isObject: () => isObject, + isPlainObject: () => isPlainObject, + issue: () => issue, + joinValues: () => joinValues, + jsonStringifyReplacer: () => jsonStringifyReplacer, + merge: () => merge, + mergeDefs: () => mergeDefs, + normalizeParams: () => normalizeParams, + nullish: () => nullish, + numKeys: () => numKeys, + objectClone: () => objectClone, + omit: () => omit, + optionalKeys: () => optionalKeys, + parsedType: () => parsedType, + partial: () => partial, + pick: () => pick, + prefixIssues: () => prefixIssues, + primitiveTypes: () => primitiveTypes, + promiseAllObject: () => promiseAllObject, + propertyKeyTypes: () => propertyKeyTypes, + randomString: () => randomString, + required: () => required, + safeExtend: () => safeExtend, + shallowClone: () => shallowClone, + slugify: () => slugify, + stringifyPrimitive: () => stringifyPrimitive, + uint8ArrayToBase64: () => uint8ArrayToBase64, + uint8ArrayToBase64url: () => uint8ArrayToBase64url, + uint8ArrayToHex: () => uint8ArrayToHex, + unwrapMessage: () => unwrapMessage +}); +function assertEqual(val) { + return val; +} +function assertNotEqual(val) { + return val; +} +function assertIs(_arg) { +} +function assertNever(_x) { + throw new Error("Unexpected value in exhaustive check"); +} +function assert(_) { +} +function getEnumValues(entries) { + const numericValues = Object.values(entries).filter((v) => typeof v === "number"); + const values = Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v); + return values; +} +function joinValues(array2, separator = "|") { + return array2.map((val) => stringifyPrimitive(val)).join(separator); +} +function jsonStringifyReplacer(_, value) { + if (typeof value === "bigint") + return value.toString(); + return value; +} +function cached(getter) { + const set2 = false; + return { + get value() { + if (!set2) { + const value = getter(); + Object.defineProperty(this, "value", { value }); + return value; + } + throw new Error("cached value already set"); + } + }; +} +function nullish(input) { + return input === null || input === void 0; +} +function cleanRegex(source) { + const start = source.startsWith("^") ? 1 : 0; + const end = source.endsWith("$") ? source.length - 1 : source.length; + return source.slice(start, end); +} +function floatSafeRemainder(val, step) { + const ratio = val / step; + const roundedRatio = Math.round(ratio); + const tolerance = Number.EPSILON * Math.max(Math.abs(ratio), 1); + if (Math.abs(ratio - roundedRatio) < tolerance) + return 0; + return ratio - roundedRatio; +} +var EVALUATING = /* @__PURE__ */ Symbol("evaluating"); +function defineLazy(object2, key, getter) { + let value = void 0; + Object.defineProperty(object2, key, { + get() { + if (value === EVALUATING) { + return void 0; + } + if (value === void 0) { + value = EVALUATING; + value = getter(); + } + return value; + }, + set(v) { + Object.defineProperty(object2, key, { + value: v + // configurable: true, + }); + }, + configurable: true + }); +} +function objectClone(obj) { + return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj)); +} +function assignProp(target, prop, value) { + Object.defineProperty(target, prop, { + value, + writable: true, + enumerable: true, + configurable: true + }); +} +function mergeDefs(...defs) { + const mergedDescriptors = {}; + for (const def of defs) { + const descriptors = Object.getOwnPropertyDescriptors(def); + Object.assign(mergedDescriptors, descriptors); + } + return Object.defineProperties({}, mergedDescriptors); +} +function cloneDef(schema) { + return mergeDefs(schema._zod.def); +} +function getElementAtPath(obj, path) { + if (!path) + return obj; + return path.reduce((acc, key) => acc?.[key], obj); +} +function promiseAllObject(promisesObj) { + const keys = Object.keys(promisesObj); + const promises = keys.map((key) => promisesObj[key]); + return Promise.all(promises).then((results) => { + const resolvedObj = {}; + for (let i = 0; i < keys.length; i++) { + resolvedObj[keys[i]] = results[i]; + } + return resolvedObj; + }); +} +function randomString(length = 10) { + const chars = "abcdefghijklmnopqrstuvwxyz"; + let str = ""; + for (let i = 0; i < length; i++) { + str += chars[Math.floor(Math.random() * chars.length)]; + } + return str; +} +function esc(str) { + return JSON.stringify(str); +} +function slugify(input) { + return input.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, ""); +} +var captureStackTrace = "captureStackTrace" in Error ? Error.captureStackTrace : (..._args) => { +}; +function isObject(data) { + return typeof data === "object" && data !== null && !Array.isArray(data); +} +var allowsEval = /* @__PURE__ */ cached(() => { + if (globalConfig.jitless) { + return false; + } + if (typeof navigator !== "undefined" && navigator?.userAgent?.includes("Cloudflare")) { + return false; + } + try { + const F = Function; + new F(""); + return true; + } catch (_) { + return false; + } +}); +function isPlainObject(o) { + if (isObject(o) === false) + return false; + const ctor = o.constructor; + if (ctor === void 0) + return true; + if (typeof ctor !== "function") + return true; + const prot = ctor.prototype; + if (isObject(prot) === false) + return false; + if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) { + return false; + } + return true; +} +function shallowClone(o) { + if (isPlainObject(o)) + return { ...o }; + if (Array.isArray(o)) + return [...o]; + if (o instanceof Map) + return new Map(o); + if (o instanceof Set) + return new Set(o); + return o; +} +function numKeys(data) { + let keyCount = 0; + for (const key in data) { + if (Object.prototype.hasOwnProperty.call(data, key)) { + keyCount++; + } + } + return keyCount; +} +var getParsedType = (data) => { + const t = typeof data; + switch (t) { + case "undefined": + return "undefined"; + case "string": + return "string"; + case "number": + return Number.isNaN(data) ? "nan" : "number"; + case "boolean": + return "boolean"; + case "function": + return "function"; + case "bigint": + return "bigint"; + case "symbol": + return "symbol"; + case "object": + if (Array.isArray(data)) { + return "array"; + } + if (data === null) { + return "null"; + } + if (data.then && typeof data.then === "function" && data.catch && typeof data.catch === "function") { + return "promise"; + } + if (typeof Map !== "undefined" && data instanceof Map) { + return "map"; + } + if (typeof Set !== "undefined" && data instanceof Set) { + return "set"; + } + if (typeof Date !== "undefined" && data instanceof Date) { + return "date"; + } + if (typeof File !== "undefined" && data instanceof File) { + return "file"; + } + return "object"; + default: + throw new Error(`Unknown data type: ${t}`); + } +}; +var propertyKeyTypes = /* @__PURE__ */ new Set(["string", "number", "symbol"]); +var primitiveTypes = /* @__PURE__ */ new Set([ + "string", + "number", + "bigint", + "boolean", + "symbol", + "undefined" +]); +function escapeRegex(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} +function clone(inst, def, params) { + const cl = new inst._zod.constr(def ?? inst._zod.def); + if (!def || params?.parent) + cl._zod.parent = inst; + return cl; +} +function normalizeParams(_params) { + const params = _params; + if (!params) + return {}; + if (typeof params === "string") + return { error: () => params }; + if (params?.message !== void 0) { + if (params?.error !== void 0) + throw new Error("Cannot specify both `message` and `error` params"); + params.error = params.message; + } + delete params.message; + if (typeof params.error === "string") + return { ...params, error: () => params.error }; + return params; +} +function createTransparentProxy(getter) { + let target; + return new Proxy({}, { + get(_, prop, receiver) { + target ?? (target = getter()); + return Reflect.get(target, prop, receiver); + }, + set(_, prop, value, receiver) { + target ?? (target = getter()); + return Reflect.set(target, prop, value, receiver); + }, + has(_, prop) { + target ?? (target = getter()); + return Reflect.has(target, prop); + }, + deleteProperty(_, prop) { + target ?? (target = getter()); + return Reflect.deleteProperty(target, prop); + }, + ownKeys(_) { + target ?? (target = getter()); + return Reflect.ownKeys(target); + }, + getOwnPropertyDescriptor(_, prop) { + target ?? (target = getter()); + return Reflect.getOwnPropertyDescriptor(target, prop); + }, + defineProperty(_, prop, descriptor) { + target ?? (target = getter()); + return Reflect.defineProperty(target, prop, descriptor); + } + }); +} +function stringifyPrimitive(value) { + if (typeof value === "bigint") + return value.toString() + "n"; + if (typeof value === "string") + return `"${value}"`; + return `${value}`; +} +function optionalKeys(shape) { + return Object.keys(shape).filter((k) => { + return shape[k]._zod.optin === "optional" && shape[k]._zod.optout === "optional"; + }); +} +var NUMBER_FORMAT_RANGES = { + safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER], + int32: [-2147483648, 2147483647], + uint32: [0, 4294967295], + float32: [-34028234663852886e22, 34028234663852886e22], + float64: [-Number.MAX_VALUE, Number.MAX_VALUE] +}; +var BIGINT_FORMAT_RANGES = { + int64: [/* @__PURE__ */ BigInt("-9223372036854775808"), /* @__PURE__ */ BigInt("9223372036854775807")], + uint64: [/* @__PURE__ */ BigInt(0), /* @__PURE__ */ BigInt("18446744073709551615")] +}; +function pick(schema, mask) { + const currDef = schema._zod.def; + const checks = currDef.checks; + const hasChecks = checks && checks.length > 0; + if (hasChecks) { + throw new Error(".pick() cannot be used on object schemas containing refinements"); + } + const def = mergeDefs(schema._zod.def, { + get shape() { + const newShape = {}; + for (const key in mask) { + if (!(key in currDef.shape)) { + throw new Error(`Unrecognized key: "${key}"`); + } + if (!mask[key]) + continue; + newShape[key] = currDef.shape[key]; + } + assignProp(this, "shape", newShape); + return newShape; + }, + checks: [] + }); + return clone(schema, def); +} +function omit(schema, mask) { + const currDef = schema._zod.def; + const checks = currDef.checks; + const hasChecks = checks && checks.length > 0; + if (hasChecks) { + throw new Error(".omit() cannot be used on object schemas containing refinements"); + } + const def = mergeDefs(schema._zod.def, { + get shape() { + const newShape = { ...schema._zod.def.shape }; + for (const key in mask) { + if (!(key in currDef.shape)) { + throw new Error(`Unrecognized key: "${key}"`); + } + if (!mask[key]) + continue; + delete newShape[key]; + } + assignProp(this, "shape", newShape); + return newShape; + }, + checks: [] + }); + return clone(schema, def); +} +function extend(schema, shape) { + if (!isPlainObject(shape)) { + throw new Error("Invalid input to extend: expected a plain object"); + } + const checks = schema._zod.def.checks; + const hasChecks = checks && checks.length > 0; + if (hasChecks) { + const existingShape = schema._zod.def.shape; + for (const key in shape) { + if (Object.getOwnPropertyDescriptor(existingShape, key) !== void 0) { + throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead."); + } + } + } + const def = mergeDefs(schema._zod.def, { + get shape() { + const _shape = { ...schema._zod.def.shape, ...shape }; + assignProp(this, "shape", _shape); + return _shape; + } + }); + return clone(schema, def); +} +function safeExtend(schema, shape) { + if (!isPlainObject(shape)) { + throw new Error("Invalid input to safeExtend: expected a plain object"); + } + const def = mergeDefs(schema._zod.def, { + get shape() { + const _shape = { ...schema._zod.def.shape, ...shape }; + assignProp(this, "shape", _shape); + return _shape; + } + }); + return clone(schema, def); +} +function merge(a, b) { + if (a._zod.def.checks?.length) { + throw new Error(".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead."); + } + const def = mergeDefs(a._zod.def, { + get shape() { + const _shape = { ...a._zod.def.shape, ...b._zod.def.shape }; + assignProp(this, "shape", _shape); + return _shape; + }, + get catchall() { + return b._zod.def.catchall; + }, + checks: b._zod.def.checks ?? [] + }); + return clone(a, def); +} +function partial(Class2, schema, mask) { + const currDef = schema._zod.def; + const checks = currDef.checks; + const hasChecks = checks && checks.length > 0; + if (hasChecks) { + throw new Error(".partial() cannot be used on object schemas containing refinements"); + } + const def = mergeDefs(schema._zod.def, { + get shape() { + const oldShape = schema._zod.def.shape; + const shape = { ...oldShape }; + if (mask) { + for (const key in mask) { + if (!(key in oldShape)) { + throw new Error(`Unrecognized key: "${key}"`); + } + if (!mask[key]) + continue; + shape[key] = Class2 ? new Class2({ + type: "optional", + innerType: oldShape[key] + }) : oldShape[key]; + } + } else { + for (const key in oldShape) { + shape[key] = Class2 ? new Class2({ + type: "optional", + innerType: oldShape[key] + }) : oldShape[key]; + } + } + assignProp(this, "shape", shape); + return shape; + }, + checks: [] + }); + return clone(schema, def); +} +function required(Class2, schema, mask) { + const def = mergeDefs(schema._zod.def, { + get shape() { + const oldShape = schema._zod.def.shape; + const shape = { ...oldShape }; + if (mask) { + for (const key in mask) { + if (!(key in shape)) { + throw new Error(`Unrecognized key: "${key}"`); + } + if (!mask[key]) + continue; + shape[key] = new Class2({ + type: "nonoptional", + innerType: oldShape[key] + }); + } + } else { + for (const key in oldShape) { + shape[key] = new Class2({ + type: "nonoptional", + innerType: oldShape[key] + }); + } + } + assignProp(this, "shape", shape); + return shape; + } + }); + return clone(schema, def); +} +function aborted(x, startIndex = 0) { + if (x.aborted === true) + return true; + for (let i = startIndex; i < x.issues.length; i++) { + if (x.issues[i]?.continue !== true) { + return true; + } + } + return false; +} +function explicitlyAborted(x, startIndex = 0) { + if (x.aborted === true) + return true; + for (let i = startIndex; i < x.issues.length; i++) { + if (x.issues[i]?.continue === false) { + return true; + } + } + return false; +} +function prefixIssues(path, issues) { + return issues.map((iss) => { + var _a3; + (_a3 = iss).path ?? (_a3.path = []); + iss.path.unshift(path); + return iss; + }); +} +function unwrapMessage(message) { + return typeof message === "string" ? message : message?.message; +} +function finalizeIssue(iss, ctx, config2) { + const message = iss.message ? iss.message : unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ?? unwrapMessage(ctx?.error?.(iss)) ?? unwrapMessage(config2.customError?.(iss)) ?? unwrapMessage(config2.localeError?.(iss)) ?? "Invalid input"; + const { inst: _inst, continue: _continue, input: _input, ...rest } = iss; + rest.path ?? (rest.path = []); + rest.message = message; + if (ctx?.reportInput) { + rest.input = _input; + } + return rest; +} +function getSizableOrigin(input) { + if (input instanceof Set) + return "set"; + if (input instanceof Map) + return "map"; + if (input instanceof File) + return "file"; + return "unknown"; +} +function getLengthableOrigin(input) { + if (Array.isArray(input)) + return "array"; + if (typeof input === "string") + return "string"; + return "unknown"; +} +function parsedType(data) { + const t = typeof data; + switch (t) { + case "number": { + return Number.isNaN(data) ? "nan" : "number"; + } + case "object": { + if (data === null) { + return "null"; + } + if (Array.isArray(data)) { + return "array"; + } + const obj = data; + if (obj && Object.getPrototypeOf(obj) !== Object.prototype && "constructor" in obj && obj.constructor) { + return obj.constructor.name; + } + } + } + return t; +} +function issue(...args) { + const [iss, input, inst] = args; + if (typeof iss === "string") { + return { + message: iss, + code: "custom", + input, + inst + }; + } + return { ...iss }; +} +function cleanEnum(obj) { + return Object.entries(obj).filter(([k, _]) => { + return Number.isNaN(Number.parseInt(k, 10)); + }).map((el) => el[1]); +} +function base64ToUint8Array(base643) { + const binaryString = atob(base643); + const bytes = new Uint8Array(binaryString.length); + for (let i = 0; i < binaryString.length; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return bytes; +} +function uint8ArrayToBase64(bytes) { + let binaryString = ""; + for (let i = 0; i < bytes.length; i++) { + binaryString += String.fromCharCode(bytes[i]); + } + return btoa(binaryString); +} +function base64urlToUint8Array(base64url3) { + const base643 = base64url3.replace(/-/g, "+").replace(/_/g, "/"); + const padding = "=".repeat((4 - base643.length % 4) % 4); + return base64ToUint8Array(base643 + padding); +} +function uint8ArrayToBase64url(bytes) { + return uint8ArrayToBase64(bytes).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, ""); +} +function hexToUint8Array(hex3) { + const cleanHex = hex3.replace(/^0x/, ""); + if (cleanHex.length % 2 !== 0) { + throw new Error("Invalid hex string length"); + } + const bytes = new Uint8Array(cleanHex.length / 2); + for (let i = 0; i < cleanHex.length; i += 2) { + bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16); + } + return bytes; +} +function uint8ArrayToHex(bytes) { + return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join(""); +} +var Class = class { + constructor(..._args) { + } +}; + +// ../../node_modules/zod/v4/core/errors.js +var initializer = (inst, def) => { + inst.name = "$ZodError"; + Object.defineProperty(inst, "_zod", { + value: inst._zod, + enumerable: false + }); + Object.defineProperty(inst, "issues", { + value: def, + enumerable: false + }); + inst.message = JSON.stringify(def, jsonStringifyReplacer, 2); + Object.defineProperty(inst, "toString", { + value: () => inst.message, + enumerable: false + }); +}; +var $ZodError = $constructor("$ZodError", initializer); +var $ZodRealError = $constructor("$ZodError", initializer, { Parent: Error }); +function flattenError(error51, mapper = (issue2) => issue2.message) { + const fieldErrors = {}; + const formErrors = []; + for (const sub of error51.issues) { + if (sub.path.length > 0) { + fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || []; + fieldErrors[sub.path[0]].push(mapper(sub)); + } else { + formErrors.push(mapper(sub)); + } + } + return { formErrors, fieldErrors }; +} +function formatError(error51, mapper = (issue2) => issue2.message) { + const fieldErrors = { _errors: [] }; + const processError = (error52, path = []) => { + for (const issue2 of error52.issues) { + if (issue2.code === "invalid_union" && issue2.errors.length) { + issue2.errors.map((issues) => processError({ issues }, [...path, ...issue2.path])); + } else if (issue2.code === "invalid_key") { + processError({ issues: issue2.issues }, [...path, ...issue2.path]); + } else if (issue2.code === "invalid_element") { + processError({ issues: issue2.issues }, [...path, ...issue2.path]); + } else { + const fullpath = [...path, ...issue2.path]; + if (fullpath.length === 0) { + fieldErrors._errors.push(mapper(issue2)); + } else { + let curr = fieldErrors; + let i = 0; + while (i < fullpath.length) { + const el = fullpath[i]; + const terminal = i === fullpath.length - 1; + if (!terminal) { + curr[el] = curr[el] || { _errors: [] }; + } else { + curr[el] = curr[el] || { _errors: [] }; + curr[el]._errors.push(mapper(issue2)); + } + curr = curr[el]; + i++; + } + } + } + } + }; + processError(error51); + return fieldErrors; +} +function treeifyError(error51, mapper = (issue2) => issue2.message) { + const result = { errors: [] }; + const processError = (error52, path = []) => { + var _a3, _b; + for (const issue2 of error52.issues) { + if (issue2.code === "invalid_union" && issue2.errors.length) { + issue2.errors.map((issues) => processError({ issues }, [...path, ...issue2.path])); + } else if (issue2.code === "invalid_key") { + processError({ issues: issue2.issues }, [...path, ...issue2.path]); + } else if (issue2.code === "invalid_element") { + processError({ issues: issue2.issues }, [...path, ...issue2.path]); + } else { + const fullpath = [...path, ...issue2.path]; + if (fullpath.length === 0) { + result.errors.push(mapper(issue2)); + continue; + } + let curr = result; + let i = 0; + while (i < fullpath.length) { + const el = fullpath[i]; + const terminal = i === fullpath.length - 1; + if (typeof el === "string") { + curr.properties ?? (curr.properties = {}); + (_a3 = curr.properties)[el] ?? (_a3[el] = { errors: [] }); + curr = curr.properties[el]; + } else { + curr.items ?? (curr.items = []); + (_b = curr.items)[el] ?? (_b[el] = { errors: [] }); + curr = curr.items[el]; + } + if (terminal) { + curr.errors.push(mapper(issue2)); + } + i++; + } + } + } + }; + processError(error51); + return result; +} +function toDotPath(_path) { + const segs = []; + const path = _path.map((seg) => typeof seg === "object" ? seg.key : seg); + for (const seg of path) { + if (typeof seg === "number") + segs.push(`[${seg}]`); + else if (typeof seg === "symbol") + segs.push(`[${JSON.stringify(String(seg))}]`); + else if (/[^\w$]/.test(seg)) + segs.push(`[${JSON.stringify(seg)}]`); + else { + if (segs.length) + segs.push("."); + segs.push(seg); + } + } + return segs.join(""); +} +function prettifyError(error51) { + const lines = []; + const issues = [...error51.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length); + for (const issue2 of issues) { + lines.push(`\u2716 ${issue2.message}`); + if (issue2.path?.length) + lines.push(` \u2192 at ${toDotPath(issue2.path)}`); + } + return lines.join("\n"); +} + +// ../../node_modules/zod/v4/core/parse.js +var _parse = (_Err) => (schema, value, _ctx, _params) => { + const ctx = _ctx ? { ..._ctx, async: false } : { async: false }; + const result = schema._zod.run({ value, issues: [] }, ctx); + if (result instanceof Promise) { + throw new $ZodAsyncError(); + } + if (result.issues.length) { + const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))); + captureStackTrace(e, _params?.callee); + throw e; + } + return result.value; +}; +var parse = /* @__PURE__ */ _parse($ZodRealError); +var _parseAsync = (_Err) => async (schema, value, _ctx, params) => { + const ctx = _ctx ? { ..._ctx, async: true } : { async: true }; + let result = schema._zod.run({ value, issues: [] }, ctx); + if (result instanceof Promise) + result = await result; + if (result.issues.length) { + const e = new (params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))); + captureStackTrace(e, params?.callee); + throw e; + } + return result.value; +}; +var parseAsync = /* @__PURE__ */ _parseAsync($ZodRealError); +var _safeParse = (_Err) => (schema, value, _ctx) => { + const ctx = _ctx ? { ..._ctx, async: false } : { async: false }; + const result = schema._zod.run({ value, issues: [] }, ctx); + if (result instanceof Promise) { + throw new $ZodAsyncError(); + } + return result.issues.length ? { + success: false, + error: new (_Err ?? $ZodError)(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) + } : { success: true, data: result.value }; +}; +var safeParse = /* @__PURE__ */ _safeParse($ZodRealError); +var _safeParseAsync = (_Err) => async (schema, value, _ctx) => { + const ctx = _ctx ? { ..._ctx, async: true } : { async: true }; + let result = schema._zod.run({ value, issues: [] }, ctx); + if (result instanceof Promise) + result = await result; + return result.issues.length ? { + success: false, + error: new _Err(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) + } : { success: true, data: result.value }; +}; +var safeParseAsync = /* @__PURE__ */ _safeParseAsync($ZodRealError); +var _encode = (_Err) => (schema, value, _ctx) => { + const ctx = _ctx ? { ..._ctx, direction: "backward" } : { direction: "backward" }; + return _parse(_Err)(schema, value, ctx); +}; +var encode = /* @__PURE__ */ _encode($ZodRealError); +var _decode = (_Err) => (schema, value, _ctx) => { + return _parse(_Err)(schema, value, _ctx); +}; +var decode = /* @__PURE__ */ _decode($ZodRealError); +var _encodeAsync = (_Err) => async (schema, value, _ctx) => { + const ctx = _ctx ? { ..._ctx, direction: "backward" } : { direction: "backward" }; + return _parseAsync(_Err)(schema, value, ctx); +}; +var encodeAsync = /* @__PURE__ */ _encodeAsync($ZodRealError); +var _decodeAsync = (_Err) => async (schema, value, _ctx) => { + return _parseAsync(_Err)(schema, value, _ctx); +}; +var decodeAsync = /* @__PURE__ */ _decodeAsync($ZodRealError); +var _safeEncode = (_Err) => (schema, value, _ctx) => { + const ctx = _ctx ? { ..._ctx, direction: "backward" } : { direction: "backward" }; + return _safeParse(_Err)(schema, value, ctx); +}; +var safeEncode = /* @__PURE__ */ _safeEncode($ZodRealError); +var _safeDecode = (_Err) => (schema, value, _ctx) => { + return _safeParse(_Err)(schema, value, _ctx); +}; +var safeDecode = /* @__PURE__ */ _safeDecode($ZodRealError); +var _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => { + const ctx = _ctx ? { ..._ctx, direction: "backward" } : { direction: "backward" }; + return _safeParseAsync(_Err)(schema, value, ctx); +}; +var safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync($ZodRealError); +var _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => { + return _safeParseAsync(_Err)(schema, value, _ctx); +}; +var safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync($ZodRealError); + +// ../../node_modules/zod/v4/core/regexes.js +var regexes_exports = {}; +__export(regexes_exports, { + base64: () => base64, + base64url: () => base64url, + bigint: () => bigint, + boolean: () => boolean, + browserEmail: () => browserEmail, + cidrv4: () => cidrv4, + cidrv6: () => cidrv6, + cuid: () => cuid, + cuid2: () => cuid2, + date: () => date, + datetime: () => datetime, + domain: () => domain, + duration: () => duration, + e164: () => e164, + email: () => email, + emoji: () => emoji, + extendedDuration: () => extendedDuration, + guid: () => guid, + hex: () => hex, + hostname: () => hostname, + html5Email: () => html5Email, + httpProtocol: () => httpProtocol, + idnEmail: () => idnEmail, + integer: () => integer, + ipv4: () => ipv4, + ipv6: () => ipv6, + ksuid: () => ksuid, + lowercase: () => lowercase, + mac: () => mac, + md5_base64: () => md5_base64, + md5_base64url: () => md5_base64url, + md5_hex: () => md5_hex, + nanoid: () => nanoid, + null: () => _null, + number: () => number, + rfc5322Email: () => rfc5322Email, + sha1_base64: () => sha1_base64, + sha1_base64url: () => sha1_base64url, + sha1_hex: () => sha1_hex, + sha256_base64: () => sha256_base64, + sha256_base64url: () => sha256_base64url, + sha256_hex: () => sha256_hex, + sha384_base64: () => sha384_base64, + sha384_base64url: () => sha384_base64url, + sha384_hex: () => sha384_hex, + sha512_base64: () => sha512_base64, + sha512_base64url: () => sha512_base64url, + sha512_hex: () => sha512_hex, + string: () => string, + time: () => time, + ulid: () => ulid, + undefined: () => _undefined, + unicodeEmail: () => unicodeEmail, + uppercase: () => uppercase, + uuid: () => uuid, + uuid4: () => uuid4, + uuid6: () => uuid6, + uuid7: () => uuid7, + xid: () => xid +}); +var cuid = /^[cC][0-9a-z]{6,}$/; +var cuid2 = /^[0-9a-z]+$/; +var ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/; +var xid = /^[0-9a-vA-V]{20}$/; +var ksuid = /^[A-Za-z0-9]{27}$/; +var nanoid = /^[a-zA-Z0-9_-]{21}$/; +var duration = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/; +var 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)?)??$/; +var 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})$/; +var uuid = (version2) => { + if (!version2) + 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)$/; + return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version2}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`); +}; +var uuid4 = /* @__PURE__ */ uuid(4); +var uuid6 = /* @__PURE__ */ uuid(6); +var uuid7 = /* @__PURE__ */ uuid(7); +var email = /^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/; +var 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])?)*$/; +var 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,}))$/; +var unicodeEmail = /^[^\s@"]{1,64}@[^\s@]{1,255}$/u; +var idnEmail = unicodeEmail; +var 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])?)*$/; +var _emoji = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`; +function emoji() { + return new RegExp(_emoji, "u"); +} +var 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])$/; +var 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}|:))$/; +var mac = (delimiter) => { + const escapedDelim = escapeRegex(delimiter ?? ":"); + return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`); +}; +var 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])$/; +var cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/; +var base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/; +var base64url = /^[A-Za-z0-9_-]*$/; +var 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])?)*\.?$/; +var domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/; +var httpProtocol = /^https?$/; +var e164 = /^\+[1-9]\d{6,14}$/; +var 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])))`; +var date = /* @__PURE__ */ new RegExp(`^${dateSource}$`); +function timeSource(args) { + const hhmm = `(?:[01]\\d|2[0-3]):[0-5]\\d`; + const regex = typeof args.precision === "number" ? args.precision === -1 ? `${hhmm}` : args.precision === 0 ? `${hhmm}:[0-5]\\d` : `${hhmm}:[0-5]\\d\\.\\d{${args.precision}}` : `${hhmm}(?::[0-5]\\d(?:\\.\\d+)?)?`; + return regex; +} +function time(args) { + return new RegExp(`^${timeSource(args)}$`); +} +function datetime(args) { + const time3 = timeSource({ precision: args.precision }); + const opts = ["Z"]; + if (args.local) + opts.push(""); + if (args.offset) + opts.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`); + const timeRegex = `${time3}(?:${opts.join("|")})`; + return new RegExp(`^${dateSource}T(?:${timeRegex})$`); +} +var string = (params) => { + const regex = params ? `[\\s\\S]{${params?.minimum ?? 0},${params?.maximum ?? ""}}` : `[\\s\\S]*`; + return new RegExp(`^${regex}$`); +}; +var bigint = /^-?\d+n?$/; +var integer = /^-?\d+$/; +var number = /^-?\d+(?:\.\d+)?$/; +var boolean = /^(?:true|false)$/i; +var _null = /^null$/i; +var _undefined = /^undefined$/i; +var lowercase = /^[^A-Z]*$/; +var uppercase = /^[^a-z]*$/; +var hex = /^[0-9a-fA-F]*$/; +function fixedBase64(bodyLength, padding) { + return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`); +} +function fixedBase64url(length) { + return new RegExp(`^[A-Za-z0-9_-]{${length}}$`); +} +var md5_hex = /^[0-9a-fA-F]{32}$/; +var md5_base64 = /* @__PURE__ */ fixedBase64(22, "=="); +var md5_base64url = /* @__PURE__ */ fixedBase64url(22); +var sha1_hex = /^[0-9a-fA-F]{40}$/; +var sha1_base64 = /* @__PURE__ */ fixedBase64(27, "="); +var sha1_base64url = /* @__PURE__ */ fixedBase64url(27); +var sha256_hex = /^[0-9a-fA-F]{64}$/; +var sha256_base64 = /* @__PURE__ */ fixedBase64(43, "="); +var sha256_base64url = /* @__PURE__ */ fixedBase64url(43); +var sha384_hex = /^[0-9a-fA-F]{96}$/; +var sha384_base64 = /* @__PURE__ */ fixedBase64(64, ""); +var sha384_base64url = /* @__PURE__ */ fixedBase64url(64); +var sha512_hex = /^[0-9a-fA-F]{128}$/; +var sha512_base64 = /* @__PURE__ */ fixedBase64(86, "=="); +var sha512_base64url = /* @__PURE__ */ fixedBase64url(86); + +// ../../node_modules/zod/v4/core/checks.js +var $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => { + var _a3; + inst._zod ?? (inst._zod = {}); + inst._zod.def = def; + (_a3 = inst._zod).onattach ?? (_a3.onattach = []); +}); +var numericOriginMap = { + number: "number", + bigint: "bigint", + object: "date" +}; +var $ZodCheckLessThan = /* @__PURE__ */ $constructor("$ZodCheckLessThan", (inst, def) => { + $ZodCheck.init(inst, def); + const origin = numericOriginMap[typeof def.value]; + inst._zod.onattach.push((inst2) => { + const bag = inst2._zod.bag; + const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY; + if (def.value < curr) { + if (def.inclusive) + bag.maximum = def.value; + else + bag.exclusiveMaximum = def.value; + } + }); + inst._zod.check = (payload) => { + if (def.inclusive ? payload.value <= def.value : payload.value < def.value) { + return; + } + payload.issues.push({ + origin, + code: "too_big", + maximum: typeof def.value === "object" ? def.value.getTime() : def.value, + input: payload.value, + inclusive: def.inclusive, + inst, + continue: !def.abort + }); + }; +}); +var $ZodCheckGreaterThan = /* @__PURE__ */ $constructor("$ZodCheckGreaterThan", (inst, def) => { + $ZodCheck.init(inst, def); + const origin = numericOriginMap[typeof def.value]; + inst._zod.onattach.push((inst2) => { + const bag = inst2._zod.bag; + const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY; + if (def.value > curr) { + if (def.inclusive) + bag.minimum = def.value; + else + bag.exclusiveMinimum = def.value; + } + }); + inst._zod.check = (payload) => { + if (def.inclusive ? payload.value >= def.value : payload.value > def.value) { + return; + } + payload.issues.push({ + origin, + code: "too_small", + minimum: typeof def.value === "object" ? def.value.getTime() : def.value, + input: payload.value, + inclusive: def.inclusive, + inst, + continue: !def.abort + }); + }; +}); +var $ZodCheckMultipleOf = /* @__PURE__ */ $constructor("$ZodCheckMultipleOf", (inst, def) => { + $ZodCheck.init(inst, def); + inst._zod.onattach.push((inst2) => { + var _a3; + (_a3 = inst2._zod.bag).multipleOf ?? (_a3.multipleOf = def.value); + }); + inst._zod.check = (payload) => { + if (typeof payload.value !== typeof def.value) + throw new Error("Cannot mix number and bigint in multiple_of check."); + const isMultiple = typeof payload.value === "bigint" ? payload.value % def.value === BigInt(0) : floatSafeRemainder(payload.value, def.value) === 0; + if (isMultiple) + return; + payload.issues.push({ + origin: typeof payload.value, + code: "not_multiple_of", + divisor: def.value, + input: payload.value, + inst, + continue: !def.abort + }); + }; +}); +var $ZodCheckNumberFormat = /* @__PURE__ */ $constructor("$ZodCheckNumberFormat", (inst, def) => { + $ZodCheck.init(inst, def); + def.format = def.format || "float64"; + const isInt = def.format?.includes("int"); + const origin = isInt ? "int" : "number"; + const [minimum, maximum] = NUMBER_FORMAT_RANGES[def.format]; + inst._zod.onattach.push((inst2) => { + const bag = inst2._zod.bag; + bag.format = def.format; + bag.minimum = minimum; + bag.maximum = maximum; + if (isInt) + bag.pattern = integer; + }); + inst._zod.check = (payload) => { + const input = payload.value; + if (isInt) { + if (!Number.isInteger(input)) { + payload.issues.push({ + expected: origin, + format: def.format, + code: "invalid_type", + continue: false, + input, + inst + }); + return; + } + if (!Number.isSafeInteger(input)) { + if (input > 0) { + payload.issues.push({ + input, + code: "too_big", + maximum: Number.MAX_SAFE_INTEGER, + note: "Integers must be within the safe integer range.", + inst, + origin, + inclusive: true, + continue: !def.abort + }); + } else { + payload.issues.push({ + input, + code: "too_small", + minimum: Number.MIN_SAFE_INTEGER, + note: "Integers must be within the safe integer range.", + inst, + origin, + inclusive: true, + continue: !def.abort + }); + } + return; + } + } + if (input < minimum) { + payload.issues.push({ + origin: "number", + input, + code: "too_small", + minimum, + inclusive: true, + inst, + continue: !def.abort + }); + } + if (input > maximum) { + payload.issues.push({ + origin: "number", + input, + code: "too_big", + maximum, + inclusive: true, + inst, + continue: !def.abort + }); + } + }; +}); +var $ZodCheckBigIntFormat = /* @__PURE__ */ $constructor("$ZodCheckBigIntFormat", (inst, def) => { + $ZodCheck.init(inst, def); + const [minimum, maximum] = BIGINT_FORMAT_RANGES[def.format]; + inst._zod.onattach.push((inst2) => { + const bag = inst2._zod.bag; + bag.format = def.format; + bag.minimum = minimum; + bag.maximum = maximum; + }); + inst._zod.check = (payload) => { + const input = payload.value; + if (input < minimum) { + payload.issues.push({ + origin: "bigint", + input, + code: "too_small", + minimum, + inclusive: true, + inst, + continue: !def.abort + }); + } + if (input > maximum) { + payload.issues.push({ + origin: "bigint", + input, + code: "too_big", + maximum, + inclusive: true, + inst, + continue: !def.abort + }); + } + }; +}); +var $ZodCheckMaxSize = /* @__PURE__ */ $constructor("$ZodCheckMaxSize", (inst, def) => { + var _a3; + $ZodCheck.init(inst, def); + (_a3 = inst._zod.def).when ?? (_a3.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.size !== void 0; + }); + inst._zod.onattach.push((inst2) => { + const curr = inst2._zod.bag.maximum ?? Number.POSITIVE_INFINITY; + if (def.maximum < curr) + inst2._zod.bag.maximum = def.maximum; + }); + inst._zod.check = (payload) => { + const input = payload.value; + const size = input.size; + if (size <= def.maximum) + return; + payload.issues.push({ + origin: getSizableOrigin(input), + code: "too_big", + maximum: def.maximum, + inclusive: true, + input, + inst, + continue: !def.abort + }); + }; +}); +var $ZodCheckMinSize = /* @__PURE__ */ $constructor("$ZodCheckMinSize", (inst, def) => { + var _a3; + $ZodCheck.init(inst, def); + (_a3 = inst._zod.def).when ?? (_a3.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.size !== void 0; + }); + inst._zod.onattach.push((inst2) => { + const curr = inst2._zod.bag.minimum ?? Number.NEGATIVE_INFINITY; + if (def.minimum > curr) + inst2._zod.bag.minimum = def.minimum; + }); + inst._zod.check = (payload) => { + const input = payload.value; + const size = input.size; + if (size >= def.minimum) + return; + payload.issues.push({ + origin: getSizableOrigin(input), + code: "too_small", + minimum: def.minimum, + inclusive: true, + input, + inst, + continue: !def.abort + }); + }; +}); +var $ZodCheckSizeEquals = /* @__PURE__ */ $constructor("$ZodCheckSizeEquals", (inst, def) => { + var _a3; + $ZodCheck.init(inst, def); + (_a3 = inst._zod.def).when ?? (_a3.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.size !== void 0; + }); + inst._zod.onattach.push((inst2) => { + const bag = inst2._zod.bag; + bag.minimum = def.size; + bag.maximum = def.size; + bag.size = def.size; + }); + inst._zod.check = (payload) => { + const input = payload.value; + const size = input.size; + if (size === def.size) + return; + const tooBig = size > def.size; + payload.issues.push({ + origin: getSizableOrigin(input), + ...tooBig ? { code: "too_big", maximum: def.size } : { code: "too_small", minimum: def.size }, + inclusive: true, + exact: true, + input: payload.value, + inst, + continue: !def.abort + }); + }; +}); +var $ZodCheckMaxLength = /* @__PURE__ */ $constructor("$ZodCheckMaxLength", (inst, def) => { + var _a3; + $ZodCheck.init(inst, def); + (_a3 = inst._zod.def).when ?? (_a3.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.length !== void 0; + }); + inst._zod.onattach.push((inst2) => { + const curr = inst2._zod.bag.maximum ?? Number.POSITIVE_INFINITY; + if (def.maximum < curr) + inst2._zod.bag.maximum = def.maximum; + }); + inst._zod.check = (payload) => { + const input = payload.value; + const length = input.length; + if (length <= def.maximum) + return; + const origin = getLengthableOrigin(input); + payload.issues.push({ + origin, + code: "too_big", + maximum: def.maximum, + inclusive: true, + input, + inst, + continue: !def.abort + }); + }; +}); +var $ZodCheckMinLength = /* @__PURE__ */ $constructor("$ZodCheckMinLength", (inst, def) => { + var _a3; + $ZodCheck.init(inst, def); + (_a3 = inst._zod.def).when ?? (_a3.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.length !== void 0; + }); + inst._zod.onattach.push((inst2) => { + const curr = inst2._zod.bag.minimum ?? Number.NEGATIVE_INFINITY; + if (def.minimum > curr) + inst2._zod.bag.minimum = def.minimum; + }); + inst._zod.check = (payload) => { + const input = payload.value; + const length = input.length; + if (length >= def.minimum) + return; + const origin = getLengthableOrigin(input); + payload.issues.push({ + origin, + code: "too_small", + minimum: def.minimum, + inclusive: true, + input, + inst, + continue: !def.abort + }); + }; +}); +var $ZodCheckLengthEquals = /* @__PURE__ */ $constructor("$ZodCheckLengthEquals", (inst, def) => { + var _a3; + $ZodCheck.init(inst, def); + (_a3 = inst._zod.def).when ?? (_a3.when = (payload) => { + const val = payload.value; + return !nullish(val) && val.length !== void 0; + }); + inst._zod.onattach.push((inst2) => { + const bag = inst2._zod.bag; + bag.minimum = def.length; + bag.maximum = def.length; + bag.length = def.length; + }); + inst._zod.check = (payload) => { + const input = payload.value; + const length = input.length; + if (length === def.length) + return; + const origin = getLengthableOrigin(input); + const tooBig = length > def.length; + payload.issues.push({ + origin, + ...tooBig ? { code: "too_big", maximum: def.length } : { code: "too_small", minimum: def.length }, + inclusive: true, + exact: true, + input: payload.value, + inst, + continue: !def.abort + }); + }; +}); +var $ZodCheckStringFormat = /* @__PURE__ */ $constructor("$ZodCheckStringFormat", (inst, def) => { + var _a3, _b; + $ZodCheck.init(inst, def); + inst._zod.onattach.push((inst2) => { + const bag = inst2._zod.bag; + bag.format = def.format; + if (def.pattern) { + bag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set()); + bag.patterns.add(def.pattern); + } + }); + if (def.pattern) + (_a3 = inst._zod).check ?? (_a3.check = (payload) => { + def.pattern.lastIndex = 0; + if (def.pattern.test(payload.value)) + return; + payload.issues.push({ + origin: "string", + code: "invalid_format", + format: def.format, + input: payload.value, + ...def.pattern ? { pattern: def.pattern.toString() } : {}, + inst, + continue: !def.abort + }); + }); + else + (_b = inst._zod).check ?? (_b.check = () => { + }); +}); +var $ZodCheckRegex = /* @__PURE__ */ $constructor("$ZodCheckRegex", (inst, def) => { + $ZodCheckStringFormat.init(inst, def); + inst._zod.check = (payload) => { + def.pattern.lastIndex = 0; + if (def.pattern.test(payload.value)) + return; + payload.issues.push({ + origin: "string", + code: "invalid_format", + format: "regex", + input: payload.value, + pattern: def.pattern.toString(), + inst, + continue: !def.abort + }); + }; +}); +var $ZodCheckLowerCase = /* @__PURE__ */ $constructor("$ZodCheckLowerCase", (inst, def) => { + def.pattern ?? (def.pattern = lowercase); + $ZodCheckStringFormat.init(inst, def); +}); +var $ZodCheckUpperCase = /* @__PURE__ */ $constructor("$ZodCheckUpperCase", (inst, def) => { + def.pattern ?? (def.pattern = uppercase); + $ZodCheckStringFormat.init(inst, def); +}); +var $ZodCheckIncludes = /* @__PURE__ */ $constructor("$ZodCheckIncludes", (inst, def) => { + $ZodCheck.init(inst, def); + const escapedRegex = escapeRegex(def.includes); + const pattern = new RegExp(typeof def.position === "number" ? `^.{${def.position}}${escapedRegex}` : escapedRegex); + def.pattern = pattern; + inst._zod.onattach.push((inst2) => { + const bag = inst2._zod.bag; + bag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set()); + bag.patterns.add(pattern); + }); + inst._zod.check = (payload) => { + if (payload.value.includes(def.includes, def.position)) + return; + payload.issues.push({ + origin: "string", + code: "invalid_format", + format: "includes", + includes: def.includes, + input: payload.value, + inst, + continue: !def.abort + }); + }; +}); +var $ZodCheckStartsWith = /* @__PURE__ */ $constructor("$ZodCheckStartsWith", (inst, def) => { + $ZodCheck.init(inst, def); + const pattern = new RegExp(`^${escapeRegex(def.prefix)}.*`); + def.pattern ?? (def.pattern = pattern); + inst._zod.onattach.push((inst2) => { + const bag = inst2._zod.bag; + bag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set()); + bag.patterns.add(pattern); + }); + inst._zod.check = (payload) => { + if (payload.value.startsWith(def.prefix)) + return; + payload.issues.push({ + origin: "string", + code: "invalid_format", + format: "starts_with", + prefix: def.prefix, + input: payload.value, + inst, + continue: !def.abort + }); + }; +}); +var $ZodCheckEndsWith = /* @__PURE__ */ $constructor("$ZodCheckEndsWith", (inst, def) => { + $ZodCheck.init(inst, def); + const pattern = new RegExp(`.*${escapeRegex(def.suffix)}$`); + def.pattern ?? (def.pattern = pattern); + inst._zod.onattach.push((inst2) => { + const bag = inst2._zod.bag; + bag.patterns ?? (bag.patterns = /* @__PURE__ */ new Set()); + bag.patterns.add(pattern); + }); + inst._zod.check = (payload) => { + if (payload.value.endsWith(def.suffix)) + return; + payload.issues.push({ + origin: "string", + code: "invalid_format", + format: "ends_with", + suffix: def.suffix, + input: payload.value, + inst, + continue: !def.abort + }); + }; +}); +function handleCheckPropertyResult(result, payload, property) { + if (result.issues.length) { + payload.issues.push(...prefixIssues(property, result.issues)); + } +} +var $ZodCheckProperty = /* @__PURE__ */ $constructor("$ZodCheckProperty", (inst, def) => { + $ZodCheck.init(inst, def); + inst._zod.check = (payload) => { + const result = def.schema._zod.run({ + value: payload.value[def.property], + issues: [] + }, {}); + if (result instanceof Promise) { + return result.then((result2) => handleCheckPropertyResult(result2, payload, def.property)); + } + handleCheckPropertyResult(result, payload, def.property); + return; + }; +}); +var $ZodCheckMimeType = /* @__PURE__ */ $constructor("$ZodCheckMimeType", (inst, def) => { + $ZodCheck.init(inst, def); + const mimeSet = new Set(def.mime); + inst._zod.onattach.push((inst2) => { + inst2._zod.bag.mime = def.mime; + }); + inst._zod.check = (payload) => { + if (mimeSet.has(payload.value.type)) + return; + payload.issues.push({ + code: "invalid_value", + values: def.mime, + input: payload.value.type, + inst, + continue: !def.abort + }); + }; +}); +var $ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (inst, def) => { + $ZodCheck.init(inst, def); + inst._zod.check = (payload) => { + payload.value = def.tx(payload.value); + }; +}); + +// ../../node_modules/zod/v4/core/doc.js +var Doc = class { + constructor(args = []) { + this.content = []; + this.indent = 0; + if (this) + this.args = args; + } + indented(fn) { + this.indent += 1; + fn(this); + this.indent -= 1; + } + write(arg) { + if (typeof arg === "function") { + arg(this, { execution: "sync" }); + arg(this, { execution: "async" }); + return; + } + const content = arg; + const lines = content.split("\n").filter((x) => x); + const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length)); + const dedented = lines.map((x) => x.slice(minIndent)).map((x) => " ".repeat(this.indent * 2) + x); + for (const line of dedented) { + this.content.push(line); + } + } + compile() { + const F = Function; + const args = this?.args; + const content = this?.content ?? [``]; + const lines = [...content.map((x) => ` ${x}`)]; + return new F(...args, lines.join("\n")); + } +}; + +// ../../node_modules/zod/v4/core/versions.js +var version = { + major: 4, + minor: 4, + patch: 3 +}; + +// ../../node_modules/zod/v4/core/schemas.js +var $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => { + var _a3; + inst ?? (inst = {}); + inst._zod.def = def; + inst._zod.bag = inst._zod.bag || {}; + inst._zod.version = version; + const checks = [...inst._zod.def.checks ?? []]; + if (inst._zod.traits.has("$ZodCheck")) { + checks.unshift(inst); + } + for (const ch of checks) { + for (const fn of ch._zod.onattach) { + fn(inst); + } + } + if (checks.length === 0) { + (_a3 = inst._zod).deferred ?? (_a3.deferred = []); + inst._zod.deferred?.push(() => { + inst._zod.run = inst._zod.parse; + }); + } else { + const runChecks = (payload, checks2, ctx) => { + let isAborted = aborted(payload); + let asyncResult; + for (const ch of checks2) { + if (ch._zod.def.when) { + if (explicitlyAborted(payload)) + continue; + const shouldRun = ch._zod.def.when(payload); + if (!shouldRun) + continue; + } else if (isAborted) { + continue; + } + const currLen = payload.issues.length; + const _ = ch._zod.check(payload); + if (_ instanceof Promise && ctx?.async === false) { + throw new $ZodAsyncError(); + } + if (asyncResult || _ instanceof Promise) { + asyncResult = (asyncResult ?? Promise.resolve()).then(async () => { + await _; + const nextLen = payload.issues.length; + if (nextLen === currLen) + return; + if (!isAborted) + isAborted = aborted(payload, currLen); + }); + } else { + const nextLen = payload.issues.length; + if (nextLen === currLen) + continue; + if (!isAborted) + isAborted = aborted(payload, currLen); + } + } + if (asyncResult) { + return asyncResult.then(() => { + return payload; + }); + } + return payload; + }; + const handleCanaryResult = (canary, payload, ctx) => { + if (aborted(canary)) { + canary.aborted = true; + return canary; + } + const checkResult = runChecks(payload, checks, ctx); + if (checkResult instanceof Promise) { + if (ctx.async === false) + throw new $ZodAsyncError(); + return checkResult.then((checkResult2) => inst._zod.parse(checkResult2, ctx)); + } + return inst._zod.parse(checkResult, ctx); + }; + inst._zod.run = (payload, ctx) => { + if (ctx.skipChecks) { + return inst._zod.parse(payload, ctx); + } + if (ctx.direction === "backward") { + const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true }); + if (canary instanceof Promise) { + return canary.then((canary2) => { + return handleCanaryResult(canary2, payload, ctx); + }); + } + return handleCanaryResult(canary, payload, ctx); + } + const result = inst._zod.parse(payload, ctx); + if (result instanceof Promise) { + if (ctx.async === false) + throw new $ZodAsyncError(); + return result.then((result2) => runChecks(result2, checks, ctx)); + } + return runChecks(result, checks, ctx); + }; + } + defineLazy(inst, "~standard", () => ({ + validate: (value) => { + try { + const r = safeParse(inst, value); + return r.success ? { value: r.data } : { issues: r.error?.issues }; + } catch (_) { + return safeParseAsync(inst, value).then((r) => r.success ? { value: r.data } : { issues: r.error?.issues }); + } + }, + vendor: "zod", + version: 1 + })); +}); +var $ZodString = /* @__PURE__ */ $constructor("$ZodString", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.pattern = [...inst?._zod.bag?.patterns ?? []].pop() ?? string(inst._zod.bag); + inst._zod.parse = (payload, _) => { + if (def.coerce) + try { + payload.value = String(payload.value); + } catch (_2) { + } + if (typeof payload.value === "string") + return payload; + payload.issues.push({ + expected: "string", + code: "invalid_type", + input: payload.value, + inst + }); + return payload; + }; +}); +var $ZodStringFormat = /* @__PURE__ */ $constructor("$ZodStringFormat", (inst, def) => { + $ZodCheckStringFormat.init(inst, def); + $ZodString.init(inst, def); +}); +var $ZodGUID = /* @__PURE__ */ $constructor("$ZodGUID", (inst, def) => { + def.pattern ?? (def.pattern = guid); + $ZodStringFormat.init(inst, def); +}); +var $ZodUUID = /* @__PURE__ */ $constructor("$ZodUUID", (inst, def) => { + if (def.version) { + const versionMap = { + v1: 1, + v2: 2, + v3: 3, + v4: 4, + v5: 5, + v6: 6, + v7: 7, + v8: 8 + }; + const v = versionMap[def.version]; + if (v === void 0) + throw new Error(`Invalid UUID version: "${def.version}"`); + def.pattern ?? (def.pattern = uuid(v)); + } else + def.pattern ?? (def.pattern = uuid()); + $ZodStringFormat.init(inst, def); +}); +var $ZodEmail = /* @__PURE__ */ $constructor("$ZodEmail", (inst, def) => { + def.pattern ?? (def.pattern = email); + $ZodStringFormat.init(inst, def); +}); +var $ZodURL = /* @__PURE__ */ $constructor("$ZodURL", (inst, def) => { + $ZodStringFormat.init(inst, def); + inst._zod.check = (payload) => { + try { + const trimmed = payload.value.trim(); + if (!def.normalize && def.protocol?.source === httpProtocol.source) { + if (!/^https?:\/\//i.test(trimmed)) { + payload.issues.push({ + code: "invalid_format", + format: "url", + note: "Invalid URL format", + input: payload.value, + inst, + continue: !def.abort + }); + return; + } + } + const url2 = new URL(trimmed); + if (def.hostname) { + def.hostname.lastIndex = 0; + if (!def.hostname.test(url2.hostname)) { + payload.issues.push({ + code: "invalid_format", + format: "url", + note: "Invalid hostname", + pattern: def.hostname.source, + input: payload.value, + inst, + continue: !def.abort + }); + } + } + if (def.protocol) { + def.protocol.lastIndex = 0; + if (!def.protocol.test(url2.protocol.endsWith(":") ? url2.protocol.slice(0, -1) : url2.protocol)) { + payload.issues.push({ + code: "invalid_format", + format: "url", + note: "Invalid protocol", + pattern: def.protocol.source, + input: payload.value, + inst, + continue: !def.abort + }); + } + } + if (def.normalize) { + payload.value = url2.href; + } else { + payload.value = trimmed; + } + return; + } catch (_) { + payload.issues.push({ + code: "invalid_format", + format: "url", + input: payload.value, + inst, + continue: !def.abort + }); + } + }; +}); +var $ZodEmoji = /* @__PURE__ */ $constructor("$ZodEmoji", (inst, def) => { + def.pattern ?? (def.pattern = emoji()); + $ZodStringFormat.init(inst, def); +}); +var $ZodNanoID = /* @__PURE__ */ $constructor("$ZodNanoID", (inst, def) => { + def.pattern ?? (def.pattern = nanoid); + $ZodStringFormat.init(inst, def); +}); +var $ZodCUID = /* @__PURE__ */ $constructor("$ZodCUID", (inst, def) => { + def.pattern ?? (def.pattern = cuid); + $ZodStringFormat.init(inst, def); +}); +var $ZodCUID2 = /* @__PURE__ */ $constructor("$ZodCUID2", (inst, def) => { + def.pattern ?? (def.pattern = cuid2); + $ZodStringFormat.init(inst, def); +}); +var $ZodULID = /* @__PURE__ */ $constructor("$ZodULID", (inst, def) => { + def.pattern ?? (def.pattern = ulid); + $ZodStringFormat.init(inst, def); +}); +var $ZodXID = /* @__PURE__ */ $constructor("$ZodXID", (inst, def) => { + def.pattern ?? (def.pattern = xid); + $ZodStringFormat.init(inst, def); +}); +var $ZodKSUID = /* @__PURE__ */ $constructor("$ZodKSUID", (inst, def) => { + def.pattern ?? (def.pattern = ksuid); + $ZodStringFormat.init(inst, def); +}); +var $ZodISODateTime = /* @__PURE__ */ $constructor("$ZodISODateTime", (inst, def) => { + def.pattern ?? (def.pattern = datetime(def)); + $ZodStringFormat.init(inst, def); +}); +var $ZodISODate = /* @__PURE__ */ $constructor("$ZodISODate", (inst, def) => { + def.pattern ?? (def.pattern = date); + $ZodStringFormat.init(inst, def); +}); +var $ZodISOTime = /* @__PURE__ */ $constructor("$ZodISOTime", (inst, def) => { + def.pattern ?? (def.pattern = time(def)); + $ZodStringFormat.init(inst, def); +}); +var $ZodISODuration = /* @__PURE__ */ $constructor("$ZodISODuration", (inst, def) => { + def.pattern ?? (def.pattern = duration); + $ZodStringFormat.init(inst, def); +}); +var $ZodIPv4 = /* @__PURE__ */ $constructor("$ZodIPv4", (inst, def) => { + def.pattern ?? (def.pattern = ipv4); + $ZodStringFormat.init(inst, def); + inst._zod.bag.format = `ipv4`; +}); +var $ZodIPv6 = /* @__PURE__ */ $constructor("$ZodIPv6", (inst, def) => { + def.pattern ?? (def.pattern = ipv6); + $ZodStringFormat.init(inst, def); + inst._zod.bag.format = `ipv6`; + inst._zod.check = (payload) => { + try { + new URL(`http://[${payload.value}]`); + } catch { + payload.issues.push({ + code: "invalid_format", + format: "ipv6", + input: payload.value, + inst, + continue: !def.abort + }); + } + }; +}); +var $ZodMAC = /* @__PURE__ */ $constructor("$ZodMAC", (inst, def) => { + def.pattern ?? (def.pattern = mac(def.delimiter)); + $ZodStringFormat.init(inst, def); + inst._zod.bag.format = `mac`; +}); +var $ZodCIDRv4 = /* @__PURE__ */ $constructor("$ZodCIDRv4", (inst, def) => { + def.pattern ?? (def.pattern = cidrv4); + $ZodStringFormat.init(inst, def); +}); +var $ZodCIDRv6 = /* @__PURE__ */ $constructor("$ZodCIDRv6", (inst, def) => { + def.pattern ?? (def.pattern = cidrv6); + $ZodStringFormat.init(inst, def); + inst._zod.check = (payload) => { + const parts = payload.value.split("/"); + try { + if (parts.length !== 2) + throw new Error(); + const [address, prefix] = parts; + if (!prefix) + throw new Error(); + const prefixNum = Number(prefix); + if (`${prefixNum}` !== prefix) + throw new Error(); + if (prefixNum < 0 || prefixNum > 128) + throw new Error(); + new URL(`http://[${address}]`); + } catch { + payload.issues.push({ + code: "invalid_format", + format: "cidrv6", + input: payload.value, + inst, + continue: !def.abort + }); + } + }; +}); +function isValidBase64(data) { + if (data === "") + return true; + if (/\s/.test(data)) + return false; + if (data.length % 4 !== 0) + return false; + try { + atob(data); + return true; + } catch { + return false; + } +} +var $ZodBase64 = /* @__PURE__ */ $constructor("$ZodBase64", (inst, def) => { + def.pattern ?? (def.pattern = base64); + $ZodStringFormat.init(inst, def); + inst._zod.bag.contentEncoding = "base64"; + inst._zod.check = (payload) => { + if (isValidBase64(payload.value)) + return; + payload.issues.push({ + code: "invalid_format", + format: "base64", + input: payload.value, + inst, + continue: !def.abort + }); + }; +}); +function isValidBase64URL(data) { + if (!base64url.test(data)) + return false; + const base643 = data.replace(/[-_]/g, (c) => c === "-" ? "+" : "/"); + const padded = base643.padEnd(Math.ceil(base643.length / 4) * 4, "="); + return isValidBase64(padded); +} +var $ZodBase64URL = /* @__PURE__ */ $constructor("$ZodBase64URL", (inst, def) => { + def.pattern ?? (def.pattern = base64url); + $ZodStringFormat.init(inst, def); + inst._zod.bag.contentEncoding = "base64url"; + inst._zod.check = (payload) => { + if (isValidBase64URL(payload.value)) + return; + payload.issues.push({ + code: "invalid_format", + format: "base64url", + input: payload.value, + inst, + continue: !def.abort + }); + }; +}); +var $ZodE164 = /* @__PURE__ */ $constructor("$ZodE164", (inst, def) => { + def.pattern ?? (def.pattern = e164); + $ZodStringFormat.init(inst, def); +}); +function isValidJWT(token, algorithm = null) { + try { + const tokensParts = token.split("."); + if (tokensParts.length !== 3) + return false; + const [header] = tokensParts; + if (!header) + return false; + const parsedHeader = JSON.parse(atob(header)); + if ("typ" in parsedHeader && parsedHeader?.typ !== "JWT") + return false; + if (!parsedHeader.alg) + return false; + if (algorithm && (!("alg" in parsedHeader) || parsedHeader.alg !== algorithm)) + return false; + return true; + } catch { + return false; + } +} +var $ZodJWT = /* @__PURE__ */ $constructor("$ZodJWT", (inst, def) => { + $ZodStringFormat.init(inst, def); + inst._zod.check = (payload) => { + if (isValidJWT(payload.value, def.alg)) + return; + payload.issues.push({ + code: "invalid_format", + format: "jwt", + input: payload.value, + inst, + continue: !def.abort + }); + }; +}); +var $ZodCustomStringFormat = /* @__PURE__ */ $constructor("$ZodCustomStringFormat", (inst, def) => { + $ZodStringFormat.init(inst, def); + inst._zod.check = (payload) => { + if (def.fn(payload.value)) + return; + payload.issues.push({ + code: "invalid_format", + format: def.format, + input: payload.value, + inst, + continue: !def.abort + }); + }; +}); +var $ZodNumber = /* @__PURE__ */ $constructor("$ZodNumber", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.pattern = inst._zod.bag.pattern ?? number; + inst._zod.parse = (payload, _ctx) => { + if (def.coerce) + try { + payload.value = Number(payload.value); + } catch (_) { + } + const input = payload.value; + if (typeof input === "number" && !Number.isNaN(input) && Number.isFinite(input)) { + return payload; + } + const received = typeof input === "number" ? Number.isNaN(input) ? "NaN" : !Number.isFinite(input) ? "Infinity" : void 0 : void 0; + payload.issues.push({ + expected: "number", + code: "invalid_type", + input, + inst, + ...received ? { received } : {} + }); + return payload; + }; +}); +var $ZodNumberFormat = /* @__PURE__ */ $constructor("$ZodNumberFormat", (inst, def) => { + $ZodCheckNumberFormat.init(inst, def); + $ZodNumber.init(inst, def); +}); +var $ZodBoolean = /* @__PURE__ */ $constructor("$ZodBoolean", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.pattern = boolean; + inst._zod.parse = (payload, _ctx) => { + if (def.coerce) + try { + payload.value = Boolean(payload.value); + } catch (_) { + } + const input = payload.value; + if (typeof input === "boolean") + return payload; + payload.issues.push({ + expected: "boolean", + code: "invalid_type", + input, + inst + }); + return payload; + }; +}); +var $ZodBigInt = /* @__PURE__ */ $constructor("$ZodBigInt", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.pattern = bigint; + inst._zod.parse = (payload, _ctx) => { + if (def.coerce) + try { + payload.value = BigInt(payload.value); + } catch (_) { + } + if (typeof payload.value === "bigint") + return payload; + payload.issues.push({ + expected: "bigint", + code: "invalid_type", + input: payload.value, + inst + }); + return payload; + }; +}); +var $ZodBigIntFormat = /* @__PURE__ */ $constructor("$ZodBigIntFormat", (inst, def) => { + $ZodCheckBigIntFormat.init(inst, def); + $ZodBigInt.init(inst, def); +}); +var $ZodSymbol = /* @__PURE__ */ $constructor("$ZodSymbol", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, _ctx) => { + const input = payload.value; + if (typeof input === "symbol") + return payload; + payload.issues.push({ + expected: "symbol", + code: "invalid_type", + input, + inst + }); + return payload; + }; +}); +var $ZodUndefined = /* @__PURE__ */ $constructor("$ZodUndefined", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.pattern = _undefined; + inst._zod.values = /* @__PURE__ */ new Set([void 0]); + inst._zod.parse = (payload, _ctx) => { + const input = payload.value; + if (typeof input === "undefined") + return payload; + payload.issues.push({ + expected: "undefined", + code: "invalid_type", + input, + inst + }); + return payload; + }; +}); +var $ZodNull = /* @__PURE__ */ $constructor("$ZodNull", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.pattern = _null; + inst._zod.values = /* @__PURE__ */ new Set([null]); + inst._zod.parse = (payload, _ctx) => { + const input = payload.value; + if (input === null) + return payload; + payload.issues.push({ + expected: "null", + code: "invalid_type", + input, + inst + }); + return payload; + }; +}); +var $ZodAny = /* @__PURE__ */ $constructor("$ZodAny", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload) => payload; +}); +var $ZodUnknown = /* @__PURE__ */ $constructor("$ZodUnknown", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload) => payload; +}); +var $ZodNever = /* @__PURE__ */ $constructor("$ZodNever", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, _ctx) => { + payload.issues.push({ + expected: "never", + code: "invalid_type", + input: payload.value, + inst + }); + return payload; + }; +}); +var $ZodVoid = /* @__PURE__ */ $constructor("$ZodVoid", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, _ctx) => { + const input = payload.value; + if (typeof input === "undefined") + return payload; + payload.issues.push({ + expected: "void", + code: "invalid_type", + input, + inst + }); + return payload; + }; +}); +var $ZodDate = /* @__PURE__ */ $constructor("$ZodDate", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, _ctx) => { + if (def.coerce) { + try { + payload.value = new Date(payload.value); + } catch (_err) { + } + } + const input = payload.value; + const isDate = input instanceof Date; + const isValidDate = isDate && !Number.isNaN(input.getTime()); + if (isValidDate) + return payload; + payload.issues.push({ + expected: "date", + code: "invalid_type", + input, + ...isDate ? { received: "Invalid Date" } : {}, + inst + }); + return payload; + }; +}); +function handleArrayResult(result, final, index) { + if (result.issues.length) { + final.issues.push(...prefixIssues(index, result.issues)); + } + final.value[index] = result.value; +} +var $ZodArray = /* @__PURE__ */ $constructor("$ZodArray", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + const input = payload.value; + if (!Array.isArray(input)) { + payload.issues.push({ + expected: "array", + code: "invalid_type", + input, + inst + }); + return payload; + } + payload.value = Array(input.length); + const proms = []; + for (let i = 0; i < input.length; i++) { + const item = input[i]; + const result = def.element._zod.run({ + value: item, + issues: [] + }, ctx); + if (result instanceof Promise) { + proms.push(result.then((result2) => handleArrayResult(result2, payload, i))); + } else { + handleArrayResult(result, payload, i); + } + } + if (proms.length) { + return Promise.all(proms).then(() => payload); + } + return payload; + }; +}); +function handlePropertyResult(result, final, key, input, isOptionalIn, isOptionalOut) { + const isPresent = key in input; + if (result.issues.length) { + if (isOptionalIn && isOptionalOut && !isPresent) { + return; + } + final.issues.push(...prefixIssues(key, result.issues)); + } + if (!isPresent && !isOptionalIn) { + if (!result.issues.length) { + final.issues.push({ + code: "invalid_type", + expected: "nonoptional", + input: void 0, + path: [key] + }); + } + return; + } + if (result.value === void 0) { + if (isPresent) { + final.value[key] = void 0; + } + } else { + final.value[key] = result.value; + } +} +function normalizeDef(def) { + const keys = Object.keys(def.shape); + for (const k of keys) { + if (!def.shape?.[k]?._zod?.traits?.has("$ZodType")) { + throw new Error(`Invalid element at key "${k}": expected a Zod schema`); + } + } + const okeys = optionalKeys(def.shape); + return { + ...def, + keys, + keySet: new Set(keys), + numKeys: keys.length, + optionalKeys: new Set(okeys) + }; +} +function handleCatchall(proms, input, payload, ctx, def, inst) { + const unrecognized = []; + const keySet = def.keySet; + const _catchall = def.catchall._zod; + const t = _catchall.def.type; + const isOptionalIn = _catchall.optin === "optional"; + const isOptionalOut = _catchall.optout === "optional"; + for (const key in input) { + if (key === "__proto__") + continue; + if (keySet.has(key)) + continue; + if (t === "never") { + unrecognized.push(key); + continue; + } + const r = _catchall.run({ value: input[key], issues: [] }, ctx); + if (r instanceof Promise) { + proms.push(r.then((r2) => handlePropertyResult(r2, payload, key, input, isOptionalIn, isOptionalOut))); + } else { + handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut); + } + } + if (unrecognized.length) { + payload.issues.push({ + code: "unrecognized_keys", + keys: unrecognized, + input, + inst + }); + } + if (!proms.length) + return payload; + return Promise.all(proms).then(() => { + return payload; + }); +} +var $ZodObject = /* @__PURE__ */ $constructor("$ZodObject", (inst, def) => { + $ZodType.init(inst, def); + const desc = Object.getOwnPropertyDescriptor(def, "shape"); + if (!desc?.get) { + const sh = def.shape; + Object.defineProperty(def, "shape", { + get: () => { + const newSh = { ...sh }; + Object.defineProperty(def, "shape", { + value: newSh + }); + return newSh; + } + }); + } + const _normalized = cached(() => normalizeDef(def)); + defineLazy(inst._zod, "propValues", () => { + const shape = def.shape; + const propValues = {}; + for (const key in shape) { + const field = shape[key]._zod; + if (field.values) { + propValues[key] ?? (propValues[key] = /* @__PURE__ */ new Set()); + for (const v of field.values) + propValues[key].add(v); + } + } + return propValues; + }); + const isObject2 = isObject; + const catchall = def.catchall; + let value; + inst._zod.parse = (payload, ctx) => { + value ?? (value = _normalized.value); + const input = payload.value; + if (!isObject2(input)) { + payload.issues.push({ + expected: "object", + code: "invalid_type", + input, + inst + }); + return payload; + } + payload.value = {}; + const proms = []; + const shape = value.shape; + for (const key of value.keys) { + const el = shape[key]; + const isOptionalIn = el._zod.optin === "optional"; + const isOptionalOut = el._zod.optout === "optional"; + const r = el._zod.run({ value: input[key], issues: [] }, ctx); + if (r instanceof Promise) { + proms.push(r.then((r2) => handlePropertyResult(r2, payload, key, input, isOptionalIn, isOptionalOut))); + } else { + handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut); + } + } + if (!catchall) { + return proms.length ? Promise.all(proms).then(() => payload) : payload; + } + return handleCatchall(proms, input, payload, ctx, _normalized.value, inst); + }; +}); +var $ZodObjectJIT = /* @__PURE__ */ $constructor("$ZodObjectJIT", (inst, def) => { + $ZodObject.init(inst, def); + const superParse = inst._zod.parse; + const _normalized = cached(() => normalizeDef(def)); + const generateFastpass = (shape) => { + const doc = new Doc(["shape", "payload", "ctx"]); + const normalized = _normalized.value; + const parseStr = (key) => { + const k = esc(key); + return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`; + }; + doc.write(`const input = payload.value;`); + const ids = /* @__PURE__ */ Object.create(null); + let counter = 0; + for (const key of normalized.keys) { + ids[key] = `key_${counter++}`; + } + doc.write(`const newResult = {};`); + for (const key of normalized.keys) { + const id = ids[key]; + const k = esc(key); + const schema = shape[key]; + const isOptionalIn = schema?._zod?.optin === "optional"; + const isOptionalOut = schema?._zod?.optout === "optional"; + doc.write(`const ${id} = ${parseStr(key)};`); + if (isOptionalIn && isOptionalOut) { + doc.write(` + if (${id}.issues.length) { + if (${k} in input) { + payload.issues = payload.issues.concat(${id}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${k}, ...iss.path] : [${k}] + }))); + } + } + + if (${id}.value === undefined) { + if (${k} in input) { + newResult[${k}] = undefined; + } + } else { + newResult[${k}] = ${id}.value; + } + + `); + } else if (!isOptionalIn) { + doc.write(` + const ${id}_present = ${k} in input; + if (${id}.issues.length) { + payload.issues = payload.issues.concat(${id}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${k}, ...iss.path] : [${k}] + }))); + } + if (!${id}_present && !${id}.issues.length) { + payload.issues.push({ + code: "invalid_type", + expected: "nonoptional", + input: undefined, + path: [${k}] + }); + } + + if (${id}_present) { + if (${id}.value === undefined) { + newResult[${k}] = undefined; + } else { + newResult[${k}] = ${id}.value; + } + } + + `); + } else { + doc.write(` + if (${id}.issues.length) { + payload.issues = payload.issues.concat(${id}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${k}, ...iss.path] : [${k}] + }))); + } + + if (${id}.value === undefined) { + if (${k} in input) { + newResult[${k}] = undefined; + } + } else { + newResult[${k}] = ${id}.value; + } + + `); + } + } + doc.write(`payload.value = newResult;`); + doc.write(`return payload;`); + const fn = doc.compile(); + return (payload, ctx) => fn(shape, payload, ctx); + }; + let fastpass; + const isObject2 = isObject; + const jit = !globalConfig.jitless; + const allowsEval2 = allowsEval; + const fastEnabled = jit && allowsEval2.value; + const catchall = def.catchall; + let value; + inst._zod.parse = (payload, ctx) => { + value ?? (value = _normalized.value); + const input = payload.value; + if (!isObject2(input)) { + payload.issues.push({ + expected: "object", + code: "invalid_type", + input, + inst + }); + return payload; + } + if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) { + if (!fastpass) + fastpass = generateFastpass(def.shape); + payload = fastpass(payload, ctx); + if (!catchall) + return payload; + return handleCatchall([], input, payload, ctx, value, inst); + } + return superParse(payload, ctx); + }; +}); +function handleUnionResults(results, final, inst, ctx) { + for (const result of results) { + if (result.issues.length === 0) { + final.value = result.value; + return final; + } + } + const nonaborted = results.filter((r) => !aborted(r)); + if (nonaborted.length === 1) { + final.value = nonaborted[0].value; + return nonaborted[0]; + } + final.issues.push({ + code: "invalid_union", + input: final.value, + inst, + errors: results.map((result) => result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) + }); + return final; +} +var $ZodUnion = /* @__PURE__ */ $constructor("$ZodUnion", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "optin", () => def.options.some((o) => o._zod.optin === "optional") ? "optional" : void 0); + defineLazy(inst._zod, "optout", () => def.options.some((o) => o._zod.optout === "optional") ? "optional" : void 0); + defineLazy(inst._zod, "values", () => { + if (def.options.every((o) => o._zod.values)) { + return new Set(def.options.flatMap((option) => Array.from(option._zod.values))); + } + return void 0; + }); + defineLazy(inst._zod, "pattern", () => { + if (def.options.every((o) => o._zod.pattern)) { + const patterns = def.options.map((o) => o._zod.pattern); + return new RegExp(`^(${patterns.map((p) => cleanRegex(p.source)).join("|")})$`); + } + return void 0; + }); + const first = def.options.length === 1 ? def.options[0]._zod.run : null; + inst._zod.parse = (payload, ctx) => { + if (first) { + return first(payload, ctx); + } + let async = false; + const results = []; + for (const option of def.options) { + const result = option._zod.run({ + value: payload.value, + issues: [] + }, ctx); + if (result instanceof Promise) { + results.push(result); + async = true; + } else { + if (result.issues.length === 0) + return result; + results.push(result); + } + } + if (!async) + return handleUnionResults(results, payload, inst, ctx); + return Promise.all(results).then((results2) => { + return handleUnionResults(results2, payload, inst, ctx); + }); + }; +}); +function handleExclusiveUnionResults(results, final, inst, ctx) { + const successes = results.filter((r) => r.issues.length === 0); + if (successes.length === 1) { + final.value = successes[0].value; + return final; + } + if (successes.length === 0) { + final.issues.push({ + code: "invalid_union", + input: final.value, + inst, + errors: results.map((result) => result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) + }); + } else { + final.issues.push({ + code: "invalid_union", + input: final.value, + inst, + errors: [], + inclusive: false + }); + } + return final; +} +var $ZodXor = /* @__PURE__ */ $constructor("$ZodXor", (inst, def) => { + $ZodUnion.init(inst, def); + def.inclusive = false; + const first = def.options.length === 1 ? def.options[0]._zod.run : null; + inst._zod.parse = (payload, ctx) => { + if (first) { + return first(payload, ctx); + } + let async = false; + const results = []; + for (const option of def.options) { + const result = option._zod.run({ + value: payload.value, + issues: [] + }, ctx); + if (result instanceof Promise) { + results.push(result); + async = true; + } else { + results.push(result); + } + } + if (!async) + return handleExclusiveUnionResults(results, payload, inst, ctx); + return Promise.all(results).then((results2) => { + return handleExclusiveUnionResults(results2, payload, inst, ctx); + }); + }; +}); +var $ZodDiscriminatedUnion = /* @__PURE__ */ $constructor("$ZodDiscriminatedUnion", (inst, def) => { + def.inclusive = false; + $ZodUnion.init(inst, def); + const _super = inst._zod.parse; + defineLazy(inst._zod, "propValues", () => { + const propValues = {}; + for (const option of def.options) { + const pv = option._zod.propValues; + if (!pv || Object.keys(pv).length === 0) + throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(option)}"`); + for (const [k, v] of Object.entries(pv)) { + if (!propValues[k]) + propValues[k] = /* @__PURE__ */ new Set(); + for (const val of v) { + propValues[k].add(val); + } + } + } + return propValues; + }); + const disc = cached(() => { + const opts = def.options; + const map2 = /* @__PURE__ */ new Map(); + for (const o of opts) { + const values = o._zod.propValues?.[def.discriminator]; + if (!values || values.size === 0) + throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(o)}"`); + for (const v of values) { + if (map2.has(v)) { + throw new Error(`Duplicate discriminator value "${String(v)}"`); + } + map2.set(v, o); + } + } + return map2; + }); + inst._zod.parse = (payload, ctx) => { + const input = payload.value; + if (!isObject(input)) { + payload.issues.push({ + code: "invalid_type", + expected: "object", + input, + inst + }); + return payload; + } + const opt = disc.value.get(input?.[def.discriminator]); + if (opt) { + return opt._zod.run(payload, ctx); + } + if (def.unionFallback || ctx.direction === "backward") { + return _super(payload, ctx); + } + payload.issues.push({ + code: "invalid_union", + errors: [], + note: "No matching discriminator", + discriminator: def.discriminator, + options: Array.from(disc.value.keys()), + input, + path: [def.discriminator], + inst + }); + return payload; + }; +}); +var $ZodIntersection = /* @__PURE__ */ $constructor("$ZodIntersection", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + const input = payload.value; + const left = def.left._zod.run({ value: input, issues: [] }, ctx); + const right = def.right._zod.run({ value: input, issues: [] }, ctx); + const async = left instanceof Promise || right instanceof Promise; + if (async) { + return Promise.all([left, right]).then(([left2, right2]) => { + return handleIntersectionResults(payload, left2, right2); + }); + } + return handleIntersectionResults(payload, left, right); + }; +}); +function mergeValues(a, b) { + if (a === b) { + return { valid: true, data: a }; + } + if (a instanceof Date && b instanceof Date && +a === +b) { + return { valid: true, data: a }; + } + if (isPlainObject(a) && isPlainObject(b)) { + const bKeys = Object.keys(b); + const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1); + const newObj = { ...a, ...b }; + for (const key of sharedKeys) { + const sharedValue = mergeValues(a[key], b[key]); + if (!sharedValue.valid) { + return { + valid: false, + mergeErrorPath: [key, ...sharedValue.mergeErrorPath] + }; + } + newObj[key] = sharedValue.data; + } + return { valid: true, data: newObj }; + } + if (Array.isArray(a) && Array.isArray(b)) { + if (a.length !== b.length) { + return { valid: false, mergeErrorPath: [] }; + } + const newArray = []; + for (let index = 0; index < a.length; index++) { + const itemA = a[index]; + const itemB = b[index]; + const sharedValue = mergeValues(itemA, itemB); + if (!sharedValue.valid) { + return { + valid: false, + mergeErrorPath: [index, ...sharedValue.mergeErrorPath] + }; + } + newArray.push(sharedValue.data); + } + return { valid: true, data: newArray }; + } + return { valid: false, mergeErrorPath: [] }; +} +function handleIntersectionResults(result, left, right) { + const unrecKeys = /* @__PURE__ */ new Map(); + let unrecIssue; + for (const iss of left.issues) { + if (iss.code === "unrecognized_keys") { + unrecIssue ?? (unrecIssue = iss); + for (const k of iss.keys) { + if (!unrecKeys.has(k)) + unrecKeys.set(k, {}); + unrecKeys.get(k).l = true; + } + } else { + result.issues.push(iss); + } + } + for (const iss of right.issues) { + if (iss.code === "unrecognized_keys") { + for (const k of iss.keys) { + if (!unrecKeys.has(k)) + unrecKeys.set(k, {}); + unrecKeys.get(k).r = true; + } + } else { + result.issues.push(iss); + } + } + const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k); + if (bothKeys.length && unrecIssue) { + result.issues.push({ ...unrecIssue, keys: bothKeys }); + } + if (aborted(result)) + return result; + const merged = mergeValues(left.value, right.value); + if (!merged.valid) { + throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(merged.mergeErrorPath)}`); + } + result.value = merged.data; + return result; +} +var $ZodTuple = /* @__PURE__ */ $constructor("$ZodTuple", (inst, def) => { + $ZodType.init(inst, def); + const items = def.items; + inst._zod.parse = (payload, ctx) => { + const input = payload.value; + if (!Array.isArray(input)) { + payload.issues.push({ + input, + inst, + expected: "tuple", + code: "invalid_type" + }); + return payload; + } + payload.value = []; + const proms = []; + const optinStart = getTupleOptStart(items, "optin"); + const optoutStart = getTupleOptStart(items, "optout"); + if (!def.rest) { + if (input.length < optinStart) { + payload.issues.push({ + code: "too_small", + minimum: optinStart, + inclusive: true, + input, + inst, + origin: "array" + }); + return payload; + } + if (input.length > items.length) { + payload.issues.push({ + code: "too_big", + maximum: items.length, + inclusive: true, + input, + inst, + origin: "array" + }); + } + } + const itemResults = new Array(items.length); + for (let i = 0; i < items.length; i++) { + const r = items[i]._zod.run({ value: input[i], issues: [] }, ctx); + if (r instanceof Promise) { + proms.push(r.then((rr) => { + itemResults[i] = rr; + })); + } else { + itemResults[i] = r; + } + } + if (def.rest) { + let i = items.length - 1; + const rest = input.slice(items.length); + for (const el of rest) { + i++; + const result = def.rest._zod.run({ value: el, issues: [] }, ctx); + if (result instanceof Promise) { + proms.push(result.then((r) => handleTupleResult(r, payload, i))); + } else { + handleTupleResult(result, payload, i); + } + } + } + if (proms.length) { + return Promise.all(proms).then(() => handleTupleResults(itemResults, payload, items, input, optoutStart)); + } + return handleTupleResults(itemResults, payload, items, input, optoutStart); + }; +}); +function getTupleOptStart(items, key) { + for (let i = items.length - 1; i >= 0; i--) { + if (items[i]._zod[key] !== "optional") + return i + 1; + } + return 0; +} +function handleTupleResult(result, final, index) { + if (result.issues.length) { + final.issues.push(...prefixIssues(index, result.issues)); + } + final.value[index] = result.value; +} +function handleTupleResults(itemResults, final, items, input, optoutStart) { + for (let i = 0; i < items.length; i++) { + const r = itemResults[i]; + const isPresent = i < input.length; + if (r.issues.length) { + if (!isPresent && i >= optoutStart) { + final.value.length = i; + break; + } + final.issues.push(...prefixIssues(i, r.issues)); + } + final.value[i] = r.value; + } + for (let i = final.value.length - 1; i >= input.length; i--) { + if (items[i]._zod.optout === "optional" && final.value[i] === void 0) { + final.value.length = i; + } else { + break; + } + } + return final; +} +var $ZodRecord = /* @__PURE__ */ $constructor("$ZodRecord", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + const input = payload.value; + if (!isPlainObject(input)) { + payload.issues.push({ + expected: "record", + code: "invalid_type", + input, + inst + }); + return payload; + } + const proms = []; + const values = def.keyType._zod.values; + if (values) { + payload.value = {}; + const recordKeys = /* @__PURE__ */ new Set(); + for (const key of values) { + if (typeof key === "string" || typeof key === "number" || typeof key === "symbol") { + recordKeys.add(typeof key === "number" ? key.toString() : key); + const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx); + if (keyResult instanceof Promise) { + throw new Error("Async schemas not supported in object keys currently"); + } + if (keyResult.issues.length) { + payload.issues.push({ + code: "invalid_key", + origin: "record", + issues: keyResult.issues.map((iss) => finalizeIssue(iss, ctx, config())), + input: key, + path: [key], + inst + }); + continue; + } + const outKey = keyResult.value; + const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx); + if (result instanceof Promise) { + proms.push(result.then((result2) => { + if (result2.issues.length) { + payload.issues.push(...prefixIssues(key, result2.issues)); + } + payload.value[outKey] = result2.value; + })); + } else { + if (result.issues.length) { + payload.issues.push(...prefixIssues(key, result.issues)); + } + payload.value[outKey] = result.value; + } + } + } + let unrecognized; + for (const key in input) { + if (!recordKeys.has(key)) { + unrecognized = unrecognized ?? []; + unrecognized.push(key); + } + } + if (unrecognized && unrecognized.length > 0) { + payload.issues.push({ + code: "unrecognized_keys", + input, + inst, + keys: unrecognized + }); + } + } else { + payload.value = {}; + for (const key of Reflect.ownKeys(input)) { + if (key === "__proto__") + continue; + if (!Object.prototype.propertyIsEnumerable.call(input, key)) + continue; + let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx); + if (keyResult instanceof Promise) { + throw new Error("Async schemas not supported in object keys currently"); + } + const checkNumericKey = typeof key === "string" && number.test(key) && keyResult.issues.length; + if (checkNumericKey) { + const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx); + if (retryResult instanceof Promise) { + throw new Error("Async schemas not supported in object keys currently"); + } + if (retryResult.issues.length === 0) { + keyResult = retryResult; + } + } + if (keyResult.issues.length) { + if (def.mode === "loose") { + payload.value[key] = input[key]; + } else { + payload.issues.push({ + code: "invalid_key", + origin: "record", + issues: keyResult.issues.map((iss) => finalizeIssue(iss, ctx, config())), + input: key, + path: [key], + inst + }); + } + continue; + } + const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx); + if (result instanceof Promise) { + proms.push(result.then((result2) => { + if (result2.issues.length) { + payload.issues.push(...prefixIssues(key, result2.issues)); + } + payload.value[keyResult.value] = result2.value; + })); + } else { + if (result.issues.length) { + payload.issues.push(...prefixIssues(key, result.issues)); + } + payload.value[keyResult.value] = result.value; + } + } + } + if (proms.length) { + return Promise.all(proms).then(() => payload); + } + return payload; + }; +}); +var $ZodMap = /* @__PURE__ */ $constructor("$ZodMap", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + const input = payload.value; + if (!(input instanceof Map)) { + payload.issues.push({ + expected: "map", + code: "invalid_type", + input, + inst + }); + return payload; + } + const proms = []; + payload.value = /* @__PURE__ */ new Map(); + for (const [key, value] of input) { + const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx); + const valueResult = def.valueType._zod.run({ value, issues: [] }, ctx); + if (keyResult instanceof Promise || valueResult instanceof Promise) { + proms.push(Promise.all([keyResult, valueResult]).then(([keyResult2, valueResult2]) => { + handleMapResult(keyResult2, valueResult2, payload, key, input, inst, ctx); + })); + } else { + handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx); + } + } + if (proms.length) + return Promise.all(proms).then(() => payload); + return payload; + }; +}); +function handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) { + if (keyResult.issues.length) { + if (propertyKeyTypes.has(typeof key)) { + final.issues.push(...prefixIssues(key, keyResult.issues)); + } else { + final.issues.push({ + code: "invalid_key", + origin: "map", + input, + inst, + issues: keyResult.issues.map((iss) => finalizeIssue(iss, ctx, config())) + }); + } + } + if (valueResult.issues.length) { + if (propertyKeyTypes.has(typeof key)) { + final.issues.push(...prefixIssues(key, valueResult.issues)); + } else { + final.issues.push({ + origin: "map", + code: "invalid_element", + input, + inst, + key, + issues: valueResult.issues.map((iss) => finalizeIssue(iss, ctx, config())) + }); + } + } + final.value.set(keyResult.value, valueResult.value); +} +var $ZodSet = /* @__PURE__ */ $constructor("$ZodSet", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + const input = payload.value; + if (!(input instanceof Set)) { + payload.issues.push({ + input, + inst, + expected: "set", + code: "invalid_type" + }); + return payload; + } + const proms = []; + payload.value = /* @__PURE__ */ new Set(); + for (const item of input) { + const result = def.valueType._zod.run({ value: item, issues: [] }, ctx); + if (result instanceof Promise) { + proms.push(result.then((result2) => handleSetResult(result2, payload))); + } else + handleSetResult(result, payload); + } + if (proms.length) + return Promise.all(proms).then(() => payload); + return payload; + }; +}); +function handleSetResult(result, final) { + if (result.issues.length) { + final.issues.push(...result.issues); + } + final.value.add(result.value); +} +var $ZodEnum = /* @__PURE__ */ $constructor("$ZodEnum", (inst, def) => { + $ZodType.init(inst, def); + const values = getEnumValues(def.entries); + const valuesSet = new Set(values); + inst._zod.values = valuesSet; + inst._zod.pattern = new RegExp(`^(${values.filter((k) => propertyKeyTypes.has(typeof k)).map((o) => typeof o === "string" ? escapeRegex(o) : o.toString()).join("|")})$`); + inst._zod.parse = (payload, _ctx) => { + const input = payload.value; + if (valuesSet.has(input)) { + return payload; + } + payload.issues.push({ + code: "invalid_value", + values, + input, + inst + }); + return payload; + }; +}); +var $ZodLiteral = /* @__PURE__ */ $constructor("$ZodLiteral", (inst, def) => { + $ZodType.init(inst, def); + if (def.values.length === 0) { + throw new Error("Cannot create literal schema with no valid values"); + } + const values = new Set(def.values); + inst._zod.values = values; + inst._zod.pattern = new RegExp(`^(${def.values.map((o) => typeof o === "string" ? escapeRegex(o) : o ? escapeRegex(o.toString()) : String(o)).join("|")})$`); + inst._zod.parse = (payload, _ctx) => { + const input = payload.value; + if (values.has(input)) { + return payload; + } + payload.issues.push({ + code: "invalid_value", + values: def.values, + input, + inst + }); + return payload; + }; +}); +var $ZodFile = /* @__PURE__ */ $constructor("$ZodFile", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, _ctx) => { + const input = payload.value; + if (input instanceof File) + return payload; + payload.issues.push({ + expected: "file", + code: "invalid_type", + input, + inst + }); + return payload; + }; +}); +var $ZodTransform = /* @__PURE__ */ $constructor("$ZodTransform", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.optin = "optional"; + inst._zod.parse = (payload, ctx) => { + if (ctx.direction === "backward") { + throw new $ZodEncodeError(inst.constructor.name); + } + const _out = def.transform(payload.value, payload); + if (ctx.async) { + const output = _out instanceof Promise ? _out : Promise.resolve(_out); + return output.then((output2) => { + payload.value = output2; + payload.fallback = true; + return payload; + }); + } + if (_out instanceof Promise) { + throw new $ZodAsyncError(); + } + payload.value = _out; + payload.fallback = true; + return payload; + }; +}); +function handleOptionalResult(result, input) { + if (input === void 0 && (result.issues.length || result.fallback)) { + return { issues: [], value: void 0 }; + } + return result; +} +var $ZodOptional = /* @__PURE__ */ $constructor("$ZodOptional", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.optin = "optional"; + inst._zod.optout = "optional"; + defineLazy(inst._zod, "values", () => { + return def.innerType._zod.values ? /* @__PURE__ */ new Set([...def.innerType._zod.values, void 0]) : void 0; + }); + defineLazy(inst._zod, "pattern", () => { + const pattern = def.innerType._zod.pattern; + return pattern ? new RegExp(`^(${cleanRegex(pattern.source)})?$`) : void 0; + }); + inst._zod.parse = (payload, ctx) => { + if (def.innerType._zod.optin === "optional") { + const input = payload.value; + const result = def.innerType._zod.run(payload, ctx); + if (result instanceof Promise) + return result.then((r) => handleOptionalResult(r, input)); + return handleOptionalResult(result, input); + } + if (payload.value === void 0) { + return payload; + } + return def.innerType._zod.run(payload, ctx); + }; +}); +var $ZodExactOptional = /* @__PURE__ */ $constructor("$ZodExactOptional", (inst, def) => { + $ZodOptional.init(inst, def); + defineLazy(inst._zod, "values", () => def.innerType._zod.values); + defineLazy(inst._zod, "pattern", () => def.innerType._zod.pattern); + inst._zod.parse = (payload, ctx) => { + return def.innerType._zod.run(payload, ctx); + }; +}); +var $ZodNullable = /* @__PURE__ */ $constructor("$ZodNullable", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "optin", () => def.innerType._zod.optin); + defineLazy(inst._zod, "optout", () => def.innerType._zod.optout); + defineLazy(inst._zod, "pattern", () => { + const pattern = def.innerType._zod.pattern; + return pattern ? new RegExp(`^(${cleanRegex(pattern.source)}|null)$`) : void 0; + }); + defineLazy(inst._zod, "values", () => { + return def.innerType._zod.values ? /* @__PURE__ */ new Set([...def.innerType._zod.values, null]) : void 0; + }); + inst._zod.parse = (payload, ctx) => { + if (payload.value === null) + return payload; + return def.innerType._zod.run(payload, ctx); + }; +}); +var $ZodDefault = /* @__PURE__ */ $constructor("$ZodDefault", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.optin = "optional"; + defineLazy(inst._zod, "values", () => def.innerType._zod.values); + inst._zod.parse = (payload, ctx) => { + if (ctx.direction === "backward") { + return def.innerType._zod.run(payload, ctx); + } + if (payload.value === void 0) { + payload.value = def.defaultValue; + return payload; + } + const result = def.innerType._zod.run(payload, ctx); + if (result instanceof Promise) { + return result.then((result2) => handleDefaultResult(result2, def)); + } + return handleDefaultResult(result, def); + }; +}); +function handleDefaultResult(payload, def) { + if (payload.value === void 0) { + payload.value = def.defaultValue; + } + return payload; +} +var $ZodPrefault = /* @__PURE__ */ $constructor("$ZodPrefault", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.optin = "optional"; + defineLazy(inst._zod, "values", () => def.innerType._zod.values); + inst._zod.parse = (payload, ctx) => { + if (ctx.direction === "backward") { + return def.innerType._zod.run(payload, ctx); + } + if (payload.value === void 0) { + payload.value = def.defaultValue; + } + return def.innerType._zod.run(payload, ctx); + }; +}); +var $ZodNonOptional = /* @__PURE__ */ $constructor("$ZodNonOptional", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "values", () => { + const v = def.innerType._zod.values; + return v ? new Set([...v].filter((x) => x !== void 0)) : void 0; + }); + inst._zod.parse = (payload, ctx) => { + const result = def.innerType._zod.run(payload, ctx); + if (result instanceof Promise) { + return result.then((result2) => handleNonOptionalResult(result2, inst)); + } + return handleNonOptionalResult(result, inst); + }; +}); +function handleNonOptionalResult(payload, inst) { + if (!payload.issues.length && payload.value === void 0) { + payload.issues.push({ + code: "invalid_type", + expected: "nonoptional", + input: payload.value, + inst + }); + } + return payload; +} +var $ZodSuccess = /* @__PURE__ */ $constructor("$ZodSuccess", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + if (ctx.direction === "backward") { + throw new $ZodEncodeError("ZodSuccess"); + } + const result = def.innerType._zod.run(payload, ctx); + if (result instanceof Promise) { + return result.then((result2) => { + payload.value = result2.issues.length === 0; + return payload; + }); + } + payload.value = result.issues.length === 0; + return payload; + }; +}); +var $ZodCatch = /* @__PURE__ */ $constructor("$ZodCatch", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.optin = "optional"; + defineLazy(inst._zod, "optout", () => def.innerType._zod.optout); + defineLazy(inst._zod, "values", () => def.innerType._zod.values); + inst._zod.parse = (payload, ctx) => { + if (ctx.direction === "backward") { + return def.innerType._zod.run(payload, ctx); + } + const result = def.innerType._zod.run(payload, ctx); + if (result instanceof Promise) { + return result.then((result2) => { + payload.value = result2.value; + if (result2.issues.length) { + payload.value = def.catchValue({ + ...payload, + error: { + issues: result2.issues.map((iss) => finalizeIssue(iss, ctx, config())) + }, + input: payload.value + }); + payload.issues = []; + payload.fallback = true; + } + return payload; + }); + } + payload.value = result.value; + if (result.issues.length) { + payload.value = def.catchValue({ + ...payload, + error: { + issues: result.issues.map((iss) => finalizeIssue(iss, ctx, config())) + }, + input: payload.value + }); + payload.issues = []; + payload.fallback = true; + } + return payload; + }; +}); +var $ZodNaN = /* @__PURE__ */ $constructor("$ZodNaN", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, _ctx) => { + if (typeof payload.value !== "number" || !Number.isNaN(payload.value)) { + payload.issues.push({ + input: payload.value, + inst, + expected: "nan", + code: "invalid_type" + }); + return payload; + } + return payload; + }; +}); +var $ZodPipe = /* @__PURE__ */ $constructor("$ZodPipe", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "values", () => def.in._zod.values); + defineLazy(inst._zod, "optin", () => def.in._zod.optin); + defineLazy(inst._zod, "optout", () => def.out._zod.optout); + defineLazy(inst._zod, "propValues", () => def.in._zod.propValues); + inst._zod.parse = (payload, ctx) => { + if (ctx.direction === "backward") { + const right = def.out._zod.run(payload, ctx); + if (right instanceof Promise) { + return right.then((right2) => handlePipeResult(right2, def.in, ctx)); + } + return handlePipeResult(right, def.in, ctx); + } + const left = def.in._zod.run(payload, ctx); + if (left instanceof Promise) { + return left.then((left2) => handlePipeResult(left2, def.out, ctx)); + } + return handlePipeResult(left, def.out, ctx); + }; +}); +function handlePipeResult(left, next, ctx) { + if (left.issues.length) { + left.aborted = true; + return left; + } + return next._zod.run({ value: left.value, issues: left.issues, fallback: left.fallback }, ctx); +} +var $ZodCodec = /* @__PURE__ */ $constructor("$ZodCodec", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "values", () => def.in._zod.values); + defineLazy(inst._zod, "optin", () => def.in._zod.optin); + defineLazy(inst._zod, "optout", () => def.out._zod.optout); + defineLazy(inst._zod, "propValues", () => def.in._zod.propValues); + inst._zod.parse = (payload, ctx) => { + const direction = ctx.direction || "forward"; + if (direction === "forward") { + const left = def.in._zod.run(payload, ctx); + if (left instanceof Promise) { + return left.then((left2) => handleCodecAResult(left2, def, ctx)); + } + return handleCodecAResult(left, def, ctx); + } else { + const right = def.out._zod.run(payload, ctx); + if (right instanceof Promise) { + return right.then((right2) => handleCodecAResult(right2, def, ctx)); + } + return handleCodecAResult(right, def, ctx); + } + }; +}); +function handleCodecAResult(result, def, ctx) { + if (result.issues.length) { + result.aborted = true; + return result; + } + const direction = ctx.direction || "forward"; + if (direction === "forward") { + const transformed = def.transform(result.value, result); + if (transformed instanceof Promise) { + return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx)); + } + return handleCodecTxResult(result, transformed, def.out, ctx); + } else { + const transformed = def.reverseTransform(result.value, result); + if (transformed instanceof Promise) { + return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx)); + } + return handleCodecTxResult(result, transformed, def.in, ctx); + } +} +function handleCodecTxResult(left, value, nextSchema, ctx) { + if (left.issues.length) { + left.aborted = true; + return left; + } + return nextSchema._zod.run({ value, issues: left.issues }, ctx); +} +var $ZodPreprocess = /* @__PURE__ */ $constructor("$ZodPreprocess", (inst, def) => { + $ZodPipe.init(inst, def); +}); +var $ZodReadonly = /* @__PURE__ */ $constructor("$ZodReadonly", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "propValues", () => def.innerType._zod.propValues); + defineLazy(inst._zod, "values", () => def.innerType._zod.values); + defineLazy(inst._zod, "optin", () => def.innerType?._zod?.optin); + defineLazy(inst._zod, "optout", () => def.innerType?._zod?.optout); + inst._zod.parse = (payload, ctx) => { + if (ctx.direction === "backward") { + return def.innerType._zod.run(payload, ctx); + } + const result = def.innerType._zod.run(payload, ctx); + if (result instanceof Promise) { + return result.then(handleReadonlyResult); + } + return handleReadonlyResult(result); + }; +}); +function handleReadonlyResult(payload) { + payload.value = Object.freeze(payload.value); + return payload; +} +var $ZodTemplateLiteral = /* @__PURE__ */ $constructor("$ZodTemplateLiteral", (inst, def) => { + $ZodType.init(inst, def); + const regexParts = []; + for (const part of def.parts) { + if (typeof part === "object" && part !== null) { + if (!part._zod.pattern) { + throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`); + } + const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern; + if (!source) + throw new Error(`Invalid template literal part: ${part._zod.traits}`); + const start = source.startsWith("^") ? 1 : 0; + const end = source.endsWith("$") ? source.length - 1 : source.length; + regexParts.push(source.slice(start, end)); + } else if (part === null || primitiveTypes.has(typeof part)) { + regexParts.push(escapeRegex(`${part}`)); + } else { + throw new Error(`Invalid template literal part: ${part}`); + } + } + inst._zod.pattern = new RegExp(`^${regexParts.join("")}$`); + inst._zod.parse = (payload, _ctx) => { + if (typeof payload.value !== "string") { + payload.issues.push({ + input: payload.value, + inst, + expected: "string", + code: "invalid_type" + }); + return payload; + } + inst._zod.pattern.lastIndex = 0; + if (!inst._zod.pattern.test(payload.value)) { + payload.issues.push({ + input: payload.value, + inst, + code: "invalid_format", + format: def.format ?? "template_literal", + pattern: inst._zod.pattern.source + }); + return payload; + } + return payload; + }; +}); +var $ZodFunction = /* @__PURE__ */ $constructor("$ZodFunction", (inst, def) => { + $ZodType.init(inst, def); + inst._def = def; + inst._zod.def = def; + inst.implement = (func) => { + if (typeof func !== "function") { + throw new Error("implement() must be called with a function"); + } + return function(...args) { + const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args; + const result = Reflect.apply(func, this, parsedArgs); + if (inst._def.output) { + return parse(inst._def.output, result); + } + return result; + }; + }; + inst.implementAsync = (func) => { + if (typeof func !== "function") { + throw new Error("implementAsync() must be called with a function"); + } + return async function(...args) { + const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args; + const result = await Reflect.apply(func, this, parsedArgs); + if (inst._def.output) { + return await parseAsync(inst._def.output, result); + } + return result; + }; + }; + inst._zod.parse = (payload, _ctx) => { + if (typeof payload.value !== "function") { + payload.issues.push({ + code: "invalid_type", + expected: "function", + input: payload.value, + inst + }); + return payload; + } + const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === "promise"; + if (hasPromiseOutput) { + payload.value = inst.implementAsync(payload.value); + } else { + payload.value = inst.implement(payload.value); + } + return payload; + }; + inst.input = (...args) => { + const F = inst.constructor; + if (Array.isArray(args[0])) { + return new F({ + type: "function", + input: new $ZodTuple({ + type: "tuple", + items: args[0], + rest: args[1] + }), + output: inst._def.output + }); + } + return new F({ + type: "function", + input: args[0], + output: inst._def.output + }); + }; + inst.output = (output) => { + const F = inst.constructor; + return new F({ + type: "function", + input: inst._def.input, + output + }); + }; + return inst; +}); +var $ZodPromise = /* @__PURE__ */ $constructor("$ZodPromise", (inst, def) => { + $ZodType.init(inst, def); + inst._zod.parse = (payload, ctx) => { + return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx)); + }; +}); +var $ZodLazy = /* @__PURE__ */ $constructor("$ZodLazy", (inst, def) => { + $ZodType.init(inst, def); + defineLazy(inst._zod, "innerType", () => { + const d = def; + if (!d._cachedInner) + d._cachedInner = def.getter(); + return d._cachedInner; + }); + defineLazy(inst._zod, "pattern", () => inst._zod.innerType?._zod?.pattern); + defineLazy(inst._zod, "propValues", () => inst._zod.innerType?._zod?.propValues); + defineLazy(inst._zod, "optin", () => inst._zod.innerType?._zod?.optin ?? void 0); + defineLazy(inst._zod, "optout", () => inst._zod.innerType?._zod?.optout ?? void 0); + inst._zod.parse = (payload, ctx) => { + const inner = inst._zod.innerType; + return inner._zod.run(payload, ctx); + }; +}); +var $ZodCustom = /* @__PURE__ */ $constructor("$ZodCustom", (inst, def) => { + $ZodCheck.init(inst, def); + $ZodType.init(inst, def); + inst._zod.parse = (payload, _) => { + return payload; + }; + inst._zod.check = (payload) => { + const input = payload.value; + const r = def.fn(input); + if (r instanceof Promise) { + return r.then((r2) => handleRefineResult(r2, payload, input, inst)); + } + handleRefineResult(r, payload, input, inst); + return; + }; +}); +function handleRefineResult(result, payload, input, inst) { + if (!result) { + const _iss = { + code: "custom", + input, + inst, + // incorporates params.error into issue reporting + path: [...inst._zod.def.path ?? []], + // incorporates params.error into issue reporting + continue: !inst._zod.def.abort + // params: inst._zod.def.params, + }; + if (inst._zod.def.params) + _iss.params = inst._zod.def.params; + payload.issues.push(issue(_iss)); + } +} + +// ../../node_modules/zod/v4/locales/index.js +var locales_exports = {}; +__export(locales_exports, { + ar: () => ar_default, + az: () => az_default, + be: () => be_default, + bg: () => bg_default, + ca: () => ca_default, + cs: () => cs_default, + da: () => da_default, + de: () => de_default, + el: () => el_default, + en: () => en_default, + eo: () => eo_default, + es: () => es_default, + fa: () => fa_default, + fi: () => fi_default, + fr: () => fr_default, + frCA: () => fr_CA_default, + he: () => he_default, + hr: () => hr_default, + hu: () => hu_default, + hy: () => hy_default, + id: () => id_default, + is: () => is_default, + it: () => it_default, + ja: () => ja_default, + ka: () => ka_default, + kh: () => kh_default, + km: () => km_default, + ko: () => ko_default, + lt: () => lt_default, + mk: () => mk_default, + ms: () => ms_default, + nl: () => nl_default, + no: () => no_default, + ota: () => ota_default, + pl: () => pl_default, + ps: () => ps_default, + pt: () => pt_default, + ro: () => ro_default, + ru: () => ru_default, + sl: () => sl_default, + sv: () => sv_default, + ta: () => ta_default, + th: () => th_default, + tr: () => tr_default, + ua: () => ua_default, + uk: () => uk_default, + ur: () => ur_default, + uz: () => uz_default, + vi: () => vi_default, + yo: () => yo_default, + zhCN: () => zh_CN_default, + zhTW: () => zh_TW_default +}); + +// ../../node_modules/zod/v4/locales/ar.js +var error = () => { + const Sizable = { + string: { unit: "\u062D\u0631\u0641", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, + file: { unit: "\u0628\u0627\u064A\u062A", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, + array: { unit: "\u0639\u0646\u0635\u0631", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, + set: { unit: "\u0639\u0646\u0635\u0631", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0645\u062F\u062E\u0644", + email: "\u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A", + url: "\u0631\u0627\u0628\u0637", + emoji: "\u0625\u064A\u0645\u0648\u062C\u064A", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u062A\u0627\u0631\u064A\u062E \u0648\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO", + date: "\u062A\u0627\u0631\u064A\u062E \u0628\u0645\u0639\u064A\u0627\u0631 ISO", + time: "\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO", + duration: "\u0645\u062F\u0629 \u0628\u0645\u0639\u064A\u0627\u0631 ISO", + ipv4: "\u0639\u0646\u0648\u0627\u0646 IPv4", + ipv6: "\u0639\u0646\u0648\u0627\u0646 IPv6", + cidrv4: "\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv4", + cidrv6: "\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv6", + base64: "\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64-encoded", + base64url: "\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64url-encoded", + json_string: "\u0646\u064E\u0635 \u0639\u0644\u0649 \u0647\u064A\u0626\u0629 JSON", + e164: "\u0631\u0642\u0645 \u0647\u0627\u062A\u0641 \u0628\u0645\u0639\u064A\u0627\u0631 E.164", + jwt: "JWT", + template_literal: "\u0645\u062F\u062E\u0644" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 instanceof ${issue2.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`; + } + return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${stringifyPrimitive(issue2.values[0])}`; + return `\u0627\u062E\u062A\u064A\u0627\u0631 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062A\u0648\u0642\u0639 \u0627\u0646\u062A\u0642\u0627\u0621 \u0623\u062D\u062F \u0647\u0630\u0647 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A: ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return ` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue2.origin ?? "\u0627\u0644\u0642\u064A\u0645\u0629"} ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0635\u0631"}`; + return `\u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue2.origin ?? "\u0627\u0644\u0642\u064A\u0645\u0629"} ${adj} ${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue2.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue2.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0628\u062F\u0623 \u0628\u0640 "${issue2.prefix}"`; + if (_issue.format === "ends_with") + return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0646\u062A\u0647\u064A \u0628\u0640 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u062A\u0636\u0645\u0651\u064E\u0646 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0637\u0627\u0628\u0642 \u0627\u0644\u0646\u0645\u0637 ${_issue.pattern}`; + return `${FormatDictionary[_issue.format] ?? issue2.format} \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644`; + } + case "not_multiple_of": + return `\u0631\u0642\u0645 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0646 \u0645\u0636\u0627\u0639\u0641\u0627\u062A ${issue2.divisor}`; + case "unrecognized_keys": + return `\u0645\u0639\u0631\u0641${issue2.keys.length > 1 ? "\u0627\u062A" : ""} \u063A\u0631\u064A\u0628${issue2.keys.length > 1 ? "\u0629" : ""}: ${joinValues(issue2.keys, "\u060C ")}`; + case "invalid_key": + return `\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue2.origin}`; + case "invalid_union": + return "\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644"; + case "invalid_element": + return `\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue2.origin}`; + default: + return "\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644"; + } + }; +}; +function ar_default() { + return { + localeError: error() + }; +} + +// ../../node_modules/zod/v4/locales/az.js +var error2 = () => { + const Sizable = { + string: { unit: "simvol", verb: "olmal\u0131d\u0131r" }, + file: { unit: "bayt", verb: "olmal\u0131d\u0131r" }, + array: { unit: "element", verb: "olmal\u0131d\u0131r" }, + set: { unit: "element", verb: "olmal\u0131d\u0131r" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "input", + email: "email address", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO datetime", + date: "ISO date", + time: "ISO time", + duration: "ISO duration", + ipv4: "IPv4 address", + ipv6: "IPv6 address", + cidrv4: "IPv4 range", + cidrv6: "IPv6 range", + base64: "base64-encoded string", + base64url: "base64url-encoded string", + json_string: "JSON string", + e164: "E.164 number", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n instanceof ${issue2.expected}, daxil olan ${received}`; + } + return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${expected}, daxil olan ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${stringifyPrimitive(issue2.values[0])}`; + return `Yanl\u0131\u015F se\xE7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${issue2.origin ?? "d\u0259y\u0259r"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "element"}`; + return `\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${issue2.origin ?? "d\u0259y\u0259r"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + return `\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Yanl\u0131\u015F m\u0259tn: "${_issue.prefix}" il\u0259 ba\u015Flamal\u0131d\u0131r`; + if (_issue.format === "ends_with") + return `Yanl\u0131\u015F m\u0259tn: "${_issue.suffix}" il\u0259 bitm\u0259lidir`; + if (_issue.format === "includes") + return `Yanl\u0131\u015F m\u0259tn: "${_issue.includes}" daxil olmal\u0131d\u0131r`; + if (_issue.format === "regex") + return `Yanl\u0131\u015F m\u0259tn: ${_issue.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`; + return `Yanl\u0131\u015F ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Yanl\u0131\u015F \u0259d\u0259d: ${issue2.divisor} il\u0259 b\xF6l\xFCn\u0259 bil\u0259n olmal\u0131d\u0131r`; + case "unrecognized_keys": + return `Tan\u0131nmayan a\xE7ar${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} daxilind\u0259 yanl\u0131\u015F a\xE7ar`; + case "invalid_union": + return "Yanl\u0131\u015F d\u0259y\u0259r"; + case "invalid_element": + return `${issue2.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`; + default: + return `Yanl\u0131\u015F d\u0259y\u0259r`; + } + }; +}; +function az_default() { + return { + localeError: error2() + }; +} + +// ../../node_modules/zod/v4/locales/be.js +function getBelarusianPlural(count, one, few, many) { + const absCount = Math.abs(count); + const lastDigit = absCount % 10; + const lastTwoDigits = absCount % 100; + if (lastTwoDigits >= 11 && lastTwoDigits <= 19) { + return many; + } + if (lastDigit === 1) { + return one; + } + if (lastDigit >= 2 && lastDigit <= 4) { + return few; + } + return many; +} +var error3 = () => { + const Sizable = { + string: { + unit: { + one: "\u0441\u0456\u043C\u0432\u0430\u043B", + few: "\u0441\u0456\u043C\u0432\u0430\u043B\u044B", + many: "\u0441\u0456\u043C\u0432\u0430\u043B\u0430\u045E" + }, + verb: "\u043C\u0435\u0446\u044C" + }, + array: { + unit: { + one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", + few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B", + many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E" + }, + verb: "\u043C\u0435\u0446\u044C" + }, + set: { + unit: { + one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", + few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B", + many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E" + }, + verb: "\u043C\u0435\u0446\u044C" + }, + file: { + unit: { + one: "\u0431\u0430\u0439\u0442", + few: "\u0431\u0430\u0439\u0442\u044B", + many: "\u0431\u0430\u0439\u0442\u0430\u045E" + }, + verb: "\u043C\u0435\u0446\u044C" + } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0443\u0432\u043E\u0434", + email: "email \u0430\u0434\u0440\u0430\u0441", + url: "URL", + emoji: "\u044D\u043C\u043E\u0434\u0437\u0456", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0434\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441", + date: "ISO \u0434\u0430\u0442\u0430", + time: "ISO \u0447\u0430\u0441", + duration: "ISO \u043F\u0440\u0430\u0446\u044F\u0433\u043B\u0430\u0441\u0446\u044C", + ipv4: "IPv4 \u0430\u0434\u0440\u0430\u0441", + ipv6: "IPv6 \u0430\u0434\u0440\u0430\u0441", + cidrv4: "IPv4 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D", + cidrv6: "IPv6 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D", + base64: "\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64", + base64url: "\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64url", + json_string: "JSON \u0440\u0430\u0434\u043E\u043A", + e164: "\u043D\u0443\u043C\u0430\u0440 E.164", + jwt: "JWT", + template_literal: "\u0443\u0432\u043E\u0434" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u043B\u0456\u043A", + array: "\u043C\u0430\u0441\u0456\u045E" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F instanceof ${issue2.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`; + } + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F ${stringifyPrimitive(issue2.values[0])}`; + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0432\u0430\u0440\u044B\u044F\u043D\u0442: \u0447\u0430\u043A\u0430\u045E\u0441\u044F \u0430\u0434\u0437\u0456\u043D \u0437 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + const maxValue = Number(issue2.maximum); + const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many); + return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue2.maximum.toString()} ${unit}`; + } + return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + const minValue = Number(issue2.minimum); + const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many); + return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue2.minimum.toString()} ${unit}`; + } + return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue2.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u043F\u0430\u0447\u044B\u043D\u0430\u0446\u0446\u0430 \u0437 "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u0430\u043A\u0430\u043D\u0447\u0432\u0430\u0446\u0446\u0430 \u043D\u0430 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u043C\u044F\u0448\u0447\u0430\u0446\u044C "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0430\u0434\u043F\u0430\u0432\u044F\u0434\u0430\u0446\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`; + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043B\u0456\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0431\u044B\u0446\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue2.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${issue2.keys.length > 1 ? "\u043A\u043B\u044E\u0447\u044B" : "\u043A\u043B\u044E\u0447"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${issue2.origin}`; + case "invalid_union": + return "\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434"; + case "invalid_element": + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u0430\u0435 \u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435 \u045E ${issue2.origin}`; + default: + return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434`; + } + }; +}; +function be_default() { + return { + localeError: error3() + }; +} + +// ../../node_modules/zod/v4/locales/bg.js +var error4 = () => { + const Sizable = { + string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" }, + file: { unit: "\u0431\u0430\u0439\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" }, + array: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" }, + set: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0432\u0445\u043E\u0434", + email: "\u0438\u043C\u0435\u0439\u043B \u0430\u0434\u0440\u0435\u0441", + url: "URL", + emoji: "\u0435\u043C\u043E\u0434\u0436\u0438", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0432\u0440\u0435\u043C\u0435", + date: "ISO \u0434\u0430\u0442\u0430", + time: "ISO \u0432\u0440\u0435\u043C\u0435", + duration: "ISO \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442", + ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441", + ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441", + cidrv4: "IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", + cidrv6: "IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", + base64: "base64-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437", + base64url: "base64url-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437", + json_string: "JSON \u043D\u0438\u0437", + e164: "E.164 \u043D\u043E\u043C\u0435\u0440", + jwt: "JWT", + template_literal: "\u0432\u0445\u043E\u0434" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0447\u0438\u0441\u043B\u043E", + array: "\u043C\u0430\u0441\u0438\u0432" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D instanceof ${issue2.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`; + } + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${stringifyPrimitive(issue2.values[0])}`; + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u043E\u043F\u0446\u0438\u044F: \u043E\u0447\u0430\u043A\u0432\u0430\u043D\u043E \u0435\u0434\u043D\u043E \u043E\u0442 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin ?? "\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442"} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430"}`; + return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin ?? "\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442"} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue2.origin} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u0432\u0430 \u0441 "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u0432\u044A\u0440\u0448\u0432\u0430 \u0441 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0432\u0430 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0441\u044A\u0432\u043F\u0430\u0434\u0430 \u0441 ${_issue.pattern}`; + let invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D"; + if (_issue.format === "emoji") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E"; + if (_issue.format === "datetime") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E"; + if (_issue.format === "date") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430"; + if (_issue.format === "time") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E"; + if (_issue.format === "duration") + invalid_adj = "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430"; + return `${invalid_adj} ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E \u0447\u0438\u0441\u043B\u043E: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0431\u044A\u0434\u0435 \u043A\u0440\u0430\u0442\u043D\u043E \u043D\u0430 ${issue2.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u0430\u0437\u043F\u043E\u0437\u043D\u0430\u0442${issue2.keys.length > 1 ? "\u0438" : ""} \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u043E\u0432\u0435" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043A\u043B\u044E\u0447 \u0432 ${issue2.origin}`; + case "invalid_union": + return "\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434"; + case "invalid_element": + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442 \u0432 ${issue2.origin}`; + default: + return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434`; + } + }; +}; +function bg_default() { + return { + localeError: error4() + }; +} + +// ../../node_modules/zod/v4/locales/ca.js +var error5 = () => { + const Sizable = { + string: { unit: "car\xE0cters", verb: "contenir" }, + file: { unit: "bytes", verb: "contenir" }, + array: { unit: "elements", verb: "contenir" }, + set: { unit: "elements", verb: "contenir" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "entrada", + email: "adre\xE7a electr\xF2nica", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "data i hora ISO", + date: "data ISO", + time: "hora ISO", + duration: "durada ISO", + ipv4: "adre\xE7a IPv4", + ipv6: "adre\xE7a IPv6", + cidrv4: "rang IPv4", + cidrv6: "rang IPv6", + base64: "cadena codificada en base64", + base64url: "cadena codificada en base64url", + json_string: "cadena JSON", + e164: "n\xFAmero E.164", + jwt: "JWT", + template_literal: "entrada" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Tipus inv\xE0lid: s'esperava instanceof ${issue2.expected}, s'ha rebut ${received}`; + } + return `Tipus inv\xE0lid: s'esperava ${expected}, s'ha rebut ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Valor inv\xE0lid: s'esperava ${stringifyPrimitive(issue2.values[0])}`; + return `Opci\xF3 inv\xE0lida: s'esperava una de ${joinValues(issue2.values, " o ")}`; + case "too_big": { + const adj = issue2.inclusive ? "com a m\xE0xim" : "menys de"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Massa gran: s'esperava que ${issue2.origin ?? "el valor"} contingu\xE9s ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "elements"}`; + return `Massa gran: s'esperava que ${issue2.origin ?? "el valor"} fos ${adj} ${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? "com a m\xEDnim" : "m\xE9s de"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Massa petit: s'esperava que ${issue2.origin} contingu\xE9s ${adj} ${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Massa petit: s'esperava que ${issue2.origin} fos ${adj} ${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Format inv\xE0lid: ha de comen\xE7ar amb "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Format inv\xE0lid: ha d'acabar amb "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Format inv\xE0lid: ha d'incloure "${_issue.includes}"`; + if (_issue.format === "regex") + return `Format inv\xE0lid: ha de coincidir amb el patr\xF3 ${_issue.pattern}`; + return `Format inv\xE0lid per a ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `N\xFAmero inv\xE0lid: ha de ser m\xFAltiple de ${issue2.divisor}`; + case "unrecognized_keys": + return `Clau${issue2.keys.length > 1 ? "s" : ""} no reconeguda${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Clau inv\xE0lida a ${issue2.origin}`; + case "invalid_union": + return "Entrada inv\xE0lida"; + // Could also be "Tipus d'unió invàlid" but "Entrada invàlida" is more general + case "invalid_element": + return `Element inv\xE0lid a ${issue2.origin}`; + default: + return `Entrada inv\xE0lida`; + } + }; +}; +function ca_default() { + return { + localeError: error5() + }; +} + +// ../../node_modules/zod/v4/locales/cs.js +var error6 = () => { + const Sizable = { + string: { unit: "znak\u016F", verb: "m\xEDt" }, + file: { unit: "bajt\u016F", verb: "m\xEDt" }, + array: { unit: "prvk\u016F", verb: "m\xEDt" }, + set: { unit: "prvk\u016F", verb: "m\xEDt" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "regul\xE1rn\xED v\xFDraz", + email: "e-mailov\xE1 adresa", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "datum a \u010Das ve form\xE1tu ISO", + date: "datum ve form\xE1tu ISO", + time: "\u010Das ve form\xE1tu ISO", + duration: "doba trv\xE1n\xED ISO", + ipv4: "IPv4 adresa", + ipv6: "IPv6 adresa", + cidrv4: "rozsah IPv4", + cidrv6: "rozsah IPv6", + base64: "\u0159et\u011Bzec zak\xF3dovan\xFD ve form\xE1tu base64", + base64url: "\u0159et\u011Bzec zak\xF3dovan\xFD ve form\xE1tu base64url", + json_string: "\u0159et\u011Bzec ve form\xE1tu JSON", + e164: "\u010D\xEDslo E.164", + jwt: "JWT", + template_literal: "vstup" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u010D\xEDslo", + string: "\u0159et\u011Bzec", + function: "funkce", + array: "pole" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no instanceof ${issue2.expected}, obdr\u017Eeno ${received}`; + } + return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${expected}, obdr\u017Eeno ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${stringifyPrimitive(issue2.values[0])}`; + return `Neplatn\xE1 mo\u017Enost: o\u010Dek\xE1v\xE1na jedna z hodnot ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${issue2.origin ?? "hodnota"} mus\xED m\xEDt ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "prvk\u016F"}`; + } + return `Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${issue2.origin ?? "hodnota"} mus\xED b\xFDt ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${issue2.origin ?? "hodnota"} mus\xED m\xEDt ${adj}${issue2.minimum.toString()} ${sizing.unit ?? "prvk\u016F"}`; + } + return `Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${issue2.origin ?? "hodnota"} mus\xED b\xFDt ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Neplatn\xFD \u0159et\u011Bzec: mus\xED za\u010D\xEDnat na "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Neplatn\xFD \u0159et\u011Bzec: mus\xED kon\u010Dit na "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Neplatn\xFD \u0159et\u011Bzec: mus\xED obsahovat "${_issue.includes}"`; + if (_issue.format === "regex") + return `Neplatn\xFD \u0159et\u011Bzec: mus\xED odpov\xEDdat vzoru ${_issue.pattern}`; + return `Neplatn\xFD form\xE1t ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Neplatn\xE9 \u010D\xEDslo: mus\xED b\xFDt n\xE1sobkem ${issue2.divisor}`; + case "unrecognized_keys": + return `Nezn\xE1m\xE9 kl\xED\u010De: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Neplatn\xFD kl\xED\u010D v ${issue2.origin}`; + case "invalid_union": + return "Neplatn\xFD vstup"; + case "invalid_element": + return `Neplatn\xE1 hodnota v ${issue2.origin}`; + default: + return `Neplatn\xFD vstup`; + } + }; +}; +function cs_default() { + return { + localeError: error6() + }; +} + +// ../../node_modules/zod/v4/locales/da.js +var error7 = () => { + const Sizable = { + string: { unit: "tegn", verb: "havde" }, + file: { unit: "bytes", verb: "havde" }, + array: { unit: "elementer", verb: "indeholdt" }, + set: { unit: "elementer", verb: "indeholdt" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "input", + email: "e-mailadresse", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO dato- og klokkesl\xE6t", + date: "ISO-dato", + time: "ISO-klokkesl\xE6t", + duration: "ISO-varighed", + ipv4: "IPv4-omr\xE5de", + ipv6: "IPv6-omr\xE5de", + cidrv4: "IPv4-spektrum", + cidrv6: "IPv6-spektrum", + base64: "base64-kodet streng", + base64url: "base64url-kodet streng", + json_string: "JSON-streng", + e164: "E.164-nummer", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN", + string: "streng", + number: "tal", + boolean: "boolean", + array: "liste", + object: "objekt", + set: "s\xE6t", + file: "fil" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Ugyldigt input: forventede instanceof ${issue2.expected}, fik ${received}`; + } + return `Ugyldigt input: forventede ${expected}, fik ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ugyldig v\xE6rdi: forventede ${stringifyPrimitive(issue2.values[0])}`; + return `Ugyldigt valg: forventede en af f\xF8lgende ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + const origin = TypeDictionary[issue2.origin] ?? issue2.origin; + if (sizing) + return `For stor: forventede ${origin ?? "value"} ${sizing.verb} ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "elementer"}`; + return `For stor: forventede ${origin ?? "value"} havde ${adj} ${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + const origin = TypeDictionary[issue2.origin] ?? issue2.origin; + if (sizing) { + return `For lille: forventede ${origin} ${sizing.verb} ${adj} ${issue2.minimum.toString()} ${sizing.unit}`; + } + return `For lille: forventede ${origin} havde ${adj} ${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Ugyldig streng: skal starte med "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Ugyldig streng: skal ende med "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Ugyldig streng: skal indeholde "${_issue.includes}"`; + if (_issue.format === "regex") + return `Ugyldig streng: skal matche m\xF8nsteret ${_issue.pattern}`; + return `Ugyldig ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Ugyldigt tal: skal v\xE6re deleligt med ${issue2.divisor}`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "Ukendte n\xF8gler" : "Ukendt n\xF8gle"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Ugyldig n\xF8gle i ${issue2.origin}`; + case "invalid_union": + return "Ugyldigt input: matcher ingen af de tilladte typer"; + case "invalid_element": + return `Ugyldig v\xE6rdi i ${issue2.origin}`; + default: + return `Ugyldigt input`; + } + }; +}; +function da_default() { + return { + localeError: error7() + }; +} + +// ../../node_modules/zod/v4/locales/de.js +var error8 = () => { + const Sizable = { + string: { unit: "Zeichen", verb: "zu haben" }, + file: { unit: "Bytes", verb: "zu haben" }, + array: { unit: "Elemente", verb: "zu haben" }, + set: { unit: "Elemente", verb: "zu haben" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "Eingabe", + email: "E-Mail-Adresse", + url: "URL", + emoji: "Emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO-Datum und -Uhrzeit", + date: "ISO-Datum", + time: "ISO-Uhrzeit", + duration: "ISO-Dauer", + ipv4: "IPv4-Adresse", + ipv6: "IPv6-Adresse", + cidrv4: "IPv4-Bereich", + cidrv6: "IPv6-Bereich", + base64: "Base64-codierter String", + base64url: "Base64-URL-codierter String", + json_string: "JSON-String", + e164: "E.164-Nummer", + jwt: "JWT", + template_literal: "Eingabe" + }; + const TypeDictionary = { + nan: "NaN", + number: "Zahl", + array: "Array" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Ung\xFCltige Eingabe: erwartet instanceof ${issue2.expected}, erhalten ${received}`; + } + return `Ung\xFCltige Eingabe: erwartet ${expected}, erhalten ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ung\xFCltige Eingabe: erwartet ${stringifyPrimitive(issue2.values[0])}`; + return `Ung\xFCltige Option: erwartet eine von ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Zu gro\xDF: erwartet, dass ${issue2.origin ?? "Wert"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "Elemente"} hat`; + return `Zu gro\xDF: erwartet, dass ${issue2.origin ?? "Wert"} ${adj}${issue2.maximum.toString()} ist`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Zu klein: erwartet, dass ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} hat`; + } + return `Zu klein: erwartet, dass ${issue2.origin} ${adj}${issue2.minimum.toString()} ist`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Ung\xFCltiger String: muss mit "${_issue.prefix}" beginnen`; + if (_issue.format === "ends_with") + return `Ung\xFCltiger String: muss mit "${_issue.suffix}" enden`; + if (_issue.format === "includes") + return `Ung\xFCltiger String: muss "${_issue.includes}" enthalten`; + if (_issue.format === "regex") + return `Ung\xFCltiger String: muss dem Muster ${_issue.pattern} entsprechen`; + return `Ung\xFCltig: ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Ung\xFCltige Zahl: muss ein Vielfaches von ${issue2.divisor} sein`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "Unbekannte Schl\xFCssel" : "Unbekannter Schl\xFCssel"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Ung\xFCltiger Schl\xFCssel in ${issue2.origin}`; + case "invalid_union": + return "Ung\xFCltige Eingabe"; + case "invalid_element": + return `Ung\xFCltiger Wert in ${issue2.origin}`; + default: + return `Ung\xFCltige Eingabe`; + } + }; +}; +function de_default() { + return { + localeError: error8() + }; +} + +// ../../node_modules/zod/v4/locales/el.js +var error9 = () => { + const Sizable = { + string: { unit: "\u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03B5\u03C2", verb: "\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9" }, + file: { unit: "bytes", verb: "\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9" }, + array: { unit: "\u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03B1", verb: "\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9" }, + set: { unit: "\u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03B1", verb: "\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9" }, + map: { unit: "\u03BA\u03B1\u03C4\u03B1\u03C7\u03C9\u03C1\u03AE\u03C3\u03B5\u03B9\u03C2", verb: "\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2", + email: "\u03B4\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 email", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03BA\u03B1\u03B9 \u03CE\u03C1\u03B1", + date: "ISO \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1", + time: "ISO \u03CE\u03C1\u03B1", + duration: "ISO \u03B4\u03B9\u03AC\u03C1\u03BA\u03B5\u03B9\u03B1", + ipv4: "\u03B4\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 IPv4", + ipv6: "\u03B4\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 IPv6", + mac: "\u03B4\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 MAC", + cidrv4: "\u03B5\u03CD\u03C1\u03BF\u03C2 IPv4", + cidrv6: "\u03B5\u03CD\u03C1\u03BF\u03C2 IPv6", + base64: "\u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03B7 \u03C3\u03B5 base64", + base64url: "\u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03B7 \u03C3\u03B5 base64url", + json_string: "\u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC JSON", + e164: "\u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 E.164", + jwt: "JWT", + template_literal: "\u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (typeof issue2.expected === "string" && /^[A-Z]/.test(issue2.expected)) { + return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD instanceof ${issue2.expected}, \u03BB\u03AE\u03C6\u03B8\u03B7\u03BA\u03B5 ${received}`; + } + return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${expected}, \u03BB\u03AE\u03C6\u03B8\u03B7\u03BA\u03B5 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${stringifyPrimitive(issue2.values[0])}`; + return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD \u03AD\u03BD\u03B1 \u03B1\u03C0\u03CC ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u03A0\u03BF\u03BB\u03CD \u03BC\u03B5\u03B3\u03AC\u03BB\u03BF: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${issue2.origin ?? "\u03C4\u03B9\u03BC\u03AE"} \u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03B1"}`; + return `\u03A0\u03BF\u03BB\u03CD \u03BC\u03B5\u03B3\u03AC\u03BB\u03BF: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${issue2.origin ?? "\u03C4\u03B9\u03BC\u03AE"} \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u03A0\u03BF\u03BB\u03CD \u03BC\u03B9\u03BA\u03C1\u03CC: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${issue2.origin} \u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9 ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u03A0\u03BF\u03BB\u03CD \u03BC\u03B9\u03BA\u03C1\u03CC: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${issue2.origin} \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03BE\u03B5\u03BA\u03B9\u03BD\u03AC \u03BC\u03B5 "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C4\u03B5\u03BB\u03B5\u03B9\u03CE\u03BD\u03B5\u03B9 \u03BC\u03B5 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C4\u03B1\u03B9\u03C1\u03B9\u03AC\u03B6\u03B5\u03B9 \u03BC\u03B5 \u03C4\u03BF \u03BC\u03BF\u03C4\u03AF\u03B2\u03BF ${_issue.pattern}`; + return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF: ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF\u03C2 \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C0\u03BF\u03BB\u03BB\u03B1\u03C0\u03BB\u03AC\u03C3\u03B9\u03BF \u03C4\u03BF\u03C5 ${issue2.divisor}`; + case "unrecognized_keys": + return `\u0386\u03B3\u03BD\u03C9\u03C3\u03C4${issue2.keys.length > 1 ? "\u03B1" : "\u03BF"} \u03BA\u03BB\u03B5\u03B9\u03B4${issue2.keys.length > 1 ? "\u03B9\u03AC" : "\u03AF"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF \u03BA\u03BB\u03B5\u03B9\u03B4\u03AF \u03C3\u03C4\u03BF ${issue2.origin}`; + case "invalid_union": + return "\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2"; + case "invalid_element": + return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C4\u03B9\u03BC\u03AE \u03C3\u03C4\u03BF ${issue2.origin}`; + default: + return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2`; + } + }; +}; +function el_default() { + return { + localeError: error9() + }; +} + +// ../../node_modules/zod/v4/locales/en.js +var error10 = () => { + const Sizable = { + string: { unit: "characters", verb: "to have" }, + file: { unit: "bytes", verb: "to have" }, + array: { unit: "items", verb: "to have" }, + set: { unit: "items", verb: "to have" }, + map: { unit: "entries", verb: "to have" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "input", + email: "email address", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO datetime", + date: "ISO date", + time: "ISO time", + duration: "ISO duration", + ipv4: "IPv4 address", + ipv6: "IPv6 address", + mac: "MAC address", + cidrv4: "IPv4 range", + cidrv6: "IPv6 range", + base64: "base64-encoded string", + base64url: "base64url-encoded string", + json_string: "JSON string", + e164: "E.164 number", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + // Compatibility: "nan" -> "NaN" for display + nan: "NaN" + // All other type names omitted - they fall back to raw values via ?? operator + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + return `Invalid input: expected ${expected}, received ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Invalid input: expected ${stringifyPrimitive(issue2.values[0])}`; + return `Invalid option: expected one of ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Too big: expected ${issue2.origin ?? "value"} to have ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elements"}`; + return `Too big: expected ${issue2.origin ?? "value"} to be ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Too small: expected ${issue2.origin} to have ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Too small: expected ${issue2.origin} to be ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Invalid string: must start with "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Invalid string: must end with "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Invalid string: must include "${_issue.includes}"`; + if (_issue.format === "regex") + return `Invalid string: must match pattern ${_issue.pattern}`; + return `Invalid ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Invalid number: must be a multiple of ${issue2.divisor}`; + case "unrecognized_keys": + return `Unrecognized key${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Invalid key in ${issue2.origin}`; + case "invalid_union": + if (issue2.options && Array.isArray(issue2.options) && issue2.options.length > 0) { + const opts = issue2.options.map((o) => `'${o}'`).join(" | "); + return `Invalid discriminator value. Expected ${opts}`; + } + return "Invalid input"; + case "invalid_element": + return `Invalid value in ${issue2.origin}`; + default: + return `Invalid input`; + } + }; +}; +function en_default() { + return { + localeError: error10() + }; +} + +// ../../node_modules/zod/v4/locales/eo.js +var error11 = () => { + const Sizable = { + string: { unit: "karaktrojn", verb: "havi" }, + file: { unit: "bajtojn", verb: "havi" }, + array: { unit: "elementojn", verb: "havi" }, + set: { unit: "elementojn", verb: "havi" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "enigo", + email: "retadreso", + url: "URL", + emoji: "emo\u011Dio", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO-datotempo", + date: "ISO-dato", + time: "ISO-tempo", + duration: "ISO-da\u016Dro", + ipv4: "IPv4-adreso", + ipv6: "IPv6-adreso", + cidrv4: "IPv4-rango", + cidrv6: "IPv6-rango", + base64: "64-ume kodita karaktraro", + base64url: "URL-64-ume kodita karaktraro", + json_string: "JSON-karaktraro", + e164: "E.164-nombro", + jwt: "JWT", + template_literal: "enigo" + }; + const TypeDictionary = { + nan: "NaN", + number: "nombro", + array: "tabelo", + null: "senvalora" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Nevalida enigo: atendi\u011Dis instanceof ${issue2.expected}, ricevi\u011Dis ${received}`; + } + return `Nevalida enigo: atendi\u011Dis ${expected}, ricevi\u011Dis ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Nevalida enigo: atendi\u011Dis ${stringifyPrimitive(issue2.values[0])}`; + return `Nevalida opcio: atendi\u011Dis unu el ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Tro granda: atendi\u011Dis ke ${issue2.origin ?? "valoro"} havu ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementojn"}`; + return `Tro granda: atendi\u011Dis ke ${issue2.origin ?? "valoro"} havu ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Tro malgranda: atendi\u011Dis ke ${issue2.origin} havu ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Tro malgranda: atendi\u011Dis ke ${issue2.origin} estu ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Nevalida karaktraro: devas komenci\u011Di per "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Nevalida karaktraro: devas fini\u011Di per "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Nevalida karaktraro: devas inkluzivi "${_issue.includes}"`; + if (_issue.format === "regex") + return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`; + return `Nevalida ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Nevalida nombro: devas esti oblo de ${issue2.divisor}`; + case "unrecognized_keys": + return `Nekonata${issue2.keys.length > 1 ? "j" : ""} \u015Dlosilo${issue2.keys.length > 1 ? "j" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Nevalida \u015Dlosilo en ${issue2.origin}`; + case "invalid_union": + return "Nevalida enigo"; + case "invalid_element": + return `Nevalida valoro en ${issue2.origin}`; + default: + return `Nevalida enigo`; + } + }; +}; +function eo_default() { + return { + localeError: error11() + }; +} + +// ../../node_modules/zod/v4/locales/es.js +var error12 = () => { + const Sizable = { + string: { unit: "caracteres", verb: "tener" }, + file: { unit: "bytes", verb: "tener" }, + array: { unit: "elementos", verb: "tener" }, + set: { unit: "elementos", verb: "tener" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "entrada", + email: "direcci\xF3n de correo electr\xF3nico", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "fecha y hora ISO", + date: "fecha ISO", + time: "hora ISO", + duration: "duraci\xF3n ISO", + ipv4: "direcci\xF3n IPv4", + ipv6: "direcci\xF3n IPv6", + cidrv4: "rango IPv4", + cidrv6: "rango IPv6", + base64: "cadena codificada en base64", + base64url: "URL codificada en base64", + json_string: "cadena JSON", + e164: "n\xFAmero E.164", + jwt: "JWT", + template_literal: "entrada" + }; + const TypeDictionary = { + nan: "NaN", + string: "texto", + number: "n\xFAmero", + boolean: "booleano", + array: "arreglo", + object: "objeto", + set: "conjunto", + file: "archivo", + date: "fecha", + bigint: "n\xFAmero grande", + symbol: "s\xEDmbolo", + undefined: "indefinido", + null: "nulo", + function: "funci\xF3n", + map: "mapa", + record: "registro", + tuple: "tupla", + enum: "enumeraci\xF3n", + union: "uni\xF3n", + literal: "literal", + promise: "promesa", + void: "vac\xEDo", + never: "nunca", + unknown: "desconocido", + any: "cualquiera" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Entrada inv\xE1lida: se esperaba instanceof ${issue2.expected}, recibido ${received}`; + } + return `Entrada inv\xE1lida: se esperaba ${expected}, recibido ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Entrada inv\xE1lida: se esperaba ${stringifyPrimitive(issue2.values[0])}`; + return `Opci\xF3n inv\xE1lida: se esperaba una de ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + const origin = TypeDictionary[issue2.origin] ?? issue2.origin; + if (sizing) + return `Demasiado grande: se esperaba que ${origin ?? "valor"} tuviera ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementos"}`; + return `Demasiado grande: se esperaba que ${origin ?? "valor"} fuera ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + const origin = TypeDictionary[issue2.origin] ?? issue2.origin; + if (sizing) { + return `Demasiado peque\xF1o: se esperaba que ${origin} tuviera ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Demasiado peque\xF1o: se esperaba que ${origin} fuera ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Cadena inv\xE1lida: debe comenzar con "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Cadena inv\xE1lida: debe terminar en "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Cadena inv\xE1lida: debe incluir "${_issue.includes}"`; + if (_issue.format === "regex") + return `Cadena inv\xE1lida: debe coincidir con el patr\xF3n ${_issue.pattern}`; + return `Inv\xE1lido ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `N\xFAmero inv\xE1lido: debe ser m\xFAltiplo de ${issue2.divisor}`; + case "unrecognized_keys": + return `Llave${issue2.keys.length > 1 ? "s" : ""} desconocida${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Llave inv\xE1lida en ${TypeDictionary[issue2.origin] ?? issue2.origin}`; + case "invalid_union": + return "Entrada inv\xE1lida"; + case "invalid_element": + return `Valor inv\xE1lido en ${TypeDictionary[issue2.origin] ?? issue2.origin}`; + default: + return `Entrada inv\xE1lida`; + } + }; +}; +function es_default() { + return { + localeError: error12() + }; +} + +// ../../node_modules/zod/v4/locales/fa.js +var error13 = () => { + const Sizable = { + string: { unit: "\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, + file: { unit: "\u0628\u0627\u06CC\u062A", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, + array: { unit: "\u0622\u06CC\u062A\u0645", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, + set: { unit: "\u0622\u06CC\u062A\u0645", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0648\u0631\u0648\u062F\u06CC", + email: "\u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644", + url: "URL", + emoji: "\u0627\u06CC\u0645\u0648\u062C\u06CC", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u062A\u0627\u0631\u06CC\u062E \u0648 \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", + date: "\u062A\u0627\u0631\u06CC\u062E \u0627\u06CC\u0632\u0648", + time: "\u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", + duration: "\u0645\u062F\u062A \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648", + ipv4: "IPv4 \u0622\u062F\u0631\u0633", + ipv6: "IPv6 \u0622\u062F\u0631\u0633", + cidrv4: "IPv4 \u062F\u0627\u0645\u0646\u0647", + cidrv6: "IPv6 \u062F\u0627\u0645\u0646\u0647", + base64: "base64-encoded \u0631\u0634\u062A\u0647", + base64url: "base64url-encoded \u0631\u0634\u062A\u0647", + json_string: "JSON \u0631\u0634\u062A\u0647", + e164: "E.164 \u0639\u062F\u062F", + jwt: "JWT", + template_literal: "\u0648\u0631\u0648\u062F\u06CC" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0639\u062F\u062F", + array: "\u0622\u0631\u0627\u06CC\u0647" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A instanceof ${issue2.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`; + } + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`; + } + case "invalid_value": + if (issue2.values.length === 1) { + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${stringifyPrimitive(issue2.values[0])} \u0645\u06CC\u200C\u0628\u0648\u062F`; + } + return `\u06AF\u0632\u06CC\u0646\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A \u06CC\u06A9\u06CC \u0627\u0632 ${joinValues(issue2.values, "|")} \u0645\u06CC\u200C\u0628\u0648\u062F`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue2.origin ?? "\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0635\u0631"} \u0628\u0627\u0634\u062F`; + } + return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue2.origin ?? "\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} \u0628\u0627\u0634\u062F`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0628\u0627\u0634\u062F`; + } + return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} \u0628\u0627\u0634\u062F`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${_issue.prefix}" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`; + } + if (_issue.format === "ends_with") { + return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${_issue.suffix}" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`; + } + if (_issue.format === "includes") { + return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 "${_issue.includes}" \u0628\u0627\u0634\u062F`; + } + if (_issue.format === "regex") { + return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \u0627\u0644\u06AF\u0648\u06CC ${_issue.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`; + } + return `${FormatDictionary[_issue.format] ?? issue2.format} \u0646\u0627\u0645\u0639\u062A\u0628\u0631`; + } + case "not_multiple_of": + return `\u0639\u062F\u062F \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0645\u0636\u0631\u0628 ${issue2.divisor} \u0628\u0627\u0634\u062F`; + case "unrecognized_keys": + return `\u06A9\u0644\u06CC\u062F${issue2.keys.length > 1 ? "\u0647\u0627\u06CC" : ""} \u0646\u0627\u0634\u0646\u0627\u0633: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${issue2.origin}`; + case "invalid_union": + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`; + case "invalid_element": + return `\u0645\u0642\u062F\u0627\u0631 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u062F\u0631 ${issue2.origin}`; + default: + return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`; + } + }; +}; +function fa_default() { + return { + localeError: error13() + }; +} + +// ../../node_modules/zod/v4/locales/fi.js +var error14 = () => { + const Sizable = { + string: { unit: "merkki\xE4", subject: "merkkijonon" }, + file: { unit: "tavua", subject: "tiedoston" }, + array: { unit: "alkiota", subject: "listan" }, + set: { unit: "alkiota", subject: "joukon" }, + number: { unit: "", subject: "luvun" }, + bigint: { unit: "", subject: "suuren kokonaisluvun" }, + int: { unit: "", subject: "kokonaisluvun" }, + date: { unit: "", subject: "p\xE4iv\xE4m\xE4\xE4r\xE4n" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "s\xE4\xE4nn\xF6llinen lauseke", + email: "s\xE4hk\xF6postiosoite", + url: "URL-osoite", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO-aikaleima", + date: "ISO-p\xE4iv\xE4m\xE4\xE4r\xE4", + time: "ISO-aika", + duration: "ISO-kesto", + ipv4: "IPv4-osoite", + ipv6: "IPv6-osoite", + cidrv4: "IPv4-alue", + cidrv6: "IPv6-alue", + base64: "base64-koodattu merkkijono", + base64url: "base64url-koodattu merkkijono", + json_string: "JSON-merkkijono", + e164: "E.164-luku", + jwt: "JWT", + template_literal: "templaattimerkkijono" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Virheellinen tyyppi: odotettiin instanceof ${issue2.expected}, oli ${received}`; + } + return `Virheellinen tyyppi: odotettiin ${expected}, oli ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Virheellinen sy\xF6te: t\xE4ytyy olla ${stringifyPrimitive(issue2.values[0])}`; + return `Virheellinen valinta: t\xE4ytyy olla yksi seuraavista: ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Liian suuri: ${sizing.subject} t\xE4ytyy olla ${adj}${issue2.maximum.toString()} ${sizing.unit}`.trim(); + } + return `Liian suuri: arvon t\xE4ytyy olla ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Liian pieni: ${sizing.subject} t\xE4ytyy olla ${adj}${issue2.minimum.toString()} ${sizing.unit}`.trim(); + } + return `Liian pieni: arvon t\xE4ytyy olla ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Virheellinen sy\xF6te: t\xE4ytyy alkaa "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Virheellinen sy\xF6te: t\xE4ytyy loppua "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Virheellinen sy\xF6te: t\xE4ytyy sis\xE4lt\xE4\xE4 "${_issue.includes}"`; + if (_issue.format === "regex") { + return `Virheellinen sy\xF6te: t\xE4ytyy vastata s\xE4\xE4nn\xF6llist\xE4 lauseketta ${_issue.pattern}`; + } + return `Virheellinen ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Virheellinen luku: t\xE4ytyy olla luvun ${issue2.divisor} monikerta`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "Tuntemattomat avaimet" : "Tuntematon avain"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return "Virheellinen avain tietueessa"; + case "invalid_union": + return "Virheellinen unioni"; + case "invalid_element": + return "Virheellinen arvo joukossa"; + default: + return `Virheellinen sy\xF6te`; + } + }; +}; +function fi_default() { + return { + localeError: error14() + }; +} + +// ../../node_modules/zod/v4/locales/fr.js +var error15 = () => { + const Sizable = { + string: { unit: "caract\xE8res", verb: "avoir" }, + file: { unit: "octets", verb: "avoir" }, + array: { unit: "\xE9l\xE9ments", verb: "avoir" }, + set: { unit: "\xE9l\xE9ments", verb: "avoir" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "entr\xE9e", + email: "adresse e-mail", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "date et heure ISO", + date: "date ISO", + time: "heure ISO", + duration: "dur\xE9e ISO", + ipv4: "adresse IPv4", + ipv6: "adresse IPv6", + cidrv4: "plage IPv4", + cidrv6: "plage IPv6", + base64: "cha\xEEne encod\xE9e en base64", + base64url: "cha\xEEne encod\xE9e en base64url", + json_string: "cha\xEEne JSON", + e164: "num\xE9ro E.164", + jwt: "JWT", + template_literal: "entr\xE9e" + }; + const TypeDictionary = { + string: "cha\xEEne", + number: "nombre", + int: "entier", + boolean: "bool\xE9en", + bigint: "grand entier", + symbol: "symbole", + undefined: "ind\xE9fini", + null: "null", + never: "jamais", + void: "vide", + date: "date", + array: "tableau", + object: "objet", + tuple: "tuple", + record: "enregistrement", + map: "carte", + set: "ensemble", + file: "fichier", + nonoptional: "non-optionnel", + nan: "NaN", + function: "fonction" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Entr\xE9e invalide : instanceof ${issue2.expected} attendu, ${received} re\xE7u`; + } + return `Entr\xE9e invalide : ${expected} attendu, ${received} re\xE7u`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Entr\xE9e invalide : ${stringifyPrimitive(issue2.values[0])} attendu`; + return `Option invalide : une valeur parmi ${joinValues(issue2.values, "|")} attendue`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Trop grand : ${TypeDictionary[issue2.origin] ?? "valeur"} doit ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\xE9l\xE9ment(s)"}`; + return `Trop grand : ${TypeDictionary[issue2.origin] ?? "valeur"} doit \xEAtre ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Trop petit : ${TypeDictionary[issue2.origin] ?? "valeur"} doit ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + return `Trop petit : ${TypeDictionary[issue2.origin] ?? "valeur"} doit \xEAtre ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Cha\xEEne invalide : doit commencer par "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Cha\xEEne invalide : doit se terminer par "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Cha\xEEne invalide : doit inclure "${_issue.includes}"`; + if (_issue.format === "regex") + return `Cha\xEEne invalide : doit correspondre au mod\xE8le ${_issue.pattern}`; + return `${FormatDictionary[_issue.format] ?? issue2.format} invalide`; + } + case "not_multiple_of": + return `Nombre invalide : doit \xEAtre un multiple de ${issue2.divisor}`; + case "unrecognized_keys": + return `Cl\xE9${issue2.keys.length > 1 ? "s" : ""} non reconnue${issue2.keys.length > 1 ? "s" : ""} : ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Cl\xE9 invalide dans ${issue2.origin}`; + case "invalid_union": + return "Entr\xE9e invalide"; + case "invalid_element": + return `Valeur invalide dans ${issue2.origin}`; + default: + return `Entr\xE9e invalide`; + } + }; +}; +function fr_default() { + return { + localeError: error15() + }; +} + +// ../../node_modules/zod/v4/locales/fr-CA.js +var error16 = () => { + const Sizable = { + string: { unit: "caract\xE8res", verb: "avoir" }, + file: { unit: "octets", verb: "avoir" }, + array: { unit: "\xE9l\xE9ments", verb: "avoir" }, + set: { unit: "\xE9l\xE9ments", verb: "avoir" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "entr\xE9e", + email: "adresse courriel", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "date-heure ISO", + date: "date ISO", + time: "heure ISO", + duration: "dur\xE9e ISO", + ipv4: "adresse IPv4", + ipv6: "adresse IPv6", + cidrv4: "plage IPv4", + cidrv6: "plage IPv6", + base64: "cha\xEEne encod\xE9e en base64", + base64url: "cha\xEEne encod\xE9e en base64url", + json_string: "cha\xEEne JSON", + e164: "num\xE9ro E.164", + jwt: "JWT", + template_literal: "entr\xE9e" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Entr\xE9e invalide : attendu instanceof ${issue2.expected}, re\xE7u ${received}`; + } + return `Entr\xE9e invalide : attendu ${expected}, re\xE7u ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Entr\xE9e invalide : attendu ${stringifyPrimitive(issue2.values[0])}`; + return `Option invalide : attendu l'une des valeurs suivantes ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "\u2264" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Trop grand : attendu que ${issue2.origin ?? "la valeur"} ait ${adj}${issue2.maximum.toString()} ${sizing.unit}`; + return `Trop grand : attendu que ${issue2.origin ?? "la valeur"} soit ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? "\u2265" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Trop petit : attendu que ${issue2.origin} ait ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Trop petit : attendu que ${issue2.origin} soit ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Cha\xEEne invalide : doit commencer par "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Cha\xEEne invalide : doit se terminer par "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Cha\xEEne invalide : doit inclure "${_issue.includes}"`; + if (_issue.format === "regex") + return `Cha\xEEne invalide : doit correspondre au motif ${_issue.pattern}`; + return `${FormatDictionary[_issue.format] ?? issue2.format} invalide`; + } + case "not_multiple_of": + return `Nombre invalide : doit \xEAtre un multiple de ${issue2.divisor}`; + case "unrecognized_keys": + return `Cl\xE9${issue2.keys.length > 1 ? "s" : ""} non reconnue${issue2.keys.length > 1 ? "s" : ""} : ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Cl\xE9 invalide dans ${issue2.origin}`; + case "invalid_union": + return "Entr\xE9e invalide"; + case "invalid_element": + return `Valeur invalide dans ${issue2.origin}`; + default: + return `Entr\xE9e invalide`; + } + }; +}; +function fr_CA_default() { + return { + localeError: error16() + }; +} + +// ../../node_modules/zod/v4/locales/he.js +var error17 = () => { + const TypeNames = { + string: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA", gender: "f" }, + number: { label: "\u05DE\u05E1\u05E4\u05E8", gender: "m" }, + boolean: { label: "\u05E2\u05E8\u05DA \u05D1\u05D5\u05DC\u05D9\u05D0\u05E0\u05D9", gender: "m" }, + bigint: { label: "BigInt", gender: "m" }, + date: { label: "\u05EA\u05D0\u05E8\u05D9\u05DA", gender: "m" }, + array: { label: "\u05DE\u05E2\u05E8\u05DA", gender: "m" }, + object: { label: "\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8", gender: "m" }, + null: { label: "\u05E2\u05E8\u05DA \u05E8\u05D9\u05E7 (null)", gender: "m" }, + undefined: { label: "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05DE\u05D5\u05D2\u05D3\u05E8 (undefined)", gender: "m" }, + symbol: { label: "\u05E1\u05D9\u05DE\u05D1\u05D5\u05DC (Symbol)", gender: "m" }, + function: { label: "\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4", gender: "f" }, + map: { label: "\u05DE\u05E4\u05D4 (Map)", gender: "f" }, + set: { label: "\u05E7\u05D1\u05D5\u05E6\u05D4 (Set)", gender: "f" }, + file: { label: "\u05E7\u05D5\u05D1\u05E5", gender: "m" }, + promise: { label: "Promise", gender: "m" }, + NaN: { label: "NaN", gender: "m" }, + unknown: { label: "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05D9\u05D3\u05D5\u05E2", gender: "m" }, + value: { label: "\u05E2\u05E8\u05DA", gender: "m" } + }; + const Sizable = { + string: { unit: "\u05EA\u05D5\u05D5\u05D9\u05DD", shortLabel: "\u05E7\u05E6\u05E8", longLabel: "\u05D0\u05E8\u05D5\u05DA" }, + file: { unit: "\u05D1\u05D9\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" }, + array: { unit: "\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" }, + set: { unit: "\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" }, + number: { unit: "", shortLabel: "\u05E7\u05D8\u05DF", longLabel: "\u05D2\u05D3\u05D5\u05DC" } + // no unit + }; + const typeEntry = (t) => t ? TypeNames[t] : void 0; + const typeLabel = (t) => { + const e = typeEntry(t); + if (e) + return e.label; + return t ?? TypeNames.unknown.label; + }; + const withDefinite = (t) => `\u05D4${typeLabel(t)}`; + const verbFor = (t) => { + const e = typeEntry(t); + const gender = e?.gender ?? "m"; + return gender === "f" ? "\u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05D9\u05D5\u05EA" : "\u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA"; + }; + const getSizing = (origin) => { + if (!origin) + return null; + return Sizable[origin] ?? null; + }; + const FormatDictionary = { + regex: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + email: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC", gender: "f" }, + url: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA \u05E8\u05E9\u05EA", gender: "f" }, + emoji: { label: "\u05D0\u05D9\u05DE\u05D5\u05D2'\u05D9", gender: "m" }, + uuid: { label: "UUID", gender: "m" }, + nanoid: { label: "nanoid", gender: "m" }, + guid: { label: "GUID", gender: "m" }, + cuid: { label: "cuid", gender: "m" }, + cuid2: { label: "cuid2", gender: "m" }, + ulid: { label: "ULID", gender: "m" }, + xid: { label: "XID", gender: "m" }, + ksuid: { label: "KSUID", gender: "m" }, + datetime: { label: "\u05EA\u05D0\u05E8\u05D9\u05DA \u05D5\u05D6\u05DE\u05DF ISO", gender: "m" }, + date: { label: "\u05EA\u05D0\u05E8\u05D9\u05DA ISO", gender: "m" }, + time: { label: "\u05D6\u05DE\u05DF ISO", gender: "m" }, + duration: { label: "\u05DE\u05E9\u05DA \u05D6\u05DE\u05DF ISO", gender: "m" }, + ipv4: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA IPv4", gender: "f" }, + ipv6: { label: "\u05DB\u05EA\u05D5\u05D1\u05EA IPv6", gender: "f" }, + cidrv4: { label: "\u05D8\u05D5\u05D5\u05D7 IPv4", gender: "m" }, + cidrv6: { label: "\u05D8\u05D5\u05D5\u05D7 IPv6", gender: "m" }, + base64: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64", gender: "f" }, + base64url: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64 \u05DC\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05E8\u05E9\u05EA", gender: "f" }, + json_string: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA JSON", gender: "f" }, + e164: { label: "\u05DE\u05E1\u05E4\u05E8 E.164", gender: "m" }, + jwt: { label: "JWT", gender: "m" }, + ends_with: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + includes: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + lowercase: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + starts_with: { label: "\u05E7\u05DC\u05D8", gender: "m" }, + uppercase: { label: "\u05E7\u05DC\u05D8", gender: "m" } + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expectedKey = issue2.expected; + const expected = TypeDictionary[expectedKey ?? ""] ?? typeLabel(expectedKey); + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? TypeNames[receivedType]?.label ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA instanceof ${issue2.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`; + } + return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`; + } + case "invalid_value": { + if (issue2.values.length === 1) { + return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05E2\u05E8\u05DA \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA ${stringifyPrimitive(issue2.values[0])}`; + } + const stringified = issue2.values.map((v) => stringifyPrimitive(v)); + if (issue2.values.length === 2) { + return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${stringified[0]} \u05D0\u05D5 ${stringified[1]}`; + } + const lastValue = stringified[stringified.length - 1]; + const restValues = stringified.slice(0, -1).join(", "); + return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${restValues} \u05D0\u05D5 ${lastValue}`; + } + case "too_big": { + const sizing = getSizing(issue2.origin); + const subject = withDefinite(issue2.origin ?? "value"); + if (issue2.origin === "string") { + return `${sizing?.longLabel ?? "\u05D0\u05E8\u05D5\u05DA"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue2.maximum.toString()} ${sizing?.unit ?? ""} ${issue2.inclusive ? "\u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA" : "\u05DC\u05DB\u05DC \u05D4\u05D9\u05D5\u05EA\u05E8"}`.trim(); + } + if (issue2.origin === "number") { + const comparison = issue2.inclusive ? `\u05E7\u05D8\u05DF \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue2.maximum}` : `\u05E7\u05D8\u05DF \u05DE-${issue2.maximum}`; + return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`; + } + if (issue2.origin === "array" || issue2.origin === "set") { + const verb = issue2.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA"; + const comparison = issue2.inclusive ? `${issue2.maximum} ${sizing?.unit ?? ""} \u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA` : `\u05E4\u05D7\u05D5\u05EA \u05DE-${issue2.maximum} ${sizing?.unit ?? ""}`; + return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim(); + } + const adj = issue2.inclusive ? "<=" : "<"; + const be = verbFor(issue2.origin ?? "value"); + if (sizing?.unit) { + return `${sizing.longLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.maximum.toString()} ${sizing.unit}`; + } + return `${sizing?.longLabel ?? "\u05D2\u05D3\u05D5\u05DC"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const sizing = getSizing(issue2.origin); + const subject = withDefinite(issue2.origin ?? "value"); + if (issue2.origin === "string") { + return `${sizing?.shortLabel ?? "\u05E7\u05E6\u05E8"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue2.minimum.toString()} ${sizing?.unit ?? ""} ${issue2.inclusive ? "\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8" : "\u05DC\u05E4\u05D7\u05D5\u05EA"}`.trim(); + } + if (issue2.origin === "number") { + const comparison = issue2.inclusive ? `\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue2.minimum}` : `\u05D2\u05D3\u05D5\u05DC \u05DE-${issue2.minimum}`; + return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`; + } + if (issue2.origin === "array" || issue2.origin === "set") { + const verb = issue2.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA"; + if (issue2.minimum === 1 && issue2.inclusive) { + const singularPhrase = issue2.origin === "set" ? "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3" : "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3"; + return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${singularPhrase}`; + } + const comparison = issue2.inclusive ? `${issue2.minimum} ${sizing?.unit ?? ""} \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8` : `\u05D9\u05D5\u05EA\u05E8 \u05DE-${issue2.minimum} ${sizing?.unit ?? ""}`; + return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim(); + } + const adj = issue2.inclusive ? ">=" : ">"; + const be = verbFor(issue2.origin ?? "value"); + if (sizing?.unit) { + return `${sizing.shortLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `${sizing?.shortLabel ?? "\u05E7\u05D8\u05DF"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ${_issue.pattern}`; + const nounEntry = FormatDictionary[_issue.format]; + const noun = nounEntry?.label ?? _issue.format; + const gender = nounEntry?.gender ?? "m"; + const adjective = gender === "f" ? "\u05EA\u05E7\u05D9\u05E0\u05D4" : "\u05EA\u05E7\u05D9\u05DF"; + return `${noun} \u05DC\u05D0 ${adjective}`; + } + case "not_multiple_of": + return `\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ${issue2.divisor}`; + case "unrecognized_keys": + return `\u05DE\u05E4\u05EA\u05D7${issue2.keys.length > 1 ? "\u05D5\u05EA" : ""} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${issue2.keys.length > 1 ? "\u05D9\u05DD" : "\u05D4"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": { + return `\u05E9\u05D3\u05D4 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8`; + } + case "invalid_union": + return "\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF"; + case "invalid_element": { + const place = withDefinite(issue2.origin ?? "array"); + return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${place}`; + } + default: + return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF`; + } + }; +}; +function he_default() { + return { + localeError: error17() + }; +} + +// ../../node_modules/zod/v4/locales/hr.js +var error18 = () => { + const Sizable = { + string: { unit: "znakova", verb: "imati" }, + file: { unit: "bajtova", verb: "imati" }, + array: { unit: "stavki", verb: "imati" }, + set: { unit: "stavki", verb: "imati" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "unos", + email: "email adresa", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO datum i vrijeme", + date: "ISO datum", + time: "ISO vrijeme", + duration: "ISO trajanje", + ipv4: "IPv4 adresa", + ipv6: "IPv6 adresa", + cidrv4: "IPv4 raspon", + cidrv6: "IPv6 raspon", + base64: "base64 kodirani tekst", + base64url: "base64url kodirani tekst", + json_string: "JSON tekst", + e164: "E.164 broj", + jwt: "JWT", + template_literal: "unos" + }; + const TypeDictionary = { + nan: "NaN", + string: "tekst", + number: "broj", + boolean: "boolean", + array: "niz", + object: "objekt", + set: "skup", + file: "datoteka", + date: "datum", + bigint: "bigint", + symbol: "simbol", + undefined: "undefined", + null: "null", + function: "funkcija", + map: "mapa" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Neispravan unos: o\u010Dekuje se instanceof ${issue2.expected}, a primljeno je ${received}`; + } + return `Neispravan unos: o\u010Dekuje se ${expected}, a primljeno je ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Neispravna vrijednost: o\u010Dekivano ${stringifyPrimitive(issue2.values[0])}`; + return `Neispravna opcija: o\u010Dekivano jedno od ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + const origin = TypeDictionary[issue2.origin] ?? issue2.origin; + if (sizing) + return `Preveliko: o\u010Dekivano da ${origin ?? "vrijednost"} ima ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elemenata"}`; + return `Preveliko: o\u010Dekivano da ${origin ?? "vrijednost"} bude ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + const origin = TypeDictionary[issue2.origin] ?? issue2.origin; + if (sizing) { + return `Premalo: o\u010Dekivano da ${origin} ima ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Premalo: o\u010Dekivano da ${origin} bude ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Neispravan tekst: mora zapo\u010Dinjati s "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Neispravan tekst: mora zavr\u0161avati s "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Neispravan tekst: mora sadr\u017Eavati "${_issue.includes}"`; + if (_issue.format === "regex") + return `Neispravan tekst: mora odgovarati uzorku ${_issue.pattern}`; + return `Neispravna ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Neispravan broj: mora biti vi\u0161ekratnik od ${issue2.divisor}`; + case "unrecognized_keys": + return `Neprepoznat${issue2.keys.length > 1 ? "i klju\u010Devi" : " klju\u010D"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Neispravan klju\u010D u ${TypeDictionary[issue2.origin] ?? issue2.origin}`; + case "invalid_union": + return "Neispravan unos"; + case "invalid_element": + return `Neispravna vrijednost u ${TypeDictionary[issue2.origin] ?? issue2.origin}`; + default: + return `Neispravan unos`; + } + }; +}; +function hr_default() { + return { + localeError: error18() + }; +} + +// ../../node_modules/zod/v4/locales/hu.js +var error19 = () => { + const Sizable = { + string: { unit: "karakter", verb: "legyen" }, + file: { unit: "byte", verb: "legyen" }, + array: { unit: "elem", verb: "legyen" }, + set: { unit: "elem", verb: "legyen" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "bemenet", + email: "email c\xEDm", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO id\u0151b\xE9lyeg", + date: "ISO d\xE1tum", + time: "ISO id\u0151", + duration: "ISO id\u0151intervallum", + ipv4: "IPv4 c\xEDm", + ipv6: "IPv6 c\xEDm", + cidrv4: "IPv4 tartom\xE1ny", + cidrv6: "IPv6 tartom\xE1ny", + base64: "base64-k\xF3dolt string", + base64url: "base64url-k\xF3dolt string", + json_string: "JSON string", + e164: "E.164 sz\xE1m", + jwt: "JWT", + template_literal: "bemenet" + }; + const TypeDictionary = { + nan: "NaN", + number: "sz\xE1m", + array: "t\xF6mb" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k instanceof ${issue2.expected}, a kapott \xE9rt\xE9k ${received}`; + } + return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${expected}, a kapott \xE9rt\xE9k ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${stringifyPrimitive(issue2.values[0])}`; + return `\xC9rv\xE9nytelen opci\xF3: valamelyik \xE9rt\xE9k v\xE1rt ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `T\xFAl nagy: ${issue2.origin ?? "\xE9rt\xE9k"} m\xE9rete t\xFAl nagy ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elem"}`; + return `T\xFAl nagy: a bemeneti \xE9rt\xE9k ${issue2.origin ?? "\xE9rt\xE9k"} t\xFAl nagy: ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${issue2.origin} m\xE9rete t\xFAl kicsi ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${issue2.origin} t\xFAl kicsi ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\xC9rv\xE9nytelen string: "${_issue.prefix}" \xE9rt\xE9kkel kell kezd\u0151dnie`; + if (_issue.format === "ends_with") + return `\xC9rv\xE9nytelen string: "${_issue.suffix}" \xE9rt\xE9kkel kell v\xE9gz\u0151dnie`; + if (_issue.format === "includes") + return `\xC9rv\xE9nytelen string: "${_issue.includes}" \xE9rt\xE9ket kell tartalmaznia`; + if (_issue.format === "regex") + return `\xC9rv\xE9nytelen string: ${_issue.pattern} mint\xE1nak kell megfelelnie`; + return `\xC9rv\xE9nytelen ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\xC9rv\xE9nytelen sz\xE1m: ${issue2.divisor} t\xF6bbsz\xF6r\xF6s\xE9nek kell lennie`; + case "unrecognized_keys": + return `Ismeretlen kulcs${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\xC9rv\xE9nytelen kulcs ${issue2.origin}`; + case "invalid_union": + return "\xC9rv\xE9nytelen bemenet"; + case "invalid_element": + return `\xC9rv\xE9nytelen \xE9rt\xE9k: ${issue2.origin}`; + default: + return `\xC9rv\xE9nytelen bemenet`; + } + }; +}; +function hu_default() { + return { + localeError: error19() + }; +} + +// ../../node_modules/zod/v4/locales/hy.js +function getArmenianPlural(count, one, many) { + return Math.abs(count) === 1 ? one : many; +} +function withDefiniteArticle(word) { + if (!word) + return ""; + const vowels = ["\u0561", "\u0565", "\u0568", "\u056B", "\u0578", "\u0578\u0582", "\u0585"]; + const lastChar = word[word.length - 1]; + return word + (vowels.includes(lastChar) ? "\u0576" : "\u0568"); +} +var error20 = () => { + const Sizable = { + string: { + unit: { + one: "\u0576\u0577\u0561\u0576", + many: "\u0576\u0577\u0561\u0576\u0576\u0565\u0580" + }, + verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" + }, + file: { + unit: { + one: "\u0562\u0561\u0575\u0569", + many: "\u0562\u0561\u0575\u0569\u0565\u0580" + }, + verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" + }, + array: { + unit: { + one: "\u057F\u0561\u0580\u0580", + many: "\u057F\u0561\u0580\u0580\u0565\u0580" + }, + verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" + }, + set: { + unit: { + one: "\u057F\u0561\u0580\u0580", + many: "\u057F\u0561\u0580\u0580\u0565\u0580" + }, + verb: "\u0578\u0582\u0576\u0565\u0576\u0561\u056C" + } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0574\u0578\u0582\u057F\u0584", + email: "\u0567\u056C. \u0570\u0561\u057D\u0581\u0565", + url: "URL", + emoji: "\u0567\u0574\u0578\u057B\u056B", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E \u0587 \u056A\u0561\u0574", + date: "ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E", + time: "ISO \u056A\u0561\u0574", + duration: "ISO \u057F\u0587\u0578\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576", + ipv4: "IPv4 \u0570\u0561\u057D\u0581\u0565", + ipv6: "IPv6 \u0570\u0561\u057D\u0581\u0565", + cidrv4: "IPv4 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584", + cidrv6: "IPv6 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584", + base64: "base64 \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572", + base64url: "base64url \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572", + json_string: "JSON \u057F\u0578\u0572", + e164: "E.164 \u0570\u0561\u0574\u0561\u0580", + jwt: "JWT", + template_literal: "\u0574\u0578\u0582\u057F\u0584" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0569\u056B\u057E", + array: "\u0566\u0561\u0576\u0563\u057E\u0561\u056E" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 instanceof ${issue2.expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`; + } + return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${stringifyPrimitive(issue2.values[1])}`; + return `\u054D\u056D\u0561\u056C \u057F\u0561\u0580\u0562\u0565\u0580\u0561\u056F\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 \u0570\u0565\u057F\u0587\u0575\u0561\u056C\u0576\u0565\u0580\u056B\u0581 \u0574\u0565\u056F\u0568\u055D ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + const maxValue = Number(issue2.maximum); + const unit = getArmenianPlural(maxValue, sizing.unit.one, sizing.unit.many); + return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin ?? "\u0561\u0580\u056A\u0565\u0584")} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue2.maximum.toString()} ${unit}`; + } + return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin ?? "\u0561\u0580\u056A\u0565\u0584")} \u056C\u056B\u0576\u056B ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + const minValue = Number(issue2.minimum); + const unit = getArmenianPlural(minValue, sizing.unit.one, sizing.unit.many); + return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin)} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue2.minimum.toString()} ${unit}`; + } + return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue2.origin)} \u056C\u056B\u0576\u056B ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057D\u056F\u057D\u057E\u056B "${_issue.prefix}"-\u0578\u057E`; + if (_issue.format === "ends_with") + return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0561\u057E\u0561\u0580\u057F\u057E\u056B "${_issue.suffix}"-\u0578\u057E`; + if (_issue.format === "includes") + return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057A\u0561\u0580\u0578\u0582\u0576\u0561\u056F\u056B "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0570\u0561\u0574\u0561\u057A\u0561\u057F\u0561\u057D\u056D\u0561\u0576\u056B ${_issue.pattern} \u0571\u0587\u0561\u0579\u0561\u0583\u056B\u0576`; + return `\u054D\u056D\u0561\u056C ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u054D\u056D\u0561\u056C \u0569\u056B\u057E\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0562\u0561\u0566\u0574\u0561\u057A\u0561\u057F\u056B\u056F \u056C\u056B\u0576\u056B ${issue2.divisor}-\u056B`; + case "unrecognized_keys": + return `\u0549\u0573\u0561\u0576\u0561\u0579\u057E\u0561\u056E \u0562\u0561\u0576\u0561\u056C\u056B${issue2.keys.length > 1 ? "\u0576\u0565\u0580" : ""}. ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u054D\u056D\u0561\u056C \u0562\u0561\u0576\u0561\u056C\u056B ${withDefiniteArticle(issue2.origin)}-\u0578\u0582\u0574`; + case "invalid_union": + return "\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574"; + case "invalid_element": + return `\u054D\u056D\u0561\u056C \u0561\u0580\u056A\u0565\u0584 ${withDefiniteArticle(issue2.origin)}-\u0578\u0582\u0574`; + default: + return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574`; + } + }; +}; +function hy_default() { + return { + localeError: error20() + }; +} + +// ../../node_modules/zod/v4/locales/id.js +var error21 = () => { + const Sizable = { + string: { unit: "karakter", verb: "memiliki" }, + file: { unit: "byte", verb: "memiliki" }, + array: { unit: "item", verb: "memiliki" }, + set: { unit: "item", verb: "memiliki" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "input", + email: "alamat email", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "tanggal dan waktu format ISO", + date: "tanggal format ISO", + time: "jam format ISO", + duration: "durasi format ISO", + ipv4: "alamat IPv4", + ipv6: "alamat IPv6", + cidrv4: "rentang alamat IPv4", + cidrv6: "rentang alamat IPv6", + base64: "string dengan enkode base64", + base64url: "string dengan enkode base64url", + json_string: "string JSON", + e164: "angka E.164", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Input tidak valid: diharapkan instanceof ${issue2.expected}, diterima ${received}`; + } + return `Input tidak valid: diharapkan ${expected}, diterima ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Input tidak valid: diharapkan ${stringifyPrimitive(issue2.values[0])}`; + return `Pilihan tidak valid: diharapkan salah satu dari ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Terlalu besar: diharapkan ${issue2.origin ?? "value"} memiliki ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elemen"}`; + return `Terlalu besar: diharapkan ${issue2.origin ?? "value"} menjadi ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Terlalu kecil: diharapkan ${issue2.origin} memiliki ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Terlalu kecil: diharapkan ${issue2.origin} menjadi ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `String tidak valid: harus dimulai dengan "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `String tidak valid: harus berakhir dengan "${_issue.suffix}"`; + if (_issue.format === "includes") + return `String tidak valid: harus menyertakan "${_issue.includes}"`; + if (_issue.format === "regex") + return `String tidak valid: harus sesuai pola ${_issue.pattern}`; + return `${FormatDictionary[_issue.format] ?? issue2.format} tidak valid`; + } + case "not_multiple_of": + return `Angka tidak valid: harus kelipatan dari ${issue2.divisor}`; + case "unrecognized_keys": + return `Kunci tidak dikenali ${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Kunci tidak valid di ${issue2.origin}`; + case "invalid_union": + return "Input tidak valid"; + case "invalid_element": + return `Nilai tidak valid di ${issue2.origin}`; + default: + return `Input tidak valid`; + } + }; +}; +function id_default() { + return { + localeError: error21() + }; +} + +// ../../node_modules/zod/v4/locales/is.js +var error22 = () => { + const Sizable = { + string: { unit: "stafi", verb: "a\xF0 hafa" }, + file: { unit: "b\xE6ti", verb: "a\xF0 hafa" }, + array: { unit: "hluti", verb: "a\xF0 hafa" }, + set: { unit: "hluti", verb: "a\xF0 hafa" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "gildi", + email: "netfang", + url: "vefsl\xF3\xF0", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO dagsetning og t\xEDmi", + date: "ISO dagsetning", + time: "ISO t\xEDmi", + duration: "ISO t\xEDmalengd", + ipv4: "IPv4 address", + ipv6: "IPv6 address", + cidrv4: "IPv4 range", + cidrv6: "IPv6 range", + base64: "base64-encoded strengur", + base64url: "base64url-encoded strengur", + json_string: "JSON strengur", + e164: "E.164 t\xF6lugildi", + jwt: "JWT", + template_literal: "gildi" + }; + const TypeDictionary = { + nan: "NaN", + number: "n\xFAmer", + array: "fylki" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Rangt gildi: \xDE\xFA sl\xF3st inn ${received} \xFEar sem \xE1 a\xF0 vera instanceof ${issue2.expected}`; + } + return `Rangt gildi: \xDE\xFA sl\xF3st inn ${received} \xFEar sem \xE1 a\xF0 vera ${expected}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Rangt gildi: gert r\xE1\xF0 fyrir ${stringifyPrimitive(issue2.values[0])}`; + return `\xD3gilt val: m\xE1 vera eitt af eftirfarandi ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Of st\xF3rt: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin ?? "gildi"} hafi ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "hluti"}`; + return `Of st\xF3rt: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin ?? "gildi"} s\xE9 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Of l\xEDti\xF0: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin} hafi ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Of l\xEDti\xF0: gert er r\xE1\xF0 fyrir a\xF0 ${issue2.origin} s\xE9 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\xD3gildur strengur: ver\xF0ur a\xF0 byrja \xE1 "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\xD3gildur strengur: ver\xF0ur a\xF0 enda \xE1 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\xD3gildur strengur: ver\xF0ur a\xF0 innihalda "${_issue.includes}"`; + if (_issue.format === "regex") + return `\xD3gildur strengur: ver\xF0ur a\xF0 fylgja mynstri ${_issue.pattern}`; + return `Rangt ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `R\xF6ng tala: ver\xF0ur a\xF0 vera margfeldi af ${issue2.divisor}`; + case "unrecognized_keys": + return `\xD3\xFEekkt ${issue2.keys.length > 1 ? "ir lyklar" : "ur lykill"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Rangur lykill \xED ${issue2.origin}`; + case "invalid_union": + return "Rangt gildi"; + case "invalid_element": + return `Rangt gildi \xED ${issue2.origin}`; + default: + return `Rangt gildi`; + } + }; +}; +function is_default() { + return { + localeError: error22() + }; +} + +// ../../node_modules/zod/v4/locales/it.js +var error23 = () => { + const Sizable = { + string: { unit: "caratteri", verb: "avere" }, + file: { unit: "byte", verb: "avere" }, + array: { unit: "elementi", verb: "avere" }, + set: { unit: "elementi", verb: "avere" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "input", + email: "indirizzo email", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "data e ora ISO", + date: "data ISO", + time: "ora ISO", + duration: "durata ISO", + ipv4: "indirizzo IPv4", + ipv6: "indirizzo IPv6", + cidrv4: "intervallo IPv4", + cidrv6: "intervallo IPv6", + base64: "stringa codificata in base64", + base64url: "URL codificata in base64", + json_string: "stringa JSON", + e164: "numero E.164", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN", + number: "numero", + array: "vettore" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Input non valido: atteso instanceof ${issue2.expected}, ricevuto ${received}`; + } + return `Input non valido: atteso ${expected}, ricevuto ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Input non valido: atteso ${stringifyPrimitive(issue2.values[0])}`; + return `Opzione non valida: atteso uno tra ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Troppo grande: ${issue2.origin ?? "valore"} deve avere ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementi"}`; + return `Troppo grande: ${issue2.origin ?? "valore"} deve essere ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Troppo piccolo: ${issue2.origin} deve avere ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Troppo piccolo: ${issue2.origin} deve essere ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Stringa non valida: deve iniziare con "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Stringa non valida: deve terminare con "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Stringa non valida: deve includere "${_issue.includes}"`; + if (_issue.format === "regex") + return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`; + return `Input non valido: ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Numero non valido: deve essere un multiplo di ${issue2.divisor}`; + case "unrecognized_keys": + return `Chiav${issue2.keys.length > 1 ? "i" : "e"} non riconosciut${issue2.keys.length > 1 ? "e" : "a"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Chiave non valida in ${issue2.origin}`; + case "invalid_union": + return "Input non valido"; + case "invalid_element": + return `Valore non valido in ${issue2.origin}`; + default: + return `Input non valido`; + } + }; +}; +function it_default() { + return { + localeError: error23() + }; +} + +// ../../node_modules/zod/v4/locales/ja.js +var error24 = () => { + const Sizable = { + string: { unit: "\u6587\u5B57", verb: "\u3067\u3042\u308B" }, + file: { unit: "\u30D0\u30A4\u30C8", verb: "\u3067\u3042\u308B" }, + array: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" }, + set: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u5165\u529B\u5024", + email: "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9", + url: "URL", + emoji: "\u7D75\u6587\u5B57", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO\u65E5\u6642", + date: "ISO\u65E5\u4ED8", + time: "ISO\u6642\u523B", + duration: "ISO\u671F\u9593", + ipv4: "IPv4\u30A2\u30C9\u30EC\u30B9", + ipv6: "IPv6\u30A2\u30C9\u30EC\u30B9", + cidrv4: "IPv4\u7BC4\u56F2", + cidrv6: "IPv6\u7BC4\u56F2", + base64: "base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217", + base64url: "base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217", + json_string: "JSON\u6587\u5B57\u5217", + e164: "E.164\u756A\u53F7", + jwt: "JWT", + template_literal: "\u5165\u529B\u5024" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u6570\u5024", + array: "\u914D\u5217" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u7121\u52B9\u306A\u5165\u529B: instanceof ${issue2.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`; + } + return `\u7121\u52B9\u306A\u5165\u529B: ${expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u7121\u52B9\u306A\u5165\u529B: ${stringifyPrimitive(issue2.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`; + return `\u7121\u52B9\u306A\u9078\u629E: ${joinValues(issue2.values, "\u3001")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + case "too_big": { + const adj = issue2.inclusive ? "\u4EE5\u4E0B\u3067\u3042\u308B" : "\u3088\u308A\u5C0F\u3055\u3044"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue2.origin ?? "\u5024"}\u306F${issue2.maximum.toString()}${sizing.unit ?? "\u8981\u7D20"}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue2.origin ?? "\u5024"}\u306F${issue2.maximum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + } + case "too_small": { + const adj = issue2.inclusive ? "\u4EE5\u4E0A\u3067\u3042\u308B" : "\u3088\u308A\u5927\u304D\u3044"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue2.origin}\u306F${issue2.minimum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue2.origin}\u306F${issue2.minimum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.prefix}"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + if (_issue.format === "ends_with") + return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.suffix}"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + if (_issue.format === "includes") + return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.includes}"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + if (_issue.format === "regex") + return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${_issue.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + return `\u7121\u52B9\u306A${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u7121\u52B9\u306A\u6570\u5024: ${issue2.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`; + case "unrecognized_keys": + return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${issue2.keys.length > 1 ? "\u7FA4" : ""}: ${joinValues(issue2.keys, "\u3001")}`; + case "invalid_key": + return `${issue2.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`; + case "invalid_union": + return "\u7121\u52B9\u306A\u5165\u529B"; + case "invalid_element": + return `${issue2.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`; + default: + return `\u7121\u52B9\u306A\u5165\u529B`; + } + }; +}; +function ja_default() { + return { + localeError: error24() + }; +} + +// ../../node_modules/zod/v4/locales/ka.js +var error25 = () => { + const Sizable = { + string: { unit: "\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" }, + file: { unit: "\u10D1\u10D0\u10D8\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" }, + array: { unit: "\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" }, + set: { unit: "\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0", + email: "\u10D4\u10DA-\u10E4\u10DD\u10E1\u10E2\u10D8\u10E1 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8", + url: "URL", + emoji: "\u10D4\u10DB\u10DD\u10EF\u10D8", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8-\u10D3\u10E0\u10DD", + date: "\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8", + time: "\u10D3\u10E0\u10DD", + duration: "\u10EE\u10D0\u10DC\u10D2\u10E0\u10EB\u10DA\u10D8\u10D5\u10DD\u10D1\u10D0", + ipv4: "IPv4 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8", + ipv6: "IPv6 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8", + cidrv4: "IPv4 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8", + cidrv6: "IPv6 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8", + base64: "base64-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10D5\u10D4\u10DA\u10D8", + base64url: "base64url-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10D5\u10D4\u10DA\u10D8", + json_string: "JSON \u10D5\u10D4\u10DA\u10D8", + e164: "E.164 \u10DC\u10DD\u10DB\u10D4\u10E0\u10D8", + jwt: "JWT", + template_literal: "\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u10E0\u10D8\u10EA\u10EE\u10D5\u10D8", + string: "\u10D5\u10D4\u10DA\u10D8", + boolean: "\u10D1\u10E3\u10DA\u10D4\u10D0\u10DC\u10D8", + function: "\u10E4\u10E3\u10DC\u10E5\u10EA\u10D8\u10D0", + array: "\u10DB\u10D0\u10E1\u10D8\u10D5\u10D8" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 instanceof ${issue2.expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`; + } + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${stringifyPrimitive(issue2.values[0])}`; + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D0\u10E0\u10D8\u10D0\u10DC\u10E2\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8\u10D0 \u10D4\u10E0\u10D7-\u10D4\u10E0\u10D7\u10D8 ${joinValues(issue2.values, "|")}-\u10D3\u10D0\u10DC`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin ?? "\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit}`; + return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin ?? "\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0"} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue2.origin} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D4\u10DA\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10EC\u10E7\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 "${_issue.prefix}"-\u10D8\u10D7`; + } + if (_issue.format === "ends_with") + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D4\u10DA\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10DB\u10D7\u10D0\u10D5\u10E0\u10D3\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 "${_issue.suffix}"-\u10D8\u10D7`; + if (_issue.format === "includes") + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D4\u10DA\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1 "${_issue.includes}"-\u10E1`; + if (_issue.format === "regex") + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D4\u10DA\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D4\u10E1\u10D0\u10D1\u10D0\u10DB\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \u10E8\u10D0\u10D1\u10DA\u10DD\u10DC\u10E1 ${_issue.pattern}`; + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E0\u10D8\u10EA\u10EE\u10D5\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10E7\u10DD\u10E1 ${issue2.divisor}-\u10D8\u10E1 \u10EF\u10D4\u10E0\u10D0\u10D3\u10D8`; + case "unrecognized_keys": + return `\u10E3\u10EA\u10DC\u10DD\u10D1\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1${issue2.keys.length > 1 ? "\u10D4\u10D1\u10D8" : "\u10D8"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1\u10D8 ${issue2.origin}-\u10E8\u10D8`; + case "invalid_union": + return "\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0"; + case "invalid_element": + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0 ${issue2.origin}-\u10E8\u10D8`; + default: + return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0`; + } + }; +}; +function ka_default() { + return { + localeError: error25() + }; +} + +// ../../node_modules/zod/v4/locales/km.js +var error26 = () => { + const Sizable = { + string: { unit: "\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, + file: { unit: "\u1794\u17C3", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, + array: { unit: "\u1792\u17B6\u178F\u17BB", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, + set: { unit: "\u1792\u17B6\u178F\u17BB", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B", + email: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793\u17A2\u17CA\u17B8\u1798\u17C2\u179B", + url: "URL", + emoji: "\u179F\u1789\u17D2\u1789\u17B6\u17A2\u17B6\u179A\u1798\u17D2\u1798\u178E\u17CD", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 \u1793\u17B7\u1784\u1798\u17C9\u17C4\u1784 ISO", + date: "\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 ISO", + time: "\u1798\u17C9\u17C4\u1784 ISO", + duration: "\u179A\u1799\u17C8\u1796\u17C1\u179B ISO", + ipv4: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4", + ipv6: "\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6", + cidrv4: "\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4", + cidrv6: "\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6", + base64: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64", + base64url: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64url", + json_string: "\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A JSON", + e164: "\u179B\u17C1\u1781 E.164", + jwt: "JWT", + template_literal: "\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u179B\u17C1\u1781", + array: "\u17A2\u17B6\u179A\u17C1 (Array)", + null: "\u1782\u17D2\u1798\u17B6\u1793\u178F\u1798\u17D2\u179B\u17C3 (null)" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A instanceof ${issue2.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`; + } + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${stringifyPrimitive(issue2.values[0])}`; + return `\u1787\u1798\u17D2\u179A\u17BE\u179F\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1787\u17B6\u1798\u17BD\u1799\u1780\u17D2\u1793\u17BB\u1784\u1785\u17C6\u178E\u17C4\u1798 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin ?? "\u178F\u1798\u17D2\u179B\u17C3"} ${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "\u1792\u17B6\u178F\u17BB"}`; + return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin ?? "\u178F\u1798\u17D2\u179B\u17C3"} ${adj} ${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin} ${adj} ${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue2.origin} ${adj} ${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798\u178A\u17C4\u1799 "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1794\u1789\u17D2\u1785\u1794\u17CB\u178A\u17C4\u1799 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1798\u17B6\u1793 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1795\u17D2\u1782\u17BC\u1795\u17D2\u1782\u1784\u1793\u17B9\u1784\u1791\u1798\u17D2\u179A\u1784\u17CB\u178A\u17C2\u179B\u1794\u17B6\u1793\u1780\u17C6\u178E\u178F\u17CB ${_issue.pattern}`; + return `\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u179B\u17C1\u1781\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1787\u17B6\u1796\u17A0\u17BB\u1782\u17BB\u178E\u1793\u17C3 ${issue2.divisor}`; + case "unrecognized_keys": + return `\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u179F\u17C4\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue2.origin}`; + case "invalid_union": + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`; + case "invalid_element": + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue2.origin}`; + default: + return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`; + } + }; +}; +function km_default() { + return { + localeError: error26() + }; +} + +// ../../node_modules/zod/v4/locales/kh.js +function kh_default() { + return km_default(); +} + +// ../../node_modules/zod/v4/locales/ko.js +var error27 = () => { + const Sizable = { + string: { unit: "\uBB38\uC790", verb: "to have" }, + file: { unit: "\uBC14\uC774\uD2B8", verb: "to have" }, + array: { unit: "\uAC1C", verb: "to have" }, + set: { unit: "\uAC1C", verb: "to have" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\uC785\uB825", + email: "\uC774\uBA54\uC77C \uC8FC\uC18C", + url: "URL", + emoji: "\uC774\uBAA8\uC9C0", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \uB0A0\uC9DC\uC2DC\uAC04", + date: "ISO \uB0A0\uC9DC", + time: "ISO \uC2DC\uAC04", + duration: "ISO \uAE30\uAC04", + ipv4: "IPv4 \uC8FC\uC18C", + ipv6: "IPv6 \uC8FC\uC18C", + cidrv4: "IPv4 \uBC94\uC704", + cidrv6: "IPv6 \uBC94\uC704", + base64: "base64 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4", + base64url: "base64url \uC778\uCF54\uB529 \uBB38\uC790\uC5F4", + json_string: "JSON \uBB38\uC790\uC5F4", + e164: "E.164 \uBC88\uD638", + jwt: "JWT", + template_literal: "\uC785\uB825" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 instanceof ${issue2.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`; + } + return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${stringifyPrimitive(issue2.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`; + return `\uC798\uBABB\uB41C \uC635\uC158: ${joinValues(issue2.values, "\uB610\uB294 ")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`; + case "too_big": { + const adj = issue2.inclusive ? "\uC774\uD558" : "\uBBF8\uB9CC"; + const suffix = adj === "\uBBF8\uB9CC" ? "\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4" : "\uC5EC\uC57C \uD569\uB2C8\uB2E4"; + const sizing = getSizing(issue2.origin); + const unit = sizing?.unit ?? "\uC694\uC18C"; + if (sizing) + return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue2.maximum.toString()}${unit} ${adj}${suffix}`; + return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue2.maximum.toString()} ${adj}${suffix}`; + } + case "too_small": { + const adj = issue2.inclusive ? "\uC774\uC0C1" : "\uCD08\uACFC"; + const suffix = adj === "\uC774\uC0C1" ? "\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4" : "\uC5EC\uC57C \uD569\uB2C8\uB2E4"; + const sizing = getSizing(issue2.origin); + const unit = sizing?.unit ?? "\uC694\uC18C"; + if (sizing) { + return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue2.minimum.toString()}${unit} ${adj}${suffix}`; + } + return `${issue2.origin ?? "\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue2.minimum.toString()} ${adj}${suffix}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.prefix}"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`; + } + if (_issue.format === "ends_with") + return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.suffix}"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`; + if (_issue.format === "includes") + return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${_issue.includes}"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`; + if (_issue.format === "regex") + return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${_issue.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`; + return `\uC798\uBABB\uB41C ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\uC798\uBABB\uB41C \uC22B\uC790: ${issue2.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`; + case "unrecognized_keys": + return `\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\uC798\uBABB\uB41C \uD0A4: ${issue2.origin}`; + case "invalid_union": + return `\uC798\uBABB\uB41C \uC785\uB825`; + case "invalid_element": + return `\uC798\uBABB\uB41C \uAC12: ${issue2.origin}`; + default: + return `\uC798\uBABB\uB41C \uC785\uB825`; + } + }; +}; +function ko_default() { + return { + localeError: error27() + }; +} + +// ../../node_modules/zod/v4/locales/lt.js +var capitalizeFirstCharacter = (text) => { + return text.charAt(0).toUpperCase() + text.slice(1); +}; +function getUnitTypeFromNumber(number4) { + const abs = Math.abs(number4); + const last = abs % 10; + const last2 = abs % 100; + if (last2 >= 11 && last2 <= 19 || last === 0) + return "many"; + if (last === 1) + return "one"; + return "few"; +} +var error28 = () => { + const Sizable = { + string: { + unit: { + one: "simbolis", + few: "simboliai", + many: "simboli\u0173" + }, + verb: { + smaller: { + inclusive: "turi b\u016Bti ne ilgesn\u0117 kaip", + notInclusive: "turi b\u016Bti trumpesn\u0117 kaip" + }, + bigger: { + inclusive: "turi b\u016Bti ne trumpesn\u0117 kaip", + notInclusive: "turi b\u016Bti ilgesn\u0117 kaip" + } + } + }, + file: { + unit: { + one: "baitas", + few: "baitai", + many: "bait\u0173" + }, + verb: { + smaller: { + inclusive: "turi b\u016Bti ne didesnis kaip", + notInclusive: "turi b\u016Bti ma\u017Eesnis kaip" + }, + bigger: { + inclusive: "turi b\u016Bti ne ma\u017Eesnis kaip", + notInclusive: "turi b\u016Bti didesnis kaip" + } + } + }, + array: { + unit: { + one: "element\u0105", + few: "elementus", + many: "element\u0173" + }, + verb: { + smaller: { + inclusive: "turi tur\u0117ti ne daugiau kaip", + notInclusive: "turi tur\u0117ti ma\u017Eiau kaip" + }, + bigger: { + inclusive: "turi tur\u0117ti ne ma\u017Eiau kaip", + notInclusive: "turi tur\u0117ti daugiau kaip" + } + } + }, + set: { + unit: { + one: "element\u0105", + few: "elementus", + many: "element\u0173" + }, + verb: { + smaller: { + inclusive: "turi tur\u0117ti ne daugiau kaip", + notInclusive: "turi tur\u0117ti ma\u017Eiau kaip" + }, + bigger: { + inclusive: "turi tur\u0117ti ne ma\u017Eiau kaip", + notInclusive: "turi tur\u0117ti daugiau kaip" + } + } + } + }; + function getSizing(origin, unitType, inclusive, targetShouldBe) { + const result = Sizable[origin] ?? null; + if (result === null) + return result; + return { + unit: result.unit[unitType], + verb: result.verb[targetShouldBe][inclusive ? "inclusive" : "notInclusive"] + }; + } + const FormatDictionary = { + regex: "\u012Fvestis", + email: "el. pa\u0161to adresas", + url: "URL", + emoji: "jaustukas", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO data ir laikas", + date: "ISO data", + time: "ISO laikas", + duration: "ISO trukm\u0117", + ipv4: "IPv4 adresas", + ipv6: "IPv6 adresas", + cidrv4: "IPv4 tinklo prefiksas (CIDR)", + cidrv6: "IPv6 tinklo prefiksas (CIDR)", + base64: "base64 u\u017Ekoduota eilut\u0117", + base64url: "base64url u\u017Ekoduota eilut\u0117", + json_string: "JSON eilut\u0117", + e164: "E.164 numeris", + jwt: "JWT", + template_literal: "\u012Fvestis" + }; + const TypeDictionary = { + nan: "NaN", + number: "skai\u010Dius", + bigint: "sveikasis skai\u010Dius", + string: "eilut\u0117", + boolean: "login\u0117 reik\u0161m\u0117", + undefined: "neapibr\u0117\u017Eta reik\u0161m\u0117", + function: "funkcija", + symbol: "simbolis", + array: "masyvas", + object: "objektas", + null: "nulin\u0117 reik\u0161m\u0117" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Gautas tipas ${received}, o tik\u0117tasi - instanceof ${issue2.expected}`; + } + return `Gautas tipas ${received}, o tik\u0117tasi - ${expected}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Privalo b\u016Bti ${stringifyPrimitive(issue2.values[0])}`; + return `Privalo b\u016Bti vienas i\u0161 ${joinValues(issue2.values, "|")} pasirinkim\u0173`; + case "too_big": { + const origin = TypeDictionary[issue2.origin] ?? issue2.origin; + const sizing = getSizing(issue2.origin, getUnitTypeFromNumber(Number(issue2.maximum)), issue2.inclusive ?? false, "smaller"); + if (sizing?.verb) + return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} ${sizing.verb} ${issue2.maximum.toString()} ${sizing.unit ?? "element\u0173"}`; + const adj = issue2.inclusive ? "ne didesnis kaip" : "ma\u017Eesnis kaip"; + return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} turi b\u016Bti ${adj} ${issue2.maximum.toString()} ${sizing?.unit}`; + } + case "too_small": { + const origin = TypeDictionary[issue2.origin] ?? issue2.origin; + const sizing = getSizing(issue2.origin, getUnitTypeFromNumber(Number(issue2.minimum)), issue2.inclusive ?? false, "bigger"); + if (sizing?.verb) + return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} ${sizing.verb} ${issue2.minimum.toString()} ${sizing.unit ?? "element\u0173"}`; + const adj = issue2.inclusive ? "ne ma\u017Eesnis kaip" : "didesnis kaip"; + return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} turi b\u016Bti ${adj} ${issue2.minimum.toString()} ${sizing?.unit}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Eilut\u0117 privalo prasid\u0117ti "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Eilut\u0117 privalo pasibaigti "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Eilut\u0117 privalo \u012Ftraukti "${_issue.includes}"`; + if (_issue.format === "regex") + return `Eilut\u0117 privalo atitikti ${_issue.pattern}`; + return `Neteisingas ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Skai\u010Dius privalo b\u016Bti ${issue2.divisor} kartotinis.`; + case "unrecognized_keys": + return `Neatpa\u017Eint${issue2.keys.length > 1 ? "i" : "as"} rakt${issue2.keys.length > 1 ? "ai" : "as"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return "Rastas klaidingas raktas"; + case "invalid_union": + return "Klaidinga \u012Fvestis"; + case "invalid_element": { + const origin = TypeDictionary[issue2.origin] ?? issue2.origin; + return `${capitalizeFirstCharacter(origin ?? issue2.origin ?? "reik\u0161m\u0117")} turi klaiding\u0105 \u012Fvest\u012F`; + } + default: + return "Klaidinga \u012Fvestis"; + } + }; +}; +function lt_default() { + return { + localeError: error28() + }; +} + +// ../../node_modules/zod/v4/locales/mk.js +var error29 = () => { + const Sizable = { + string: { unit: "\u0437\u043D\u0430\u0446\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, + file: { unit: "\u0431\u0430\u0458\u0442\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, + array: { unit: "\u0441\u0442\u0430\u0432\u043A\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, + set: { unit: "\u0441\u0442\u0430\u0432\u043A\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0432\u043D\u0435\u0441", + email: "\u0430\u0434\u0440\u0435\u0441\u0430 \u043D\u0430 \u0435-\u043F\u043E\u0448\u0442\u0430", + url: "URL", + emoji: "\u0435\u043C\u043E\u045F\u0438", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0434\u0430\u0442\u0443\u043C \u0438 \u0432\u0440\u0435\u043C\u0435", + date: "ISO \u0434\u0430\u0442\u0443\u043C", + time: "ISO \u0432\u0440\u0435\u043C\u0435", + duration: "ISO \u0432\u0440\u0435\u043C\u0435\u0442\u0440\u0430\u0435\u045A\u0435", + ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441\u0430", + ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441\u0430", + cidrv4: "IPv4 \u043E\u043F\u0441\u0435\u0433", + cidrv6: "IPv6 \u043E\u043F\u0441\u0435\u0433", + base64: "base64-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430", + base64url: "base64url-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430", + json_string: "JSON \u043D\u0438\u0437\u0430", + e164: "E.164 \u0431\u0440\u043E\u0458", + jwt: "JWT", + template_literal: "\u0432\u043D\u0435\u0441" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0431\u0440\u043E\u0458", + array: "\u043D\u0438\u0437\u0430" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 instanceof ${issue2.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`; + } + return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Invalid input: expected ${stringifyPrimitive(issue2.values[0])}`; + return `\u0413\u0440\u0435\u0448\u0430\u043D\u0430 \u043E\u043F\u0446\u0438\u0458\u0430: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 \u0435\u0434\u043D\u0430 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin ?? "\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0438"}`; + return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin ?? "\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue2.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u043D\u0443\u0432\u0430 \u0441\u043E "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u0432\u0440\u0448\u0443\u0432\u0430 \u0441\u043E "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0432\u043A\u043B\u0443\u0447\u0443\u0432\u0430 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u043E\u0434\u0433\u043E\u0430\u0440\u0430 \u043D\u0430 \u043F\u0430\u0442\u0435\u0440\u043D\u043E\u0442 ${_issue.pattern}`; + return `Invalid ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u0413\u0440\u0435\u0448\u0435\u043D \u0431\u0440\u043E\u0458: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u0435\u043B\u0438\u0432 \u0441\u043E ${issue2.divisor}`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D\u0438 \u043A\u043B\u0443\u0447\u0435\u0432\u0438" : "\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D \u043A\u043B\u0443\u0447"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${issue2.origin}`; + case "invalid_union": + return "\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441"; + case "invalid_element": + return `\u0413\u0440\u0435\u0448\u043D\u0430 \u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442 \u0432\u043E ${issue2.origin}`; + default: + return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441`; + } + }; +}; +function mk_default() { + return { + localeError: error29() + }; +} + +// ../../node_modules/zod/v4/locales/ms.js +var error30 = () => { + const Sizable = { + string: { unit: "aksara", verb: "mempunyai" }, + file: { unit: "bait", verb: "mempunyai" }, + array: { unit: "elemen", verb: "mempunyai" }, + set: { unit: "elemen", verb: "mempunyai" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "input", + email: "alamat e-mel", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "tarikh masa ISO", + date: "tarikh ISO", + time: "masa ISO", + duration: "tempoh ISO", + ipv4: "alamat IPv4", + ipv6: "alamat IPv6", + cidrv4: "julat IPv4", + cidrv6: "julat IPv6", + base64: "string dikodkan base64", + base64url: "string dikodkan base64url", + json_string: "string JSON", + e164: "nombor E.164", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN", + number: "nombor" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Input tidak sah: dijangka instanceof ${issue2.expected}, diterima ${received}`; + } + return `Input tidak sah: dijangka ${expected}, diterima ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Input tidak sah: dijangka ${stringifyPrimitive(issue2.values[0])}`; + return `Pilihan tidak sah: dijangka salah satu daripada ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Terlalu besar: dijangka ${issue2.origin ?? "nilai"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elemen"}`; + return `Terlalu besar: dijangka ${issue2.origin ?? "nilai"} adalah ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Terlalu kecil: dijangka ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Terlalu kecil: dijangka ${issue2.origin} adalah ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `String tidak sah: mesti bermula dengan "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `String tidak sah: mesti berakhir dengan "${_issue.suffix}"`; + if (_issue.format === "includes") + return `String tidak sah: mesti mengandungi "${_issue.includes}"`; + if (_issue.format === "regex") + return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`; + return `${FormatDictionary[_issue.format] ?? issue2.format} tidak sah`; + } + case "not_multiple_of": + return `Nombor tidak sah: perlu gandaan ${issue2.divisor}`; + case "unrecognized_keys": + return `Kunci tidak dikenali: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Kunci tidak sah dalam ${issue2.origin}`; + case "invalid_union": + return "Input tidak sah"; + case "invalid_element": + return `Nilai tidak sah dalam ${issue2.origin}`; + default: + return `Input tidak sah`; + } + }; +}; +function ms_default() { + return { + localeError: error30() + }; +} + +// ../../node_modules/zod/v4/locales/nl.js +var error31 = () => { + const Sizable = { + string: { unit: "tekens", verb: "heeft" }, + file: { unit: "bytes", verb: "heeft" }, + array: { unit: "elementen", verb: "heeft" }, + set: { unit: "elementen", verb: "heeft" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "invoer", + email: "emailadres", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO datum en tijd", + date: "ISO datum", + time: "ISO tijd", + duration: "ISO duur", + ipv4: "IPv4-adres", + ipv6: "IPv6-adres", + cidrv4: "IPv4-bereik", + cidrv6: "IPv6-bereik", + base64: "base64-gecodeerde tekst", + base64url: "base64 URL-gecodeerde tekst", + json_string: "JSON string", + e164: "E.164-nummer", + jwt: "JWT", + template_literal: "invoer" + }; + const TypeDictionary = { + nan: "NaN", + number: "getal" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Ongeldige invoer: verwacht instanceof ${issue2.expected}, ontving ${received}`; + } + return `Ongeldige invoer: verwacht ${expected}, ontving ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ongeldige invoer: verwacht ${stringifyPrimitive(issue2.values[0])}`; + return `Ongeldige optie: verwacht \xE9\xE9n van ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + const longName = issue2.origin === "date" ? "laat" : issue2.origin === "string" ? "lang" : "groot"; + if (sizing) + return `Te ${longName}: verwacht dat ${issue2.origin ?? "waarde"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementen"} ${sizing.verb}`; + return `Te ${longName}: verwacht dat ${issue2.origin ?? "waarde"} ${adj}${issue2.maximum.toString()} is`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + const shortName = issue2.origin === "date" ? "vroeg" : issue2.origin === "string" ? "kort" : "klein"; + if (sizing) { + return `Te ${shortName}: verwacht dat ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} ${sizing.verb}`; + } + return `Te ${shortName}: verwacht dat ${issue2.origin} ${adj}${issue2.minimum.toString()} is`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Ongeldige tekst: moet met "${_issue.prefix}" beginnen`; + } + if (_issue.format === "ends_with") + return `Ongeldige tekst: moet op "${_issue.suffix}" eindigen`; + if (_issue.format === "includes") + return `Ongeldige tekst: moet "${_issue.includes}" bevatten`; + if (_issue.format === "regex") + return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`; + return `Ongeldig: ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Ongeldig getal: moet een veelvoud van ${issue2.divisor} zijn`; + case "unrecognized_keys": + return `Onbekende key${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Ongeldige key in ${issue2.origin}`; + case "invalid_union": + return "Ongeldige invoer"; + case "invalid_element": + return `Ongeldige waarde in ${issue2.origin}`; + default: + return `Ongeldige invoer`; + } + }; +}; +function nl_default() { + return { + localeError: error31() + }; +} + +// ../../node_modules/zod/v4/locales/no.js +var error32 = () => { + const Sizable = { + string: { unit: "tegn", verb: "\xE5 ha" }, + file: { unit: "bytes", verb: "\xE5 ha" }, + array: { unit: "elementer", verb: "\xE5 inneholde" }, + set: { unit: "elementer", verb: "\xE5 inneholde" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "input", + email: "e-postadresse", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO dato- og klokkeslett", + date: "ISO-dato", + time: "ISO-klokkeslett", + duration: "ISO-varighet", + ipv4: "IPv4-omr\xE5de", + ipv6: "IPv6-omr\xE5de", + cidrv4: "IPv4-spekter", + cidrv6: "IPv6-spekter", + base64: "base64-enkodet streng", + base64url: "base64url-enkodet streng", + json_string: "JSON-streng", + e164: "E.164-nummer", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN", + number: "tall", + array: "liste" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Ugyldig input: forventet instanceof ${issue2.expected}, fikk ${received}`; + } + return `Ugyldig input: forventet ${expected}, fikk ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ugyldig verdi: forventet ${stringifyPrimitive(issue2.values[0])}`; + return `Ugyldig valg: forventet en av ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `For stor(t): forventet ${issue2.origin ?? "value"} til \xE5 ha ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementer"}`; + return `For stor(t): forventet ${issue2.origin ?? "value"} til \xE5 ha ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `For lite(n): forventet ${issue2.origin} til \xE5 ha ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `For lite(n): forventet ${issue2.origin} til \xE5 ha ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Ugyldig streng: m\xE5 starte med "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Ugyldig streng: m\xE5 ende med "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Ugyldig streng: m\xE5 inneholde "${_issue.includes}"`; + if (_issue.format === "regex") + return `Ugyldig streng: m\xE5 matche m\xF8nsteret ${_issue.pattern}`; + return `Ugyldig ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Ugyldig tall: m\xE5 v\xE6re et multiplum av ${issue2.divisor}`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "Ukjente n\xF8kler" : "Ukjent n\xF8kkel"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Ugyldig n\xF8kkel i ${issue2.origin}`; + case "invalid_union": + return "Ugyldig input"; + case "invalid_element": + return `Ugyldig verdi i ${issue2.origin}`; + default: + return `Ugyldig input`; + } + }; +}; +function no_default() { + return { + localeError: error32() + }; +} + +// ../../node_modules/zod/v4/locales/ota.js +var error33 = () => { + const Sizable = { + string: { unit: "harf", verb: "olmal\u0131d\u0131r" }, + file: { unit: "bayt", verb: "olmal\u0131d\u0131r" }, + array: { unit: "unsur", verb: "olmal\u0131d\u0131r" }, + set: { unit: "unsur", verb: "olmal\u0131d\u0131r" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "giren", + email: "epostag\xE2h", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO heng\xE2m\u0131", + date: "ISO tarihi", + time: "ISO zaman\u0131", + duration: "ISO m\xFCddeti", + ipv4: "IPv4 ni\u015F\xE2n\u0131", + ipv6: "IPv6 ni\u015F\xE2n\u0131", + cidrv4: "IPv4 menzili", + cidrv6: "IPv6 menzili", + base64: "base64-\u015Fifreli metin", + base64url: "base64url-\u015Fifreli metin", + json_string: "JSON metin", + e164: "E.164 say\u0131s\u0131", + jwt: "JWT", + template_literal: "giren" + }; + const TypeDictionary = { + nan: "NaN", + number: "numara", + array: "saf", + null: "gayb" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `F\xE2sit giren: umulan instanceof ${issue2.expected}, al\u0131nan ${received}`; + } + return `F\xE2sit giren: umulan ${expected}, al\u0131nan ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `F\xE2sit giren: umulan ${stringifyPrimitive(issue2.values[0])}`; + return `F\xE2sit tercih: m\xFBteberler ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Fazla b\xFCy\xFCk: ${issue2.origin ?? "value"}, ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elements"} sahip olmal\u0131yd\u0131.`; + return `Fazla b\xFCy\xFCk: ${issue2.origin ?? "value"}, ${adj}${issue2.maximum.toString()} olmal\u0131yd\u0131.`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Fazla k\xFC\xE7\xFCk: ${issue2.origin}, ${adj}${issue2.minimum.toString()} ${sizing.unit} sahip olmal\u0131yd\u0131.`; + } + return `Fazla k\xFC\xE7\xFCk: ${issue2.origin}, ${adj}${issue2.minimum.toString()} olmal\u0131yd\u0131.`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `F\xE2sit metin: "${_issue.prefix}" ile ba\u015Flamal\u0131.`; + if (_issue.format === "ends_with") + return `F\xE2sit metin: "${_issue.suffix}" ile bitmeli.`; + if (_issue.format === "includes") + return `F\xE2sit metin: "${_issue.includes}" ihtiv\xE2 etmeli.`; + if (_issue.format === "regex") + return `F\xE2sit metin: ${_issue.pattern} nak\u015F\u0131na uymal\u0131.`; + return `F\xE2sit ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `F\xE2sit say\u0131: ${issue2.divisor} kat\u0131 olmal\u0131yd\u0131.`; + case "unrecognized_keys": + return `Tan\u0131nmayan anahtar ${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} i\xE7in tan\u0131nmayan anahtar var.`; + case "invalid_union": + return "Giren tan\u0131namad\u0131."; + case "invalid_element": + return `${issue2.origin} i\xE7in tan\u0131nmayan k\u0131ymet var.`; + default: + return `K\u0131ymet tan\u0131namad\u0131.`; + } + }; +}; +function ota_default() { + return { + localeError: error33() + }; +} + +// ../../node_modules/zod/v4/locales/ps.js +var error34 = () => { + const Sizable = { + string: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" }, + file: { unit: "\u0628\u0627\u06CC\u067C\u0633", verb: "\u0648\u0644\u0631\u064A" }, + array: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" }, + set: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0648\u0631\u0648\u062F\u064A", + email: "\u0628\u0631\u06CC\u069A\u0646\u0627\u0644\u06CC\u06A9", + url: "\u06CC\u0648 \u0622\u0631 \u0627\u0644", + emoji: "\u0627\u06CC\u0645\u0648\u062C\u064A", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u0646\u06CC\u067C\u0647 \u0627\u0648 \u0648\u062E\u062A", + date: "\u0646\u06D0\u067C\u0647", + time: "\u0648\u062E\u062A", + duration: "\u0645\u0648\u062F\u0647", + ipv4: "\u062F IPv4 \u067E\u062A\u0647", + ipv6: "\u062F IPv6 \u067E\u062A\u0647", + cidrv4: "\u062F IPv4 \u0633\u0627\u062D\u0647", + cidrv6: "\u062F IPv6 \u0633\u0627\u062D\u0647", + base64: "base64-encoded \u0645\u062A\u0646", + base64url: "base64url-encoded \u0645\u062A\u0646", + json_string: "JSON \u0645\u062A\u0646", + e164: "\u062F E.164 \u0634\u0645\u06D0\u0631\u0647", + jwt: "JWT", + template_literal: "\u0648\u0631\u0648\u062F\u064A" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0639\u062F\u062F", + array: "\u0627\u0631\u06D0" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F instanceof ${issue2.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`; + } + return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`; + } + case "invalid_value": + if (issue2.values.length === 1) { + return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${stringifyPrimitive(issue2.values[0])} \u0648\u0627\u06CC`; + } + return `\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${joinValues(issue2.values, "|")} \u0685\u062E\u0647 \u0648\u0627\u06CC`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue2.origin ?? "\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0635\u0631\u0648\u0646\u0647"} \u0648\u0644\u0631\u064A`; + } + return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue2.origin ?? "\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${adj}${issue2.maximum.toString()} \u0648\u064A`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0648\u0644\u0631\u064A`; + } + return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue2.origin} \u0628\u0627\u06CC\u062F ${adj}${issue2.minimum.toString()} \u0648\u064A`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${_issue.prefix}" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`; + } + if (_issue.format === "ends_with") { + return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${_issue.suffix}" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`; + } + if (_issue.format === "includes") { + return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F "${_issue.includes}" \u0648\u0644\u0631\u064A`; + } + if (_issue.format === "regex") { + return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${_issue.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`; + } + return `${FormatDictionary[_issue.format] ?? issue2.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`; + } + case "not_multiple_of": + return `\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${issue2.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`; + case "unrecognized_keys": + return `\u0646\u0627\u0633\u0645 ${issue2.keys.length > 1 ? "\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647" : "\u06A9\u0644\u06CC\u0689"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${issue2.origin} \u06A9\u06D0`; + case "invalid_union": + return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`; + case "invalid_element": + return `\u0646\u0627\u0633\u0645 \u0639\u0646\u0635\u0631 \u067E\u0647 ${issue2.origin} \u06A9\u06D0`; + default: + return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`; + } + }; +}; +function ps_default() { + return { + localeError: error34() + }; +} + +// ../../node_modules/zod/v4/locales/pl.js +var error35 = () => { + const Sizable = { + string: { unit: "znak\xF3w", verb: "mie\u0107" }, + file: { unit: "bajt\xF3w", verb: "mie\u0107" }, + array: { unit: "element\xF3w", verb: "mie\u0107" }, + set: { unit: "element\xF3w", verb: "mie\u0107" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "wyra\u017Cenie", + email: "adres email", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "data i godzina w formacie ISO", + date: "data w formacie ISO", + time: "godzina w formacie ISO", + duration: "czas trwania ISO", + ipv4: "adres IPv4", + ipv6: "adres IPv6", + cidrv4: "zakres IPv4", + cidrv6: "zakres IPv6", + base64: "ci\u0105g znak\xF3w zakodowany w formacie base64", + base64url: "ci\u0105g znak\xF3w zakodowany w formacie base64url", + json_string: "ci\u0105g znak\xF3w w formacie JSON", + e164: "liczba E.164", + jwt: "JWT", + template_literal: "wej\u015Bcie" + }; + const TypeDictionary = { + nan: "NaN", + number: "liczba", + array: "tablica" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano instanceof ${issue2.expected}, otrzymano ${received}`; + } + return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${expected}, otrzymano ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${stringifyPrimitive(issue2.values[0])}`; + return `Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie mie\u0107 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "element\xF3w"}`; + } + return `Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie mie\u0107 ${adj}${issue2.minimum.toString()} ${sizing.unit ?? "element\xF3w"}`; + } + return `Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${issue2.origin ?? "warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zaczyna\u0107 si\u0119 od "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi ko\u0144czy\u0107 si\u0119 na "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zawiera\u0107 "${_issue.includes}"`; + if (_issue.format === "regex") + return `Nieprawid\u0142owy ci\u0105g znak\xF3w: musi odpowiada\u0107 wzorcowi ${_issue.pattern}`; + return `Nieprawid\u0142ow(y/a/e) ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${issue2.divisor}`; + case "unrecognized_keys": + return `Nierozpoznane klucze${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Nieprawid\u0142owy klucz w ${issue2.origin}`; + case "invalid_union": + return "Nieprawid\u0142owe dane wej\u015Bciowe"; + case "invalid_element": + return `Nieprawid\u0142owa warto\u015B\u0107 w ${issue2.origin}`; + default: + return `Nieprawid\u0142owe dane wej\u015Bciowe`; + } + }; +}; +function pl_default() { + return { + localeError: error35() + }; +} + +// ../../node_modules/zod/v4/locales/pt.js +var error36 = () => { + const Sizable = { + string: { unit: "caracteres", verb: "ter" }, + file: { unit: "bytes", verb: "ter" }, + array: { unit: "itens", verb: "ter" }, + set: { unit: "itens", verb: "ter" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "padr\xE3o", + email: "endere\xE7o de e-mail", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "data e hora ISO", + date: "data ISO", + time: "hora ISO", + duration: "dura\xE7\xE3o ISO", + ipv4: "endere\xE7o IPv4", + ipv6: "endere\xE7o IPv6", + cidrv4: "faixa de IPv4", + cidrv6: "faixa de IPv6", + base64: "texto codificado em base64", + base64url: "URL codificada em base64", + json_string: "texto JSON", + e164: "n\xFAmero E.164", + jwt: "JWT", + template_literal: "entrada" + }; + const TypeDictionary = { + nan: "NaN", + number: "n\xFAmero", + null: "nulo" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Tipo inv\xE1lido: esperado instanceof ${issue2.expected}, recebido ${received}`; + } + return `Tipo inv\xE1lido: esperado ${expected}, recebido ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Entrada inv\xE1lida: esperado ${stringifyPrimitive(issue2.values[0])}`; + return `Op\xE7\xE3o inv\xE1lida: esperada uma das ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Muito grande: esperado que ${issue2.origin ?? "valor"} tivesse ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementos"}`; + return `Muito grande: esperado que ${issue2.origin ?? "valor"} fosse ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Muito pequeno: esperado que ${issue2.origin} tivesse ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Muito pequeno: esperado que ${issue2.origin} fosse ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Texto inv\xE1lido: deve come\xE7ar com "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Texto inv\xE1lido: deve terminar com "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Texto inv\xE1lido: deve incluir "${_issue.includes}"`; + if (_issue.format === "regex") + return `Texto inv\xE1lido: deve corresponder ao padr\xE3o ${_issue.pattern}`; + return `${FormatDictionary[_issue.format] ?? issue2.format} inv\xE1lido`; + } + case "not_multiple_of": + return `N\xFAmero inv\xE1lido: deve ser m\xFAltiplo de ${issue2.divisor}`; + case "unrecognized_keys": + return `Chave${issue2.keys.length > 1 ? "s" : ""} desconhecida${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Chave inv\xE1lida em ${issue2.origin}`; + case "invalid_union": + return "Entrada inv\xE1lida"; + case "invalid_element": + return `Valor inv\xE1lido em ${issue2.origin}`; + default: + return `Campo inv\xE1lido`; + } + }; +}; +function pt_default() { + return { + localeError: error36() + }; +} + +// ../../node_modules/zod/v4/locales/ro.js +var error37 = () => { + const Sizable = { + string: { unit: "caractere", verb: "s\u0103 aib\u0103" }, + file: { unit: "octe\u021Bi", verb: "s\u0103 aib\u0103" }, + array: { unit: "elemente", verb: "s\u0103 aib\u0103" }, + set: { unit: "elemente", verb: "s\u0103 aib\u0103" }, + map: { unit: "intr\u0103ri", verb: "s\u0103 aib\u0103" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "intrare", + email: "adres\u0103 de email", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "dat\u0103 \u0219i or\u0103 ISO", + date: "dat\u0103 ISO", + time: "or\u0103 ISO", + duration: "durat\u0103 ISO", + ipv4: "adres\u0103 IPv4", + ipv6: "adres\u0103 IPv6", + mac: "adres\u0103 MAC", + cidrv4: "interval IPv4", + cidrv6: "interval IPv6", + base64: "\u0219ir codat base64", + base64url: "\u0219ir codat base64url", + json_string: "\u0219ir JSON", + e164: "num\u0103r E.164", + jwt: "JWT", + template_literal: "intrare" + }; + const TypeDictionary = { + nan: "NaN", + string: "\u0219ir", + number: "num\u0103r", + boolean: "boolean", + function: "func\u021Bie", + array: "matrice", + object: "obiect", + undefined: "nedefinit", + symbol: "simbol", + bigint: "num\u0103r mare", + void: "void", + never: "never", + map: "hart\u0103", + set: "set" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + return `Intrare invalid\u0103: a\u0219teptat ${expected}, primit ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Intrare invalid\u0103: a\u0219teptat ${stringifyPrimitive(issue2.values[0])}`; + return `Op\u021Biune invalid\u0103: a\u0219teptat una dintre ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Prea mare: a\u0219teptat ca ${issue2.origin ?? "valoarea"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elemente"}`; + return `Prea mare: a\u0219teptat ca ${issue2.origin ?? "valoarea"} s\u0103 fie ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Prea mic: a\u0219teptat ca ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Prea mic: a\u0219teptat ca ${issue2.origin} s\u0103 fie ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u0218ir invalid: trebuie s\u0103 \xEEnceap\u0103 cu "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\u0218ir invalid: trebuie s\u0103 se termine cu "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u0218ir invalid: trebuie s\u0103 includ\u0103 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u0218ir invalid: trebuie s\u0103 se potriveasc\u0103 cu modelul ${_issue.pattern}`; + return `Format invalid: ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Num\u0103r invalid: trebuie s\u0103 fie multiplu de ${issue2.divisor}`; + case "unrecognized_keys": + return `Chei nerecunoscute: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Cheie invalid\u0103 \xEEn ${issue2.origin}`; + case "invalid_union": + return "Intrare invalid\u0103"; + case "invalid_element": + return `Valoare invalid\u0103 \xEEn ${issue2.origin}`; + default: + return `Intrare invalid\u0103`; + } + }; +}; +function ro_default() { + return { + localeError: error37() + }; +} + +// ../../node_modules/zod/v4/locales/ru.js +function getRussianPlural(count, one, few, many) { + const absCount = Math.abs(count); + const lastDigit = absCount % 10; + const lastTwoDigits = absCount % 100; + if (lastTwoDigits >= 11 && lastTwoDigits <= 19) { + return many; + } + if (lastDigit === 1) { + return one; + } + if (lastDigit >= 2 && lastDigit <= 4) { + return few; + } + return many; +} +var error38 = () => { + const Sizable = { + string: { + unit: { + one: "\u0441\u0438\u043C\u0432\u043E\u043B", + few: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430", + many: "\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432" + }, + verb: "\u0438\u043C\u0435\u0442\u044C" + }, + file: { + unit: { + one: "\u0431\u0430\u0439\u0442", + few: "\u0431\u0430\u0439\u0442\u0430", + many: "\u0431\u0430\u0439\u0442" + }, + verb: "\u0438\u043C\u0435\u0442\u044C" + }, + array: { + unit: { + one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", + few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430", + many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432" + }, + verb: "\u0438\u043C\u0435\u0442\u044C" + }, + set: { + unit: { + one: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442", + few: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430", + many: "\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432" + }, + verb: "\u0438\u043C\u0435\u0442\u044C" + } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0432\u0432\u043E\u0434", + email: "email \u0430\u0434\u0440\u0435\u0441", + url: "URL", + emoji: "\u044D\u043C\u043E\u0434\u0437\u0438", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F", + date: "ISO \u0434\u0430\u0442\u0430", + time: "ISO \u0432\u0440\u0435\u043C\u044F", + duration: "ISO \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C", + ipv4: "IPv4 \u0430\u0434\u0440\u0435\u0441", + ipv6: "IPv6 \u0430\u0434\u0440\u0435\u0441", + cidrv4: "IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", + cidrv6: "IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D", + base64: "\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64", + base64url: "\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64url", + json_string: "JSON \u0441\u0442\u0440\u043E\u043A\u0430", + e164: "\u043D\u043E\u043C\u0435\u0440 E.164", + jwt: "JWT", + template_literal: "\u0432\u0432\u043E\u0434" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0447\u0438\u0441\u043B\u043E", + array: "\u043C\u0430\u0441\u0441\u0438\u0432" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C instanceof ${issue2.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`; + } + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${stringifyPrimitive(issue2.values[0])}`; + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0434\u043D\u043E \u0438\u0437 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + const maxValue = Number(issue2.maximum); + const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many); + return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue2.maximum.toString()} ${unit}`; + } + return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + const minValue = Number(issue2.minimum); + const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many); + return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue2.minimum.toString()} ${unit}`; + } + return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue2.origin} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`; + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E: \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue2.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${issue2.keys.length > 1 ? "\u044B\u0435" : "\u044B\u0439"} \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u0438" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${issue2.origin}`; + case "invalid_union": + return "\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435"; + case "invalid_element": + return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 ${issue2.origin}`; + default: + return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435`; + } + }; +}; +function ru_default() { + return { + localeError: error38() + }; +} + +// ../../node_modules/zod/v4/locales/sl.js +var error39 = () => { + const Sizable = { + string: { unit: "znakov", verb: "imeti" }, + file: { unit: "bajtov", verb: "imeti" }, + array: { unit: "elementov", verb: "imeti" }, + set: { unit: "elementov", verb: "imeti" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "vnos", + email: "e-po\u0161tni naslov", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO datum in \u010Das", + date: "ISO datum", + time: "ISO \u010Das", + duration: "ISO trajanje", + ipv4: "IPv4 naslov", + ipv6: "IPv6 naslov", + cidrv4: "obseg IPv4", + cidrv6: "obseg IPv6", + base64: "base64 kodiran niz", + base64url: "base64url kodiran niz", + json_string: "JSON niz", + e164: "E.164 \u0161tevilka", + jwt: "JWT", + template_literal: "vnos" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0161tevilo", + array: "tabela" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Neveljaven vnos: pri\u010Dakovano instanceof ${issue2.expected}, prejeto ${received}`; + } + return `Neveljaven vnos: pri\u010Dakovano ${expected}, prejeto ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Neveljaven vnos: pri\u010Dakovano ${stringifyPrimitive(issue2.values[0])}`; + return `Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Preveliko: pri\u010Dakovano, da bo ${issue2.origin ?? "vrednost"} imelo ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elementov"}`; + return `Preveliko: pri\u010Dakovano, da bo ${issue2.origin ?? "vrednost"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Premajhno: pri\u010Dakovano, da bo ${issue2.origin} imelo ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Premajhno: pri\u010Dakovano, da bo ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Neveljaven niz: mora se za\u010Deti z "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Neveljaven niz: mora se kon\u010Dati z "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Neveljaven niz: mora vsebovati "${_issue.includes}"`; + if (_issue.format === "regex") + return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`; + return `Neveljaven ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Neveljavno \u0161tevilo: mora biti ve\u010Dkratnik ${issue2.divisor}`; + case "unrecognized_keys": + return `Neprepoznan${issue2.keys.length > 1 ? "i klju\u010Di" : " klju\u010D"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Neveljaven klju\u010D v ${issue2.origin}`; + case "invalid_union": + return "Neveljaven vnos"; + case "invalid_element": + return `Neveljavna vrednost v ${issue2.origin}`; + default: + return "Neveljaven vnos"; + } + }; +}; +function sl_default() { + return { + localeError: error39() + }; +} + +// ../../node_modules/zod/v4/locales/sv.js +var error40 = () => { + const Sizable = { + string: { unit: "tecken", verb: "att ha" }, + file: { unit: "bytes", verb: "att ha" }, + array: { unit: "objekt", verb: "att inneh\xE5lla" }, + set: { unit: "objekt", verb: "att inneh\xE5lla" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "regulj\xE4rt uttryck", + email: "e-postadress", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO-datum och tid", + date: "ISO-datum", + time: "ISO-tid", + duration: "ISO-varaktighet", + ipv4: "IPv4-intervall", + ipv6: "IPv6-intervall", + cidrv4: "IPv4-spektrum", + cidrv6: "IPv6-spektrum", + base64: "base64-kodad str\xE4ng", + base64url: "base64url-kodad str\xE4ng", + json_string: "JSON-str\xE4ng", + e164: "E.164-nummer", + jwt: "JWT", + template_literal: "mall-literal" + }; + const TypeDictionary = { + nan: "NaN", + number: "antal", + array: "lista" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Ogiltig inmatning: f\xF6rv\xE4ntat instanceof ${issue2.expected}, fick ${received}`; + } + return `Ogiltig inmatning: f\xF6rv\xE4ntat ${expected}, fick ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ogiltig inmatning: f\xF6rv\xE4ntat ${stringifyPrimitive(issue2.values[0])}`; + return `Ogiltigt val: f\xF6rv\xE4ntade en av ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `F\xF6r stor(t): f\xF6rv\xE4ntade ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "element"}`; + } + return `F\xF6r stor(t): f\xF6rv\xE4ntat ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `F\xF6r lite(t): f\xF6rv\xE4ntade ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `F\xF6r lite(t): f\xF6rv\xE4ntade ${issue2.origin ?? "v\xE4rdet"} att ha ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `Ogiltig str\xE4ng: m\xE5ste b\xF6rja med "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `Ogiltig str\xE4ng: m\xE5ste sluta med "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Ogiltig str\xE4ng: m\xE5ste inneh\xE5lla "${_issue.includes}"`; + if (_issue.format === "regex") + return `Ogiltig str\xE4ng: m\xE5ste matcha m\xF6nstret "${_issue.pattern}"`; + return `Ogiltig(t) ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Ogiltigt tal: m\xE5ste vara en multipel av ${issue2.divisor}`; + case "unrecognized_keys": + return `${issue2.keys.length > 1 ? "Ok\xE4nda nycklar" : "Ok\xE4nd nyckel"}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Ogiltig nyckel i ${issue2.origin ?? "v\xE4rdet"}`; + case "invalid_union": + return "Ogiltig input"; + case "invalid_element": + return `Ogiltigt v\xE4rde i ${issue2.origin ?? "v\xE4rdet"}`; + default: + return `Ogiltig input`; + } + }; +}; +function sv_default() { + return { + localeError: error40() + }; +} + +// ../../node_modules/zod/v4/locales/ta.js +var error41 = () => { + const Sizable = { + string: { unit: "\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, + file: { unit: "\u0BAA\u0BC8\u0B9F\u0BCD\u0B9F\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, + array: { unit: "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, + set: { unit: "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1", + email: "\u0BAE\u0BBF\u0BA9\u0BCD\u0BA9\u0B9E\u0BCD\u0B9A\u0BB2\u0BCD \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u0BA4\u0BC7\u0BA4\u0BBF \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD", + date: "ISO \u0BA4\u0BC7\u0BA4\u0BBF", + time: "ISO \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD", + duration: "ISO \u0B95\u0BBE\u0BB2 \u0B85\u0BB3\u0BB5\u0BC1", + ipv4: "IPv4 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", + ipv6: "IPv6 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF", + cidrv4: "IPv4 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1", + cidrv6: "IPv6 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1", + base64: "base64-encoded \u0B9A\u0BB0\u0BAE\u0BCD", + base64url: "base64url-encoded \u0B9A\u0BB0\u0BAE\u0BCD", + json_string: "JSON \u0B9A\u0BB0\u0BAE\u0BCD", + e164: "E.164 \u0B8E\u0BA3\u0BCD", + jwt: "JWT", + template_literal: "input" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0B8E\u0BA3\u0BCD", + array: "\u0B85\u0BA3\u0BBF", + null: "\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 instanceof ${issue2.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`; + } + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${stringifyPrimitive(issue2.values[0])}`; + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${joinValues(issue2.values, "|")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin ?? "\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD"} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + } + return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin ?? "\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${adj}${issue2.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + } + return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue2.origin} ${adj}${issue2.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.prefix}" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + if (_issue.format === "ends_with") + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.suffix}" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + if (_issue.format === "includes") + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${_issue.includes}" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + if (_issue.format === "regex") + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${_issue.pattern} \u0BAE\u0BC1\u0BB1\u0BC8\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B9F\u0BA9\u0BCD \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${issue2.divisor} \u0B87\u0BA9\u0BCD \u0BAA\u0BB2\u0BAE\u0BBE\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; + case "unrecognized_keys": + return `\u0B85\u0B9F\u0BC8\u0BAF\u0BBE\u0BB3\u0BAE\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4 \u0BB5\u0BBF\u0B9A\u0BC8${issue2.keys.length > 1 ? "\u0B95\u0BB3\u0BCD" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0B9A\u0BC8`; + case "invalid_union": + return "\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1"; + case "invalid_element": + return `${issue2.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1`; + default: + return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1`; + } + }; +}; +function ta_default() { + return { + localeError: error41() + }; +} + +// ../../node_modules/zod/v4/locales/th.js +var error42 = () => { + const Sizable = { + string: { unit: "\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, + file: { unit: "\u0E44\u0E1A\u0E15\u0E4C", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, + array: { unit: "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, + set: { unit: "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19", + email: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E2D\u0E35\u0E40\u0E21\u0E25", + url: "URL", + emoji: "\u0E2D\u0E34\u0E42\u0E21\u0E08\u0E34", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", + date: "\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E41\u0E1A\u0E1A ISO", + time: "\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", + duration: "\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO", + ipv4: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv4", + ipv6: "\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv6", + cidrv4: "\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv4", + cidrv6: "\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv6", + base64: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64", + base64url: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A URL", + json_string: "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A JSON", + e164: "\u0E40\u0E1A\u0E2D\u0E23\u0E4C\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28 (E.164)", + jwt: "\u0E42\u0E17\u0E40\u0E04\u0E19 JWT", + template_literal: "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02", + array: "\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E23\u0E22\u0E4C (Array)", + null: "\u0E44\u0E21\u0E48\u0E21\u0E35\u0E04\u0E48\u0E32 (null)" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 instanceof ${issue2.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`; + } + return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${stringifyPrimitive(issue2.values[0])}`; + return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19" : "\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin ?? "\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.maximum.toString()} ${sizing.unit ?? "\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23"}`; + return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin ?? "\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? "\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22" : "\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue2.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 "${_issue.prefix}"`; + } + if (_issue.format === "ends_with") + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E25\u0E07\u0E17\u0E49\u0E32\u0E22\u0E14\u0E49\u0E27\u0E22 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 "${_issue.includes}" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`; + if (_issue.format === "regex") + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 ${_issue.pattern}`; + return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E32\u0E23\u0E14\u0E49\u0E27\u0E22 ${issue2.divisor} \u0E44\u0E14\u0E49\u0E25\u0E07\u0E15\u0E31\u0E27`; + case "unrecognized_keys": + return `\u0E1E\u0E1A\u0E04\u0E35\u0E22\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue2.origin}`; + case "invalid_union": + return "\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E39\u0E40\u0E19\u0E35\u0E22\u0E19\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49"; + case "invalid_element": + return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue2.origin}`; + default: + return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07`; + } + }; +}; +function th_default() { + return { + localeError: error42() + }; +} + +// ../../node_modules/zod/v4/locales/tr.js +var error43 = () => { + const Sizable = { + string: { unit: "karakter", verb: "olmal\u0131" }, + file: { unit: "bayt", verb: "olmal\u0131" }, + array: { unit: "\xF6\u011Fe", verb: "olmal\u0131" }, + set: { unit: "\xF6\u011Fe", verb: "olmal\u0131" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "girdi", + email: "e-posta adresi", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO tarih ve saat", + date: "ISO tarih", + time: "ISO saat", + duration: "ISO s\xFCre", + ipv4: "IPv4 adresi", + ipv6: "IPv6 adresi", + cidrv4: "IPv4 aral\u0131\u011F\u0131", + cidrv6: "IPv6 aral\u0131\u011F\u0131", + base64: "base64 ile \u015Fifrelenmi\u015F metin", + base64url: "base64url ile \u015Fifrelenmi\u015F metin", + json_string: "JSON dizesi", + e164: "E.164 say\u0131s\u0131", + jwt: "JWT", + template_literal: "\u015Eablon dizesi" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Ge\xE7ersiz de\u011Fer: beklenen instanceof ${issue2.expected}, al\u0131nan ${received}`; + } + return `Ge\xE7ersiz de\u011Fer: beklenen ${expected}, al\u0131nan ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Ge\xE7ersiz de\u011Fer: beklenen ${stringifyPrimitive(issue2.values[0])}`; + return `Ge\xE7ersiz se\xE7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\xC7ok b\xFCy\xFCk: beklenen ${issue2.origin ?? "de\u011Fer"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\xF6\u011Fe"}`; + return `\xC7ok b\xFCy\xFCk: beklenen ${issue2.origin ?? "de\u011Fer"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\xC7ok k\xFC\xE7\xFCk: beklenen ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + return `\xC7ok k\xFC\xE7\xFCk: beklenen ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Ge\xE7ersiz metin: "${_issue.prefix}" ile ba\u015Flamal\u0131`; + if (_issue.format === "ends_with") + return `Ge\xE7ersiz metin: "${_issue.suffix}" ile bitmeli`; + if (_issue.format === "includes") + return `Ge\xE7ersiz metin: "${_issue.includes}" i\xE7ermeli`; + if (_issue.format === "regex") + return `Ge\xE7ersiz metin: ${_issue.pattern} desenine uymal\u0131`; + return `Ge\xE7ersiz ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Ge\xE7ersiz say\u0131: ${issue2.divisor} ile tam b\xF6l\xFCnebilmeli`; + case "unrecognized_keys": + return `Tan\u0131nmayan anahtar${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} i\xE7inde ge\xE7ersiz anahtar`; + case "invalid_union": + return "Ge\xE7ersiz de\u011Fer"; + case "invalid_element": + return `${issue2.origin} i\xE7inde ge\xE7ersiz de\u011Fer`; + default: + return `Ge\xE7ersiz de\u011Fer`; + } + }; +}; +function tr_default() { + return { + localeError: error43() + }; +} + +// ../../node_modules/zod/v4/locales/uk.js +var error44 = () => { + const Sizable = { + string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, + file: { unit: "\u0431\u0430\u0439\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, + array: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, + set: { unit: "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456", + email: "\u0430\u0434\u0440\u0435\u0441\u0430 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u043F\u043E\u0448\u0442\u0438", + url: "URL", + emoji: "\u0435\u043C\u043E\u0434\u0437\u0456", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\u0434\u0430\u0442\u0430 \u0442\u0430 \u0447\u0430\u0441 ISO", + date: "\u0434\u0430\u0442\u0430 ISO", + time: "\u0447\u0430\u0441 ISO", + duration: "\u0442\u0440\u0438\u0432\u0430\u043B\u0456\u0441\u0442\u044C ISO", + ipv4: "\u0430\u0434\u0440\u0435\u0441\u0430 IPv4", + ipv6: "\u0430\u0434\u0440\u0435\u0441\u0430 IPv6", + cidrv4: "\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv4", + cidrv6: "\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv6", + base64: "\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64", + base64url: "\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64url", + json_string: "\u0440\u044F\u0434\u043E\u043A JSON", + e164: "\u043D\u043E\u043C\u0435\u0440 E.164", + jwt: "JWT", + template_literal: "\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0447\u0438\u0441\u043B\u043E", + array: "\u043C\u0430\u0441\u0438\u0432" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F instanceof ${issue2.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`; + } + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${stringifyPrimitive(issue2.values[0])}`; + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430 \u043E\u043F\u0446\u0456\u044F: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F \u043E\u0434\u043D\u0435 \u0437 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432"}`; + return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin ?? "\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} \u0431\u0443\u0434\u0435 ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue2.origin} \u0431\u0443\u0434\u0435 ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044F \u0437 "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0437\u0430\u043A\u0456\u043D\u0447\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043D\u0430 "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043C\u0456\u0441\u0442\u0438\u0442\u0438 "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`; + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0447\u0438\u0441\u043B\u043E: \u043F\u043E\u0432\u0438\u043D\u043D\u043E \u0431\u0443\u0442\u0438 \u043A\u0440\u0430\u0442\u043D\u0438\u043C ${issue2.divisor}`; + case "unrecognized_keys": + return `\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${issue2.keys.length > 1 ? "\u0456" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${issue2.origin}`; + case "invalid_union": + return "\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456"; + case "invalid_element": + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0443 ${issue2.origin}`; + default: + return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456`; + } + }; +}; +function uk_default() { + return { + localeError: error44() + }; +} + +// ../../node_modules/zod/v4/locales/ua.js +function ua_default() { + return uk_default(); +} + +// ../../node_modules/zod/v4/locales/ur.js +var error45 = () => { + const Sizable = { + string: { unit: "\u062D\u0631\u0648\u0641", verb: "\u06C1\u0648\u0646\u0627" }, + file: { unit: "\u0628\u0627\u0626\u0679\u0633", verb: "\u06C1\u0648\u0646\u0627" }, + array: { unit: "\u0622\u0626\u0679\u0645\u0632", verb: "\u06C1\u0648\u0646\u0627" }, + set: { unit: "\u0622\u0626\u0679\u0645\u0632", verb: "\u06C1\u0648\u0646\u0627" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0627\u0646 \u067E\u0679", + email: "\u0627\u06CC \u0645\u06CC\u0644 \u0627\u06CC\u0688\u0631\u06CC\u0633", + url: "\u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644", + emoji: "\u0627\u06CC\u0645\u0648\u062C\u06CC", + uuid: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", + uuidv4: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 4", + uuidv6: "\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 6", + nanoid: "\u0646\u06CC\u0646\u0648 \u0622\u0626\u06CC \u0688\u06CC", + guid: "\u062C\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", + cuid: "\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", + cuid2: "\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC 2", + ulid: "\u06CC\u0648 \u0627\u06CC\u0644 \u0622\u0626\u06CC \u0688\u06CC", + xid: "\u0627\u06CC\u06A9\u0633 \u0622\u0626\u06CC \u0688\u06CC", + ksuid: "\u06A9\u06D2 \u0627\u06CC\u0633 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC", + datetime: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0688\u06CC\u0679 \u0679\u0627\u0626\u0645", + date: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u062A\u0627\u0631\u06CC\u062E", + time: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0648\u0642\u062A", + duration: "\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0645\u062F\u062A", + ipv4: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0627\u06CC\u0688\u0631\u06CC\u0633", + ipv6: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0627\u06CC\u0688\u0631\u06CC\u0633", + cidrv4: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0631\u06CC\u0646\u062C", + cidrv6: "\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0631\u06CC\u0646\u062C", + base64: "\u0628\u06CC\u0633 64 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF", + base64url: "\u0628\u06CC\u0633 64 \u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF", + json_string: "\u062C\u06D2 \u0627\u06CC\u0633 \u0627\u0648 \u0627\u06CC\u0646 \u0633\u0679\u0631\u0646\u06AF", + e164: "\u0627\u06CC 164 \u0646\u0645\u0628\u0631", + jwt: "\u062C\u06D2 \u0688\u0628\u0644\u06CC\u0648 \u0679\u06CC", + template_literal: "\u0627\u0646 \u067E\u0679" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u0646\u0645\u0628\u0631", + array: "\u0622\u0631\u06D2", + null: "\u0646\u0644" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: instanceof ${issue2.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`; + } + return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${stringifyPrimitive(issue2.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + return `\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${joinValues(issue2.values, "|")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue2.origin ?? "\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u06D2 ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u0639\u0646\u0627\u0635\u0631"} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`; + return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue2.origin ?? "\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u0627 ${adj}${issue2.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue2.origin} \u06A9\u06D2 ${adj}${issue2.minimum.toString()} ${sizing.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`; + } + return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue2.origin} \u06A9\u0627 ${adj}${issue2.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.prefix}" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + } + if (_issue.format === "ends_with") + return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.suffix}" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + if (_issue.format === "includes") + return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${_issue.includes}" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + if (_issue.format === "regex") + return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${_issue.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + return `\u063A\u0644\u0637 ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${issue2.divisor} \u06A9\u0627 \u0645\u0636\u0627\u0639\u0641 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`; + case "unrecognized_keys": + return `\u063A\u06CC\u0631 \u062A\u0633\u0644\u06CC\u0645 \u0634\u062F\u06C1 \u06A9\u06CC${issue2.keys.length > 1 ? "\u0632" : ""}: ${joinValues(issue2.keys, "\u060C ")}`; + case "invalid_key": + return `${issue2.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`; + case "invalid_union": + return "\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679"; + case "invalid_element": + return `${issue2.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`; + default: + return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679`; + } + }; +}; +function ur_default() { + return { + localeError: error45() + }; +} + +// ../../node_modules/zod/v4/locales/uz.js +var error46 = () => { + const Sizable = { + string: { unit: "belgi", verb: "bo\u2018lishi kerak" }, + file: { unit: "bayt", verb: "bo\u2018lishi kerak" }, + array: { unit: "element", verb: "bo\u2018lishi kerak" }, + set: { unit: "element", verb: "bo\u2018lishi kerak" }, + map: { unit: "yozuv", verb: "bo\u2018lishi kerak" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "kirish", + email: "elektron pochta manzili", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO sana va vaqti", + date: "ISO sana", + time: "ISO vaqt", + duration: "ISO davomiylik", + ipv4: "IPv4 manzil", + ipv6: "IPv6 manzil", + mac: "MAC manzil", + cidrv4: "IPv4 diapazon", + cidrv6: "IPv6 diapazon", + base64: "base64 kodlangan satr", + base64url: "base64url kodlangan satr", + json_string: "JSON satr", + e164: "E.164 raqam", + jwt: "JWT", + template_literal: "kirish" + }; + const TypeDictionary = { + nan: "NaN", + number: "raqam", + array: "massiv" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `Noto\u2018g\u2018ri kirish: kutilgan instanceof ${issue2.expected}, qabul qilingan ${received}`; + } + return `Noto\u2018g\u2018ri kirish: kutilgan ${expected}, qabul qilingan ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `Noto\u2018g\u2018ri kirish: kutilgan ${stringifyPrimitive(issue2.values[0])}`; + return `Noto\u2018g\u2018ri variant: quyidagilardan biri kutilgan ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Juda katta: kutilgan ${issue2.origin ?? "qiymat"} ${adj}${issue2.maximum.toString()} ${sizing.unit} ${sizing.verb}`; + return `Juda katta: kutilgan ${issue2.origin ?? "qiymat"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Juda kichik: kutilgan ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit} ${sizing.verb}`; + } + return `Juda kichik: kutilgan ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Noto\u2018g\u2018ri satr: "${_issue.prefix}" bilan boshlanishi kerak`; + if (_issue.format === "ends_with") + return `Noto\u2018g\u2018ri satr: "${_issue.suffix}" bilan tugashi kerak`; + if (_issue.format === "includes") + return `Noto\u2018g\u2018ri satr: "${_issue.includes}" ni o\u2018z ichiga olishi kerak`; + if (_issue.format === "regex") + return `Noto\u2018g\u2018ri satr: ${_issue.pattern} shabloniga mos kelishi kerak`; + return `Noto\u2018g\u2018ri ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `Noto\u2018g\u2018ri raqam: ${issue2.divisor} ning karralisi bo\u2018lishi kerak`; + case "unrecognized_keys": + return `Noma\u2019lum kalit${issue2.keys.length > 1 ? "lar" : ""}: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} dagi kalit noto\u2018g\u2018ri`; + case "invalid_union": + return "Noto\u2018g\u2018ri kirish"; + case "invalid_element": + return `${issue2.origin} da noto\u2018g\u2018ri qiymat`; + default: + return `Noto\u2018g\u2018ri kirish`; + } + }; +}; +function uz_default() { + return { + localeError: error46() + }; +} + +// ../../node_modules/zod/v4/locales/vi.js +var error47 = () => { + const Sizable = { + string: { unit: "k\xFD t\u1EF1", verb: "c\xF3" }, + file: { unit: "byte", verb: "c\xF3" }, + array: { unit: "ph\u1EA7n t\u1EED", verb: "c\xF3" }, + set: { unit: "ph\u1EA7n t\u1EED", verb: "c\xF3" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u0111\u1EA7u v\xE0o", + email: "\u0111\u1ECBa ch\u1EC9 email", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ng\xE0y gi\u1EDD ISO", + date: "ng\xE0y ISO", + time: "gi\u1EDD ISO", + duration: "kho\u1EA3ng th\u1EDDi gian ISO", + ipv4: "\u0111\u1ECBa ch\u1EC9 IPv4", + ipv6: "\u0111\u1ECBa ch\u1EC9 IPv6", + cidrv4: "d\u1EA3i IPv4", + cidrv6: "d\u1EA3i IPv6", + base64: "chu\u1ED7i m\xE3 h\xF3a base64", + base64url: "chu\u1ED7i m\xE3 h\xF3a base64url", + json_string: "chu\u1ED7i JSON", + e164: "s\u1ED1 E.164", + jwt: "JWT", + template_literal: "\u0111\u1EA7u v\xE0o" + }; + const TypeDictionary = { + nan: "NaN", + number: "s\u1ED1", + array: "m\u1EA3ng" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i instanceof ${issue2.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`; + } + return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${stringifyPrimitive(issue2.values[0])}`; + return `T\xF9y ch\u1ECDn kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i m\u1ED9t trong c\xE1c gi\xE1 tr\u1ECB ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${issue2.origin ?? "gi\xE1 tr\u1ECB"} ${sizing.verb} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "ph\u1EA7n t\u1EED"}`; + return `Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${issue2.origin ?? "gi\xE1 tr\u1ECB"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\xFAc b\u1EB1ng "${_issue.suffix}"`; + if (_issue.format === "includes") + return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m "${_issue.includes}"`; + if (_issue.format === "regex") + return `Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${_issue.pattern}`; + return `${FormatDictionary[_issue.format] ?? issue2.format} kh\xF4ng h\u1EE3p l\u1EC7`; + } + case "not_multiple_of": + return `S\u1ED1 kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i l\xE0 b\u1ED9i s\u1ED1 c\u1EE7a ${issue2.divisor}`; + case "unrecognized_keys": + return `Kh\xF3a kh\xF4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `Kh\xF3a kh\xF4ng h\u1EE3p l\u1EC7 trong ${issue2.origin}`; + case "invalid_union": + return "\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7"; + case "invalid_element": + return `Gi\xE1 tr\u1ECB kh\xF4ng h\u1EE3p l\u1EC7 trong ${issue2.origin}`; + default: + return `\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7`; + } + }; +}; +function vi_default() { + return { + localeError: error47() + }; +} + +// ../../node_modules/zod/v4/locales/zh-CN.js +var error48 = () => { + const Sizable = { + string: { unit: "\u5B57\u7B26", verb: "\u5305\u542B" }, + file: { unit: "\u5B57\u8282", verb: "\u5305\u542B" }, + array: { unit: "\u9879", verb: "\u5305\u542B" }, + set: { unit: "\u9879", verb: "\u5305\u542B" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u8F93\u5165", + email: "\u7535\u5B50\u90AE\u4EF6", + url: "URL", + emoji: "\u8868\u60C5\u7B26\u53F7", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO\u65E5\u671F\u65F6\u95F4", + date: "ISO\u65E5\u671F", + time: "ISO\u65F6\u95F4", + duration: "ISO\u65F6\u957F", + ipv4: "IPv4\u5730\u5740", + ipv6: "IPv6\u5730\u5740", + cidrv4: "IPv4\u7F51\u6BB5", + cidrv6: "IPv6\u7F51\u6BB5", + base64: "base64\u7F16\u7801\u5B57\u7B26\u4E32", + base64url: "base64url\u7F16\u7801\u5B57\u7B26\u4E32", + json_string: "JSON\u5B57\u7B26\u4E32", + e164: "E.164\u53F7\u7801", + jwt: "JWT", + template_literal: "\u8F93\u5165" + }; + const TypeDictionary = { + nan: "NaN", + number: "\u6570\u5B57", + array: "\u6570\u7EC4", + null: "\u7A7A\u503C(null)" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B instanceof ${issue2.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`; + } + return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${stringifyPrimitive(issue2.values[0])}`; + return `\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue2.origin ?? "\u503C"} ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u4E2A\u5143\u7D20"}`; + return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue2.origin ?? "\u503C"} ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue2.origin} ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue2.origin} ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${_issue.prefix}" \u5F00\u5934`; + if (_issue.format === "ends_with") + return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${_issue.suffix}" \u7ED3\u5C3E`; + if (_issue.format === "includes") + return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${_issue.pattern}`; + return `\u65E0\u6548${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${issue2.divisor} \u7684\u500D\u6570`; + case "unrecognized_keys": + return `\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `${issue2.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`; + case "invalid_union": + return "\u65E0\u6548\u8F93\u5165"; + case "invalid_element": + return `${issue2.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`; + default: + return `\u65E0\u6548\u8F93\u5165`; + } + }; +}; +function zh_CN_default() { + return { + localeError: error48() + }; +} + +// ../../node_modules/zod/v4/locales/zh-TW.js +var error49 = () => { + const Sizable = { + string: { unit: "\u5B57\u5143", verb: "\u64C1\u6709" }, + file: { unit: "\u4F4D\u5143\u7D44", verb: "\u64C1\u6709" }, + array: { unit: "\u9805\u76EE", verb: "\u64C1\u6709" }, + set: { unit: "\u9805\u76EE", verb: "\u64C1\u6709" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u8F38\u5165", + email: "\u90F5\u4EF6\u5730\u5740", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "ISO \u65E5\u671F\u6642\u9593", + date: "ISO \u65E5\u671F", + time: "ISO \u6642\u9593", + duration: "ISO \u671F\u9593", + ipv4: "IPv4 \u4F4D\u5740", + ipv6: "IPv6 \u4F4D\u5740", + cidrv4: "IPv4 \u7BC4\u570D", + cidrv6: "IPv6 \u7BC4\u570D", + base64: "base64 \u7DE8\u78BC\u5B57\u4E32", + base64url: "base64url \u7DE8\u78BC\u5B57\u4E32", + json_string: "JSON \u5B57\u4E32", + e164: "E.164 \u6578\u503C", + jwt: "JWT", + template_literal: "\u8F38\u5165" + }; + const TypeDictionary = { + nan: "NaN" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA instanceof ${issue2.expected}\uFF0C\u4F46\u6536\u5230 ${received}`; + } + return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${expected}\uFF0C\u4F46\u6536\u5230 ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${stringifyPrimitive(issue2.values[0])}`; + return `\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue2.origin ?? "\u503C"} \u61C9\u70BA ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "\u500B\u5143\u7D20"}`; + return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue2.origin ?? "\u503C"} \u61C9\u70BA ${adj}${issue2.maximum.toString()}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) { + return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue2.origin} \u61C9\u70BA ${adj}${issue2.minimum.toString()} ${sizing.unit}`; + } + return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue2.origin} \u61C9\u70BA ${adj}${issue2.minimum.toString()}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") { + return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${_issue.prefix}" \u958B\u982D`; + } + if (_issue.format === "ends_with") + return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${_issue.suffix}" \u7D50\u5C3E`; + if (_issue.format === "includes") + return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${_issue.pattern}`; + return `\u7121\u6548\u7684 ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${issue2.divisor} \u7684\u500D\u6578`; + case "unrecognized_keys": + return `\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${issue2.keys.length > 1 ? "\u5011" : ""}\uFF1A${joinValues(issue2.keys, "\u3001")}`; + case "invalid_key": + return `${issue2.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`; + case "invalid_union": + return "\u7121\u6548\u7684\u8F38\u5165\u503C"; + case "invalid_element": + return `${issue2.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`; + default: + return `\u7121\u6548\u7684\u8F38\u5165\u503C`; + } + }; +}; +function zh_TW_default() { + return { + localeError: error49() + }; +} + +// ../../node_modules/zod/v4/locales/yo.js +var error50 = () => { + const Sizable = { + string: { unit: "\xE0mi", verb: "n\xED" }, + file: { unit: "bytes", verb: "n\xED" }, + array: { unit: "nkan", verb: "n\xED" }, + set: { unit: "nkan", verb: "n\xED" } + }; + function getSizing(origin) { + return Sizable[origin] ?? null; + } + const FormatDictionary = { + regex: "\u1EB9\u0300r\u1ECD \xECb\xE1w\u1ECDl\xE9", + email: "\xE0d\xEDr\u1EB9\u0301s\xEC \xECm\u1EB9\u0301l\xEC", + url: "URL", + emoji: "emoji", + uuid: "UUID", + uuidv4: "UUIDv4", + uuidv6: "UUIDv6", + nanoid: "nanoid", + guid: "GUID", + cuid: "cuid", + cuid2: "cuid2", + ulid: "ULID", + xid: "XID", + ksuid: "KSUID", + datetime: "\xE0k\xF3k\xF2 ISO", + date: "\u1ECDj\u1ECD\u0301 ISO", + time: "\xE0k\xF3k\xF2 ISO", + duration: "\xE0k\xF3k\xF2 t\xF3 p\xE9 ISO", + ipv4: "\xE0d\xEDr\u1EB9\u0301s\xEC IPv4", + ipv6: "\xE0d\xEDr\u1EB9\u0301s\xEC IPv6", + cidrv4: "\xE0gb\xE8gb\xE8 IPv4", + cidrv6: "\xE0gb\xE8gb\xE8 IPv6", + base64: "\u1ECD\u0300r\u1ECD\u0300 t\xED a k\u1ECD\u0301 n\xED base64", + base64url: "\u1ECD\u0300r\u1ECD\u0300 base64url", + json_string: "\u1ECD\u0300r\u1ECD\u0300 JSON", + e164: "n\u1ECD\u0301mb\xE0 E.164", + jwt: "JWT", + template_literal: "\u1EB9\u0300r\u1ECD \xECb\xE1w\u1ECDl\xE9" + }; + const TypeDictionary = { + nan: "NaN", + number: "n\u1ECD\u0301mb\xE0", + array: "akop\u1ECD" + }; + return (issue2) => { + switch (issue2.code) { + case "invalid_type": { + const expected = TypeDictionary[issue2.expected] ?? issue2.expected; + const receivedType = parsedType(issue2.input); + const received = TypeDictionary[receivedType] ?? receivedType; + if (/^[A-Z]/.test(issue2.expected)) { + return `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi instanceof ${issue2.expected}, \xE0m\u1ECD\u0300 a r\xED ${received}`; + } + return `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi ${expected}, \xE0m\u1ECD\u0300 a r\xED ${received}`; + } + case "invalid_value": + if (issue2.values.length === 1) + return `\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi ${stringifyPrimitive(issue2.values[0])}`; + return `\xC0\u1E63\xE0y\xE0n a\u1E63\xEC\u1E63e: yan \u1ECD\u0300kan l\xE1ra ${joinValues(issue2.values, "|")}`; + case "too_big": { + const adj = issue2.inclusive ? "<=" : "<"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `T\xF3 p\u1ECD\u0300 j\xF9: a n\xED l\xE1ti j\u1EB9\u0301 p\xE9 ${issue2.origin ?? "iye"} ${sizing.verb} ${adj}${issue2.maximum} ${sizing.unit}`; + return `T\xF3 p\u1ECD\u0300 j\xF9: a n\xED l\xE1ti j\u1EB9\u0301 ${adj}${issue2.maximum}`; + } + case "too_small": { + const adj = issue2.inclusive ? ">=" : ">"; + const sizing = getSizing(issue2.origin); + if (sizing) + return `K\xE9r\xE9 ju: a n\xED l\xE1ti j\u1EB9\u0301 p\xE9 ${issue2.origin} ${sizing.verb} ${adj}${issue2.minimum} ${sizing.unit}`; + return `K\xE9r\xE9 ju: a n\xED l\xE1ti j\u1EB9\u0301 ${adj}${issue2.minimum}`; + } + case "invalid_format": { + const _issue = issue2; + if (_issue.format === "starts_with") + return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u1EB9\u0300r\u1EB9\u0300 p\u1EB9\u0300l\xFA "${_issue.prefix}"`; + if (_issue.format === "ends_with") + return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 par\xED p\u1EB9\u0300l\xFA "${_issue.suffix}"`; + if (_issue.format === "includes") + return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 n\xED "${_issue.includes}"`; + if (_issue.format === "regex") + return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\xE1 \xE0p\u1EB9\u1EB9r\u1EB9 mu ${_issue.pattern}`; + return `A\u1E63\xEC\u1E63e: ${FormatDictionary[_issue.format] ?? issue2.format}`; + } + case "not_multiple_of": + return `N\u1ECD\u0301mb\xE0 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 j\u1EB9\u0301 \xE8y\xE0 p\xEDp\xEDn ti ${issue2.divisor}`; + case "unrecognized_keys": + return `B\u1ECDt\xECn\xEC \xE0\xECm\u1ECD\u0300: ${joinValues(issue2.keys, ", ")}`; + case "invalid_key": + return `B\u1ECDt\xECn\xEC a\u1E63\xEC\u1E63e n\xEDn\xFA ${issue2.origin}`; + case "invalid_union": + return "\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e"; + case "invalid_element": + return `Iye a\u1E63\xEC\u1E63e n\xEDn\xFA ${issue2.origin}`; + default: + return "\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e"; + } + }; +}; +function yo_default() { + return { + localeError: error50() + }; +} + +// ../../node_modules/zod/v4/core/registries.js +var _a2; +var $output = /* @__PURE__ */ Symbol("ZodOutput"); +var $input = /* @__PURE__ */ Symbol("ZodInput"); +var $ZodRegistry = class { + constructor() { + this._map = /* @__PURE__ */ new WeakMap(); + this._idmap = /* @__PURE__ */ new Map(); + } + add(schema, ..._meta) { + const meta3 = _meta[0]; + this._map.set(schema, meta3); + if (meta3 && typeof meta3 === "object" && "id" in meta3) { + this._idmap.set(meta3.id, schema); + } + return this; + } + clear() { + this._map = /* @__PURE__ */ new WeakMap(); + this._idmap = /* @__PURE__ */ new Map(); + return this; + } + remove(schema) { + const meta3 = this._map.get(schema); + if (meta3 && typeof meta3 === "object" && "id" in meta3) { + this._idmap.delete(meta3.id); + } + this._map.delete(schema); + return this; + } + get(schema) { + const p = schema._zod.parent; + if (p) { + const pm = { ...this.get(p) ?? {} }; + delete pm.id; + const f = { ...pm, ...this._map.get(schema) }; + return Object.keys(f).length ? f : void 0; + } + return this._map.get(schema); + } + has(schema) { + return this._map.has(schema); + } +}; +function registry() { + return new $ZodRegistry(); +} +(_a2 = globalThis).__zod_globalRegistry ?? (_a2.__zod_globalRegistry = registry()); +var globalRegistry = globalThis.__zod_globalRegistry; + +// ../../node_modules/zod/v4/core/api.js +// @__NO_SIDE_EFFECTS__ +function _string(Class2, params) { + return new Class2({ + type: "string", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedString(Class2, params) { + return new Class2({ + type: "string", + coerce: true, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _email(Class2, params) { + return new Class2({ + type: "string", + format: "email", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _guid(Class2, params) { + return new Class2({ + type: "string", + format: "guid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uuid(Class2, params) { + return new Class2({ + type: "string", + format: "uuid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uuidv4(Class2, params) { + return new Class2({ + type: "string", + format: "uuid", + check: "string_format", + abort: false, + version: "v4", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uuidv6(Class2, params) { + return new Class2({ + type: "string", + format: "uuid", + check: "string_format", + abort: false, + version: "v6", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uuidv7(Class2, params) { + return new Class2({ + type: "string", + format: "uuid", + check: "string_format", + abort: false, + version: "v7", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _url(Class2, params) { + return new Class2({ + type: "string", + format: "url", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _emoji2(Class2, params) { + return new Class2({ + type: "string", + format: "emoji", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _nanoid(Class2, params) { + return new Class2({ + type: "string", + format: "nanoid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _cuid(Class2, params) { + return new Class2({ + type: "string", + format: "cuid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _cuid2(Class2, params) { + return new Class2({ + type: "string", + format: "cuid2", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _ulid(Class2, params) { + return new Class2({ + type: "string", + format: "ulid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _xid(Class2, params) { + return new Class2({ + type: "string", + format: "xid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _ksuid(Class2, params) { + return new Class2({ + type: "string", + format: "ksuid", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _ipv4(Class2, params) { + return new Class2({ + type: "string", + format: "ipv4", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _ipv6(Class2, params) { + return new Class2({ + type: "string", + format: "ipv6", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _mac(Class2, params) { + return new Class2({ + type: "string", + format: "mac", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _cidrv4(Class2, params) { + return new Class2({ + type: "string", + format: "cidrv4", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _cidrv6(Class2, params) { + return new Class2({ + type: "string", + format: "cidrv6", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _base64(Class2, params) { + return new Class2({ + type: "string", + format: "base64", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _base64url(Class2, params) { + return new Class2({ + type: "string", + format: "base64url", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _e164(Class2, params) { + return new Class2({ + type: "string", + format: "e164", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _jwt(Class2, params) { + return new Class2({ + type: "string", + format: "jwt", + check: "string_format", + abort: false, + ...normalizeParams(params) + }); +} +var TimePrecision = { + Any: null, + Minute: -1, + Second: 0, + Millisecond: 3, + Microsecond: 6 +}; +// @__NO_SIDE_EFFECTS__ +function _isoDateTime(Class2, params) { + return new Class2({ + type: "string", + format: "datetime", + check: "string_format", + offset: false, + local: false, + precision: null, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _isoDate(Class2, params) { + return new Class2({ + type: "string", + format: "date", + check: "string_format", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _isoTime(Class2, params) { + return new Class2({ + type: "string", + format: "time", + check: "string_format", + precision: null, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _isoDuration(Class2, params) { + return new Class2({ + type: "string", + format: "duration", + check: "string_format", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _number(Class2, params) { + return new Class2({ + type: "number", + checks: [], + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedNumber(Class2, params) { + return new Class2({ + type: "number", + coerce: true, + checks: [], + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _int(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "safeint", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _float32(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "float32", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _float64(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "float64", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _int32(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "int32", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uint32(Class2, params) { + return new Class2({ + type: "number", + check: "number_format", + abort: false, + format: "uint32", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _boolean(Class2, params) { + return new Class2({ + type: "boolean", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedBoolean(Class2, params) { + return new Class2({ + type: "boolean", + coerce: true, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _bigint(Class2, params) { + return new Class2({ + type: "bigint", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedBigint(Class2, params) { + return new Class2({ + type: "bigint", + coerce: true, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _int64(Class2, params) { + return new Class2({ + type: "bigint", + check: "bigint_format", + abort: false, + format: "int64", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uint64(Class2, params) { + return new Class2({ + type: "bigint", + check: "bigint_format", + abort: false, + format: "uint64", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _symbol(Class2, params) { + return new Class2({ + type: "symbol", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _undefined2(Class2, params) { + return new Class2({ + type: "undefined", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _null2(Class2, params) { + return new Class2({ + type: "null", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _any(Class2) { + return new Class2({ + type: "any" + }); +} +// @__NO_SIDE_EFFECTS__ +function _unknown(Class2) { + return new Class2({ + type: "unknown" + }); +} +// @__NO_SIDE_EFFECTS__ +function _never(Class2, params) { + return new Class2({ + type: "never", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _void(Class2, params) { + return new Class2({ + type: "void", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _date(Class2, params) { + return new Class2({ + type: "date", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _coercedDate(Class2, params) { + return new Class2({ + type: "date", + coerce: true, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _nan(Class2, params) { + return new Class2({ + type: "nan", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _lt(value, params) { + return new $ZodCheckLessThan({ + check: "less_than", + ...normalizeParams(params), + value, + inclusive: false + }); +} +// @__NO_SIDE_EFFECTS__ +function _lte(value, params) { + return new $ZodCheckLessThan({ + check: "less_than", + ...normalizeParams(params), + value, + inclusive: true + }); +} +// @__NO_SIDE_EFFECTS__ +function _gt(value, params) { + return new $ZodCheckGreaterThan({ + check: "greater_than", + ...normalizeParams(params), + value, + inclusive: false + }); +} +// @__NO_SIDE_EFFECTS__ +function _gte(value, params) { + return new $ZodCheckGreaterThan({ + check: "greater_than", + ...normalizeParams(params), + value, + inclusive: true + }); +} +// @__NO_SIDE_EFFECTS__ +function _positive(params) { + return /* @__PURE__ */ _gt(0, params); +} +// @__NO_SIDE_EFFECTS__ +function _negative(params) { + return /* @__PURE__ */ _lt(0, params); +} +// @__NO_SIDE_EFFECTS__ +function _nonpositive(params) { + return /* @__PURE__ */ _lte(0, params); +} +// @__NO_SIDE_EFFECTS__ +function _nonnegative(params) { + return /* @__PURE__ */ _gte(0, params); +} +// @__NO_SIDE_EFFECTS__ +function _multipleOf(value, params) { + return new $ZodCheckMultipleOf({ + check: "multiple_of", + ...normalizeParams(params), + value + }); +} +// @__NO_SIDE_EFFECTS__ +function _maxSize(maximum, params) { + return new $ZodCheckMaxSize({ + check: "max_size", + ...normalizeParams(params), + maximum + }); +} +// @__NO_SIDE_EFFECTS__ +function _minSize(minimum, params) { + return new $ZodCheckMinSize({ + check: "min_size", + ...normalizeParams(params), + minimum + }); +} +// @__NO_SIDE_EFFECTS__ +function _size(size, params) { + return new $ZodCheckSizeEquals({ + check: "size_equals", + ...normalizeParams(params), + size + }); +} +// @__NO_SIDE_EFFECTS__ +function _maxLength(maximum, params) { + const ch = new $ZodCheckMaxLength({ + check: "max_length", + ...normalizeParams(params), + maximum + }); + return ch; +} +// @__NO_SIDE_EFFECTS__ +function _minLength(minimum, params) { + return new $ZodCheckMinLength({ + check: "min_length", + ...normalizeParams(params), + minimum + }); +} +// @__NO_SIDE_EFFECTS__ +function _length(length, params) { + return new $ZodCheckLengthEquals({ + check: "length_equals", + ...normalizeParams(params), + length + }); +} +// @__NO_SIDE_EFFECTS__ +function _regex(pattern, params) { + return new $ZodCheckRegex({ + check: "string_format", + format: "regex", + ...normalizeParams(params), + pattern + }); +} +// @__NO_SIDE_EFFECTS__ +function _lowercase(params) { + return new $ZodCheckLowerCase({ + check: "string_format", + format: "lowercase", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _uppercase(params) { + return new $ZodCheckUpperCase({ + check: "string_format", + format: "uppercase", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _includes(includes, params) { + return new $ZodCheckIncludes({ + check: "string_format", + format: "includes", + ...normalizeParams(params), + includes + }); +} +// @__NO_SIDE_EFFECTS__ +function _startsWith(prefix, params) { + return new $ZodCheckStartsWith({ + check: "string_format", + format: "starts_with", + ...normalizeParams(params), + prefix + }); +} +// @__NO_SIDE_EFFECTS__ +function _endsWith(suffix, params) { + return new $ZodCheckEndsWith({ + check: "string_format", + format: "ends_with", + ...normalizeParams(params), + suffix + }); +} +// @__NO_SIDE_EFFECTS__ +function _property(property, schema, params) { + return new $ZodCheckProperty({ + check: "property", + property, + schema, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _mime(types, params) { + return new $ZodCheckMimeType({ + check: "mime_type", + mime: types, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _overwrite(tx) { + return new $ZodCheckOverwrite({ + check: "overwrite", + tx + }); +} +// @__NO_SIDE_EFFECTS__ +function _normalize(form) { + return /* @__PURE__ */ _overwrite((input) => input.normalize(form)); +} +// @__NO_SIDE_EFFECTS__ +function _trim() { + return /* @__PURE__ */ _overwrite((input) => input.trim()); +} +// @__NO_SIDE_EFFECTS__ +function _toLowerCase() { + return /* @__PURE__ */ _overwrite((input) => input.toLowerCase()); +} +// @__NO_SIDE_EFFECTS__ +function _toUpperCase() { + return /* @__PURE__ */ _overwrite((input) => input.toUpperCase()); +} +// @__NO_SIDE_EFFECTS__ +function _slugify() { + return /* @__PURE__ */ _overwrite((input) => slugify(input)); +} +// @__NO_SIDE_EFFECTS__ +function _array(Class2, element, params) { + return new Class2({ + type: "array", + element, + // get element() { + // return element; + // }, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _union(Class2, options, params) { + return new Class2({ + type: "union", + options, + ...normalizeParams(params) + }); +} +function _xor(Class2, options, params) { + return new Class2({ + type: "union", + options, + inclusive: false, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _discriminatedUnion(Class2, discriminator, options, params) { + return new Class2({ + type: "union", + options, + discriminator, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _intersection(Class2, left, right) { + return new Class2({ + type: "intersection", + left, + right + }); +} +// @__NO_SIDE_EFFECTS__ +function _tuple(Class2, items, _paramsOrRest, _params) { + const hasRest = _paramsOrRest instanceof $ZodType; + const params = hasRest ? _params : _paramsOrRest; + const rest = hasRest ? _paramsOrRest : null; + return new Class2({ + type: "tuple", + items, + rest, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _record(Class2, keyType, valueType, params) { + return new Class2({ + type: "record", + keyType, + valueType, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _map(Class2, keyType, valueType, params) { + return new Class2({ + type: "map", + keyType, + valueType, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _set(Class2, valueType, params) { + return new Class2({ + type: "set", + valueType, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _enum(Class2, values, params) { + const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values; + return new Class2({ + type: "enum", + entries, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _nativeEnum(Class2, entries, params) { + return new Class2({ + type: "enum", + entries, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _literal(Class2, value, params) { + return new Class2({ + type: "literal", + values: Array.isArray(value) ? value : [value], + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _file(Class2, params) { + return new Class2({ + type: "file", + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _transform(Class2, fn) { + return new Class2({ + type: "transform", + transform: fn + }); +} +// @__NO_SIDE_EFFECTS__ +function _optional(Class2, innerType) { + return new Class2({ + type: "optional", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +function _nullable(Class2, innerType) { + return new Class2({ + type: "nullable", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +function _default(Class2, innerType, defaultValue) { + return new Class2({ + type: "default", + innerType, + get defaultValue() { + return typeof defaultValue === "function" ? defaultValue() : shallowClone(defaultValue); + } + }); +} +// @__NO_SIDE_EFFECTS__ +function _nonoptional(Class2, innerType, params) { + return new Class2({ + type: "nonoptional", + innerType, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _success(Class2, innerType) { + return new Class2({ + type: "success", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +function _catch(Class2, innerType, catchValue) { + return new Class2({ + type: "catch", + innerType, + catchValue: typeof catchValue === "function" ? catchValue : () => catchValue + }); +} +// @__NO_SIDE_EFFECTS__ +function _pipe(Class2, in_, out) { + return new Class2({ + type: "pipe", + in: in_, + out + }); +} +// @__NO_SIDE_EFFECTS__ +function _readonly(Class2, innerType) { + return new Class2({ + type: "readonly", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +function _templateLiteral(Class2, parts, params) { + return new Class2({ + type: "template_literal", + parts, + ...normalizeParams(params) + }); +} +// @__NO_SIDE_EFFECTS__ +function _lazy(Class2, getter) { + return new Class2({ + type: "lazy", + getter + }); +} +// @__NO_SIDE_EFFECTS__ +function _promise(Class2, innerType) { + return new Class2({ + type: "promise", + innerType + }); +} +// @__NO_SIDE_EFFECTS__ +function _custom(Class2, fn, _params) { + const norm = normalizeParams(_params); + norm.abort ?? (norm.abort = true); + const schema = new Class2({ + type: "custom", + check: "custom", + fn, + ...norm + }); + return schema; +} +// @__NO_SIDE_EFFECTS__ +function _refine(Class2, fn, _params) { + const schema = new Class2({ + type: "custom", + check: "custom", + fn, + ...normalizeParams(_params) + }); + return schema; +} +// @__NO_SIDE_EFFECTS__ +function _superRefine(fn, params) { + const ch = /* @__PURE__ */ _check((payload) => { + payload.addIssue = (issue2) => { + if (typeof issue2 === "string") { + payload.issues.push(issue(issue2, payload.value, ch._zod.def)); + } else { + const _issue = issue2; + if (_issue.fatal) + _issue.continue = false; + _issue.code ?? (_issue.code = "custom"); + _issue.input ?? (_issue.input = payload.value); + _issue.inst ?? (_issue.inst = ch); + _issue.continue ?? (_issue.continue = !ch._zod.def.abort); + payload.issues.push(issue(_issue)); + } + }; + return fn(payload.value, payload); + }, params); + return ch; +} +// @__NO_SIDE_EFFECTS__ +function _check(fn, params) { + const ch = new $ZodCheck({ + check: "custom", + ...normalizeParams(params) + }); + ch._zod.check = fn; + return ch; +} +// @__NO_SIDE_EFFECTS__ +function describe(description) { + const ch = new $ZodCheck({ check: "describe" }); + ch._zod.onattach = [ + (inst) => { + const existing = globalRegistry.get(inst) ?? {}; + globalRegistry.add(inst, { ...existing, description }); + } + ]; + ch._zod.check = () => { + }; + return ch; +} +// @__NO_SIDE_EFFECTS__ +function meta(metadata) { + const ch = new $ZodCheck({ check: "meta" }); + ch._zod.onattach = [ + (inst) => { + const existing = globalRegistry.get(inst) ?? {}; + globalRegistry.add(inst, { ...existing, ...metadata }); + } + ]; + ch._zod.check = () => { + }; + return ch; +} +// @__NO_SIDE_EFFECTS__ +function _stringbool(Classes, _params) { + const params = normalizeParams(_params); + let truthyArray = params.truthy ?? ["true", "1", "yes", "on", "y", "enabled"]; + let falsyArray = params.falsy ?? ["false", "0", "no", "off", "n", "disabled"]; + if (params.case !== "sensitive") { + truthyArray = truthyArray.map((v) => typeof v === "string" ? v.toLowerCase() : v); + falsyArray = falsyArray.map((v) => typeof v === "string" ? v.toLowerCase() : v); + } + const truthySet = new Set(truthyArray); + const falsySet = new Set(falsyArray); + const _Codec = Classes.Codec ?? $ZodCodec; + const _Boolean = Classes.Boolean ?? $ZodBoolean; + const _String = Classes.String ?? $ZodString; + const stringSchema = new _String({ type: "string", error: params.error }); + const booleanSchema = new _Boolean({ type: "boolean", error: params.error }); + const codec2 = new _Codec({ + type: "pipe", + in: stringSchema, + out: booleanSchema, + transform: ((input, payload) => { + let data = input; + if (params.case !== "sensitive") + data = data.toLowerCase(); + if (truthySet.has(data)) { + return true; + } else if (falsySet.has(data)) { + return false; + } else { + payload.issues.push({ + code: "invalid_value", + expected: "stringbool", + values: [...truthySet, ...falsySet], + input: payload.value, + inst: codec2, + continue: false + }); + return {}; + } + }), + reverseTransform: ((input, _payload) => { + if (input === true) { + return truthyArray[0] || "true"; + } else { + return falsyArray[0] || "false"; + } + }), + error: params.error + }); + return codec2; +} +// @__NO_SIDE_EFFECTS__ +function _stringFormat(Class2, format, fnOrRegex, _params = {}) { + const params = normalizeParams(_params); + const def = { + ...normalizeParams(_params), + check: "string_format", + type: "string", + format, + fn: typeof fnOrRegex === "function" ? fnOrRegex : (val) => fnOrRegex.test(val), + ...params + }; + if (fnOrRegex instanceof RegExp) { + def.pattern = fnOrRegex; + } + const inst = new Class2(def); + return inst; +} + +// ../../node_modules/zod/v4/core/to-json-schema.js +function initializeContext(params) { + let target = params?.target ?? "draft-2020-12"; + if (target === "draft-4") + target = "draft-04"; + if (target === "draft-7") + target = "draft-07"; + return { + processors: params.processors ?? {}, + metadataRegistry: params?.metadata ?? globalRegistry, + target, + unrepresentable: params?.unrepresentable ?? "throw", + override: params?.override ?? (() => { + }), + io: params?.io ?? "output", + counter: 0, + seen: /* @__PURE__ */ new Map(), + cycles: params?.cycles ?? "ref", + reused: params?.reused ?? "inline", + external: params?.external ?? void 0 + }; +} +function process(schema, ctx, _params = { path: [], schemaPath: [] }) { + var _a3; + const def = schema._zod.def; + const seen = ctx.seen.get(schema); + if (seen) { + seen.count++; + const isCycle = _params.schemaPath.includes(schema); + if (isCycle) { + seen.cycle = _params.path; + } + return seen.schema; + } + const result = { schema: {}, count: 1, cycle: void 0, path: _params.path }; + ctx.seen.set(schema, result); + const overrideSchema = schema._zod.toJSONSchema?.(); + if (overrideSchema) { + result.schema = overrideSchema; + } else { + const params = { + ..._params, + schemaPath: [..._params.schemaPath, schema], + path: _params.path + }; + if (schema._zod.processJSONSchema) { + schema._zod.processJSONSchema(ctx, result.schema, params); + } else { + const _json = result.schema; + const processor = ctx.processors[def.type]; + if (!processor) { + throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`); + } + processor(schema, ctx, _json, params); + } + const parent = schema._zod.parent; + if (parent) { + if (!result.ref) + result.ref = parent; + process(parent, ctx, params); + ctx.seen.get(parent).isParent = true; + } + } + const meta3 = ctx.metadataRegistry.get(schema); + if (meta3) + Object.assign(result.schema, meta3); + if (ctx.io === "input" && isTransforming(schema)) { + delete result.schema.examples; + delete result.schema.default; + } + if (ctx.io === "input" && "_prefault" in result.schema) + (_a3 = result.schema).default ?? (_a3.default = result.schema._prefault); + delete result.schema._prefault; + const _result = ctx.seen.get(schema); + return _result.schema; +} +function extractDefs(ctx, schema) { + const root = ctx.seen.get(schema); + if (!root) + throw new Error("Unprocessed schema. This is a bug in Zod."); + const idToSchema = /* @__PURE__ */ new Map(); + for (const entry of ctx.seen.entries()) { + const id = ctx.metadataRegistry.get(entry[0])?.id; + if (id) { + const existing = idToSchema.get(id); + if (existing && existing !== entry[0]) { + throw new Error(`Duplicate schema id "${id}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`); + } + idToSchema.set(id, entry[0]); + } + } + const makeURI = (entry) => { + const defsSegment = ctx.target === "draft-2020-12" ? "$defs" : "definitions"; + if (ctx.external) { + const externalId = ctx.external.registry.get(entry[0])?.id; + const uriGenerator = ctx.external.uri ?? ((id2) => id2); + if (externalId) { + return { ref: uriGenerator(externalId) }; + } + const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`; + entry[1].defId = id; + return { defId: id, ref: `${uriGenerator("__shared")}#/${defsSegment}/${id}` }; + } + if (entry[1] === root) { + return { ref: "#" }; + } + const uriPrefix = `#`; + const defUriPrefix = `${uriPrefix}/${defsSegment}/`; + const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`; + return { defId, ref: defUriPrefix + defId }; + }; + const extractToDef = (entry) => { + if (entry[1].schema.$ref) { + return; + } + const seen = entry[1]; + const { ref, defId } = makeURI(entry); + seen.def = { ...seen.schema }; + if (defId) + seen.defId = defId; + const schema2 = seen.schema; + for (const key in schema2) { + delete schema2[key]; + } + schema2.$ref = ref; + }; + if (ctx.cycles === "throw") { + for (const entry of ctx.seen.entries()) { + const seen = entry[1]; + if (seen.cycle) { + throw new Error(`Cycle detected: #/${seen.cycle?.join("/")}/ + +Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`); + } + } + } + for (const entry of ctx.seen.entries()) { + const seen = entry[1]; + if (schema === entry[0]) { + extractToDef(entry); + continue; + } + if (ctx.external) { + const ext = ctx.external.registry.get(entry[0])?.id; + if (schema !== entry[0] && ext) { + extractToDef(entry); + continue; + } + } + const id = ctx.metadataRegistry.get(entry[0])?.id; + if (id) { + extractToDef(entry); + continue; + } + if (seen.cycle) { + extractToDef(entry); + continue; + } + if (seen.count > 1) { + if (ctx.reused === "ref") { + extractToDef(entry); + continue; + } + } + } +} +function finalize(ctx, schema) { + const root = ctx.seen.get(schema); + if (!root) + throw new Error("Unprocessed schema. This is a bug in Zod."); + const flattenRef = (zodSchema) => { + const seen = ctx.seen.get(zodSchema); + if (seen.ref === null) + return; + const schema2 = seen.def ?? seen.schema; + const _cached = { ...schema2 }; + const ref = seen.ref; + seen.ref = null; + if (ref) { + flattenRef(ref); + const refSeen = ctx.seen.get(ref); + const refSchema = refSeen.schema; + if (refSchema.$ref && (ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0")) { + schema2.allOf = schema2.allOf ?? []; + schema2.allOf.push(refSchema); + } else { + Object.assign(schema2, refSchema); + } + Object.assign(schema2, _cached); + const isParentRef = zodSchema._zod.parent === ref; + if (isParentRef) { + for (const key in schema2) { + if (key === "$ref" || key === "allOf") + continue; + if (!(key in _cached)) { + delete schema2[key]; + } + } + } + if (refSchema.$ref && refSeen.def) { + for (const key in schema2) { + if (key === "$ref" || key === "allOf") + continue; + if (key in refSeen.def && JSON.stringify(schema2[key]) === JSON.stringify(refSeen.def[key])) { + delete schema2[key]; + } + } + } + } + const parent = zodSchema._zod.parent; + if (parent && parent !== ref) { + flattenRef(parent); + const parentSeen = ctx.seen.get(parent); + if (parentSeen?.schema.$ref) { + schema2.$ref = parentSeen.schema.$ref; + if (parentSeen.def) { + for (const key in schema2) { + if (key === "$ref" || key === "allOf") + continue; + if (key in parentSeen.def && JSON.stringify(schema2[key]) === JSON.stringify(parentSeen.def[key])) { + delete schema2[key]; + } + } + } + } + } + ctx.override({ + zodSchema, + jsonSchema: schema2, + path: seen.path ?? [] + }); + }; + for (const entry of [...ctx.seen.entries()].reverse()) { + flattenRef(entry[0]); + } + const result = {}; + if (ctx.target === "draft-2020-12") { + result.$schema = "https://json-schema.org/draft/2020-12/schema"; + } else if (ctx.target === "draft-07") { + result.$schema = "http://json-schema.org/draft-07/schema#"; + } else if (ctx.target === "draft-04") { + result.$schema = "http://json-schema.org/draft-04/schema#"; + } else if (ctx.target === "openapi-3.0") { + } else { + } + if (ctx.external?.uri) { + const id = ctx.external.registry.get(schema)?.id; + if (!id) + throw new Error("Schema is missing an `id` property"); + result.$id = ctx.external.uri(id); + } + Object.assign(result, root.def ?? root.schema); + const rootMetaId = ctx.metadataRegistry.get(schema)?.id; + if (rootMetaId !== void 0 && result.id === rootMetaId) + delete result.id; + const defs = ctx.external?.defs ?? {}; + for (const entry of ctx.seen.entries()) { + const seen = entry[1]; + if (seen.def && seen.defId) { + if (seen.def.id === seen.defId) + delete seen.def.id; + defs[seen.defId] = seen.def; + } + } + if (ctx.external) { + } else { + if (Object.keys(defs).length > 0) { + if (ctx.target === "draft-2020-12") { + result.$defs = defs; + } else { + result.definitions = defs; + } + } + } + try { + const finalized = JSON.parse(JSON.stringify(result)); + Object.defineProperty(finalized, "~standard", { + value: { + ...schema["~standard"], + jsonSchema: { + input: createStandardJSONSchemaMethod(schema, "input", ctx.processors), + output: createStandardJSONSchemaMethod(schema, "output", ctx.processors) + } + }, + enumerable: false, + writable: false + }); + return finalized; + } catch (_err) { + throw new Error("Error converting schema to JSON."); + } +} +function isTransforming(_schema, _ctx) { + const ctx = _ctx ?? { seen: /* @__PURE__ */ new Set() }; + if (ctx.seen.has(_schema)) + return false; + ctx.seen.add(_schema); + const def = _schema._zod.def; + if (def.type === "transform") + return true; + if (def.type === "array") + return isTransforming(def.element, ctx); + if (def.type === "set") + return isTransforming(def.valueType, ctx); + if (def.type === "lazy") + return isTransforming(def.getter(), ctx); + if (def.type === "promise" || def.type === "optional" || def.type === "nonoptional" || def.type === "nullable" || def.type === "readonly" || def.type === "default" || def.type === "prefault") { + return isTransforming(def.innerType, ctx); + } + if (def.type === "intersection") { + return isTransforming(def.left, ctx) || isTransforming(def.right, ctx); + } + if (def.type === "record" || def.type === "map") { + return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx); + } + if (def.type === "pipe") { + if (_schema._zod.traits.has("$ZodCodec")) + return true; + return isTransforming(def.in, ctx) || isTransforming(def.out, ctx); + } + if (def.type === "object") { + for (const key in def.shape) { + if (isTransforming(def.shape[key], ctx)) + return true; + } + return false; + } + if (def.type === "union") { + for (const option of def.options) { + if (isTransforming(option, ctx)) + return true; + } + return false; + } + if (def.type === "tuple") { + for (const item of def.items) { + if (isTransforming(item, ctx)) + return true; + } + if (def.rest && isTransforming(def.rest, ctx)) + return true; + return false; + } + return false; +} +var createToJSONSchemaMethod = (schema, processors = {}) => (params) => { + const ctx = initializeContext({ ...params, processors }); + process(schema, ctx); + extractDefs(ctx, schema); + return finalize(ctx, schema); +}; +var createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => { + const { libraryOptions, target } = params ?? {}; + const ctx = initializeContext({ ...libraryOptions ?? {}, target, io, processors }); + process(schema, ctx); + extractDefs(ctx, schema); + return finalize(ctx, schema); +}; + +// ../../node_modules/zod/v4/core/json-schema-processors.js +var formatMap = { + guid: "uuid", + url: "uri", + datetime: "date-time", + json_string: "json-string", + regex: "" + // do not set +}; +var stringProcessor = (schema, ctx, _json, _params) => { + const json2 = _json; + json2.type = "string"; + const { minimum, maximum, format, patterns, contentEncoding } = schema._zod.bag; + if (typeof minimum === "number") + json2.minLength = minimum; + if (typeof maximum === "number") + json2.maxLength = maximum; + if (format) { + json2.format = formatMap[format] ?? format; + if (json2.format === "") + delete json2.format; + if (format === "time") { + delete json2.format; + } + } + if (contentEncoding) + json2.contentEncoding = contentEncoding; + if (patterns && patterns.size > 0) { + const regexes = [...patterns]; + if (regexes.length === 1) + json2.pattern = regexes[0].source; + else if (regexes.length > 1) { + json2.allOf = [ + ...regexes.map((regex) => ({ + ...ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0" ? { type: "string" } : {}, + pattern: regex.source + })) + ]; + } + } +}; +var numberProcessor = (schema, ctx, _json, _params) => { + const json2 = _json; + const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag; + if (typeof format === "string" && format.includes("int")) + json2.type = "integer"; + else + json2.type = "number"; + const exMin = typeof exclusiveMinimum === "number" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY); + const exMax = typeof exclusiveMaximum === "number" && exclusiveMaximum <= (maximum ?? Number.POSITIVE_INFINITY); + const legacy = ctx.target === "draft-04" || ctx.target === "openapi-3.0"; + if (exMin) { + if (legacy) { + json2.minimum = exclusiveMinimum; + json2.exclusiveMinimum = true; + } else { + json2.exclusiveMinimum = exclusiveMinimum; + } + } else if (typeof minimum === "number") { + json2.minimum = minimum; + } + if (exMax) { + if (legacy) { + json2.maximum = exclusiveMaximum; + json2.exclusiveMaximum = true; + } else { + json2.exclusiveMaximum = exclusiveMaximum; + } + } else if (typeof maximum === "number") { + json2.maximum = maximum; + } + if (typeof multipleOf === "number") + json2.multipleOf = multipleOf; +}; +var booleanProcessor = (_schema, _ctx, json2, _params) => { + json2.type = "boolean"; +}; +var bigintProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("BigInt cannot be represented in JSON Schema"); + } +}; +var symbolProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Symbols cannot be represented in JSON Schema"); + } +}; +var nullProcessor = (_schema, ctx, json2, _params) => { + if (ctx.target === "openapi-3.0") { + json2.type = "string"; + json2.nullable = true; + json2.enum = [null]; + } else { + json2.type = "null"; + } +}; +var undefinedProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Undefined cannot be represented in JSON Schema"); + } +}; +var voidProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Void cannot be represented in JSON Schema"); + } +}; +var neverProcessor = (_schema, _ctx, json2, _params) => { + json2.not = {}; +}; +var anyProcessor = (_schema, _ctx, _json, _params) => { +}; +var unknownProcessor = (_schema, _ctx, _json, _params) => { +}; +var dateProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Date cannot be represented in JSON Schema"); + } +}; +var enumProcessor = (schema, _ctx, json2, _params) => { + const def = schema._zod.def; + const values = getEnumValues(def.entries); + if (values.every((v) => typeof v === "number")) + json2.type = "number"; + if (values.every((v) => typeof v === "string")) + json2.type = "string"; + json2.enum = values; +}; +var literalProcessor = (schema, ctx, json2, _params) => { + const def = schema._zod.def; + const vals = []; + for (const val of def.values) { + if (val === void 0) { + if (ctx.unrepresentable === "throw") { + throw new Error("Literal `undefined` cannot be represented in JSON Schema"); + } else { + } + } else if (typeof val === "bigint") { + if (ctx.unrepresentable === "throw") { + throw new Error("BigInt literals cannot be represented in JSON Schema"); + } else { + vals.push(Number(val)); + } + } else { + vals.push(val); + } + } + if (vals.length === 0) { + } else if (vals.length === 1) { + const val = vals[0]; + json2.type = val === null ? "null" : typeof val; + if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") { + json2.enum = [val]; + } else { + json2.const = val; + } + } else { + if (vals.every((v) => typeof v === "number")) + json2.type = "number"; + if (vals.every((v) => typeof v === "string")) + json2.type = "string"; + if (vals.every((v) => typeof v === "boolean")) + json2.type = "boolean"; + if (vals.every((v) => v === null)) + json2.type = "null"; + json2.enum = vals; + } +}; +var nanProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("NaN cannot be represented in JSON Schema"); + } +}; +var templateLiteralProcessor = (schema, _ctx, json2, _params) => { + const _json = json2; + const pattern = schema._zod.pattern; + if (!pattern) + throw new Error("Pattern not found in template literal"); + _json.type = "string"; + _json.pattern = pattern.source; +}; +var fileProcessor = (schema, _ctx, json2, _params) => { + const _json = json2; + const file2 = { + type: "string", + format: "binary", + contentEncoding: "binary" + }; + const { minimum, maximum, mime } = schema._zod.bag; + if (minimum !== void 0) + file2.minLength = minimum; + if (maximum !== void 0) + file2.maxLength = maximum; + if (mime) { + if (mime.length === 1) { + file2.contentMediaType = mime[0]; + Object.assign(_json, file2); + } else { + Object.assign(_json, file2); + _json.anyOf = mime.map((m) => ({ contentMediaType: m })); + } + } else { + Object.assign(_json, file2); + } +}; +var successProcessor = (_schema, _ctx, json2, _params) => { + json2.type = "boolean"; +}; +var customProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Custom types cannot be represented in JSON Schema"); + } +}; +var functionProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Function types cannot be represented in JSON Schema"); + } +}; +var transformProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Transforms cannot be represented in JSON Schema"); + } +}; +var mapProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Map cannot be represented in JSON Schema"); + } +}; +var setProcessor = (_schema, ctx, _json, _params) => { + if (ctx.unrepresentable === "throw") { + throw new Error("Set cannot be represented in JSON Schema"); + } +}; +var arrayProcessor = (schema, ctx, _json, params) => { + const json2 = _json; + const def = schema._zod.def; + const { minimum, maximum } = schema._zod.bag; + if (typeof minimum === "number") + json2.minItems = minimum; + if (typeof maximum === "number") + json2.maxItems = maximum; + json2.type = "array"; + json2.items = process(def.element, ctx, { + ...params, + path: [...params.path, "items"] + }); +}; +var objectProcessor = (schema, ctx, _json, params) => { + const json2 = _json; + const def = schema._zod.def; + json2.type = "object"; + json2.properties = {}; + const shape = def.shape; + for (const key in shape) { + json2.properties[key] = process(shape[key], ctx, { + ...params, + path: [...params.path, "properties", key] + }); + } + const allKeys = new Set(Object.keys(shape)); + const requiredKeys = new Set([...allKeys].filter((key) => { + const v = def.shape[key]._zod; + if (ctx.io === "input") { + return v.optin === void 0; + } else { + return v.optout === void 0; + } + })); + if (requiredKeys.size > 0) { + json2.required = Array.from(requiredKeys); + } + if (def.catchall?._zod.def.type === "never") { + json2.additionalProperties = false; + } else if (!def.catchall) { + if (ctx.io === "output") + json2.additionalProperties = false; + } else if (def.catchall) { + json2.additionalProperties = process(def.catchall, ctx, { + ...params, + path: [...params.path, "additionalProperties"] + }); + } +}; +var unionProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + const isExclusive = def.inclusive === false; + const options = def.options.map((x, i) => process(x, ctx, { + ...params, + path: [...params.path, isExclusive ? "oneOf" : "anyOf", i] + })); + if (isExclusive) { + json2.oneOf = options; + } else { + json2.anyOf = options; + } +}; +var intersectionProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + const a = process(def.left, ctx, { + ...params, + path: [...params.path, "allOf", 0] + }); + const b = process(def.right, ctx, { + ...params, + path: [...params.path, "allOf", 1] + }); + const isSimpleIntersection = (val) => "allOf" in val && Object.keys(val).length === 1; + const allOf = [ + ...isSimpleIntersection(a) ? a.allOf : [a], + ...isSimpleIntersection(b) ? b.allOf : [b] + ]; + json2.allOf = allOf; +}; +var tupleProcessor = (schema, ctx, _json, params) => { + const json2 = _json; + const def = schema._zod.def; + json2.type = "array"; + const prefixPath = ctx.target === "draft-2020-12" ? "prefixItems" : "items"; + const restPath = ctx.target === "draft-2020-12" ? "items" : ctx.target === "openapi-3.0" ? "items" : "additionalItems"; + const prefixItems = def.items.map((x, i) => process(x, ctx, { + ...params, + path: [...params.path, prefixPath, i] + })); + const rest = def.rest ? process(def.rest, ctx, { + ...params, + path: [...params.path, restPath, ...ctx.target === "openapi-3.0" ? [def.items.length] : []] + }) : null; + if (ctx.target === "draft-2020-12") { + json2.prefixItems = prefixItems; + if (rest) { + json2.items = rest; + } + } else if (ctx.target === "openapi-3.0") { + json2.items = { + anyOf: prefixItems + }; + if (rest) { + json2.items.anyOf.push(rest); + } + json2.minItems = prefixItems.length; + if (!rest) { + json2.maxItems = prefixItems.length; + } + } else { + json2.items = prefixItems; + if (rest) { + json2.additionalItems = rest; + } + } + const { minimum, maximum } = schema._zod.bag; + if (typeof minimum === "number") + json2.minItems = minimum; + if (typeof maximum === "number") + json2.maxItems = maximum; +}; +var recordProcessor = (schema, ctx, _json, params) => { + const json2 = _json; + const def = schema._zod.def; + json2.type = "object"; + const keyType = def.keyType; + const keyBag = keyType._zod.bag; + const patterns = keyBag?.patterns; + if (def.mode === "loose" && patterns && patterns.size > 0) { + const valueSchema = process(def.valueType, ctx, { + ...params, + path: [...params.path, "patternProperties", "*"] + }); + json2.patternProperties = {}; + for (const pattern of patterns) { + json2.patternProperties[pattern.source] = valueSchema; + } + } else { + if (ctx.target === "draft-07" || ctx.target === "draft-2020-12") { + json2.propertyNames = process(def.keyType, ctx, { + ...params, + path: [...params.path, "propertyNames"] + }); + } + json2.additionalProperties = process(def.valueType, ctx, { + ...params, + path: [...params.path, "additionalProperties"] + }); + } + const keyValues = keyType._zod.values; + if (keyValues) { + const validKeyValues = [...keyValues].filter((v) => typeof v === "string" || typeof v === "number"); + if (validKeyValues.length > 0) { + json2.required = validKeyValues; + } + } +}; +var nullableProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + const inner = process(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + if (ctx.target === "openapi-3.0") { + seen.ref = def.innerType; + json2.nullable = true; + } else { + json2.anyOf = [inner, { type: "null" }]; + } +}; +var nonoptionalProcessor = (schema, ctx, _json, params) => { + const def = schema._zod.def; + process(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; +}; +var defaultProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + process(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; + json2.default = JSON.parse(JSON.stringify(def.defaultValue)); +}; +var prefaultProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + process(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; + if (ctx.io === "input") + json2._prefault = JSON.parse(JSON.stringify(def.defaultValue)); +}; +var catchProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + process(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; + let catchValue; + try { + catchValue = def.catchValue(void 0); + } catch { + throw new Error("Dynamic catch values are not supported in JSON Schema"); + } + json2.default = catchValue; +}; +var pipeProcessor = (schema, ctx, _json, params) => { + const def = schema._zod.def; + const inIsTransform = def.in._zod.traits.has("$ZodTransform"); + const innerType = ctx.io === "input" ? inIsTransform ? def.out : def.in : def.out; + process(innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = innerType; +}; +var readonlyProcessor = (schema, ctx, json2, params) => { + const def = schema._zod.def; + process(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; + json2.readOnly = true; +}; +var promiseProcessor = (schema, ctx, _json, params) => { + const def = schema._zod.def; + process(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; +}; +var optionalProcessor = (schema, ctx, _json, params) => { + const def = schema._zod.def; + process(def.innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = def.innerType; +}; +var lazyProcessor = (schema, ctx, _json, params) => { + const innerType = schema._zod.innerType; + process(innerType, ctx, params); + const seen = ctx.seen.get(schema); + seen.ref = innerType; +}; +var allProcessors = { + string: stringProcessor, + number: numberProcessor, + boolean: booleanProcessor, + bigint: bigintProcessor, + symbol: symbolProcessor, + null: nullProcessor, + undefined: undefinedProcessor, + void: voidProcessor, + never: neverProcessor, + any: anyProcessor, + unknown: unknownProcessor, + date: dateProcessor, + enum: enumProcessor, + literal: literalProcessor, + nan: nanProcessor, + template_literal: templateLiteralProcessor, + file: fileProcessor, + success: successProcessor, + custom: customProcessor, + function: functionProcessor, + transform: transformProcessor, + map: mapProcessor, + set: setProcessor, + array: arrayProcessor, + object: objectProcessor, + union: unionProcessor, + intersection: intersectionProcessor, + tuple: tupleProcessor, + record: recordProcessor, + nullable: nullableProcessor, + nonoptional: nonoptionalProcessor, + default: defaultProcessor, + prefault: prefaultProcessor, + catch: catchProcessor, + pipe: pipeProcessor, + readonly: readonlyProcessor, + promise: promiseProcessor, + optional: optionalProcessor, + lazy: lazyProcessor +}; +function toJSONSchema(input, params) { + if ("_idmap" in input) { + const registry2 = input; + const ctx2 = initializeContext({ ...params, processors: allProcessors }); + const defs = {}; + for (const entry of registry2._idmap.entries()) { + const [_, schema] = entry; + process(schema, ctx2); + } + const schemas = {}; + const external = { + registry: registry2, + uri: params?.uri, + defs + }; + ctx2.external = external; + for (const entry of registry2._idmap.entries()) { + const [key, schema] = entry; + extractDefs(ctx2, schema); + schemas[key] = finalize(ctx2, schema); + } + if (Object.keys(defs).length > 0) { + const defsSegment = ctx2.target === "draft-2020-12" ? "$defs" : "definitions"; + schemas.__shared = { + [defsSegment]: defs + }; + } + return { schemas }; + } + const ctx = initializeContext({ ...params, processors: allProcessors }); + process(input, ctx); + extractDefs(ctx, input); + return finalize(ctx, input); +} + +// ../../node_modules/zod/v4/core/json-schema-generator.js +var JSONSchemaGenerator = class { + /** @deprecated Access via ctx instead */ + get metadataRegistry() { + return this.ctx.metadataRegistry; + } + /** @deprecated Access via ctx instead */ + get target() { + return this.ctx.target; + } + /** @deprecated Access via ctx instead */ + get unrepresentable() { + return this.ctx.unrepresentable; + } + /** @deprecated Access via ctx instead */ + get override() { + return this.ctx.override; + } + /** @deprecated Access via ctx instead */ + get io() { + return this.ctx.io; + } + /** @deprecated Access via ctx instead */ + get counter() { + return this.ctx.counter; + } + set counter(value) { + this.ctx.counter = value; + } + /** @deprecated Access via ctx instead */ + get seen() { + return this.ctx.seen; + } + constructor(params) { + let normalizedTarget = params?.target ?? "draft-2020-12"; + if (normalizedTarget === "draft-4") + normalizedTarget = "draft-04"; + if (normalizedTarget === "draft-7") + normalizedTarget = "draft-07"; + this.ctx = initializeContext({ + processors: allProcessors, + target: normalizedTarget, + ...params?.metadata && { metadata: params.metadata }, + ...params?.unrepresentable && { unrepresentable: params.unrepresentable }, + ...params?.override && { override: params.override }, + ...params?.io && { io: params.io } + }); + } + /** + * Process a schema to prepare it for JSON Schema generation. + * This must be called before emit(). + */ + process(schema, _params = { path: [], schemaPath: [] }) { + return process(schema, this.ctx, _params); + } + /** + * Emit the final JSON Schema after processing. + * Must call process() first. + */ + emit(schema, _params) { + if (_params) { + if (_params.cycles) + this.ctx.cycles = _params.cycles; + if (_params.reused) + this.ctx.reused = _params.reused; + if (_params.external) + this.ctx.external = _params.external; + } + extractDefs(this.ctx, schema); + const result = finalize(this.ctx, schema); + const { "~standard": _, ...plainResult } = result; + return plainResult; + } +}; + +// ../../node_modules/zod/v4/core/json-schema.js +var json_schema_exports = {}; + +// ../../node_modules/zod/v4/classic/schemas.js +var schemas_exports2 = {}; +__export(schemas_exports2, { + ZodAny: () => ZodAny, + ZodArray: () => ZodArray, + ZodBase64: () => ZodBase64, + ZodBase64URL: () => ZodBase64URL, + ZodBigInt: () => ZodBigInt, + ZodBigIntFormat: () => ZodBigIntFormat, + ZodBoolean: () => ZodBoolean, + ZodCIDRv4: () => ZodCIDRv4, + ZodCIDRv6: () => ZodCIDRv6, + ZodCUID: () => ZodCUID, + ZodCUID2: () => ZodCUID2, + ZodCatch: () => ZodCatch, + ZodCodec: () => ZodCodec, + ZodCustom: () => ZodCustom, + ZodCustomStringFormat: () => ZodCustomStringFormat, + ZodDate: () => ZodDate, + ZodDefault: () => ZodDefault, + ZodDiscriminatedUnion: () => ZodDiscriminatedUnion, + ZodE164: () => ZodE164, + ZodEmail: () => ZodEmail, + ZodEmoji: () => ZodEmoji, + ZodEnum: () => ZodEnum, + ZodExactOptional: () => ZodExactOptional, + ZodFile: () => ZodFile, + ZodFunction: () => ZodFunction, + ZodGUID: () => ZodGUID, + ZodIPv4: () => ZodIPv4, + ZodIPv6: () => ZodIPv6, + ZodIntersection: () => ZodIntersection, + ZodJWT: () => ZodJWT, + ZodKSUID: () => ZodKSUID, + ZodLazy: () => ZodLazy, + ZodLiteral: () => ZodLiteral, + ZodMAC: () => ZodMAC, + ZodMap: () => ZodMap, + ZodNaN: () => ZodNaN, + ZodNanoID: () => ZodNanoID, + ZodNever: () => ZodNever, + ZodNonOptional: () => ZodNonOptional, + ZodNull: () => ZodNull, + ZodNullable: () => ZodNullable, + ZodNumber: () => ZodNumber, + ZodNumberFormat: () => ZodNumberFormat, + ZodObject: () => ZodObject, + ZodOptional: () => ZodOptional, + ZodPipe: () => ZodPipe, + ZodPrefault: () => ZodPrefault, + ZodPreprocess: () => ZodPreprocess, + ZodPromise: () => ZodPromise, + ZodReadonly: () => ZodReadonly, + ZodRecord: () => ZodRecord, + ZodSet: () => ZodSet, + ZodString: () => ZodString, + ZodStringFormat: () => ZodStringFormat, + ZodSuccess: () => ZodSuccess, + ZodSymbol: () => ZodSymbol, + ZodTemplateLiteral: () => ZodTemplateLiteral, + ZodTransform: () => ZodTransform, + ZodTuple: () => ZodTuple, + ZodType: () => ZodType, + ZodULID: () => ZodULID, + ZodURL: () => ZodURL, + ZodUUID: () => ZodUUID, + ZodUndefined: () => ZodUndefined, + ZodUnion: () => ZodUnion, + ZodUnknown: () => ZodUnknown, + ZodVoid: () => ZodVoid, + ZodXID: () => ZodXID, + ZodXor: () => ZodXor, + _ZodString: () => _ZodString, + _default: () => _default2, + _function: () => _function, + any: () => any, + array: () => array, + base64: () => base642, + base64url: () => base64url2, + bigint: () => bigint2, + boolean: () => boolean2, + catch: () => _catch2, + check: () => check, + cidrv4: () => cidrv42, + cidrv6: () => cidrv62, + codec: () => codec, + cuid: () => cuid3, + cuid2: () => cuid22, + custom: () => custom, + date: () => date3, + describe: () => describe2, + discriminatedUnion: () => discriminatedUnion, + e164: () => e1642, + email: () => email2, + emoji: () => emoji2, + enum: () => _enum2, + exactOptional: () => exactOptional, + file: () => file, + float32: () => float32, + float64: () => float64, + function: () => _function, + guid: () => guid2, + hash: () => hash, + hex: () => hex2, + hostname: () => hostname2, + httpUrl: () => httpUrl, + instanceof: () => _instanceof, + int: () => int, + int32: () => int32, + int64: () => int64, + intersection: () => intersection, + invertCodec: () => invertCodec, + ipv4: () => ipv42, + ipv6: () => ipv62, + json: () => json, + jwt: () => jwt, + keyof: () => keyof, + ksuid: () => ksuid2, + lazy: () => lazy, + literal: () => literal, + looseObject: () => looseObject, + looseRecord: () => looseRecord, + mac: () => mac2, + map: () => map, + meta: () => meta2, + nan: () => nan, + nanoid: () => nanoid2, + nativeEnum: () => nativeEnum, + never: () => never, + nonoptional: () => nonoptional, + null: () => _null3, + nullable: () => nullable, + nullish: () => nullish2, + number: () => number2, + object: () => object, + optional: () => optional, + partialRecord: () => partialRecord, + pipe: () => pipe, + prefault: () => prefault, + preprocess: () => preprocess, + promise: () => promise, + readonly: () => readonly, + record: () => record, + refine: () => refine, + set: () => set, + strictObject: () => strictObject, + string: () => string2, + stringFormat: () => stringFormat, + stringbool: () => stringbool, + success: () => success, + superRefine: () => superRefine, + symbol: () => symbol, + templateLiteral: () => templateLiteral, + transform: () => transform, + tuple: () => tuple, + uint32: () => uint32, + uint64: () => uint64, + ulid: () => ulid2, + undefined: () => _undefined3, + union: () => union, + unknown: () => unknown, + url: () => url, + uuid: () => uuid2, + uuidv4: () => uuidv4, + uuidv6: () => uuidv6, + uuidv7: () => uuidv7, + void: () => _void2, + xid: () => xid2, + xor: () => xor +}); + +// ../../node_modules/zod/v4/classic/checks.js +var checks_exports2 = {}; +__export(checks_exports2, { + endsWith: () => _endsWith, + gt: () => _gt, + gte: () => _gte, + includes: () => _includes, + length: () => _length, + lowercase: () => _lowercase, + lt: () => _lt, + lte: () => _lte, + maxLength: () => _maxLength, + maxSize: () => _maxSize, + mime: () => _mime, + minLength: () => _minLength, + minSize: () => _minSize, + multipleOf: () => _multipleOf, + negative: () => _negative, + nonnegative: () => _nonnegative, + nonpositive: () => _nonpositive, + normalize: () => _normalize, + overwrite: () => _overwrite, + positive: () => _positive, + property: () => _property, + regex: () => _regex, + size: () => _size, + slugify: () => _slugify, + startsWith: () => _startsWith, + toLowerCase: () => _toLowerCase, + toUpperCase: () => _toUpperCase, + trim: () => _trim, + uppercase: () => _uppercase +}); + +// ../../node_modules/zod/v4/classic/iso.js +var iso_exports = {}; +__export(iso_exports, { + ZodISODate: () => ZodISODate, + ZodISODateTime: () => ZodISODateTime, + ZodISODuration: () => ZodISODuration, + ZodISOTime: () => ZodISOTime, + date: () => date2, + datetime: () => datetime2, + duration: () => duration2, + time: () => time2 +}); +var ZodISODateTime = /* @__PURE__ */ $constructor("ZodISODateTime", (inst, def) => { + $ZodISODateTime.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function datetime2(params) { + return _isoDateTime(ZodISODateTime, params); +} +var ZodISODate = /* @__PURE__ */ $constructor("ZodISODate", (inst, def) => { + $ZodISODate.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function date2(params) { + return _isoDate(ZodISODate, params); +} +var ZodISOTime = /* @__PURE__ */ $constructor("ZodISOTime", (inst, def) => { + $ZodISOTime.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function time2(params) { + return _isoTime(ZodISOTime, params); +} +var ZodISODuration = /* @__PURE__ */ $constructor("ZodISODuration", (inst, def) => { + $ZodISODuration.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function duration2(params) { + return _isoDuration(ZodISODuration, params); +} + +// ../../node_modules/zod/v4/classic/errors.js +var initializer2 = (inst, issues) => { + $ZodError.init(inst, issues); + inst.name = "ZodError"; + Object.defineProperties(inst, { + format: { + value: (mapper) => formatError(inst, mapper) + // enumerable: false, + }, + flatten: { + value: (mapper) => flattenError(inst, mapper) + // enumerable: false, + }, + addIssue: { + value: (issue2) => { + inst.issues.push(issue2); + inst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2); + } + // enumerable: false, + }, + addIssues: { + value: (issues2) => { + inst.issues.push(...issues2); + inst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2); + } + // enumerable: false, + }, + isEmpty: { + get() { + return inst.issues.length === 0; + } + // enumerable: false, + } + }); +}; +var ZodError = /* @__PURE__ */ $constructor("ZodError", initializer2); +var ZodRealError = /* @__PURE__ */ $constructor("ZodError", initializer2, { + Parent: Error +}); + +// ../../node_modules/zod/v4/classic/parse.js +var parse2 = /* @__PURE__ */ _parse(ZodRealError); +var parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError); +var safeParse2 = /* @__PURE__ */ _safeParse(ZodRealError); +var safeParseAsync2 = /* @__PURE__ */ _safeParseAsync(ZodRealError); +var encode2 = /* @__PURE__ */ _encode(ZodRealError); +var decode2 = /* @__PURE__ */ _decode(ZodRealError); +var encodeAsync2 = /* @__PURE__ */ _encodeAsync(ZodRealError); +var decodeAsync2 = /* @__PURE__ */ _decodeAsync(ZodRealError); +var safeEncode2 = /* @__PURE__ */ _safeEncode(ZodRealError); +var safeDecode2 = /* @__PURE__ */ _safeDecode(ZodRealError); +var safeEncodeAsync2 = /* @__PURE__ */ _safeEncodeAsync(ZodRealError); +var safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError); + +// ../../node_modules/zod/v4/classic/schemas.js +var _installedGroups = /* @__PURE__ */ new WeakMap(); +function _installLazyMethods(inst, group, methods) { + const proto = Object.getPrototypeOf(inst); + let installed = _installedGroups.get(proto); + if (!installed) { + installed = /* @__PURE__ */ new Set(); + _installedGroups.set(proto, installed); + } + if (installed.has(group)) + return; + installed.add(group); + for (const key in methods) { + const fn = methods[key]; + Object.defineProperty(proto, key, { + configurable: true, + enumerable: false, + get() { + const bound = fn.bind(this); + Object.defineProperty(this, key, { + configurable: true, + writable: true, + enumerable: true, + value: bound + }); + return bound; + }, + set(v) { + Object.defineProperty(this, key, { + configurable: true, + writable: true, + enumerable: true, + value: v + }); + } + }); + } +} +var ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => { + $ZodType.init(inst, def); + Object.assign(inst["~standard"], { + jsonSchema: { + input: createStandardJSONSchemaMethod(inst, "input"), + output: createStandardJSONSchemaMethod(inst, "output") + } + }); + inst.toJSONSchema = createToJSONSchemaMethod(inst, {}); + inst.def = def; + inst.type = def.type; + Object.defineProperty(inst, "_def", { value: def }); + inst.parse = (data, params) => parse2(inst, data, params, { callee: inst.parse }); + inst.safeParse = (data, params) => safeParse2(inst, data, params); + inst.parseAsync = async (data, params) => parseAsync2(inst, data, params, { callee: inst.parseAsync }); + inst.safeParseAsync = async (data, params) => safeParseAsync2(inst, data, params); + inst.spa = inst.safeParseAsync; + inst.encode = (data, params) => encode2(inst, data, params); + inst.decode = (data, params) => decode2(inst, data, params); + inst.encodeAsync = async (data, params) => encodeAsync2(inst, data, params); + inst.decodeAsync = async (data, params) => decodeAsync2(inst, data, params); + inst.safeEncode = (data, params) => safeEncode2(inst, data, params); + inst.safeDecode = (data, params) => safeDecode2(inst, data, params); + inst.safeEncodeAsync = async (data, params) => safeEncodeAsync2(inst, data, params); + inst.safeDecodeAsync = async (data, params) => safeDecodeAsync2(inst, data, params); + _installLazyMethods(inst, "ZodType", { + check(...chks) { + const def2 = this.def; + return this.clone(util_exports.mergeDefs(def2, { + checks: [ + ...def2.checks ?? [], + ...chks.map((ch) => typeof ch === "function" ? { _zod: { check: ch, def: { check: "custom" }, onattach: [] } } : ch) + ] + }), { parent: true }); + }, + with(...chks) { + return this.check(...chks); + }, + clone(def2, params) { + return clone(this, def2, params); + }, + brand() { + return this; + }, + register(reg, meta3) { + reg.add(this, meta3); + return this; + }, + refine(check2, params) { + return this.check(refine(check2, params)); + }, + superRefine(refinement, params) { + return this.check(superRefine(refinement, params)); + }, + overwrite(fn) { + return this.check(_overwrite(fn)); + }, + optional() { + return optional(this); + }, + exactOptional() { + return exactOptional(this); + }, + nullable() { + return nullable(this); + }, + nullish() { + return optional(nullable(this)); + }, + nonoptional(params) { + return nonoptional(this, params); + }, + array() { + return array(this); + }, + or(arg) { + return union([this, arg]); + }, + and(arg) { + return intersection(this, arg); + }, + transform(tx) { + return pipe(this, transform(tx)); + }, + default(d) { + return _default2(this, d); + }, + prefault(d) { + return prefault(this, d); + }, + catch(params) { + return _catch2(this, params); + }, + pipe(target) { + return pipe(this, target); + }, + readonly() { + return readonly(this); + }, + describe(description) { + const cl = this.clone(); + globalRegistry.add(cl, { description }); + return cl; + }, + meta(...args) { + if (args.length === 0) + return globalRegistry.get(this); + const cl = this.clone(); + globalRegistry.add(cl, args[0]); + return cl; + }, + isOptional() { + return this.safeParse(void 0).success; + }, + isNullable() { + return this.safeParse(null).success; + }, + apply(fn) { + return fn(this); + } + }); + Object.defineProperty(inst, "description", { + get() { + return globalRegistry.get(inst)?.description; + }, + configurable: true + }); + return inst; +}); +var _ZodString = /* @__PURE__ */ $constructor("_ZodString", (inst, def) => { + $ZodString.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => stringProcessor(inst, ctx, json2, params); + const bag = inst._zod.bag; + inst.format = bag.format ?? null; + inst.minLength = bag.minimum ?? null; + inst.maxLength = bag.maximum ?? null; + _installLazyMethods(inst, "_ZodString", { + regex(...args) { + return this.check(_regex(...args)); + }, + includes(...args) { + return this.check(_includes(...args)); + }, + startsWith(...args) { + return this.check(_startsWith(...args)); + }, + endsWith(...args) { + return this.check(_endsWith(...args)); + }, + min(...args) { + return this.check(_minLength(...args)); + }, + max(...args) { + return this.check(_maxLength(...args)); + }, + length(...args) { + return this.check(_length(...args)); + }, + nonempty(...args) { + return this.check(_minLength(1, ...args)); + }, + lowercase(params) { + return this.check(_lowercase(params)); + }, + uppercase(params) { + return this.check(_uppercase(params)); + }, + trim() { + return this.check(_trim()); + }, + normalize(...args) { + return this.check(_normalize(...args)); + }, + toLowerCase() { + return this.check(_toLowerCase()); + }, + toUpperCase() { + return this.check(_toUpperCase()); + }, + slugify() { + return this.check(_slugify()); + } + }); +}); +var ZodString = /* @__PURE__ */ $constructor("ZodString", (inst, def) => { + $ZodString.init(inst, def); + _ZodString.init(inst, def); + inst.email = (params) => inst.check(_email(ZodEmail, params)); + inst.url = (params) => inst.check(_url(ZodURL, params)); + inst.jwt = (params) => inst.check(_jwt(ZodJWT, params)); + inst.emoji = (params) => inst.check(_emoji2(ZodEmoji, params)); + inst.guid = (params) => inst.check(_guid(ZodGUID, params)); + inst.uuid = (params) => inst.check(_uuid(ZodUUID, params)); + inst.uuidv4 = (params) => inst.check(_uuidv4(ZodUUID, params)); + inst.uuidv6 = (params) => inst.check(_uuidv6(ZodUUID, params)); + inst.uuidv7 = (params) => inst.check(_uuidv7(ZodUUID, params)); + inst.nanoid = (params) => inst.check(_nanoid(ZodNanoID, params)); + inst.guid = (params) => inst.check(_guid(ZodGUID, params)); + inst.cuid = (params) => inst.check(_cuid(ZodCUID, params)); + inst.cuid2 = (params) => inst.check(_cuid2(ZodCUID2, params)); + inst.ulid = (params) => inst.check(_ulid(ZodULID, params)); + inst.base64 = (params) => inst.check(_base64(ZodBase64, params)); + inst.base64url = (params) => inst.check(_base64url(ZodBase64URL, params)); + inst.xid = (params) => inst.check(_xid(ZodXID, params)); + inst.ksuid = (params) => inst.check(_ksuid(ZodKSUID, params)); + inst.ipv4 = (params) => inst.check(_ipv4(ZodIPv4, params)); + inst.ipv6 = (params) => inst.check(_ipv6(ZodIPv6, params)); + inst.cidrv4 = (params) => inst.check(_cidrv4(ZodCIDRv4, params)); + inst.cidrv6 = (params) => inst.check(_cidrv6(ZodCIDRv6, params)); + inst.e164 = (params) => inst.check(_e164(ZodE164, params)); + inst.datetime = (params) => inst.check(datetime2(params)); + inst.date = (params) => inst.check(date2(params)); + inst.time = (params) => inst.check(time2(params)); + inst.duration = (params) => inst.check(duration2(params)); +}); +function string2(params) { + return _string(ZodString, params); +} +var ZodStringFormat = /* @__PURE__ */ $constructor("ZodStringFormat", (inst, def) => { + $ZodStringFormat.init(inst, def); + _ZodString.init(inst, def); +}); +var ZodEmail = /* @__PURE__ */ $constructor("ZodEmail", (inst, def) => { + $ZodEmail.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function email2(params) { + return _email(ZodEmail, params); +} +var ZodGUID = /* @__PURE__ */ $constructor("ZodGUID", (inst, def) => { + $ZodGUID.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function guid2(params) { + return _guid(ZodGUID, params); +} +var ZodUUID = /* @__PURE__ */ $constructor("ZodUUID", (inst, def) => { + $ZodUUID.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function uuid2(params) { + return _uuid(ZodUUID, params); +} +function uuidv4(params) { + return _uuidv4(ZodUUID, params); +} +function uuidv6(params) { + return _uuidv6(ZodUUID, params); +} +function uuidv7(params) { + return _uuidv7(ZodUUID, params); +} +var ZodURL = /* @__PURE__ */ $constructor("ZodURL", (inst, def) => { + $ZodURL.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function url(params) { + return _url(ZodURL, params); +} +function httpUrl(params) { + return _url(ZodURL, { + protocol: regexes_exports.httpProtocol, + hostname: regexes_exports.domain, + ...util_exports.normalizeParams(params) + }); +} +var ZodEmoji = /* @__PURE__ */ $constructor("ZodEmoji", (inst, def) => { + $ZodEmoji.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function emoji2(params) { + return _emoji2(ZodEmoji, params); +} +var ZodNanoID = /* @__PURE__ */ $constructor("ZodNanoID", (inst, def) => { + $ZodNanoID.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function nanoid2(params) { + return _nanoid(ZodNanoID, params); +} +var ZodCUID = /* @__PURE__ */ $constructor("ZodCUID", (inst, def) => { + $ZodCUID.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function cuid3(params) { + return _cuid(ZodCUID, params); +} +var ZodCUID2 = /* @__PURE__ */ $constructor("ZodCUID2", (inst, def) => { + $ZodCUID2.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function cuid22(params) { + return _cuid2(ZodCUID2, params); +} +var ZodULID = /* @__PURE__ */ $constructor("ZodULID", (inst, def) => { + $ZodULID.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function ulid2(params) { + return _ulid(ZodULID, params); +} +var ZodXID = /* @__PURE__ */ $constructor("ZodXID", (inst, def) => { + $ZodXID.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function xid2(params) { + return _xid(ZodXID, params); +} +var ZodKSUID = /* @__PURE__ */ $constructor("ZodKSUID", (inst, def) => { + $ZodKSUID.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function ksuid2(params) { + return _ksuid(ZodKSUID, params); +} +var ZodIPv4 = /* @__PURE__ */ $constructor("ZodIPv4", (inst, def) => { + $ZodIPv4.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function ipv42(params) { + return _ipv4(ZodIPv4, params); +} +var ZodMAC = /* @__PURE__ */ $constructor("ZodMAC", (inst, def) => { + $ZodMAC.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function mac2(params) { + return _mac(ZodMAC, params); +} +var ZodIPv6 = /* @__PURE__ */ $constructor("ZodIPv6", (inst, def) => { + $ZodIPv6.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function ipv62(params) { + return _ipv6(ZodIPv6, params); +} +var ZodCIDRv4 = /* @__PURE__ */ $constructor("ZodCIDRv4", (inst, def) => { + $ZodCIDRv4.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function cidrv42(params) { + return _cidrv4(ZodCIDRv4, params); +} +var ZodCIDRv6 = /* @__PURE__ */ $constructor("ZodCIDRv6", (inst, def) => { + $ZodCIDRv6.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function cidrv62(params) { + return _cidrv6(ZodCIDRv6, params); +} +var ZodBase64 = /* @__PURE__ */ $constructor("ZodBase64", (inst, def) => { + $ZodBase64.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function base642(params) { + return _base64(ZodBase64, params); +} +var ZodBase64URL = /* @__PURE__ */ $constructor("ZodBase64URL", (inst, def) => { + $ZodBase64URL.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function base64url2(params) { + return _base64url(ZodBase64URL, params); +} +var ZodE164 = /* @__PURE__ */ $constructor("ZodE164", (inst, def) => { + $ZodE164.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function e1642(params) { + return _e164(ZodE164, params); +} +var ZodJWT = /* @__PURE__ */ $constructor("ZodJWT", (inst, def) => { + $ZodJWT.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function jwt(params) { + return _jwt(ZodJWT, params); +} +var ZodCustomStringFormat = /* @__PURE__ */ $constructor("ZodCustomStringFormat", (inst, def) => { + $ZodCustomStringFormat.init(inst, def); + ZodStringFormat.init(inst, def); +}); +function stringFormat(format, fnOrRegex, _params = {}) { + return _stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params); +} +function hostname2(_params) { + return _stringFormat(ZodCustomStringFormat, "hostname", regexes_exports.hostname, _params); +} +function hex2(_params) { + return _stringFormat(ZodCustomStringFormat, "hex", regexes_exports.hex, _params); +} +function hash(alg, params) { + const enc = params?.enc ?? "hex"; + const format = `${alg}_${enc}`; + const regex = regexes_exports[format]; + if (!regex) + throw new Error(`Unrecognized hash format: ${format}`); + return _stringFormat(ZodCustomStringFormat, format, regex, params); +} +var ZodNumber = /* @__PURE__ */ $constructor("ZodNumber", (inst, def) => { + $ZodNumber.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => numberProcessor(inst, ctx, json2, params); + _installLazyMethods(inst, "ZodNumber", { + gt(value, params) { + return this.check(_gt(value, params)); + }, + gte(value, params) { + return this.check(_gte(value, params)); + }, + min(value, params) { + return this.check(_gte(value, params)); + }, + lt(value, params) { + return this.check(_lt(value, params)); + }, + lte(value, params) { + return this.check(_lte(value, params)); + }, + max(value, params) { + return this.check(_lte(value, params)); + }, + int(params) { + return this.check(int(params)); + }, + safe(params) { + return this.check(int(params)); + }, + positive(params) { + return this.check(_gt(0, params)); + }, + nonnegative(params) { + return this.check(_gte(0, params)); + }, + negative(params) { + return this.check(_lt(0, params)); + }, + nonpositive(params) { + return this.check(_lte(0, params)); + }, + multipleOf(value, params) { + return this.check(_multipleOf(value, params)); + }, + step(value, params) { + return this.check(_multipleOf(value, params)); + }, + finite() { + return this; + } + }); + const bag = inst._zod.bag; + inst.minValue = Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null; + inst.maxValue = Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null; + inst.isInt = (bag.format ?? "").includes("int") || Number.isSafeInteger(bag.multipleOf ?? 0.5); + inst.isFinite = true; + inst.format = bag.format ?? null; +}); +function number2(params) { + return _number(ZodNumber, params); +} +var ZodNumberFormat = /* @__PURE__ */ $constructor("ZodNumberFormat", (inst, def) => { + $ZodNumberFormat.init(inst, def); + ZodNumber.init(inst, def); +}); +function int(params) { + return _int(ZodNumberFormat, params); +} +function float32(params) { + return _float32(ZodNumberFormat, params); +} +function float64(params) { + return _float64(ZodNumberFormat, params); +} +function int32(params) { + return _int32(ZodNumberFormat, params); +} +function uint32(params) { + return _uint32(ZodNumberFormat, params); +} +var ZodBoolean = /* @__PURE__ */ $constructor("ZodBoolean", (inst, def) => { + $ZodBoolean.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => booleanProcessor(inst, ctx, json2, params); +}); +function boolean2(params) { + return _boolean(ZodBoolean, params); +} +var ZodBigInt = /* @__PURE__ */ $constructor("ZodBigInt", (inst, def) => { + $ZodBigInt.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => bigintProcessor(inst, ctx, json2, params); + inst.gte = (value, params) => inst.check(_gte(value, params)); + inst.min = (value, params) => inst.check(_gte(value, params)); + inst.gt = (value, params) => inst.check(_gt(value, params)); + inst.gte = (value, params) => inst.check(_gte(value, params)); + inst.min = (value, params) => inst.check(_gte(value, params)); + inst.lt = (value, params) => inst.check(_lt(value, params)); + inst.lte = (value, params) => inst.check(_lte(value, params)); + inst.max = (value, params) => inst.check(_lte(value, params)); + inst.positive = (params) => inst.check(_gt(BigInt(0), params)); + inst.negative = (params) => inst.check(_lt(BigInt(0), params)); + inst.nonpositive = (params) => inst.check(_lte(BigInt(0), params)); + inst.nonnegative = (params) => inst.check(_gte(BigInt(0), params)); + inst.multipleOf = (value, params) => inst.check(_multipleOf(value, params)); + const bag = inst._zod.bag; + inst.minValue = bag.minimum ?? null; + inst.maxValue = bag.maximum ?? null; + inst.format = bag.format ?? null; +}); +function bigint2(params) { + return _bigint(ZodBigInt, params); +} +var ZodBigIntFormat = /* @__PURE__ */ $constructor("ZodBigIntFormat", (inst, def) => { + $ZodBigIntFormat.init(inst, def); + ZodBigInt.init(inst, def); +}); +function int64(params) { + return _int64(ZodBigIntFormat, params); +} +function uint64(params) { + return _uint64(ZodBigIntFormat, params); +} +var ZodSymbol = /* @__PURE__ */ $constructor("ZodSymbol", (inst, def) => { + $ZodSymbol.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => symbolProcessor(inst, ctx, json2, params); +}); +function symbol(params) { + return _symbol(ZodSymbol, params); +} +var ZodUndefined = /* @__PURE__ */ $constructor("ZodUndefined", (inst, def) => { + $ZodUndefined.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => undefinedProcessor(inst, ctx, json2, params); +}); +function _undefined3(params) { + return _undefined2(ZodUndefined, params); +} +var ZodNull = /* @__PURE__ */ $constructor("ZodNull", (inst, def) => { + $ZodNull.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => nullProcessor(inst, ctx, json2, params); +}); +function _null3(params) { + return _null2(ZodNull, params); +} +var ZodAny = /* @__PURE__ */ $constructor("ZodAny", (inst, def) => { + $ZodAny.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => anyProcessor(inst, ctx, json2, params); +}); +function any() { + return _any(ZodAny); +} +var ZodUnknown = /* @__PURE__ */ $constructor("ZodUnknown", (inst, def) => { + $ZodUnknown.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => unknownProcessor(inst, ctx, json2, params); +}); +function unknown() { + return _unknown(ZodUnknown); +} +var ZodNever = /* @__PURE__ */ $constructor("ZodNever", (inst, def) => { + $ZodNever.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => neverProcessor(inst, ctx, json2, params); +}); +function never(params) { + return _never(ZodNever, params); +} +var ZodVoid = /* @__PURE__ */ $constructor("ZodVoid", (inst, def) => { + $ZodVoid.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => voidProcessor(inst, ctx, json2, params); +}); +function _void2(params) { + return _void(ZodVoid, params); +} +var ZodDate = /* @__PURE__ */ $constructor("ZodDate", (inst, def) => { + $ZodDate.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => dateProcessor(inst, ctx, json2, params); + inst.min = (value, params) => inst.check(_gte(value, params)); + inst.max = (value, params) => inst.check(_lte(value, params)); + const c = inst._zod.bag; + inst.minDate = c.minimum ? new Date(c.minimum) : null; + inst.maxDate = c.maximum ? new Date(c.maximum) : null; +}); +function date3(params) { + return _date(ZodDate, params); +} +var ZodArray = /* @__PURE__ */ $constructor("ZodArray", (inst, def) => { + $ZodArray.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => arrayProcessor(inst, ctx, json2, params); + inst.element = def.element; + _installLazyMethods(inst, "ZodArray", { + min(n, params) { + return this.check(_minLength(n, params)); + }, + nonempty(params) { + return this.check(_minLength(1, params)); + }, + max(n, params) { + return this.check(_maxLength(n, params)); + }, + length(n, params) { + return this.check(_length(n, params)); + }, + unwrap() { + return this.element; + } + }); +}); +function array(element, params) { + return _array(ZodArray, element, params); +} +function keyof(schema) { + const shape = schema._zod.def.shape; + return _enum2(Object.keys(shape)); +} +var ZodObject = /* @__PURE__ */ $constructor("ZodObject", (inst, def) => { + $ZodObjectJIT.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => objectProcessor(inst, ctx, json2, params); + util_exports.defineLazy(inst, "shape", () => { + return def.shape; + }); + _installLazyMethods(inst, "ZodObject", { + keyof() { + return _enum2(Object.keys(this._zod.def.shape)); + }, + catchall(catchall) { + return this.clone({ ...this._zod.def, catchall }); + }, + passthrough() { + return this.clone({ ...this._zod.def, catchall: unknown() }); + }, + loose() { + return this.clone({ ...this._zod.def, catchall: unknown() }); + }, + strict() { + return this.clone({ ...this._zod.def, catchall: never() }); + }, + strip() { + return this.clone({ ...this._zod.def, catchall: void 0 }); + }, + extend(incoming) { + return util_exports.extend(this, incoming); + }, + safeExtend(incoming) { + return util_exports.safeExtend(this, incoming); + }, + merge(other) { + return util_exports.merge(this, other); + }, + pick(mask) { + return util_exports.pick(this, mask); + }, + omit(mask) { + return util_exports.omit(this, mask); + }, + partial(...args) { + return util_exports.partial(ZodOptional, this, args[0]); + }, + required(...args) { + return util_exports.required(ZodNonOptional, this, args[0]); + } + }); +}); +function object(shape, params) { + const def = { + type: "object", + shape: shape ?? {}, + ...util_exports.normalizeParams(params) + }; + return new ZodObject(def); +} +function strictObject(shape, params) { + return new ZodObject({ + type: "object", + shape, + catchall: never(), + ...util_exports.normalizeParams(params) + }); +} +function looseObject(shape, params) { + return new ZodObject({ + type: "object", + shape, + catchall: unknown(), + ...util_exports.normalizeParams(params) + }); +} +var ZodUnion = /* @__PURE__ */ $constructor("ZodUnion", (inst, def) => { + $ZodUnion.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => unionProcessor(inst, ctx, json2, params); + inst.options = def.options; +}); +function union(options, params) { + return new ZodUnion({ + type: "union", + options, + ...util_exports.normalizeParams(params) + }); +} +var ZodXor = /* @__PURE__ */ $constructor("ZodXor", (inst, def) => { + ZodUnion.init(inst, def); + $ZodXor.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => unionProcessor(inst, ctx, json2, params); + inst.options = def.options; +}); +function xor(options, params) { + return new ZodXor({ + type: "union", + options, + inclusive: false, + ...util_exports.normalizeParams(params) + }); +} +var ZodDiscriminatedUnion = /* @__PURE__ */ $constructor("ZodDiscriminatedUnion", (inst, def) => { + ZodUnion.init(inst, def); + $ZodDiscriminatedUnion.init(inst, def); +}); +function discriminatedUnion(discriminator, options, params) { + return new ZodDiscriminatedUnion({ + type: "union", + options, + discriminator, + ...util_exports.normalizeParams(params) + }); +} +var ZodIntersection = /* @__PURE__ */ $constructor("ZodIntersection", (inst, def) => { + $ZodIntersection.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => intersectionProcessor(inst, ctx, json2, params); +}); +function intersection(left, right) { + return new ZodIntersection({ + type: "intersection", + left, + right + }); +} +var ZodTuple = /* @__PURE__ */ $constructor("ZodTuple", (inst, def) => { + $ZodTuple.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => tupleProcessor(inst, ctx, json2, params); + inst.rest = (rest) => inst.clone({ + ...inst._zod.def, + rest + }); +}); +function tuple(items, _paramsOrRest, _params) { + const hasRest = _paramsOrRest instanceof $ZodType; + const params = hasRest ? _params : _paramsOrRest; + const rest = hasRest ? _paramsOrRest : null; + return new ZodTuple({ + type: "tuple", + items, + rest, + ...util_exports.normalizeParams(params) + }); +} +var ZodRecord = /* @__PURE__ */ $constructor("ZodRecord", (inst, def) => { + $ZodRecord.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => recordProcessor(inst, ctx, json2, params); + inst.keyType = def.keyType; + inst.valueType = def.valueType; +}); +function record(keyType, valueType, params) { + if (!valueType || !valueType._zod) { + return new ZodRecord({ + type: "record", + keyType: string2(), + valueType: keyType, + ...util_exports.normalizeParams(valueType) + }); + } + return new ZodRecord({ + type: "record", + keyType, + valueType, + ...util_exports.normalizeParams(params) + }); +} +function partialRecord(keyType, valueType, params) { + const k = clone(keyType); + k._zod.values = void 0; + return new ZodRecord({ + type: "record", + keyType: k, + valueType, + ...util_exports.normalizeParams(params) + }); +} +function looseRecord(keyType, valueType, params) { + return new ZodRecord({ + type: "record", + keyType, + valueType, + mode: "loose", + ...util_exports.normalizeParams(params) + }); +} +var ZodMap = /* @__PURE__ */ $constructor("ZodMap", (inst, def) => { + $ZodMap.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => mapProcessor(inst, ctx, json2, params); + inst.keyType = def.keyType; + inst.valueType = def.valueType; + inst.min = (...args) => inst.check(_minSize(...args)); + inst.nonempty = (params) => inst.check(_minSize(1, params)); + inst.max = (...args) => inst.check(_maxSize(...args)); + inst.size = (...args) => inst.check(_size(...args)); +}); +function map(keyType, valueType, params) { + return new ZodMap({ + type: "map", + keyType, + valueType, + ...util_exports.normalizeParams(params) + }); +} +var ZodSet = /* @__PURE__ */ $constructor("ZodSet", (inst, def) => { + $ZodSet.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => setProcessor(inst, ctx, json2, params); + inst.min = (...args) => inst.check(_minSize(...args)); + inst.nonempty = (params) => inst.check(_minSize(1, params)); + inst.max = (...args) => inst.check(_maxSize(...args)); + inst.size = (...args) => inst.check(_size(...args)); +}); +function set(valueType, params) { + return new ZodSet({ + type: "set", + valueType, + ...util_exports.normalizeParams(params) + }); +} +var ZodEnum = /* @__PURE__ */ $constructor("ZodEnum", (inst, def) => { + $ZodEnum.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => enumProcessor(inst, ctx, json2, params); + inst.enum = def.entries; + inst.options = Object.values(def.entries); + const keys = new Set(Object.keys(def.entries)); + inst.extract = (values, params) => { + const newEntries = {}; + for (const value of values) { + if (keys.has(value)) { + newEntries[value] = def.entries[value]; + } else + throw new Error(`Key ${value} not found in enum`); + } + return new ZodEnum({ + ...def, + checks: [], + ...util_exports.normalizeParams(params), + entries: newEntries + }); + }; + inst.exclude = (values, params) => { + const newEntries = { ...def.entries }; + for (const value of values) { + if (keys.has(value)) { + delete newEntries[value]; + } else + throw new Error(`Key ${value} not found in enum`); + } + return new ZodEnum({ + ...def, + checks: [], + ...util_exports.normalizeParams(params), + entries: newEntries + }); + }; +}); +function _enum2(values, params) { + const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values; + return new ZodEnum({ + type: "enum", + entries, + ...util_exports.normalizeParams(params) + }); +} +function nativeEnum(entries, params) { + return new ZodEnum({ + type: "enum", + entries, + ...util_exports.normalizeParams(params) + }); +} +var ZodLiteral = /* @__PURE__ */ $constructor("ZodLiteral", (inst, def) => { + $ZodLiteral.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => literalProcessor(inst, ctx, json2, params); + inst.values = new Set(def.values); + Object.defineProperty(inst, "value", { + get() { + if (def.values.length > 1) { + throw new Error("This schema contains multiple valid literal values. Use `.values` instead."); + } + return def.values[0]; + } + }); +}); +function literal(value, params) { + return new ZodLiteral({ + type: "literal", + values: Array.isArray(value) ? value : [value], + ...util_exports.normalizeParams(params) + }); +} +var ZodFile = /* @__PURE__ */ $constructor("ZodFile", (inst, def) => { + $ZodFile.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => fileProcessor(inst, ctx, json2, params); + inst.min = (size, params) => inst.check(_minSize(size, params)); + inst.max = (size, params) => inst.check(_maxSize(size, params)); + inst.mime = (types, params) => inst.check(_mime(Array.isArray(types) ? types : [types], params)); +}); +function file(params) { + return _file(ZodFile, params); +} +var ZodTransform = /* @__PURE__ */ $constructor("ZodTransform", (inst, def) => { + $ZodTransform.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => transformProcessor(inst, ctx, json2, params); + inst._zod.parse = (payload, _ctx) => { + if (_ctx.direction === "backward") { + throw new $ZodEncodeError(inst.constructor.name); + } + payload.addIssue = (issue2) => { + if (typeof issue2 === "string") { + payload.issues.push(util_exports.issue(issue2, payload.value, def)); + } else { + const _issue = issue2; + if (_issue.fatal) + _issue.continue = false; + _issue.code ?? (_issue.code = "custom"); + _issue.input ?? (_issue.input = payload.value); + _issue.inst ?? (_issue.inst = inst); + payload.issues.push(util_exports.issue(_issue)); + } + }; + const output = def.transform(payload.value, payload); + if (output instanceof Promise) { + return output.then((output2) => { + payload.value = output2; + payload.fallback = true; + return payload; + }); + } + payload.value = output; + payload.fallback = true; + return payload; + }; +}); +function transform(fn) { + return new ZodTransform({ + type: "transform", + transform: fn + }); +} +var ZodOptional = /* @__PURE__ */ $constructor("ZodOptional", (inst, def) => { + $ZodOptional.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => optionalProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; +}); +function optional(innerType) { + return new ZodOptional({ + type: "optional", + innerType + }); +} +var ZodExactOptional = /* @__PURE__ */ $constructor("ZodExactOptional", (inst, def) => { + $ZodExactOptional.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => optionalProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; +}); +function exactOptional(innerType) { + return new ZodExactOptional({ + type: "optional", + innerType + }); +} +var ZodNullable = /* @__PURE__ */ $constructor("ZodNullable", (inst, def) => { + $ZodNullable.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => nullableProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; +}); +function nullable(innerType) { + return new ZodNullable({ + type: "nullable", + innerType + }); +} +function nullish2(innerType) { + return optional(nullable(innerType)); +} +var ZodDefault = /* @__PURE__ */ $constructor("ZodDefault", (inst, def) => { + $ZodDefault.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => defaultProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + inst.removeDefault = inst.unwrap; +}); +function _default2(innerType, defaultValue) { + return new ZodDefault({ + type: "default", + innerType, + get defaultValue() { + return typeof defaultValue === "function" ? defaultValue() : util_exports.shallowClone(defaultValue); + } + }); +} +var ZodPrefault = /* @__PURE__ */ $constructor("ZodPrefault", (inst, def) => { + $ZodPrefault.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => prefaultProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; +}); +function prefault(innerType, defaultValue) { + return new ZodPrefault({ + type: "prefault", + innerType, + get defaultValue() { + return typeof defaultValue === "function" ? defaultValue() : util_exports.shallowClone(defaultValue); + } + }); +} +var ZodNonOptional = /* @__PURE__ */ $constructor("ZodNonOptional", (inst, def) => { + $ZodNonOptional.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => nonoptionalProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; +}); +function nonoptional(innerType, params) { + return new ZodNonOptional({ + type: "nonoptional", + innerType, + ...util_exports.normalizeParams(params) + }); +} +var ZodSuccess = /* @__PURE__ */ $constructor("ZodSuccess", (inst, def) => { + $ZodSuccess.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => successProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; +}); +function success(innerType) { + return new ZodSuccess({ + type: "success", + innerType + }); +} +var ZodCatch = /* @__PURE__ */ $constructor("ZodCatch", (inst, def) => { + $ZodCatch.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => catchProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; + inst.removeCatch = inst.unwrap; +}); +function _catch2(innerType, catchValue) { + return new ZodCatch({ + type: "catch", + innerType, + catchValue: typeof catchValue === "function" ? catchValue : () => catchValue + }); +} +var ZodNaN = /* @__PURE__ */ $constructor("ZodNaN", (inst, def) => { + $ZodNaN.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => nanProcessor(inst, ctx, json2, params); +}); +function nan(params) { + return _nan(ZodNaN, params); +} +var ZodPipe = /* @__PURE__ */ $constructor("ZodPipe", (inst, def) => { + $ZodPipe.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => pipeProcessor(inst, ctx, json2, params); + inst.in = def.in; + inst.out = def.out; +}); +function pipe(in_, out) { + return new ZodPipe({ + type: "pipe", + in: in_, + out + // ...util.normalizeParams(params), + }); +} +var ZodCodec = /* @__PURE__ */ $constructor("ZodCodec", (inst, def) => { + ZodPipe.init(inst, def); + $ZodCodec.init(inst, def); +}); +function codec(in_, out, params) { + return new ZodCodec({ + type: "pipe", + in: in_, + out, + transform: params.decode, + reverseTransform: params.encode + }); +} +function invertCodec(codec2) { + const def = codec2._zod.def; + return new ZodCodec({ + type: "pipe", + in: def.out, + out: def.in, + transform: def.reverseTransform, + reverseTransform: def.transform + }); +} +var ZodPreprocess = /* @__PURE__ */ $constructor("ZodPreprocess", (inst, def) => { + ZodPipe.init(inst, def); + $ZodPreprocess.init(inst, def); +}); +var ZodReadonly = /* @__PURE__ */ $constructor("ZodReadonly", (inst, def) => { + $ZodReadonly.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => readonlyProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; +}); +function readonly(innerType) { + return new ZodReadonly({ + type: "readonly", + innerType + }); +} +var ZodTemplateLiteral = /* @__PURE__ */ $constructor("ZodTemplateLiteral", (inst, def) => { + $ZodTemplateLiteral.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => templateLiteralProcessor(inst, ctx, json2, params); +}); +function templateLiteral(parts, params) { + return new ZodTemplateLiteral({ + type: "template_literal", + parts, + ...util_exports.normalizeParams(params) + }); +} +var ZodLazy = /* @__PURE__ */ $constructor("ZodLazy", (inst, def) => { + $ZodLazy.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => lazyProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.getter(); +}); +function lazy(getter) { + return new ZodLazy({ + type: "lazy", + getter + }); +} +var ZodPromise = /* @__PURE__ */ $constructor("ZodPromise", (inst, def) => { + $ZodPromise.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => promiseProcessor(inst, ctx, json2, params); + inst.unwrap = () => inst._zod.def.innerType; +}); +function promise(innerType) { + return new ZodPromise({ + type: "promise", + innerType + }); +} +var ZodFunction = /* @__PURE__ */ $constructor("ZodFunction", (inst, def) => { + $ZodFunction.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => functionProcessor(inst, ctx, json2, params); +}); +function _function(params) { + return new ZodFunction({ + type: "function", + input: Array.isArray(params?.input) ? tuple(params?.input) : params?.input ?? array(unknown()), + output: params?.output ?? unknown() + }); +} +var ZodCustom = /* @__PURE__ */ $constructor("ZodCustom", (inst, def) => { + $ZodCustom.init(inst, def); + ZodType.init(inst, def); + inst._zod.processJSONSchema = (ctx, json2, params) => customProcessor(inst, ctx, json2, params); +}); +function check(fn) { + const ch = new $ZodCheck({ + check: "custom" + // ...util.normalizeParams(params), + }); + ch._zod.check = fn; + return ch; +} +function custom(fn, _params) { + return _custom(ZodCustom, fn ?? (() => true), _params); +} +function refine(fn, _params = {}) { + return _refine(ZodCustom, fn, _params); +} +function superRefine(fn, params) { + return _superRefine(fn, params); +} +var describe2 = describe; +var meta2 = meta; +function _instanceof(cls, params = {}) { + const inst = new ZodCustom({ + type: "custom", + check: "custom", + fn: (data) => data instanceof cls, + abort: true, + ...util_exports.normalizeParams(params) + }); + inst._zod.bag.Class = cls; + inst._zod.check = (payload) => { + if (!(payload.value instanceof cls)) { + payload.issues.push({ + code: "invalid_type", + expected: cls.name, + input: payload.value, + inst, + path: [...inst._zod.def.path ?? []] + }); + } + }; + return inst; +} +var stringbool = (...args) => _stringbool({ + Codec: ZodCodec, + Boolean: ZodBoolean, + String: ZodString +}, ...args); +function json(params) { + const jsonSchema = lazy(() => { + return union([string2(params), number2(), boolean2(), _null3(), array(jsonSchema), record(string2(), jsonSchema)]); + }); + return jsonSchema; +} +function preprocess(fn, schema) { + return new ZodPreprocess({ + type: "pipe", + in: transform(fn), + out: schema + }); +} + +// ../../node_modules/zod/v4/classic/compat.js +var ZodIssueCode = { + invalid_type: "invalid_type", + too_big: "too_big", + too_small: "too_small", + invalid_format: "invalid_format", + not_multiple_of: "not_multiple_of", + unrecognized_keys: "unrecognized_keys", + invalid_union: "invalid_union", + invalid_key: "invalid_key", + invalid_element: "invalid_element", + invalid_value: "invalid_value", + custom: "custom" +}; +function setErrorMap(map2) { + config({ + customError: map2 + }); +} +function getErrorMap() { + return config().customError; +} +var ZodFirstPartyTypeKind; +/* @__PURE__ */ (function(ZodFirstPartyTypeKind2) { +})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {})); + +// ../../node_modules/zod/v4/classic/from-json-schema.js +var z = { + ...schemas_exports2, + ...checks_exports2, + iso: iso_exports +}; +var RECOGNIZED_KEYS = /* @__PURE__ */ new Set([ + // Schema identification + "$schema", + "$ref", + "$defs", + "definitions", + // Core schema keywords + "$id", + "id", + "$comment", + "$anchor", + "$vocabulary", + "$dynamicRef", + "$dynamicAnchor", + // Type + "type", + "enum", + "const", + // Composition + "anyOf", + "oneOf", + "allOf", + "not", + // Object + "properties", + "required", + "additionalProperties", + "patternProperties", + "propertyNames", + "minProperties", + "maxProperties", + // Array + "items", + "prefixItems", + "additionalItems", + "minItems", + "maxItems", + "uniqueItems", + "contains", + "minContains", + "maxContains", + // String + "minLength", + "maxLength", + "pattern", + "format", + // Number + "minimum", + "maximum", + "exclusiveMinimum", + "exclusiveMaximum", + "multipleOf", + // Already handled metadata + "description", + "default", + // Content + "contentEncoding", + "contentMediaType", + "contentSchema", + // Unsupported (error-throwing) + "unevaluatedItems", + "unevaluatedProperties", + "if", + "then", + "else", + "dependentSchemas", + "dependentRequired", + // OpenAPI + "nullable", + "readOnly" +]); +function detectVersion(schema, defaultTarget) { + const $schema = schema.$schema; + if ($schema === "https://json-schema.org/draft/2020-12/schema") { + return "draft-2020-12"; + } + if ($schema === "http://json-schema.org/draft-07/schema#") { + return "draft-7"; + } + if ($schema === "http://json-schema.org/draft-04/schema#") { + return "draft-4"; + } + return defaultTarget ?? "draft-2020-12"; +} +function resolveRef(ref, ctx) { + if (!ref.startsWith("#")) { + throw new Error("External $ref is not supported, only local refs (#/...) are allowed"); + } + const path = ref.slice(1).split("/").filter(Boolean); + if (path.length === 0) { + return ctx.rootSchema; + } + const defsKey = ctx.version === "draft-2020-12" ? "$defs" : "definitions"; + if (path[0] === defsKey) { + const key = path[1]; + if (!key || !ctx.defs[key]) { + throw new Error(`Reference not found: ${ref}`); + } + return ctx.defs[key]; + } + throw new Error(`Reference not found: ${ref}`); +} +function convertBaseSchema(schema, ctx) { + if (schema.not !== void 0) { + if (typeof schema.not === "object" && Object.keys(schema.not).length === 0) { + return z.never(); + } + throw new Error("not is not supported in Zod (except { not: {} } for never)"); + } + if (schema.unevaluatedItems !== void 0) { + throw new Error("unevaluatedItems is not supported"); + } + if (schema.unevaluatedProperties !== void 0) { + throw new Error("unevaluatedProperties is not supported"); + } + if (schema.if !== void 0 || schema.then !== void 0 || schema.else !== void 0) { + throw new Error("Conditional schemas (if/then/else) are not supported"); + } + if (schema.dependentSchemas !== void 0 || schema.dependentRequired !== void 0) { + throw new Error("dependentSchemas and dependentRequired are not supported"); + } + if (schema.$ref) { + const refPath = schema.$ref; + if (ctx.refs.has(refPath)) { + return ctx.refs.get(refPath); + } + if (ctx.processing.has(refPath)) { + return z.lazy(() => { + if (!ctx.refs.has(refPath)) { + throw new Error(`Circular reference not resolved: ${refPath}`); + } + return ctx.refs.get(refPath); + }); + } + ctx.processing.add(refPath); + const resolved = resolveRef(refPath, ctx); + const zodSchema2 = convertSchema(resolved, ctx); + ctx.refs.set(refPath, zodSchema2); + ctx.processing.delete(refPath); + return zodSchema2; + } + if (schema.enum !== void 0) { + const enumValues = schema.enum; + if (ctx.version === "openapi-3.0" && schema.nullable === true && enumValues.length === 1 && enumValues[0] === null) { + return z.null(); + } + if (enumValues.length === 0) { + return z.never(); + } + if (enumValues.length === 1) { + return z.literal(enumValues[0]); + } + if (enumValues.every((v) => typeof v === "string")) { + return z.enum(enumValues); + } + const literalSchemas = enumValues.map((v) => z.literal(v)); + if (literalSchemas.length < 2) { + return literalSchemas[0]; + } + return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]); + } + if (schema.const !== void 0) { + return z.literal(schema.const); + } + const type = schema.type; + if (Array.isArray(type)) { + const typeSchemas = type.map((t) => { + const typeSchema = { ...schema, type: t }; + return convertBaseSchema(typeSchema, ctx); + }); + if (typeSchemas.length === 0) { + return z.never(); + } + if (typeSchemas.length === 1) { + return typeSchemas[0]; + } + return z.union(typeSchemas); + } + if (!type) { + return z.any(); + } + let zodSchema; + switch (type) { + case "string": { + let stringSchema = z.string(); + if (schema.format) { + const format = schema.format; + if (format === "email") { + stringSchema = stringSchema.check(z.email()); + } else if (format === "uri" || format === "uri-reference") { + stringSchema = stringSchema.check(z.url()); + } else if (format === "uuid" || format === "guid") { + stringSchema = stringSchema.check(z.uuid()); + } else if (format === "date-time") { + stringSchema = stringSchema.check(z.iso.datetime()); + } else if (format === "date") { + stringSchema = stringSchema.check(z.iso.date()); + } else if (format === "time") { + stringSchema = stringSchema.check(z.iso.time()); + } else if (format === "duration") { + stringSchema = stringSchema.check(z.iso.duration()); + } else if (format === "ipv4") { + stringSchema = stringSchema.check(z.ipv4()); + } else if (format === "ipv6") { + stringSchema = stringSchema.check(z.ipv6()); + } else if (format === "mac") { + stringSchema = stringSchema.check(z.mac()); + } else if (format === "cidr") { + stringSchema = stringSchema.check(z.cidrv4()); + } else if (format === "cidr-v6") { + stringSchema = stringSchema.check(z.cidrv6()); + } else if (format === "base64") { + stringSchema = stringSchema.check(z.base64()); + } else if (format === "base64url") { + stringSchema = stringSchema.check(z.base64url()); + } else if (format === "e164") { + stringSchema = stringSchema.check(z.e164()); + } else if (format === "jwt") { + stringSchema = stringSchema.check(z.jwt()); + } else if (format === "emoji") { + stringSchema = stringSchema.check(z.emoji()); + } else if (format === "nanoid") { + stringSchema = stringSchema.check(z.nanoid()); + } else if (format === "cuid") { + stringSchema = stringSchema.check(z.cuid()); + } else if (format === "cuid2") { + stringSchema = stringSchema.check(z.cuid2()); + } else if (format === "ulid") { + stringSchema = stringSchema.check(z.ulid()); + } else if (format === "xid") { + stringSchema = stringSchema.check(z.xid()); + } else if (format === "ksuid") { + stringSchema = stringSchema.check(z.ksuid()); + } + } + if (typeof schema.minLength === "number") { + stringSchema = stringSchema.min(schema.minLength); + } + if (typeof schema.maxLength === "number") { + stringSchema = stringSchema.max(schema.maxLength); + } + if (schema.pattern) { + stringSchema = stringSchema.regex(new RegExp(schema.pattern)); + } + zodSchema = stringSchema; + break; + } + case "number": + case "integer": { + let numberSchema = type === "integer" ? z.number().int() : z.number(); + if (typeof schema.minimum === "number") { + numberSchema = numberSchema.min(schema.minimum); + } + if (typeof schema.maximum === "number") { + numberSchema = numberSchema.max(schema.maximum); + } + if (typeof schema.exclusiveMinimum === "number") { + numberSchema = numberSchema.gt(schema.exclusiveMinimum); + } else if (schema.exclusiveMinimum === true && typeof schema.minimum === "number") { + numberSchema = numberSchema.gt(schema.minimum); + } + if (typeof schema.exclusiveMaximum === "number") { + numberSchema = numberSchema.lt(schema.exclusiveMaximum); + } else if (schema.exclusiveMaximum === true && typeof schema.maximum === "number") { + numberSchema = numberSchema.lt(schema.maximum); + } + if (typeof schema.multipleOf === "number") { + numberSchema = numberSchema.multipleOf(schema.multipleOf); + } + zodSchema = numberSchema; + break; + } + case "boolean": { + zodSchema = z.boolean(); + break; + } + case "null": { + zodSchema = z.null(); + break; + } + case "object": { + const shape = {}; + const properties = schema.properties || {}; + const requiredSet = new Set(schema.required || []); + for (const [key, propSchema] of Object.entries(properties)) { + const propZodSchema = convertSchema(propSchema, ctx); + shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional(); + } + if (schema.propertyNames) { + const keySchema = convertSchema(schema.propertyNames, ctx); + const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === "object" ? convertSchema(schema.additionalProperties, ctx) : z.any(); + if (Object.keys(shape).length === 0) { + zodSchema = z.record(keySchema, valueSchema); + break; + } + const objectSchema2 = z.object(shape).passthrough(); + const recordSchema = z.looseRecord(keySchema, valueSchema); + zodSchema = z.intersection(objectSchema2, recordSchema); + break; + } + if (schema.patternProperties) { + const patternProps = schema.patternProperties; + const patternKeys = Object.keys(patternProps); + const looseRecords = []; + for (const pattern of patternKeys) { + const patternValue = convertSchema(patternProps[pattern], ctx); + const keySchema = z.string().regex(new RegExp(pattern)); + looseRecords.push(z.looseRecord(keySchema, patternValue)); + } + const schemasToIntersect = []; + if (Object.keys(shape).length > 0) { + schemasToIntersect.push(z.object(shape).passthrough()); + } + schemasToIntersect.push(...looseRecords); + if (schemasToIntersect.length === 0) { + zodSchema = z.object({}).passthrough(); + } else if (schemasToIntersect.length === 1) { + zodSchema = schemasToIntersect[0]; + } else { + let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]); + for (let i = 2; i < schemasToIntersect.length; i++) { + result = z.intersection(result, schemasToIntersect[i]); + } + zodSchema = result; + } + break; + } + const objectSchema = z.object(shape); + if (schema.additionalProperties === false) { + zodSchema = objectSchema.strict(); + } else if (typeof schema.additionalProperties === "object") { + zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx)); + } else { + zodSchema = objectSchema.passthrough(); + } + break; + } + case "array": { + const prefixItems = schema.prefixItems; + const items = schema.items; + if (prefixItems && Array.isArray(prefixItems)) { + const tupleItems = prefixItems.map((item) => convertSchema(item, ctx)); + const rest = items && typeof items === "object" && !Array.isArray(items) ? convertSchema(items, ctx) : void 0; + if (rest) { + zodSchema = z.tuple(tupleItems).rest(rest); + } else { + zodSchema = z.tuple(tupleItems); + } + if (typeof schema.minItems === "number") { + zodSchema = zodSchema.check(z.minLength(schema.minItems)); + } + if (typeof schema.maxItems === "number") { + zodSchema = zodSchema.check(z.maxLength(schema.maxItems)); + } + } else if (Array.isArray(items)) { + const tupleItems = items.map((item) => convertSchema(item, ctx)); + const rest = schema.additionalItems && typeof schema.additionalItems === "object" ? convertSchema(schema.additionalItems, ctx) : void 0; + if (rest) { + zodSchema = z.tuple(tupleItems).rest(rest); + } else { + zodSchema = z.tuple(tupleItems); + } + if (typeof schema.minItems === "number") { + zodSchema = zodSchema.check(z.minLength(schema.minItems)); + } + if (typeof schema.maxItems === "number") { + zodSchema = zodSchema.check(z.maxLength(schema.maxItems)); + } + } else if (items !== void 0) { + const element = convertSchema(items, ctx); + let arraySchema = z.array(element); + if (typeof schema.minItems === "number") { + arraySchema = arraySchema.min(schema.minItems); + } + if (typeof schema.maxItems === "number") { + arraySchema = arraySchema.max(schema.maxItems); + } + zodSchema = arraySchema; + } else { + zodSchema = z.array(z.any()); + } + break; + } + default: + throw new Error(`Unsupported type: ${type}`); + } + return zodSchema; +} +function convertSchema(schema, ctx) { + if (typeof schema === "boolean") { + return schema ? z.any() : z.never(); + } + let baseSchema = convertBaseSchema(schema, ctx); + const hasExplicitType = schema.type || schema.enum !== void 0 || schema.const !== void 0; + if (schema.anyOf && Array.isArray(schema.anyOf)) { + const options = schema.anyOf.map((s) => convertSchema(s, ctx)); + const anyOfUnion = z.union(options); + baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion; + } + if (schema.oneOf && Array.isArray(schema.oneOf)) { + const options = schema.oneOf.map((s) => convertSchema(s, ctx)); + const oneOfUnion = z.xor(options); + baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion; + } + if (schema.allOf && Array.isArray(schema.allOf)) { + if (schema.allOf.length === 0) { + baseSchema = hasExplicitType ? baseSchema : z.any(); + } else { + let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx); + const startIdx = hasExplicitType ? 0 : 1; + for (let i = startIdx; i < schema.allOf.length; i++) { + result = z.intersection(result, convertSchema(schema.allOf[i], ctx)); + } + baseSchema = result; + } + } + if (schema.nullable === true && ctx.version === "openapi-3.0") { + baseSchema = z.nullable(baseSchema); + } + if (schema.readOnly === true) { + baseSchema = z.readonly(baseSchema); + } + if (schema.default !== void 0) { + baseSchema = baseSchema.default(schema.default); + } + const extraMeta = {}; + const coreMetadataKeys = ["$id", "id", "$comment", "$anchor", "$vocabulary", "$dynamicRef", "$dynamicAnchor"]; + for (const key of coreMetadataKeys) { + if (key in schema) { + extraMeta[key] = schema[key]; + } + } + const contentMetadataKeys = ["contentEncoding", "contentMediaType", "contentSchema"]; + for (const key of contentMetadataKeys) { + if (key in schema) { + extraMeta[key] = schema[key]; + } + } + for (const key of Object.keys(schema)) { + if (!RECOGNIZED_KEYS.has(key)) { + extraMeta[key] = schema[key]; + } + } + if (Object.keys(extraMeta).length > 0) { + ctx.registry.add(baseSchema, extraMeta); + } + if (schema.description) { + baseSchema = baseSchema.describe(schema.description); + } + return baseSchema; +} +function fromJSONSchema(schema, params) { + if (typeof schema === "boolean") { + return schema ? z.any() : z.never(); + } + let normalized; + try { + normalized = JSON.parse(JSON.stringify(schema)); + } catch { + throw new Error("fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas"); + } + const version2 = detectVersion(normalized, params?.defaultTarget); + const defs = normalized.$defs || normalized.definitions || {}; + const ctx = { + version: version2, + defs, + refs: /* @__PURE__ */ new Map(), + processing: /* @__PURE__ */ new Set(), + rootSchema: normalized, + registry: params?.registry ?? globalRegistry + }; + return convertSchema(normalized, ctx); +} + +// ../../node_modules/zod/v4/classic/coerce.js +var coerce_exports = {}; +__export(coerce_exports, { + bigint: () => bigint3, + boolean: () => boolean3, + date: () => date4, + number: () => number3, + string: () => string3 +}); +function string3(params) { + return _coercedString(ZodString, params); +} +function number3(params) { + return _coercedNumber(ZodNumber, params); +} +function boolean3(params) { + return _coercedBoolean(ZodBoolean, params); +} +function bigint3(params) { + return _coercedBigint(ZodBigInt, params); +} +function date4(params) { + return _coercedDate(ZodDate, params); +} + +// ../../node_modules/zod/v4/classic/external.js +config(en_default()); + +// comment-body.ts +var COMMENT_BODY_CODE_POINT_LIMIT = 1e4; + +// server.ts +var ROOT_PAGE_SIZE = 50; +var COMMENT_PAGE_SIZE = 100; +var ANCHOR_PAGE_SIZE = 200; +var HANDOFF_CODE_POINT_LIMIT = 64e3; +var CLI_OUTPUT_BUDGET_BYTES = Math.min( + 9e5, + PLUGIN_CLI_OUTPUT_MAX_BYTES - 64 * 1024 +); +var idSchema = external_exports.string().min(1).max(256); +var bodySchema = external_exports.string().transform((body) => body.trim()).refine((body) => body.length > 0, "Comment body is required").refine( + (body) => Array.from(body).length <= COMMENT_BODY_CODE_POINT_LIMIT, + `Comment body must be at most ${COMMENT_BODY_CODE_POINT_LIMIT.toLocaleString("en-US")} Unicode code points` +); +var commentBodySchema = bodySchema; +var utf16ContextSchema = external_exports.string().refine((value) => value.length <= 32, "Selector context is too long"); +var rectSchema = external_exports.object({ + x: external_exports.number().finite(), + y: external_exports.number().finite(), + width: external_exports.number().finite().nonnegative(), + height: external_exports.number().finite().nonnegative() +}).strict(); +var selectorFields = { + version: external_exports.literal(1), + coordinateSpace: external_exports.literal("rendered-text-utf16"), + start: external_exports.number().int().nonnegative(), + end: external_exports.number().int().positive(), + exact: external_exports.string().refine((value) => value.trim().length > 0), + prefix: utf16ContextSchema, + suffix: utf16ContextSchema +}; +function refineSelectorSpan(selector, context) { + if (selector.end <= selector.start) { + context.addIssue({ + code: "custom", + message: "Selector end must be greater than start", + path: ["end"], + input: selector + }); + } + if (selector.end - selector.start !== selector.exact.length) { + context.addIssue({ + code: "custom", + message: "Selector offsets must span exact text in UTF-16 units", + path: ["exact"], + input: selector + }); + } +} +var renderedTextSelectorSchema = external_exports.object({ + ...selectorFields, + rects: external_exports.array(rectSchema).min(1).max(1e3) +}).strict().superRefine(refineSelectorSpan); +var storedSelectorSchema = external_exports.object(selectorFields).strict().superRefine(refineSelectorSpan); +var messageReferenceSchema = external_exports.object({ + id: idSchema, + threadId: idSchema, + role: external_exports.enum(["user", "assistant"]), + text: external_exports.string(), + sourceSeqEnd: external_exports.number().int().nonnegative() +}).strict(); +var commentSchema = external_exports.object({ + id: idSchema, + threadId: idSchema, + parentId: idSchema.nullable(), + body: external_exports.string(), + version: external_exports.number().int().positive(), + createdAt: external_exports.number().int().nonnegative(), + updatedAt: external_exports.number().int().nonnegative() +}).strict(); +var commentThreadSummarySchema = external_exports.object({ + id: idSchema, + bbThreadId: idSchema, + messageId: idSchema, + messageRole: external_exports.enum(["user", "assistant"]), + selector: storedSelectorSchema, + version: external_exports.number().int().positive(), + createdAt: external_exports.number().int().nonnegative(), + updatedAt: external_exports.number().int().nonnegative(), + resolvedAt: external_exports.number().int().nonnegative().nullable(), + rootComment: commentSchema, + replyCount: external_exports.number().int().nonnegative() +}).strict(); +var anchorSchema = commentThreadSummarySchema.omit({ rootComment: true }); +var commentThreadDetailSchema = external_exports.object({ + thread: commentThreadSummarySchema, + comments: external_exports.array(commentSchema), + nextCursor: external_exports.string().nullable() +}).strict(); +var cursorInputSchema = external_exports.string().min(1).max(2048).optional(); +var rootFilterSchema = external_exports.enum(["open", "resolved", "all"]); +var timelineCommentsRpcContract = defineRpcContract({ + listOpenAnchors: { + input: external_exports.object({ + threadIds: external_exports.array(idSchema).min(1).max(20), + cursor: cursorInputSchema + }).strict(), + output: external_exports.object({ + anchors: external_exports.array(anchorSchema), + nextCursor: external_exports.string().nullable() + }).strict() + }, + listCommentThreads: { + input: external_exports.object({ + bbThreadId: idSchema, + filter: rootFilterSchema, + cursor: cursorInputSchema + }).strict(), + output: external_exports.object({ + threads: external_exports.array(commentThreadSummarySchema), + nextCursor: external_exports.string().nullable() + }).strict() + }, + getCommentThread: { + input: external_exports.object({ + bbThreadId: idSchema, + commentThreadId: idSchema, + cursor: cursorInputSchema + }).strict(), + output: commentThreadDetailSchema + }, + getThreadHandoffSummary: { + input: external_exports.object({ bbThreadId: idSchema }).strict(), + output: external_exports.object({ + threadCount: external_exports.number().int().nonnegative(), + commentCount: external_exports.number().int().nonnegative(), + codePointSize: external_exports.number().int().nonnegative() + }).strict() + }, + createThread: { + input: external_exports.object({ + bbThreadId: idSchema, + message: messageReferenceSchema, + selector: renderedTextSelectorSchema, + body: bodySchema + }).strict(), + output: commentThreadDetailSchema + }, + reply: { + input: external_exports.object({ + bbThreadId: idSchema, + commentThreadId: idSchema, + body: bodySchema + }).strict(), + output: commentThreadDetailSchema + }, + updateComment: { + input: external_exports.object({ + bbThreadId: idSchema, + commentId: idSchema, + expectedVersion: external_exports.number().int().positive(), + body: bodySchema + }).strict(), + output: commentThreadDetailSchema + }, + deleteComment: { + input: external_exports.object({ + bbThreadId: idSchema, + commentId: idSchema, + expectedVersion: external_exports.number().int().positive(), + expectedThreadVersion: external_exports.number().int().positive() + }).strict(), + output: external_exports.object({ + deletedThreadId: idSchema.nullable(), + thread: commentThreadDetailSchema.nullable() + }).strict() + }, + setThreadResolved: { + input: external_exports.object({ + bbThreadId: idSchema, + commentThreadId: idSchema, + expectedVersion: external_exports.number().int().positive(), + resolved: external_exports.boolean() + }).strict(), + output: commentThreadDetailSchema + } +}); +var threadRowSchema = external_exports.object({ + id: external_exports.string(), + bbThreadId: external_exports.string(), + messageId: external_exports.string(), + messageRole: external_exports.enum(["user", "assistant"]), + selectorVersion: external_exports.number(), + selectorStart: external_exports.number(), + selectorEnd: external_exports.number(), + selectorExact: external_exports.string(), + selectorPrefix: external_exports.string(), + selectorSuffix: external_exports.string(), + version: external_exports.number(), + createdAt: external_exports.number(), + updatedAt: external_exports.number(), + resolvedAt: external_exports.number().nullable(), + rootId: external_exports.string(), + rootBody: external_exports.string(), + rootVersion: external_exports.number(), + rootCreatedAt: external_exports.number(), + rootUpdatedAt: external_exports.number(), + replyCount: external_exports.number() +}); +var commentRowSchema = external_exports.object({ + id: external_exports.string(), + threadId: external_exports.string(), + parentId: external_exports.string().nullable(), + body: external_exports.string(), + version: external_exports.number(), + createdAt: external_exports.number(), + updatedAt: external_exports.number() +}); +var cursorSchema = external_exports.object({ + method: external_exports.enum(["anchors", "threads", "comments"]), + scope: external_exports.string(), + filter: external_exports.string(), + parentRank: external_exports.number().int().min(0).max(1).optional(), + createdAt: external_exports.number().int().nonnegative(), + id: external_exports.string() +}).strict(); +function encodeCursor(cursor) { + return Buffer2.from(JSON.stringify(cursor), "utf8").toString("base64url"); +} +function decodeCursor(encoded, expected) { + if (encoded === void 0) return null; + let parsed; + try { + parsed = JSON.parse(Buffer2.from(encoded, "base64url").toString("utf8")); + } catch { + throw new Error("Invalid pagination cursor"); + } + const cursor = cursorSchema.parse(parsed); + if (cursor.method !== expected.method || cursor.scope !== expected.scope || cursor.filter !== expected.filter) { + throw new Error("Pagination cursor does not match this query"); + } + return cursor; +} +function randomId() { + return randomBytes(18).toString("base64url"); +} +function mapComment(row) { + return commentSchema.parse(row); +} +function mapThread(row) { + return commentThreadSummarySchema.parse({ + id: row.id, + bbThreadId: row.bbThreadId, + messageId: row.messageId, + messageRole: row.messageRole, + selector: { + version: 1, + coordinateSpace: "rendered-text-utf16", + start: row.selectorStart, + end: row.selectorEnd, + exact: row.selectorExact, + prefix: row.selectorPrefix, + suffix: row.selectorSuffix + }, + version: row.version, + createdAt: row.createdAt, + updatedAt: row.updatedAt, + resolvedAt: row.resolvedAt, + rootComment: { + id: row.rootId, + threadId: row.id, + parentId: null, + body: row.rootBody, + version: row.rootVersion, + createdAt: row.rootCreatedAt, + updatedAt: row.rootUpdatedAt + }, + replyCount: row.replyCount + }); +} +var THREAD_SELECT = ` + SELECT + t.id, + t.bb_thread_id AS bbThreadId, + t.message_id AS messageId, + t.message_role AS messageRole, + t.selector_version AS selectorVersion, + t.selector_start AS selectorStart, + t.selector_end AS selectorEnd, + t.selector_exact AS selectorExact, + t.selector_prefix AS selectorPrefix, + t.selector_suffix AS selectorSuffix, + t.version, + t.created_at AS createdAt, + t.updated_at AS updatedAt, + t.resolved_at AS resolvedAt, + root.id AS rootId, + root.body AS rootBody, + root.version AS rootVersion, + root.created_at AS rootCreatedAt, + root.updated_at AS rootUpdatedAt, + (SELECT COUNT(*) FROM comments replies + WHERE replies.thread_id = t.id AND replies.parent_id IS NOT NULL) AS replyCount + FROM comment_threads t + JOIN comments root ON root.thread_id = t.id AND root.parent_id IS NULL +`; +function getThreadRow(db, bbThreadId, commentThreadId) { + const row = db.prepare(`${THREAD_SELECT} WHERE t.id = ? AND t.bb_thread_id = ?`).get(commentThreadId, bbThreadId); + if (row === void 0) throw new Error("Comment thread not found"); + return threadRowSchema.parse(row); +} +function getCommentRow(db, commentId) { + const row = db.prepare( + `SELECT id, thread_id AS threadId, parent_id AS parentId, body, version, + created_at AS createdAt, updated_at AS updatedAt + FROM comments WHERE id = ?` + ).get(commentId); + if (row === void 0) throw new Error("Comment not found"); + return commentRowSchema.parse(row); +} +function getCommentThread(db, input) { + const pageSize = input.limit ?? COMMENT_PAGE_SIZE; + const thread = mapThread( + getThreadRow(db, input.bbThreadId, input.commentThreadId) + ); + const cursor = decodeCursor(input.cursor, { + method: "comments", + scope: `${input.bbThreadId}:${input.commentThreadId}`, + filter: "chronological" + }); + const cursorParentRank = cursor?.parentRank ?? 1; + const rows = db.prepare( + `SELECT id, thread_id AS threadId, parent_id AS parentId, body, version, + created_at AS createdAt, updated_at AS updatedAt + FROM comments + WHERE thread_id = ? + AND ( + ? IS NULL + OR (CASE WHEN parent_id IS NULL THEN 0 ELSE 1 END) > ? + OR ( + (CASE WHEN parent_id IS NULL THEN 0 ELSE 1 END) = ? + AND (created_at > ? OR (created_at = ? AND id > ?)) + ) + ) + ORDER BY + CASE WHEN parent_id IS NULL THEN 0 ELSE 1 END ASC, + created_at ASC, + id ASC + LIMIT ?` + ).all( + input.commentThreadId, + cursor?.id ?? null, + cursorParentRank, + cursorParentRank, + cursor?.createdAt ?? 0, + cursor?.createdAt ?? 0, + cursor?.id ?? "", + pageSize + 1 + ).map((row) => commentRowSchema.parse(row)); + const hasNext = rows.length > pageSize; + const page = rows.slice(0, pageSize); + const last = page.at(-1); + return commentThreadDetailSchema.parse({ + thread, + comments: page.map(mapComment), + nextCursor: hasNext && last !== void 0 ? encodeCursor({ + method: "comments", + scope: `${input.bbThreadId}:${input.commentThreadId}`, + filter: "chronological", + parentRank: last.parentId === null ? 0 : 1, + createdAt: last.createdAt, + id: last.id + }) : null + }); +} +function listCommentThreads(db, input) { + const pageSize = input.limit ?? ROOT_PAGE_SIZE; + const cursor = decodeCursor(input.cursor, { + method: "threads", + scope: input.bbThreadId, + filter: input.filter + }); + const stateSql = input.filter === "open" ? "AND t.resolved_at IS NULL" : input.filter === "resolved" ? "AND t.resolved_at IS NOT NULL" : ""; + const rows = db.prepare( + `${THREAD_SELECT} + WHERE t.bb_thread_id = ? ${stateSql} + AND (? IS NULL OR t.created_at > ? OR (t.created_at = ? AND t.id > ?)) + ORDER BY t.created_at ASC, t.id ASC + LIMIT ?` + ).all( + input.bbThreadId, + cursor?.id ?? null, + cursor?.createdAt ?? 0, + cursor?.createdAt ?? 0, + cursor?.id ?? "", + pageSize + 1 + ).map((row) => threadRowSchema.parse(row)); + const hasNext = rows.length > pageSize; + const page = rows.slice(0, pageSize); + const last = page.at(-1); + return { + threads: page.map(mapThread), + nextCursor: hasNext && last !== void 0 ? encodeCursor({ + method: "threads", + scope: input.bbThreadId, + filter: input.filter, + createdAt: last.createdAt, + id: last.id + }) : null + }; +} +function listOpenAnchors(db, input) { + const threadIds = [...new Set(input.threadIds)].sort(); + const scope = threadIds.join(""); + const cursor = decodeCursor(input.cursor, { + method: "anchors", + scope, + filter: "open" + }); + const placeholders = threadIds.map(() => "?").join(", "); + const rows = db.prepare( + `${THREAD_SELECT} + WHERE t.bb_thread_id IN (${placeholders}) AND t.resolved_at IS NULL + AND (? IS NULL OR t.created_at > ? OR (t.created_at = ? AND t.id > ?)) + ORDER BY t.created_at ASC, t.id ASC + LIMIT ?` + ).all( + ...threadIds, + cursor?.id ?? null, + cursor?.createdAt ?? 0, + cursor?.createdAt ?? 0, + cursor?.id ?? "", + ANCHOR_PAGE_SIZE + 1 + ).map((row) => threadRowSchema.parse(row)); + const hasNext = rows.length > ANCHOR_PAGE_SIZE; + const page = rows.slice(0, ANCHOR_PAGE_SIZE); + const last = page.at(-1); + return { + anchors: page.map((row) => { + const { rootComment: _rootComment, ...anchor } = mapThread(row); + return anchorSchema.parse(anchor); + }), + nextCursor: hasNext && last !== void 0 ? encodeCursor({ + method: "anchors", + scope, + filter: "open", + createdAt: last.createdAt, + id: last.id + }) : null + }; +} +var handoffRowSchema = external_exports.object({ + commentThreadId: external_exports.string(), + selectorExact: external_exports.string(), + commentId: external_exports.string(), + parentId: external_exports.string().nullable(), + body: external_exports.string() +}); +function handoffLimitError() { + return new Error( + `Open comments exceed the ${HANDOFF_CODE_POINT_LIMIT.toLocaleString("en-US")}-code-point handoff limit` + ); +} +function readOpenComments(db, bbThreadId, includeContext) { + const rows = db.prepare( + `SELECT + t.id AS commentThreadId, + t.selector_exact AS selectorExact, + c.id AS commentId, + c.parent_id AS parentId, + c.body + FROM comment_threads t + JOIN comments c ON c.thread_id = t.id + WHERE t.bb_thread_id = ? AND t.resolved_at IS NULL + ORDER BY + t.created_at ASC, + t.id ASC, + CASE WHEN c.parent_id IS NULL THEN 0 ELSE 1 END ASC, + c.created_at ASC, + c.id ASC` + ).iterate(bbThreadId); + const sections = []; + let sectionCount = 0; + let codePointSize = 0; + let threadCount = 0; + let commentCount = 0; + let currentThreadId = null; + const addSection = (section) => { + if (sectionCount > 0) codePointSize += 2; + codePointSize += Array.from(section).length; + if (codePointSize > HANDOFF_CODE_POINT_LIMIT) throw handoffLimitError(); + sectionCount += 1; + if (includeContext) sections.push(section); + }; + for (const rawRow of rows) { + const row = handoffRowSchema.parse(rawRow); + if (currentThreadId === null) { + addSection(`# Open timeline comments for BB thread ${bbThreadId}`); + } + if (row.commentThreadId !== currentThreadId) { + currentThreadId = row.commentThreadId; + threadCount += 1; + addSection(`## Source: \u201C${row.selectorExact}\u201D`); + } + commentCount += 1; + addSection(`${row.parentId === null ? "Comment" : "Reply"}: ${row.body}`); + } + if (currentThreadId === null) { + const context = `No open comments remain for BB thread ${bbThreadId}.`; + return { + context: includeContext ? context : "", + threadCount: 0, + commentCount: 0, + codePointSize: Array.from(context).length + }; + } + return { + context: includeContext ? sections.join("\n\n") : "", + threadCount, + commentCount, + codePointSize + }; +} +function serializeOpenComments(db, bbThreadId) { + return readOpenComments(db, bbThreadId, true); +} +function summarizeOpenComments(db, bbThreadId) { + const { context: _context, ...summary } = readOpenComments( + db, + bbThreadId, + false + ); + return summary; +} +function countOpenComments(db, bbThreadId) { + const row = db.prepare( + `SELECT + COUNT(DISTINCT t.id) AS threadCount, + COUNT(c.id) AS commentCount + FROM comment_threads t + LEFT JOIN comments c ON c.thread_id = t.id + WHERE t.bb_thread_id = ? AND t.resolved_at IS NULL` + ).get(bbThreadId); + return external_exports.object({ + threadCount: external_exports.number().int().nonnegative(), + commentCount: external_exports.number().int().nonnegative() + }).parse(row); +} +function parseCli(argv) { + const rawCommand = argv[0]; + if (rawCommand !== "list" && rawCommand !== "get") { + throw new Error( + rawCommand === void 0 ? "A command is required: list or get" : `Unknown comments command: ${rawCommand}` + ); + } + const command = rawCommand; + let index = 1; + let commentThreadId; + if (command === "get") { + if (argv[index] === "--") { + const candidate = argv[index + 1]; + if (candidate === void 0) { + throw new Error("get requires a comment-thread-id"); + } + commentThreadId = candidate; + index += 2; + } else { + const candidate = argv[index]; + if (candidate === void 0 || candidate.startsWith("--")) { + throw new Error("get requires a comment-thread-id"); + } + commentThreadId = candidate; + index += 1; + } + } + let threadId; + let filter = "open"; + let json2 = false; + let cursor; + const maxLimit = command === "get" ? COMMENT_PAGE_SIZE : ROOT_PAGE_SIZE; + let limit = maxLimit; + const takeValue = (flag) => { + const value = argv[index + 1]; + if (value === void 0 || value.startsWith("--")) { + throw new Error(`${flag} requires a value`); + } + index += 2; + return value; + }; + while (index < argv.length) { + const arg = argv[index]; + if (arg === "--json") { + json2 = true; + index += 1; + continue; + } + if (arg === "--thread") { + threadId = takeValue(arg); + continue; + } + if (arg === "--cursor") { + cursor = takeValue(arg); + continue; + } + if (arg === "--limit") { + const rawLimit = takeValue(arg); + limit = Number(rawLimit); + if (!Number.isInteger(limit) || limit < 1 || limit > maxLimit) { + throw new Error(`--limit must be an integer from 1 to ${maxLimit}`); + } + continue; + } + if (arg === "--state" && command === "list") { + const state = takeValue(arg); + if (state !== "open" && state !== "resolved" && state !== "all") { + throw new Error("--state must be open, resolved, or all"); + } + filter = state; + continue; + } + throw new Error( + arg.startsWith("--") ? `Unknown option for ${command}: ${arg}` : `Unexpected argument for ${command}: ${arg}` + ); + } + return { + command, + threadId, + commentThreadId, + json: json2, + filter, + cursor, + limit + }; +} +function utf8Size(value) { + return Buffer2.byteLength(value, "utf8"); +} +function renderCliPage(input) { + const render = (records, nextCursor) => { + if (input.json) return `${input.renderJson(records, nextCursor)} +`; + const rows = records.map(input.renderHuman).join("\n"); + const continuation = nextCursor === null ? "" : `${rows.length > 0 ? "\n" : ""}More results available. Continue with --cursor ${nextCursor}`; + return `${rows}${continuation}${rows.length > 0 || continuation.length > 0 ? "\n" : ""}`; + }; + const complete = render(input.records, input.inheritedNextCursor); + if (utf8Size(complete) <= CLI_OUTPUT_BUDGET_BYTES) return complete; + for (let length = input.records.length - 1; length >= 1; length -= 1) { + const records = input.records.slice(0, length); + const nextCursor = input.cursorFor(records.at(-1)); + const candidate = render(records, nextCursor); + if (utf8Size(candidate) <= CLI_OUTPUT_BUDGET_BYTES) return candidate; + } + throw new Error( + `A single ${input.oversizedLabel} exceeds the CLI output size limit; request a smaller record` + ); +} +function timelineCommentsPlugin(bb) { + const db = bb.storage.database(); + db.pragma("foreign_keys = ON"); + if (db.pragma("foreign_keys", { simple: true }) !== 1) { + throw new Error("Timeline comments requires SQLite foreign keys"); + } + bb.storage.migrate(db, [ + `CREATE TABLE comment_threads ( + id TEXT PRIMARY KEY, + bb_thread_id TEXT NOT NULL, + message_id TEXT NOT NULL, + message_role TEXT NOT NULL CHECK (message_role IN ('user', 'assistant')), + selector_version INTEGER NOT NULL CHECK (selector_version = 1), + selector_start INTEGER NOT NULL, + selector_end INTEGER NOT NULL, + selector_exact TEXT NOT NULL, + selector_prefix TEXT NOT NULL, + selector_suffix TEXT NOT NULL, + version INTEGER NOT NULL DEFAULT 1, + created_at INTEGER NOT NULL, + updated_at INTEGER NOT NULL, + resolved_at INTEGER + ); + CREATE TABLE comments ( + id TEXT PRIMARY KEY, + thread_id TEXT NOT NULL REFERENCES comment_threads(id) ON DELETE CASCADE, + parent_id TEXT REFERENCES comments(id) ON DELETE CASCADE, + body TEXT NOT NULL, + version INTEGER NOT NULL DEFAULT 1, + created_at INTEGER NOT NULL, + updated_at INTEGER NOT NULL + ); + CREATE INDEX comment_threads_by_bb_thread + ON comment_threads(bb_thread_id, resolved_at, created_at, id); + CREATE INDEX comments_by_thread + ON comments(thread_id, created_at, id);` + ]); + const publishChanged = (bbThreadId, commentThreadId) => { + bb.realtime.publish("comments-changed", { + bbThreadId, + commentThreadId + }); + }; + bb.events.on("thread.deleted", ({ thread }) => { + db.prepare("DELETE FROM comment_threads WHERE bb_thread_id = ?").run( + thread.id + ); + }); + bb.rpc.register(timelineCommentsRpcContract, { + listOpenAnchors(input) { + return listOpenAnchors(db, input); + }, + listCommentThreads(input) { + return listCommentThreads(db, input); + }, + getCommentThread(input) { + return getCommentThread(db, input); + }, + getThreadHandoffSummary({ bbThreadId }) { + const summary = summarizeOpenComments(db, bbThreadId); + return { + threadCount: summary.threadCount, + commentCount: summary.commentCount, + codePointSize: summary.codePointSize + }; + }, + createThread(input) { + if (input.message.threadId !== input.bbThreadId) { + throw new Error("Message does not belong to the requested BB thread"); + } + const now = Date.now(); + const commentThreadId = randomId(); + const rootCommentId = randomId(); + db.transaction(() => { + db.prepare( + `INSERT INTO comment_threads ( + id, bb_thread_id, message_id, message_role, + selector_version, selector_start, selector_end, selector_exact, + selector_prefix, selector_suffix, version, created_at, updated_at + ) VALUES (?, ?, ?, ?, 1, ?, ?, ?, ?, ?, 1, ?, ?)` + ).run( + commentThreadId, + input.bbThreadId, + input.message.id, + input.message.role, + input.selector.start, + input.selector.end, + input.selector.exact, + input.selector.prefix, + input.selector.suffix, + now, + now + ); + db.prepare( + `INSERT INTO comments ( + id, thread_id, parent_id, body, version, created_at, updated_at + ) VALUES (?, ?, NULL, ?, 1, ?, ?)` + ).run(rootCommentId, commentThreadId, input.body, now, now); + })(); + const result = getCommentThread(db, { + bbThreadId: input.bbThreadId, + commentThreadId + }); + publishChanged(input.bbThreadId, commentThreadId); + return result; + }, + reply(input) { + const current = getThreadRow(db, input.bbThreadId, input.commentThreadId); + if (current.resolvedAt !== null) { + throw new Error("Resolved comment threads cannot receive replies"); + } + const now = Date.now(); + const id = randomId(); + db.transaction(() => { + db.prepare( + `INSERT INTO comments ( + id, thread_id, parent_id, body, version, created_at, updated_at + ) VALUES (?, ?, ?, ?, 1, ?, ?)` + ).run(id, current.id, current.rootId, input.body, now, now); + db.prepare( + `UPDATE comment_threads + SET version = version + 1, updated_at = ? WHERE id = ?` + ).run(now, current.id); + })(); + const result = getCommentThread(db, input); + publishChanged(input.bbThreadId, input.commentThreadId); + return result; + }, + updateComment(input) { + const comment = getCommentRow(db, input.commentId); + const current = getThreadRow(db, input.bbThreadId, comment.threadId); + const now = Date.now(); + const updated = db.transaction(() => { + const change = db.prepare( + `UPDATE comments + SET body = ?, version = version + 1, updated_at = ? + WHERE id = ? AND version = ?` + ).run(input.body, now, input.commentId, input.expectedVersion); + if (change.changes !== 1) return false; + db.prepare( + `UPDATE comment_threads + SET version = version + 1, updated_at = ? WHERE id = ?` + ).run(now, current.id); + return true; + })(); + if (!updated) throw new Error("Comment changed; refresh and retry"); + const result = getCommentThread(db, { + bbThreadId: input.bbThreadId, + commentThreadId: current.id + }); + publishChanged(input.bbThreadId, current.id); + return result; + }, + deleteComment(input) { + const comment = getCommentRow(db, input.commentId); + const current = getThreadRow(db, input.bbThreadId, comment.threadId); + if (comment.parentId === null) { + const change = db.transaction( + () => db.prepare( + `DELETE FROM comment_threads + WHERE id = ? AND bb_thread_id = ? AND version = ? + AND EXISTS ( + SELECT 1 FROM comments + WHERE comments.id = ? AND comments.thread_id = comment_threads.id + AND comments.parent_id IS NULL AND comments.version = ? + )` + ).run( + current.id, + input.bbThreadId, + input.expectedThreadVersion, + comment.id, + input.expectedVersion + ) + )(); + if (change.changes !== 1) { + throw new Error("Comment thread changed; refresh and retry"); + } + publishChanged(input.bbThreadId, current.id); + return { deletedThreadId: current.id, thread: null }; + } + const now = Date.now(); + db.transaction(() => { + const threadChange = db.prepare( + `UPDATE comment_threads + SET version = version + 1, updated_at = ? + WHERE id = ? AND bb_thread_id = ? AND version = ?` + ).run( + now, + current.id, + input.bbThreadId, + input.expectedThreadVersion + ); + if (threadChange.changes !== 1) { + throw new Error("Comment thread changed; refresh and retry"); + } + const commentChange = db.prepare("DELETE FROM comments WHERE id = ? AND version = ?").run(comment.id, input.expectedVersion); + if (commentChange.changes !== 1) { + throw new Error("Comment changed; refresh and retry"); + } + })(); + const result = getCommentThread(db, { + bbThreadId: input.bbThreadId, + commentThreadId: current.id + }); + publishChanged(input.bbThreadId, current.id); + return { deletedThreadId: null, thread: result }; + }, + setThreadResolved(input) { + const now = Date.now(); + const change = db.transaction( + () => db.prepare( + `UPDATE comment_threads + SET resolved_at = ?, version = version + 1, updated_at = ? + WHERE id = ? AND bb_thread_id = ? AND version = ?` + ).run( + input.resolved ? now : null, + now, + input.commentThreadId, + input.bbThreadId, + input.expectedVersion + ) + )(); + if (change.changes !== 1) { + throw new Error("Comment thread changed; refresh and retry"); + } + const result = getCommentThread(db, input); + publishChanged(input.bbThreadId, input.commentThreadId); + return result; + } + }); + bb.ui.registerMentionProvider({ + id: "thread-comments", + label: "Thread comments", + triggers: ["@"], + search({ query, threadId }) { + if (threadId === null || !"comments".includes(query.toLowerCase())) { + return []; + } + const counts = countOpenComments(db, threadId); + return [ + { + id: threadId, + title: `${counts.commentCount} comments from ${counts.threadCount} open threads`, + subtitle: "Local timeline comments" + } + ]; + }, + resolve(bbThreadId) { + const serialized = serializeOpenComments(db, bbThreadId); + return { context: serialized.context }; + } + }); + bb.cli.register({ + name: "comments", + summary: "Read timeline comments attached to BB threads", + commands: [ + { + name: "list", + summary: "List comment threads", + usage: "bb comments list [--thread ] [--state open|resolved|all] [--cursor ] [--limit 1-50] [--json]" + }, + { + name: "get", + summary: "Read one comment thread", + usage: "bb comments get [--thread ] [--cursor ] [--limit 1-100] [--json]" + } + ], + run(argv, context) { + try { + const parsed = parseCli(argv); + const bbThreadId = parsed.threadId ?? context.threadId; + if (bbThreadId === void 0) { + return { + exitCode: 2, + stderr: "A BB thread context or --thread is required.\n" + }; + } + if (parsed.command === "get") { + if (parsed.commentThreadId === void 0) { + return { + exitCode: 2, + stderr: "Usage: bb comments get [--thread ] [--cursor ] [--limit 1-100] [--json]\n" + }; + } + const detail = getCommentThread(db, { + bbThreadId, + commentThreadId: parsed.commentThreadId, + cursor: parsed.cursor, + limit: parsed.limit + }); + return { + exitCode: 0, + stdout: renderCliPage({ + records: detail.comments, + inheritedNextCursor: detail.nextCursor, + cursorFor: (comment) => encodeCursor({ + method: "comments", + scope: `${bbThreadId}:${parsed.commentThreadId}`, + filter: "chronological", + parentRank: comment.parentId === null ? 0 : 1, + createdAt: comment.createdAt, + id: comment.id + }), + renderHuman: (comment) => `${comment.parentId === null ? "Comment" : "Reply"}: ${comment.body}`, + renderJson: (comments, nextCursor) => JSON.stringify({ ...detail, comments, nextCursor }), + json: parsed.json, + oversizedLabel: "comment" + }) + }; + } + const result = listCommentThreads(db, { + bbThreadId, + filter: parsed.filter, + cursor: parsed.cursor, + limit: parsed.limit + }); + return { + exitCode: 0, + stdout: renderCliPage({ + records: result.threads, + inheritedNextCursor: result.nextCursor, + cursorFor: (thread) => encodeCursor({ + method: "threads", + scope: bbThreadId, + filter: parsed.filter, + createdAt: thread.createdAt, + id: thread.id + }), + renderHuman: (thread) => `${thread.id} ${thread.resolvedAt === null ? "open" : "resolved"} ${thread.selector.exact} ${thread.rootComment.body}`, + renderJson: (threads, nextCursor) => JSON.stringify({ threads, nextCursor }), + json: parsed.json, + oversizedLabel: "comment thread" + }) + }; + } catch (error51) { + return { + exitCode: 1, + stderr: `${error51 instanceof Error ? error51.message : String(error51)} +` + }; + } + } + }); +} +export { + commentBodySchema, + commentThreadDetailSchema, + commentThreadSummarySchema, + timelineCommentsPlugin as default, + renderedTextSelectorSchema, + timelineCommentsRpcContract +}; +//# sourceMappingURL=server.js.map diff --git a/plugins/timeline-comments/dist/server.js.map b/plugins/timeline-comments/dist/server.js.map new file mode 100644 index 0000000..af080b8 --- /dev/null +++ b/plugins/timeline-comments/dist/server.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../../server.ts", "../../../../node_modules/zod/v4/classic/external.js", "../../../../node_modules/zod/v4/core/index.js", "../../../../node_modules/zod/v4/core/core.js", "../../../../node_modules/zod/v4/core/util.js", "../../../../node_modules/zod/v4/core/errors.js", "../../../../node_modules/zod/v4/core/parse.js", "../../../../node_modules/zod/v4/core/regexes.js", "../../../../node_modules/zod/v4/core/checks.js", "../../../../node_modules/zod/v4/core/doc.js", "../../../../node_modules/zod/v4/core/versions.js", "../../../../node_modules/zod/v4/core/schemas.js", "../../../../node_modules/zod/v4/locales/index.js", "../../../../node_modules/zod/v4/locales/ar.js", "../../../../node_modules/zod/v4/locales/az.js", "../../../../node_modules/zod/v4/locales/be.js", "../../../../node_modules/zod/v4/locales/bg.js", "../../../../node_modules/zod/v4/locales/ca.js", "../../../../node_modules/zod/v4/locales/cs.js", "../../../../node_modules/zod/v4/locales/da.js", "../../../../node_modules/zod/v4/locales/de.js", "../../../../node_modules/zod/v4/locales/el.js", "../../../../node_modules/zod/v4/locales/en.js", "../../../../node_modules/zod/v4/locales/eo.js", "../../../../node_modules/zod/v4/locales/es.js", "../../../../node_modules/zod/v4/locales/fa.js", "../../../../node_modules/zod/v4/locales/fi.js", "../../../../node_modules/zod/v4/locales/fr.js", "../../../../node_modules/zod/v4/locales/fr-CA.js", "../../../../node_modules/zod/v4/locales/he.js", "../../../../node_modules/zod/v4/locales/hr.js", "../../../../node_modules/zod/v4/locales/hu.js", "../../../../node_modules/zod/v4/locales/hy.js", "../../../../node_modules/zod/v4/locales/id.js", "../../../../node_modules/zod/v4/locales/is.js", "../../../../node_modules/zod/v4/locales/it.js", "../../../../node_modules/zod/v4/locales/ja.js", "../../../../node_modules/zod/v4/locales/ka.js", "../../../../node_modules/zod/v4/locales/km.js", "../../../../node_modules/zod/v4/locales/kh.js", "../../../../node_modules/zod/v4/locales/ko.js", "../../../../node_modules/zod/v4/locales/lt.js", "../../../../node_modules/zod/v4/locales/mk.js", "../../../../node_modules/zod/v4/locales/ms.js", "../../../../node_modules/zod/v4/locales/nl.js", "../../../../node_modules/zod/v4/locales/no.js", "../../../../node_modules/zod/v4/locales/ota.js", "../../../../node_modules/zod/v4/locales/ps.js", "../../../../node_modules/zod/v4/locales/pl.js", "../../../../node_modules/zod/v4/locales/pt.js", "../../../../node_modules/zod/v4/locales/ro.js", "../../../../node_modules/zod/v4/locales/ru.js", "../../../../node_modules/zod/v4/locales/sl.js", "../../../../node_modules/zod/v4/locales/sv.js", "../../../../node_modules/zod/v4/locales/ta.js", "../../../../node_modules/zod/v4/locales/th.js", "../../../../node_modules/zod/v4/locales/tr.js", "../../../../node_modules/zod/v4/locales/uk.js", "../../../../node_modules/zod/v4/locales/ua.js", "../../../../node_modules/zod/v4/locales/ur.js", "../../../../node_modules/zod/v4/locales/uz.js", "../../../../node_modules/zod/v4/locales/vi.js", "../../../../node_modules/zod/v4/locales/zh-CN.js", "../../../../node_modules/zod/v4/locales/zh-TW.js", "../../../../node_modules/zod/v4/locales/yo.js", "../../../../node_modules/zod/v4/core/registries.js", "../../../../node_modules/zod/v4/core/api.js", "../../../../node_modules/zod/v4/core/to-json-schema.js", "../../../../node_modules/zod/v4/core/json-schema-processors.js", "../../../../node_modules/zod/v4/core/json-schema-generator.js", "../../../../node_modules/zod/v4/core/json-schema.js", "../../../../node_modules/zod/v4/classic/schemas.js", "../../../../node_modules/zod/v4/classic/checks.js", "../../../../node_modules/zod/v4/classic/iso.js", "../../../../node_modules/zod/v4/classic/errors.js", "../../../../node_modules/zod/v4/classic/parse.js", "../../../../node_modules/zod/v4/classic/compat.js", "../../../../node_modules/zod/v4/classic/from-json-schema.js", "../../../../node_modules/zod/v4/classic/coerce.js", "../../comment-body.ts"], + "sourcesContent": ["import { randomBytes } from \"node:crypto\";\nimport { Buffer } from \"node:buffer\";\nimport {\n defineRpcContract,\n PLUGIN_CLI_OUTPUT_MAX_BYTES,\n type BbPluginApi,\n} from \"@bb/plugin-sdk\";\nimport { z } from \"zod\";\nimport { COMMENT_BODY_CODE_POINT_LIMIT } from \"./comment-body.js\";\n\nconst ROOT_PAGE_SIZE = 50;\nconst COMMENT_PAGE_SIZE = 100;\nconst ANCHOR_PAGE_SIZE = 200;\nconst HANDOFF_CODE_POINT_LIMIT = 64_000;\nconst CLI_OUTPUT_BUDGET_BYTES = Math.min(\n 900_000,\n PLUGIN_CLI_OUTPUT_MAX_BYTES - 64 * 1_024,\n);\n\nconst idSchema = z.string().min(1).max(256);\nconst bodySchema = z\n .string()\n .transform((body) => body.trim())\n .refine((body) => body.length > 0, \"Comment body is required\")\n .refine(\n (body) => Array.from(body).length <= COMMENT_BODY_CODE_POINT_LIMIT,\n `Comment body must be at most ${COMMENT_BODY_CODE_POINT_LIMIT.toLocaleString(\"en-US\")} Unicode code points`,\n );\nexport const commentBodySchema = bodySchema;\nconst utf16ContextSchema = z\n .string()\n .refine((value) => value.length <= 32, \"Selector context is too long\");\nconst rectSchema = z\n .object({\n x: z.number().finite(),\n y: z.number().finite(),\n width: z.number().finite().nonnegative(),\n height: z.number().finite().nonnegative(),\n })\n .strict();\nconst selectorFields = {\n version: z.literal(1),\n coordinateSpace: z.literal(\"rendered-text-utf16\"),\n start: z.number().int().nonnegative(),\n end: z.number().int().positive(),\n exact: z.string().refine((value) => value.trim().length > 0),\n prefix: utf16ContextSchema,\n suffix: utf16ContextSchema,\n};\n\nfunction refineSelectorSpan(\n selector: { start: number; end: number; exact: string },\n context: z.core.$RefinementCtx,\n) {\n if (selector.end <= selector.start) {\n context.addIssue({\n code: \"custom\",\n message: \"Selector end must be greater than start\",\n path: [\"end\"],\n input: selector,\n });\n }\n if (selector.end - selector.start !== selector.exact.length) {\n context.addIssue({\n code: \"custom\",\n message: \"Selector offsets must span exact text in UTF-16 units\",\n path: [\"exact\"],\n input: selector,\n });\n }\n}\n\nexport const renderedTextSelectorSchema = z\n .object({\n ...selectorFields,\n rects: z.array(rectSchema).min(1).max(1_000),\n })\n .strict()\n .superRefine(refineSelectorSpan);\n\nconst storedSelectorSchema = z\n .object(selectorFields)\n .strict()\n .superRefine(refineSelectorSpan);\nconst messageReferenceSchema = z\n .object({\n id: idSchema,\n threadId: idSchema,\n role: z.enum([\"user\", \"assistant\"]),\n text: z.string(),\n sourceSeqEnd: z.number().int().nonnegative(),\n })\n .strict();\nconst commentSchema = z\n .object({\n id: idSchema,\n threadId: idSchema,\n parentId: idSchema.nullable(),\n body: z.string(),\n version: z.number().int().positive(),\n createdAt: z.number().int().nonnegative(),\n updatedAt: z.number().int().nonnegative(),\n })\n .strict();\nexport const commentThreadSummarySchema = z\n .object({\n id: idSchema,\n bbThreadId: idSchema,\n messageId: idSchema,\n messageRole: z.enum([\"user\", \"assistant\"]),\n selector: storedSelectorSchema,\n version: z.number().int().positive(),\n createdAt: z.number().int().nonnegative(),\n updatedAt: z.number().int().nonnegative(),\n resolvedAt: z.number().int().nonnegative().nullable(),\n rootComment: commentSchema,\n replyCount: z.number().int().nonnegative(),\n })\n .strict();\nconst anchorSchema = commentThreadSummarySchema.omit({ rootComment: true });\nexport const commentThreadDetailSchema = z\n .object({\n thread: commentThreadSummarySchema,\n comments: z.array(commentSchema),\n nextCursor: z.string().nullable(),\n })\n .strict();\nexport type TimelineComment = z.infer;\nexport type TimelineCommentThreadSummary = z.infer<\n typeof commentThreadSummarySchema\n>;\nexport type TimelineCommentThreadDetail = z.infer<\n typeof commentThreadDetailSchema\n>;\nconst cursorInputSchema = z.string().min(1).max(2_048).optional();\nconst rootFilterSchema = z.enum([\"open\", \"resolved\", \"all\"]);\n\nexport const timelineCommentsRpcContract = defineRpcContract({\n listOpenAnchors: {\n input: z\n .object({\n threadIds: z.array(idSchema).min(1).max(20),\n cursor: cursorInputSchema,\n })\n .strict(),\n output: z\n .object({\n anchors: z.array(anchorSchema),\n nextCursor: z.string().nullable(),\n })\n .strict(),\n },\n listCommentThreads: {\n input: z\n .object({\n bbThreadId: idSchema,\n filter: rootFilterSchema,\n cursor: cursorInputSchema,\n })\n .strict(),\n output: z\n .object({\n threads: z.array(commentThreadSummarySchema),\n nextCursor: z.string().nullable(),\n })\n .strict(),\n },\n getCommentThread: {\n input: z\n .object({\n bbThreadId: idSchema,\n commentThreadId: idSchema,\n cursor: cursorInputSchema,\n })\n .strict(),\n output: commentThreadDetailSchema,\n },\n getThreadHandoffSummary: {\n input: z.object({ bbThreadId: idSchema }).strict(),\n output: z\n .object({\n threadCount: z.number().int().nonnegative(),\n commentCount: z.number().int().nonnegative(),\n codePointSize: z.number().int().nonnegative(),\n })\n .strict(),\n },\n createThread: {\n input: z\n .object({\n bbThreadId: idSchema,\n message: messageReferenceSchema,\n selector: renderedTextSelectorSchema,\n body: bodySchema,\n })\n .strict(),\n output: commentThreadDetailSchema,\n },\n reply: {\n input: z\n .object({\n bbThreadId: idSchema,\n commentThreadId: idSchema,\n body: bodySchema,\n })\n .strict(),\n output: commentThreadDetailSchema,\n },\n updateComment: {\n input: z\n .object({\n bbThreadId: idSchema,\n commentId: idSchema,\n expectedVersion: z.number().int().positive(),\n body: bodySchema,\n })\n .strict(),\n output: commentThreadDetailSchema,\n },\n deleteComment: {\n input: z\n .object({\n bbThreadId: idSchema,\n commentId: idSchema,\n expectedVersion: z.number().int().positive(),\n expectedThreadVersion: z.number().int().positive(),\n })\n .strict(),\n output: z\n .object({\n deletedThreadId: idSchema.nullable(),\n thread: commentThreadDetailSchema.nullable(),\n })\n .strict(),\n },\n setThreadResolved: {\n input: z\n .object({\n bbThreadId: idSchema,\n commentThreadId: idSchema,\n expectedVersion: z.number().int().positive(),\n resolved: z.boolean(),\n })\n .strict(),\n output: commentThreadDetailSchema,\n },\n});\n\ntype Database = ReturnType;\n\nconst threadRowSchema = z.object({\n id: z.string(),\n bbThreadId: z.string(),\n messageId: z.string(),\n messageRole: z.enum([\"user\", \"assistant\"]),\n selectorVersion: z.number(),\n selectorStart: z.number(),\n selectorEnd: z.number(),\n selectorExact: z.string(),\n selectorPrefix: z.string(),\n selectorSuffix: z.string(),\n version: z.number(),\n createdAt: z.number(),\n updatedAt: z.number(),\n resolvedAt: z.number().nullable(),\n rootId: z.string(),\n rootBody: z.string(),\n rootVersion: z.number(),\n rootCreatedAt: z.number(),\n rootUpdatedAt: z.number(),\n replyCount: z.number(),\n});\ntype ThreadRow = z.infer;\nconst commentRowSchema = z.object({\n id: z.string(),\n threadId: z.string(),\n parentId: z.string().nullable(),\n body: z.string(),\n version: z.number(),\n createdAt: z.number(),\n updatedAt: z.number(),\n});\ntype CommentRow = z.infer;\n\nconst cursorSchema = z\n .object({\n method: z.enum([\"anchors\", \"threads\", \"comments\"]),\n scope: z.string(),\n filter: z.string(),\n parentRank: z.number().int().min(0).max(1).optional(),\n createdAt: z.number().int().nonnegative(),\n id: z.string(),\n })\n .strict();\ntype Cursor = z.infer;\n\nfunction encodeCursor(cursor: Cursor): string {\n return Buffer.from(JSON.stringify(cursor), \"utf8\").toString(\"base64url\");\n}\n\nfunction decodeCursor(\n encoded: string | undefined,\n expected: Pick,\n): Cursor | null {\n if (encoded === undefined) return null;\n let parsed: unknown;\n try {\n parsed = JSON.parse(Buffer.from(encoded, \"base64url\").toString(\"utf8\"));\n } catch {\n throw new Error(\"Invalid pagination cursor\");\n }\n const cursor = cursorSchema.parse(parsed);\n if (\n cursor.method !== expected.method ||\n cursor.scope !== expected.scope ||\n cursor.filter !== expected.filter\n ) {\n throw new Error(\"Pagination cursor does not match this query\");\n }\n return cursor;\n}\n\nfunction randomId(): string {\n return randomBytes(18).toString(\"base64url\");\n}\n\nfunction mapComment(row: CommentRow): z.infer {\n return commentSchema.parse(row);\n}\n\nfunction mapThread(row: ThreadRow): z.infer {\n return commentThreadSummarySchema.parse({\n id: row.id,\n bbThreadId: row.bbThreadId,\n messageId: row.messageId,\n messageRole: row.messageRole,\n selector: {\n version: 1,\n coordinateSpace: \"rendered-text-utf16\",\n start: row.selectorStart,\n end: row.selectorEnd,\n exact: row.selectorExact,\n prefix: row.selectorPrefix,\n suffix: row.selectorSuffix,\n },\n version: row.version,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n resolvedAt: row.resolvedAt,\n rootComment: {\n id: row.rootId,\n threadId: row.id,\n parentId: null,\n body: row.rootBody,\n version: row.rootVersion,\n createdAt: row.rootCreatedAt,\n updatedAt: row.rootUpdatedAt,\n },\n replyCount: row.replyCount,\n });\n}\n\nconst THREAD_SELECT = `\n SELECT\n t.id,\n t.bb_thread_id AS bbThreadId,\n t.message_id AS messageId,\n t.message_role AS messageRole,\n t.selector_version AS selectorVersion,\n t.selector_start AS selectorStart,\n t.selector_end AS selectorEnd,\n t.selector_exact AS selectorExact,\n t.selector_prefix AS selectorPrefix,\n t.selector_suffix AS selectorSuffix,\n t.version,\n t.created_at AS createdAt,\n t.updated_at AS updatedAt,\n t.resolved_at AS resolvedAt,\n root.id AS rootId,\n root.body AS rootBody,\n root.version AS rootVersion,\n root.created_at AS rootCreatedAt,\n root.updated_at AS rootUpdatedAt,\n (SELECT COUNT(*) FROM comments replies\n WHERE replies.thread_id = t.id AND replies.parent_id IS NOT NULL) AS replyCount\n FROM comment_threads t\n JOIN comments root ON root.thread_id = t.id AND root.parent_id IS NULL\n`;\n\nfunction getThreadRow(\n db: Database,\n bbThreadId: string,\n commentThreadId: string,\n): ThreadRow {\n const row = db\n .prepare(`${THREAD_SELECT} WHERE t.id = ? AND t.bb_thread_id = ?`)\n .get(commentThreadId, bbThreadId);\n if (row === undefined) throw new Error(\"Comment thread not found\");\n return threadRowSchema.parse(row);\n}\n\nfunction getCommentRow(db: Database, commentId: string): CommentRow {\n const row = db\n .prepare(\n `SELECT id, thread_id AS threadId, parent_id AS parentId, body, version,\n created_at AS createdAt, updated_at AS updatedAt\n FROM comments WHERE id = ?`,\n )\n .get(commentId);\n if (row === undefined) throw new Error(\"Comment not found\");\n return commentRowSchema.parse(row);\n}\n\nfunction getCommentThread(\n db: Database,\n input: {\n bbThreadId: string;\n commentThreadId: string;\n cursor?: string;\n limit?: number;\n },\n): z.infer {\n const pageSize = input.limit ?? COMMENT_PAGE_SIZE;\n const thread = mapThread(\n getThreadRow(db, input.bbThreadId, input.commentThreadId),\n );\n const cursor = decodeCursor(input.cursor, {\n method: \"comments\",\n scope: `${input.bbThreadId}:${input.commentThreadId}`,\n filter: \"chronological\",\n });\n const cursorParentRank = cursor?.parentRank ?? 1;\n const rows = db\n .prepare(\n `SELECT id, thread_id AS threadId, parent_id AS parentId, body, version,\n created_at AS createdAt, updated_at AS updatedAt\n FROM comments\n WHERE thread_id = ?\n AND (\n ? IS NULL\n OR (CASE WHEN parent_id IS NULL THEN 0 ELSE 1 END) > ?\n OR (\n (CASE WHEN parent_id IS NULL THEN 0 ELSE 1 END) = ?\n AND (created_at > ? OR (created_at = ? AND id > ?))\n )\n )\n ORDER BY\n CASE WHEN parent_id IS NULL THEN 0 ELSE 1 END ASC,\n created_at ASC,\n id ASC\n LIMIT ?`,\n )\n .all(\n input.commentThreadId,\n cursor?.id ?? null,\n cursorParentRank,\n cursorParentRank,\n cursor?.createdAt ?? 0,\n cursor?.createdAt ?? 0,\n cursor?.id ?? \"\",\n pageSize + 1,\n )\n .map((row) => commentRowSchema.parse(row));\n const hasNext = rows.length > pageSize;\n const page = rows.slice(0, pageSize);\n const last = page.at(-1);\n return commentThreadDetailSchema.parse({\n thread,\n comments: page.map(mapComment),\n nextCursor:\n hasNext && last !== undefined\n ? encodeCursor({\n method: \"comments\",\n scope: `${input.bbThreadId}:${input.commentThreadId}`,\n filter: \"chronological\",\n parentRank: last.parentId === null ? 0 : 1,\n createdAt: last.createdAt,\n id: last.id,\n })\n : null,\n });\n}\n\nfunction listCommentThreads(\n db: Database,\n input: {\n bbThreadId: string;\n filter: \"open\" | \"resolved\" | \"all\";\n cursor?: string;\n limit?: number;\n },\n): {\n threads: z.infer[];\n nextCursor: string | null;\n} {\n const pageSize = input.limit ?? ROOT_PAGE_SIZE;\n const cursor = decodeCursor(input.cursor, {\n method: \"threads\",\n scope: input.bbThreadId,\n filter: input.filter,\n });\n const stateSql =\n input.filter === \"open\"\n ? \"AND t.resolved_at IS NULL\"\n : input.filter === \"resolved\"\n ? \"AND t.resolved_at IS NOT NULL\"\n : \"\";\n const rows = db\n .prepare(\n `${THREAD_SELECT}\n WHERE t.bb_thread_id = ? ${stateSql}\n AND (? IS NULL OR t.created_at > ? OR (t.created_at = ? AND t.id > ?))\n ORDER BY t.created_at ASC, t.id ASC\n LIMIT ?`,\n )\n .all(\n input.bbThreadId,\n cursor?.id ?? null,\n cursor?.createdAt ?? 0,\n cursor?.createdAt ?? 0,\n cursor?.id ?? \"\",\n pageSize + 1,\n )\n .map((row) => threadRowSchema.parse(row));\n const hasNext = rows.length > pageSize;\n const page = rows.slice(0, pageSize);\n const last = page.at(-1);\n return {\n threads: page.map(mapThread),\n nextCursor:\n hasNext && last !== undefined\n ? encodeCursor({\n method: \"threads\",\n scope: input.bbThreadId,\n filter: input.filter,\n createdAt: last.createdAt,\n id: last.id,\n })\n : null,\n };\n}\n\nfunction listOpenAnchors(\n db: Database,\n input: { threadIds: string[]; cursor?: string },\n): { anchors: z.infer[]; nextCursor: string | null } {\n const threadIds = [...new Set(input.threadIds)].sort();\n const scope = threadIds.join(\"\\u001f\");\n const cursor = decodeCursor(input.cursor, {\n method: \"anchors\",\n scope,\n filter: \"open\",\n });\n const placeholders = threadIds.map(() => \"?\").join(\", \");\n const rows = db\n .prepare(\n `${THREAD_SELECT}\n WHERE t.bb_thread_id IN (${placeholders}) AND t.resolved_at IS NULL\n AND (? IS NULL OR t.created_at > ? OR (t.created_at = ? AND t.id > ?))\n ORDER BY t.created_at ASC, t.id ASC\n LIMIT ?`,\n )\n .all(\n ...threadIds,\n cursor?.id ?? null,\n cursor?.createdAt ?? 0,\n cursor?.createdAt ?? 0,\n cursor?.id ?? \"\",\n ANCHOR_PAGE_SIZE + 1,\n )\n .map((row) => threadRowSchema.parse(row));\n const hasNext = rows.length > ANCHOR_PAGE_SIZE;\n const page = rows.slice(0, ANCHOR_PAGE_SIZE);\n const last = page.at(-1);\n return {\n anchors: page.map((row) => {\n const { rootComment: _rootComment, ...anchor } = mapThread(row);\n return anchorSchema.parse(anchor);\n }),\n nextCursor:\n hasNext && last !== undefined\n ? encodeCursor({\n method: \"anchors\",\n scope,\n filter: \"open\",\n createdAt: last.createdAt,\n id: last.id,\n })\n : null,\n };\n}\n\ninterface SerializedHandoff {\n context: string;\n threadCount: number;\n commentCount: number;\n codePointSize: number;\n}\n\nconst handoffRowSchema = z.object({\n commentThreadId: z.string(),\n selectorExact: z.string(),\n commentId: z.string(),\n parentId: z.string().nullable(),\n body: z.string(),\n});\n\nfunction handoffLimitError(): Error {\n return new Error(\n `Open comments exceed the ${HANDOFF_CODE_POINT_LIMIT.toLocaleString(\"en-US\")}-code-point handoff limit`,\n );\n}\n\nfunction readOpenComments(\n db: Database,\n bbThreadId: string,\n includeContext: boolean,\n): SerializedHandoff {\n const rows = db\n .prepare(\n `SELECT\n t.id AS commentThreadId,\n t.selector_exact AS selectorExact,\n c.id AS commentId,\n c.parent_id AS parentId,\n c.body\n FROM comment_threads t\n JOIN comments c ON c.thread_id = t.id\n WHERE t.bb_thread_id = ? AND t.resolved_at IS NULL\n ORDER BY\n t.created_at ASC,\n t.id ASC,\n CASE WHEN c.parent_id IS NULL THEN 0 ELSE 1 END ASC,\n c.created_at ASC,\n c.id ASC`,\n )\n .iterate(bbThreadId);\n const sections: string[] = [];\n let sectionCount = 0;\n let codePointSize = 0;\n let threadCount = 0;\n let commentCount = 0;\n let currentThreadId: string | null = null;\n\n const addSection = (section: string) => {\n if (sectionCount > 0) codePointSize += 2;\n codePointSize += Array.from(section).length;\n if (codePointSize > HANDOFF_CODE_POINT_LIMIT) throw handoffLimitError();\n sectionCount += 1;\n if (includeContext) sections.push(section);\n };\n\n for (const rawRow of rows) {\n const row = handoffRowSchema.parse(rawRow);\n if (currentThreadId === null) {\n addSection(`# Open timeline comments for BB thread ${bbThreadId}`);\n }\n if (row.commentThreadId !== currentThreadId) {\n currentThreadId = row.commentThreadId;\n threadCount += 1;\n addSection(`## Source: \u201C${row.selectorExact}\u201D`);\n }\n commentCount += 1;\n addSection(`${row.parentId === null ? \"Comment\" : \"Reply\"}: ${row.body}`);\n }\n\n if (currentThreadId === null) {\n const context = `No open comments remain for BB thread ${bbThreadId}.`;\n return {\n context: includeContext ? context : \"\",\n threadCount: 0,\n commentCount: 0,\n codePointSize: Array.from(context).length,\n };\n }\n return {\n context: includeContext ? sections.join(\"\\n\\n\") : \"\",\n threadCount,\n commentCount,\n codePointSize,\n };\n}\n\nfunction serializeOpenComments(\n db: Database,\n bbThreadId: string,\n): SerializedHandoff {\n return readOpenComments(db, bbThreadId, true);\n}\n\nfunction summarizeOpenComments(\n db: Database,\n bbThreadId: string,\n): Omit {\n const { context: _context, ...summary } = readOpenComments(\n db,\n bbThreadId,\n false,\n );\n return summary;\n}\n\nfunction countOpenComments(\n db: Database,\n bbThreadId: string,\n): { threadCount: number; commentCount: number } {\n const row = db\n .prepare(\n `SELECT\n COUNT(DISTINCT t.id) AS threadCount,\n COUNT(c.id) AS commentCount\n FROM comment_threads t\n LEFT JOIN comments c ON c.thread_id = t.id\n WHERE t.bb_thread_id = ? AND t.resolved_at IS NULL`,\n )\n .get(bbThreadId);\n return z\n .object({\n threadCount: z.number().int().nonnegative(),\n commentCount: z.number().int().nonnegative(),\n })\n .parse(row);\n}\n\nfunction parseCli(argv: string[]): {\n command: \"list\" | \"get\";\n threadId: string | undefined;\n commentThreadId: string | undefined;\n json: boolean;\n filter: \"open\" | \"resolved\" | \"all\";\n cursor: string | undefined;\n limit: number;\n} {\n const rawCommand = argv[0];\n if (rawCommand !== \"list\" && rawCommand !== \"get\") {\n throw new Error(\n rawCommand === undefined\n ? \"A command is required: list or get\"\n : `Unknown comments command: ${rawCommand}`,\n );\n }\n const command = rawCommand;\n let index = 1;\n let commentThreadId: string | undefined;\n if (command === \"get\") {\n if (argv[index] === \"--\") {\n const candidate = argv[index + 1];\n if (candidate === undefined) {\n throw new Error(\"get requires a comment-thread-id\");\n }\n commentThreadId = candidate;\n index += 2;\n } else {\n const candidate = argv[index];\n if (candidate === undefined || candidate.startsWith(\"--\")) {\n throw new Error(\"get requires a comment-thread-id\");\n }\n commentThreadId = candidate;\n index += 1;\n }\n }\n let threadId: string | undefined;\n let filter: \"open\" | \"resolved\" | \"all\" = \"open\";\n let json = false;\n let cursor: string | undefined;\n const maxLimit = command === \"get\" ? COMMENT_PAGE_SIZE : ROOT_PAGE_SIZE;\n let limit = maxLimit;\n const takeValue = (flag: string): string => {\n const value = argv[index + 1];\n if (value === undefined || value.startsWith(\"--\")) {\n throw new Error(`${flag} requires a value`);\n }\n index += 2;\n return value;\n };\n while (index < argv.length) {\n const arg = argv[index]!;\n if (arg === \"--json\") {\n json = true;\n index += 1;\n continue;\n }\n if (arg === \"--thread\") {\n threadId = takeValue(arg);\n continue;\n }\n if (arg === \"--cursor\") {\n cursor = takeValue(arg);\n continue;\n }\n if (arg === \"--limit\") {\n const rawLimit = takeValue(arg);\n limit = Number(rawLimit);\n if (!Number.isInteger(limit) || limit < 1 || limit > maxLimit) {\n throw new Error(`--limit must be an integer from 1 to ${maxLimit}`);\n }\n continue;\n }\n if (arg === \"--state\" && command === \"list\") {\n const state = takeValue(arg);\n if (state !== \"open\" && state !== \"resolved\" && state !== \"all\") {\n throw new Error(\"--state must be open, resolved, or all\");\n }\n filter = state;\n continue;\n }\n throw new Error(\n arg.startsWith(\"--\")\n ? `Unknown option for ${command}: ${arg}`\n : `Unexpected argument for ${command}: ${arg}`,\n );\n }\n return {\n command,\n threadId,\n commentThreadId,\n json,\n filter,\n cursor,\n limit,\n };\n}\n\nfunction utf8Size(value: string): number {\n return Buffer.byteLength(value, \"utf8\");\n}\n\nfunction renderCliPage(input: {\n records: T[];\n inheritedNextCursor: string | null;\n cursorFor: (record: T) => string;\n renderHuman: (record: T, index: number) => string;\n renderJson: (records: T[], nextCursor: string | null) => string;\n json: boolean;\n oversizedLabel: string;\n}): string {\n const render = (records: T[], nextCursor: string | null): string => {\n if (input.json) return `${input.renderJson(records, nextCursor)}\\n`;\n const rows = records.map(input.renderHuman).join(\"\\n\");\n const continuation =\n nextCursor === null\n ? \"\"\n : `${rows.length > 0 ? \"\\n\" : \"\"}More results available. Continue with --cursor ${nextCursor}`;\n return `${rows}${continuation}${rows.length > 0 || continuation.length > 0 ? \"\\n\" : \"\"}`;\n };\n\n const complete = render(input.records, input.inheritedNextCursor);\n if (utf8Size(complete) <= CLI_OUTPUT_BUDGET_BYTES) return complete;\n\n for (let length = input.records.length - 1; length >= 1; length -= 1) {\n const records = input.records.slice(0, length);\n const nextCursor = input.cursorFor(records.at(-1)!);\n const candidate = render(records, nextCursor);\n if (utf8Size(candidate) <= CLI_OUTPUT_BUDGET_BYTES) return candidate;\n }\n\n throw new Error(\n `A single ${input.oversizedLabel} exceeds the CLI output size limit; request a smaller record`,\n );\n}\n\nexport default function timelineCommentsPlugin(bb: BbPluginApi): void {\n const db = bb.storage.database();\n db.pragma(\"foreign_keys = ON\");\n if (db.pragma(\"foreign_keys\", { simple: true }) !== 1) {\n throw new Error(\"Timeline comments requires SQLite foreign keys\");\n }\n bb.storage.migrate(db, [\n `CREATE TABLE comment_threads (\n id TEXT PRIMARY KEY,\n bb_thread_id TEXT NOT NULL,\n message_id TEXT NOT NULL,\n message_role TEXT NOT NULL CHECK (message_role IN ('user', 'assistant')),\n selector_version INTEGER NOT NULL CHECK (selector_version = 1),\n selector_start INTEGER NOT NULL,\n selector_end INTEGER NOT NULL,\n selector_exact TEXT NOT NULL,\n selector_prefix TEXT NOT NULL,\n selector_suffix TEXT NOT NULL,\n version INTEGER NOT NULL DEFAULT 1,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n resolved_at INTEGER\n );\n CREATE TABLE comments (\n id TEXT PRIMARY KEY,\n thread_id TEXT NOT NULL REFERENCES comment_threads(id) ON DELETE CASCADE,\n parent_id TEXT REFERENCES comments(id) ON DELETE CASCADE,\n body TEXT NOT NULL,\n version INTEGER NOT NULL DEFAULT 1,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n );\n CREATE INDEX comment_threads_by_bb_thread\n ON comment_threads(bb_thread_id, resolved_at, created_at, id);\n CREATE INDEX comments_by_thread\n ON comments(thread_id, created_at, id);`,\n ]);\n\n const publishChanged = (bbThreadId: string, commentThreadId: string) => {\n bb.realtime.publish(\"comments-changed\", {\n bbThreadId,\n commentThreadId,\n });\n };\n\n bb.events.on(\"thread.deleted\", ({ thread }) => {\n db.prepare(\"DELETE FROM comment_threads WHERE bb_thread_id = ?\").run(\n thread.id,\n );\n });\n\n bb.rpc.register(timelineCommentsRpcContract, {\n listOpenAnchors(input) {\n return listOpenAnchors(db, input);\n },\n listCommentThreads(input) {\n return listCommentThreads(db, input);\n },\n getCommentThread(input) {\n return getCommentThread(db, input);\n },\n getThreadHandoffSummary({ bbThreadId }) {\n const summary = summarizeOpenComments(db, bbThreadId);\n return {\n threadCount: summary.threadCount,\n commentCount: summary.commentCount,\n codePointSize: summary.codePointSize,\n };\n },\n createThread(input) {\n if (input.message.threadId !== input.bbThreadId) {\n throw new Error(\"Message does not belong to the requested BB thread\");\n }\n const now = Date.now();\n const commentThreadId = randomId();\n const rootCommentId = randomId();\n db.transaction(() => {\n db.prepare(\n `INSERT INTO comment_threads (\n id, bb_thread_id, message_id, message_role,\n selector_version, selector_start, selector_end, selector_exact,\n selector_prefix, selector_suffix, version, created_at, updated_at\n ) VALUES (?, ?, ?, ?, 1, ?, ?, ?, ?, ?, 1, ?, ?)`,\n ).run(\n commentThreadId,\n input.bbThreadId,\n input.message.id,\n input.message.role,\n input.selector.start,\n input.selector.end,\n input.selector.exact,\n input.selector.prefix,\n input.selector.suffix,\n now,\n now,\n );\n db.prepare(\n `INSERT INTO comments (\n id, thread_id, parent_id, body, version, created_at, updated_at\n ) VALUES (?, ?, NULL, ?, 1, ?, ?)`,\n ).run(rootCommentId, commentThreadId, input.body, now, now);\n })();\n const result = getCommentThread(db, {\n bbThreadId: input.bbThreadId,\n commentThreadId,\n });\n publishChanged(input.bbThreadId, commentThreadId);\n return result;\n },\n reply(input) {\n const current = getThreadRow(db, input.bbThreadId, input.commentThreadId);\n if (current.resolvedAt !== null) {\n throw new Error(\"Resolved comment threads cannot receive replies\");\n }\n const now = Date.now();\n const id = randomId();\n db.transaction(() => {\n db.prepare(\n `INSERT INTO comments (\n id, thread_id, parent_id, body, version, created_at, updated_at\n ) VALUES (?, ?, ?, ?, 1, ?, ?)`,\n ).run(id, current.id, current.rootId, input.body, now, now);\n db.prepare(\n `UPDATE comment_threads\n SET version = version + 1, updated_at = ? WHERE id = ?`,\n ).run(now, current.id);\n })();\n const result = getCommentThread(db, input);\n publishChanged(input.bbThreadId, input.commentThreadId);\n return result;\n },\n updateComment(input) {\n const comment = getCommentRow(db, input.commentId);\n const current = getThreadRow(db, input.bbThreadId, comment.threadId);\n const now = Date.now();\n const updated = db.transaction(() => {\n const change = db\n .prepare(\n `UPDATE comments\n SET body = ?, version = version + 1, updated_at = ?\n WHERE id = ? AND version = ?`,\n )\n .run(input.body, now, input.commentId, input.expectedVersion);\n if (change.changes !== 1) return false;\n db.prepare(\n `UPDATE comment_threads\n SET version = version + 1, updated_at = ? WHERE id = ?`,\n ).run(now, current.id);\n return true;\n })();\n if (!updated) throw new Error(\"Comment changed; refresh and retry\");\n const result = getCommentThread(db, {\n bbThreadId: input.bbThreadId,\n commentThreadId: current.id,\n });\n publishChanged(input.bbThreadId, current.id);\n return result;\n },\n deleteComment(input) {\n const comment = getCommentRow(db, input.commentId);\n const current = getThreadRow(db, input.bbThreadId, comment.threadId);\n if (comment.parentId === null) {\n const change = db.transaction(() =>\n db\n .prepare(\n `DELETE FROM comment_threads\n WHERE id = ? AND bb_thread_id = ? AND version = ?\n AND EXISTS (\n SELECT 1 FROM comments\n WHERE comments.id = ? AND comments.thread_id = comment_threads.id\n AND comments.parent_id IS NULL AND comments.version = ?\n )`,\n )\n .run(\n current.id,\n input.bbThreadId,\n input.expectedThreadVersion,\n comment.id,\n input.expectedVersion,\n ),\n )();\n if (change.changes !== 1) {\n throw new Error(\"Comment thread changed; refresh and retry\");\n }\n publishChanged(input.bbThreadId, current.id);\n return { deletedThreadId: current.id, thread: null };\n }\n const now = Date.now();\n db.transaction(() => {\n const threadChange = db\n .prepare(\n `UPDATE comment_threads\n SET version = version + 1, updated_at = ?\n WHERE id = ? AND bb_thread_id = ? AND version = ?`,\n )\n .run(\n now,\n current.id,\n input.bbThreadId,\n input.expectedThreadVersion,\n );\n if (threadChange.changes !== 1) {\n throw new Error(\"Comment thread changed; refresh and retry\");\n }\n const commentChange = db\n .prepare(\"DELETE FROM comments WHERE id = ? AND version = ?\")\n .run(comment.id, input.expectedVersion);\n if (commentChange.changes !== 1) {\n throw new Error(\"Comment changed; refresh and retry\");\n }\n })();\n const result = getCommentThread(db, {\n bbThreadId: input.bbThreadId,\n commentThreadId: current.id,\n });\n publishChanged(input.bbThreadId, current.id);\n return { deletedThreadId: null, thread: result };\n },\n setThreadResolved(input) {\n const now = Date.now();\n const change = db.transaction(() =>\n db\n .prepare(\n `UPDATE comment_threads\n SET resolved_at = ?, version = version + 1, updated_at = ?\n WHERE id = ? AND bb_thread_id = ? AND version = ?`,\n )\n .run(\n input.resolved ? now : null,\n now,\n input.commentThreadId,\n input.bbThreadId,\n input.expectedVersion,\n ),\n )();\n if (change.changes !== 1) {\n throw new Error(\"Comment thread changed; refresh and retry\");\n }\n const result = getCommentThread(db, input);\n publishChanged(input.bbThreadId, input.commentThreadId);\n return result;\n },\n });\n\n bb.ui.registerMentionProvider({\n id: \"thread-comments\",\n label: \"Thread comments\",\n triggers: [\"@\"],\n search({ query, threadId }) {\n if (threadId === null || !\"comments\".includes(query.toLowerCase())) {\n return [];\n }\n const counts = countOpenComments(db, threadId);\n return [\n {\n id: threadId,\n title: `${counts.commentCount} comments from ${counts.threadCount} open threads`,\n subtitle: \"Local timeline comments\",\n },\n ];\n },\n resolve(bbThreadId) {\n const serialized = serializeOpenComments(db, bbThreadId);\n return { context: serialized.context };\n },\n });\n\n bb.cli.register({\n name: \"comments\",\n summary: \"Read timeline comments attached to BB threads\",\n commands: [\n {\n name: \"list\",\n summary: \"List comment threads\",\n usage:\n \"bb comments list [--thread ] [--state open|resolved|all] [--cursor ] [--limit 1-50] [--json]\",\n },\n {\n name: \"get\",\n summary: \"Read one comment thread\",\n usage:\n \"bb comments get [--thread ] [--cursor ] [--limit 1-100] [--json]\",\n },\n ],\n run(argv, context) {\n try {\n const parsed = parseCli(argv);\n const bbThreadId = parsed.threadId ?? context.threadId;\n if (bbThreadId === undefined) {\n return {\n exitCode: 2,\n stderr: \"A BB thread context or --thread is required.\\n\",\n };\n }\n if (parsed.command === \"get\") {\n if (parsed.commentThreadId === undefined) {\n return {\n exitCode: 2,\n stderr:\n \"Usage: bb comments get [--thread ] [--cursor ] [--limit 1-100] [--json]\\n\",\n };\n }\n const detail = getCommentThread(db, {\n bbThreadId,\n commentThreadId: parsed.commentThreadId,\n cursor: parsed.cursor,\n limit: parsed.limit,\n });\n return {\n exitCode: 0,\n stdout: renderCliPage({\n records: detail.comments,\n inheritedNextCursor: detail.nextCursor,\n cursorFor: (comment) =>\n encodeCursor({\n method: \"comments\",\n scope: `${bbThreadId}:${parsed.commentThreadId}`,\n filter: \"chronological\",\n parentRank: comment.parentId === null ? 0 : 1,\n createdAt: comment.createdAt,\n id: comment.id,\n }),\n renderHuman: (comment) =>\n `${comment.parentId === null ? \"Comment\" : \"Reply\"}: ${comment.body}`,\n renderJson: (comments, nextCursor) =>\n JSON.stringify({ ...detail, comments, nextCursor }),\n json: parsed.json,\n oversizedLabel: \"comment\",\n }),\n };\n }\n const result = listCommentThreads(db, {\n bbThreadId,\n filter: parsed.filter,\n cursor: parsed.cursor,\n limit: parsed.limit,\n });\n return {\n exitCode: 0,\n stdout: renderCliPage({\n records: result.threads,\n inheritedNextCursor: result.nextCursor,\n cursorFor: (thread) =>\n encodeCursor({\n method: \"threads\",\n scope: bbThreadId,\n filter: parsed.filter,\n createdAt: thread.createdAt,\n id: thread.id,\n }),\n renderHuman: (thread) =>\n `${thread.id}\\t${thread.resolvedAt === null ? \"open\" : \"resolved\"}\\t${thread.selector.exact}\\t${thread.rootComment.body}`,\n renderJson: (threads, nextCursor) =>\n JSON.stringify({ threads, nextCursor }),\n json: parsed.json,\n oversizedLabel: \"comment thread\",\n }),\n };\n } catch (error) {\n return {\n exitCode: 1,\n stderr: `${error instanceof Error ? error.message : String(error)}\\n`,\n };\n }\n },\n });\n}\n", "export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, TimePrecision, util, NEVER, } from \"../core/index.js\";\nexport { toJSONSchema } from \"../core/json-schema-processors.js\";\nexport { fromJSONSchema } from \"./from-json-schema.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n", "export * from \"./core.js\";\nexport * from \"./parse.js\";\nexport * from \"./errors.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./versions.js\";\nexport * as util from \"./util.js\";\nexport * as regexes from \"./regexes.js\";\nexport * as locales from \"../locales/index.js\";\nexport * from \"./registries.js\";\nexport * from \"./doc.js\";\nexport * from \"./api.js\";\nexport * from \"./to-json-schema.js\";\nexport { toJSONSchema } from \"./json-schema-processors.js\";\nexport { JSONSchemaGenerator } from \"./json-schema-generator.js\";\nexport * as JSONSchema from \"./json-schema.js\";\n", "var _a;\n/** A special constant with type `never` */\nexport const NEVER = /*@__PURE__*/ Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\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 var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\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 = 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 { globalConfig } from \"./core.js\";\n// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\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 // Use a relative epsilon scaled to the magnitude of the result\n const tolerance = 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`\n // 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 === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\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 (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n 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 in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${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\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in 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 (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) {\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(\".partial() 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 in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${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 for (const key in 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 in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${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 in 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).\n// 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}\nexport function finalizeIssue(iss, ctx, config) {\n const message = iss.message\n ? iss.message\n : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\");\n const { inst: _inst, 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}\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", "import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\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 fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n 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 if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\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, _b;\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 (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[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 * \u2716 Expected number, received string at \"username\n * favoriteNumbers[0]\n * \u2716 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(`\u2716 ${issue.message}`);\n if (issue.path?.length)\n lines.push(` \u2192 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\";\nexport const _parse = (_Err) => (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);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => 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);\n throw e;\n }\n return result.value;\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);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\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-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\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\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})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(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 = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\nexport const httpProtocol = /^https?$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const 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])))`;\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])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${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 : `${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 time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\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 const timeRegex = `${time}(?:${opts.join(\"|\")})`;\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});\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,\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,\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 ? 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 = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\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 = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\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 = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\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 = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\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 length = input.length;\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 = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\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 length = input.length;\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 = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\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 length = input.length;\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 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 = []) {\n this.content = [];\n this.indent = 0;\n if (this)\n this.args = args;\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 args = this?.args;\n const content = this?.content ?? [``];\n const lines = [...content.map((x) => ` ${x}`)];\n // console.log(lines.join(\"\\n\"));\n return new F(...args, lines.join(\"\\n\"));\n }\n}\n", "export const version = {\n major: 4,\n minor: 4,\n patch: 3,\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 checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\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\n // 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 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 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 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\n // 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 // Lazy initialize ~standard to avoid creating objects for every schema\n util.defineLazy(inst, \"~standard\", () => ({\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\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});\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 // When normalize is off, require :// for http/https URLs\n // This prevents strings like \"http:example.com\" or \"https:/path\" from being silently accepted\n if (!def.normalize && def.protocol?.source === regexes.httpProtocol.source) {\n if (!/^https?:\\/\\//i.test(trimmed)) {\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 }\n // @ts-ignore\n const url = new URL(trimmed);\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.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 }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.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 }\n // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\n }\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 def.pattern ?? (def.pattern = regexes.nanoid);\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});\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});\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 try {\n // @ts-ignore\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\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 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 const parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n // @ts-ignore\n new URL(`http://[${address}]`);\n }\n catch {\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////////////////////////////// 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 ? \"Infinity\"\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 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 = 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, isOptionalIn, isOptionalOut) {\n const isPresent = key in input;\n if (result.issues.length) {\n // For optional-in/out schemas, ignore errors on absent keys.\n if (isOptionalIn && isOptionalOut && !isPresent) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (!isPresent && !isOptionalIn) {\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}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n keys,\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 isOptionalIn = _catchall.optin === \"optional\";\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n // skip __proto__ so it can't replace the result prototype via the\n // assignment setter on the plain {} we build into\n if (key === \"__proto__\")\n continue;\n if (keySet.has(key))\n continue;\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, isOptionalIn, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\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 Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\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 payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalIn = el._zod.optin === \"optional\";\n const isOptionalOut = el._zod.optout === \"optional\";\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, isOptionalIn, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\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 generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {};`);\n for (const key of normalized.keys) {\n const id = ids[key];\n const k = util.esc(key);\n const schema = shape[key];\n const isOptionalIn = schema?._zod?.optin === \"optional\";\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalIn && isOptionalOut) {\n // For optional-in/out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else if (!isOptionalIn) {\n doc.write(`\n const ${id}_present = ${k} in input;\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\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 if (${id}.value === undefined) {\n newResult[${k}] = undefined;\n } else {\n newResult[${k}] = ${id}.value;\n }\n }\n\n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\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 const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\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.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = 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 successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.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 });\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});\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.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of 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 \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\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\n // 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});\nfunction 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 for (const key of sharedKeys) {\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) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\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 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 = [];\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\n // array. The post-processing in `handleTupleResults` walks them in\n // order so it can decide whether an absent optional-output error can\n // 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 if (items[i]._zod[key] !== \"optional\")\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\n // rule, but only after `optoutStart`: the first index where the output\n // 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 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 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) {\n payload.value = {};\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 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 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 unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\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)\n // 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 {\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 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[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\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 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 = 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 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 = 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 inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\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 if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\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 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 payload.fallback = true;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n payload.fallback = true;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (input === undefined && (result.issues.length || result.fallback)) {\n return { issues: [], value: undefined };\n }\n return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n const input = payload.value;\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, input));\n return handleOptionalResult(result, input);\n }\n if (payload.value === undefined) {\n return payload;\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.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"pattern\", () => 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.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...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 = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => 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 = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => 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.defineLazy(inst._zod, \"values\", () => {\n const v = 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});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => 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(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n payload.fallback = true;\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n payload.fallback = true;\n }\n return payload;\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.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => 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 if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues, fallback: left.fallback }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => 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.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n util.defineLazy(inst._zod, \"optout\", () => 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 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 inst._def = 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 return 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 };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return 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 };\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\n // lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance,\n // 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.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._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 { default as ar } from \"./ar.js\";\nexport { default as az } from \"./az.js\";\nexport { default as be } from \"./be.js\";\nexport { default as bg } from \"./bg.js\";\nexport { default as ca } from \"./ca.js\";\nexport { default as cs } from \"./cs.js\";\nexport { default as da } from \"./da.js\";\nexport { default as de } from \"./de.js\";\nexport { default as el } from \"./el.js\";\nexport { default as en } from \"./en.js\";\nexport { default as eo } from \"./eo.js\";\nexport { default as es } from \"./es.js\";\nexport { default as fa } from \"./fa.js\";\nexport { default as fi } from \"./fi.js\";\nexport { default as fr } from \"./fr.js\";\nexport { default as frCA } from \"./fr-CA.js\";\nexport { default as he } from \"./he.js\";\nexport { default as hr } from \"./hr.js\";\nexport { default as hu } from \"./hu.js\";\nexport { default as hy } from \"./hy.js\";\nexport { default as id } from \"./id.js\";\nexport { default as is } from \"./is.js\";\nexport { default as it } from \"./it.js\";\nexport { default as ja } from \"./ja.js\";\nexport { default as ka } from \"./ka.js\";\nexport { default as kh } from \"./kh.js\";\nexport { default as km } from \"./km.js\";\nexport { default as ko } from \"./ko.js\";\nexport { default as lt } from \"./lt.js\";\nexport { default as mk } from \"./mk.js\";\nexport { default as ms } from \"./ms.js\";\nexport { default as nl } from \"./nl.js\";\nexport { default as no } from \"./no.js\";\nexport { default as ota } from \"./ota.js\";\nexport { default as ps } from \"./ps.js\";\nexport { default as pl } from \"./pl.js\";\nexport { default as pt } from \"./pt.js\";\nexport { default as ro } from \"./ro.js\";\nexport { default as ru } from \"./ru.js\";\nexport { default as sl } from \"./sl.js\";\nexport { default as sv } from \"./sv.js\";\nexport { default as ta } from \"./ta.js\";\nexport { default as th } from \"./th.js\";\nexport { default as tr } from \"./tr.js\";\nexport { default as ua } from \"./ua.js\";\nexport { default as uk } from \"./uk.js\";\nexport { default as ur } from \"./ur.js\";\nexport { default as uz } from \"./uz.js\";\nexport { default as vi } from \"./vi.js\";\nexport { default as zhCN } from \"./zh-CN.js\";\nexport { default as zhTW } from \"./zh-TW.js\";\nexport { default as yo } from \"./yo.js\";\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u062D\u0631\u0641\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n file: { unit: \"\u0628\u0627\u064A\u062A\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n array: { unit: \"\u0639\u0646\u0635\u0631\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n set: { unit: \"\u0639\u0646\u0635\u0631\", verb: \"\u0623\u0646 \u064A\u062D\u0648\u064A\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0645\u062F\u062E\u0644\",\n email: \"\u0628\u0631\u064A\u062F \u0625\u0644\u0643\u062A\u0631\u0648\u0646\u064A\",\n url: \"\u0631\u0627\u0628\u0637\",\n emoji: \"\u0625\u064A\u0645\u0648\u062C\u064A\",\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: \"\u062A\u0627\u0631\u064A\u062E \u0648\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n date: \"\u062A\u0627\u0631\u064A\u062E \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n time: \"\u0648\u0642\u062A \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n duration: \"\u0645\u062F\u0629 \u0628\u0645\u0639\u064A\u0627\u0631 ISO\",\n ipv4: \"\u0639\u0646\u0648\u0627\u0646 IPv4\",\n ipv6: \"\u0639\u0646\u0648\u0627\u0646 IPv6\",\n cidrv4: \"\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv4\",\n cidrv6: \"\u0645\u062F\u0649 \u0639\u0646\u0627\u0648\u064A\u0646 \u0628\u0635\u064A\u063A\u0629 IPv6\",\n base64: \"\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64-encoded\",\n base64url: \"\u0646\u064E\u0635 \u0628\u062A\u0631\u0645\u064A\u0632 base64url-encoded\",\n json_string: \"\u0646\u064E\u0635 \u0639\u0644\u0649 \u0647\u064A\u0626\u0629 JSON\",\n e164: \"\u0631\u0642\u0645 \u0647\u0627\u062A\u0641 \u0628\u0645\u0639\u064A\u0627\u0631 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0645\u062F\u062E\u0644\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 instanceof ${issue.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`;\n }\n return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u0645\u062F\u062E\u0644\u0627\u062A \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\u0629: \u064A\u0641\u062A\u0631\u0636 \u0625\u062F\u062E\u0627\u0644 ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u0627\u062E\u062A\u064A\u0627\u0631 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062A\u0648\u0642\u0639 \u0627\u0646\u062A\u0642\u0627\u0621 \u0623\u062D\u062F \u0647\u0630\u0647 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A: ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return ` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue.origin ?? \"\u0627\u0644\u0642\u064A\u0645\u0629\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\"}`;\n return `\u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${issue.origin ?? \"\u0627\u0644\u0642\u064A\u0645\u0629\"} ${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${issue.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0628\u062F\u0623 \u0628\u0640 \"${issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0646\u062A\u0647\u064A \u0628\u0640 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u062A\u0636\u0645\u0651\u064E\u0646 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u0646\u064E\u0635 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0637\u0627\u0628\u0642 \u0627\u0644\u0646\u0645\u0637 ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644`;\n }\n case \"not_multiple_of\":\n return `\u0631\u0642\u0645 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644: \u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0645\u0646 \u0645\u0636\u0627\u0639\u0641\u0627\u062A ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u0645\u0639\u0631\u0641${issue.keys.length > 1 ? \"\u0627\u062A\" : \"\"} \u063A\u0631\u064A\u0628${issue.keys.length > 1 ? \"\u0629\" : \"\"}: ${util.joinValues(issue.keys, \"\u060C \")}`;\n case \"invalid_key\":\n return `\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue.origin}`;\n case \"invalid_union\":\n return \"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\";\n case \"invalid_element\":\n return `\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${issue.origin}`;\n default:\n return \"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644\";\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"simvol\", verb: \"olmal\u0131d\u0131r\" },\n file: { unit: \"bayt\", verb: \"olmal\u0131d\u0131r\" },\n array: { unit: \"element\", verb: \"olmal\u0131d\u0131r\" },\n set: { unit: \"element\", verb: \"olmal\u0131d\u0131r\" },\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 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 jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n instanceof ${issue.expected}, daxil olan ${received}`;\n }\n return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n ${expected}, daxil olan ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Yanl\u0131\u015F d\u0259y\u0259r: g\u00F6zl\u0259nil\u0259n ${util.stringifyPrimitive(issue.values[0])}`;\n return `Yanl\u0131\u015F se\u00E7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u00C7ox b\u00F6y\u00FCk: g\u00F6zl\u0259nil\u0259n ${issue.origin ?? \"d\u0259y\u0259r\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n return `\u00C7ox b\u00F6y\u00FCk: g\u00F6zl\u0259nil\u0259n ${issue.origin ?? \"d\u0259y\u0259r\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u00C7ox ki\u00E7ik: g\u00F6zl\u0259nil\u0259n ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n return `\u00C7ox ki\u00E7ik: g\u00F6zl\u0259nil\u0259n ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Yanl\u0131\u015F m\u0259tn: \"${_issue.prefix}\" il\u0259 ba\u015Flamal\u0131d\u0131r`;\n if (_issue.format === \"ends_with\")\n return `Yanl\u0131\u015F m\u0259tn: \"${_issue.suffix}\" il\u0259 bitm\u0259lidir`;\n if (_issue.format === \"includes\")\n return `Yanl\u0131\u015F m\u0259tn: \"${_issue.includes}\" daxil olmal\u0131d\u0131r`;\n if (_issue.format === \"regex\")\n return `Yanl\u0131\u015F m\u0259tn: ${_issue.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`;\n return `Yanl\u0131\u015F ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Yanl\u0131\u015F \u0259d\u0259d: ${issue.divisor} il\u0259 b\u00F6l\u00FCn\u0259 bil\u0259n olmal\u0131d\u0131r`;\n case \"unrecognized_keys\":\n return `Tan\u0131nmayan a\u00E7ar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} daxilind\u0259 yanl\u0131\u015F a\u00E7ar`;\n case \"invalid_union\":\n return \"Yanl\u0131\u015F d\u0259y\u0259r\";\n case \"invalid_element\":\n return `${issue.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`;\n default:\n return `Yanl\u0131\u015F d\u0259y\u0259r`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nfunction getBelarusianPlural(count, one, few, many) {\n const absCount = Math.abs(count);\n const lastDigit = absCount % 10;\n const lastTwoDigits = absCount % 100;\n if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n return many;\n }\n if (lastDigit === 1) {\n return one;\n }\n if (lastDigit >= 2 && lastDigit <= 4) {\n return few;\n }\n return many;\n}\nconst error = () => {\n const Sizable = {\n string: {\n unit: {\n one: \"\u0441\u0456\u043C\u0432\u0430\u043B\",\n few: \"\u0441\u0456\u043C\u0432\u0430\u043B\u044B\",\n many: \"\u0441\u0456\u043C\u0432\u0430\u043B\u0430\u045E\",\n },\n verb: \"\u043C\u0435\u0446\u044C\",\n },\n array: {\n unit: {\n one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B\",\n many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E\",\n },\n verb: \"\u043C\u0435\u0446\u044C\",\n },\n set: {\n unit: {\n one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B\",\n many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u045E\",\n },\n verb: \"\u043C\u0435\u0446\u044C\",\n },\n file: {\n unit: {\n one: \"\u0431\u0430\u0439\u0442\",\n few: \"\u0431\u0430\u0439\u0442\u044B\",\n many: \"\u0431\u0430\u0439\u0442\u0430\u045E\",\n },\n verb: \"\u043C\u0435\u0446\u044C\",\n },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0443\u0432\u043E\u0434\",\n email: \"email \u0430\u0434\u0440\u0430\u0441\",\n url: \"URL\",\n emoji: \"\u044D\u043C\u043E\u0434\u0437\u0456\",\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 \u0434\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441\",\n date: \"ISO \u0434\u0430\u0442\u0430\",\n time: \"ISO \u0447\u0430\u0441\",\n duration: \"ISO \u043F\u0440\u0430\u0446\u044F\u0433\u043B\u0430\u0441\u0446\u044C\",\n ipv4: \"IPv4 \u0430\u0434\u0440\u0430\u0441\",\n ipv6: \"IPv6 \u0430\u0434\u0440\u0430\u0441\",\n cidrv4: \"IPv4 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D\",\n cidrv6: \"IPv6 \u0434\u044B\u044F\u043F\u0430\u0437\u043E\u043D\",\n base64: \"\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64\",\n base64url: \"\u0440\u0430\u0434\u043E\u043A \u0443 \u0444\u0430\u0440\u043C\u0430\u0446\u0435 base64url\",\n json_string: \"JSON \u0440\u0430\u0434\u043E\u043A\",\n e164: \"\u043D\u0443\u043C\u0430\u0440 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0443\u0432\u043E\u0434\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u043B\u0456\u043A\",\n array: \"\u043C\u0430\u0441\u0456\u045E\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F instanceof ${issue.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`;\n }\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0432\u0430\u0440\u044B\u044F\u043D\u0442: \u0447\u0430\u043A\u0430\u045E\u0441\u044F \u0430\u0434\u0437\u0456\u043D \u0437 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const maxValue = Number(issue.maximum);\n const unit = getBelarusianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435\"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue.maximum.toString()} ${unit}`;\n }\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u0432\u044F\u043B\u0456\u043A\u0456: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435\"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const minValue = Number(issue.minimum);\n const unit = getBelarusianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${sizing.verb} ${adj}${issue.minimum.toString()} ${unit}`;\n }\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${issue.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u043F\u0430\u0447\u044B\u043D\u0430\u0446\u0446\u0430 \u0437 \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u0430\u043A\u0430\u043D\u0447\u0432\u0430\u0446\u0446\u0430 \u043D\u0430 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0437\u043C\u044F\u0448\u0447\u0430\u0446\u044C \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u0440\u0430\u0434\u043E\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0430\u0434\u043F\u0430\u0432\u044F\u0434\u0430\u0446\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043B\u0456\u043A: \u043F\u0430\u0432\u0456\u043D\u0435\u043D \u0431\u044B\u0446\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${issue.keys.length > 1 ? \"\u043A\u043B\u044E\u0447\u044B\" : \"\u043A\u043B\u044E\u0447\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434\";\n case \"invalid_element\":\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u0430\u0435 \u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435 \u045E ${issue.origin}`;\n default:\n return `\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n file: { unit: \"\u0431\u0430\u0439\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n array: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n set: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\", verb: \"\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0432\u0445\u043E\u0434\",\n email: \"\u0438\u043C\u0435\u0439\u043B \u0430\u0434\u0440\u0435\u0441\",\n url: \"URL\",\n emoji: \"\u0435\u043C\u043E\u0434\u0436\u0438\",\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 \u0432\u0440\u0435\u043C\u0435\",\n date: \"ISO \u0434\u0430\u0442\u0430\",\n time: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n duration: \"ISO \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442\",\n ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\",\n ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\",\n cidrv4: \"IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n cidrv6: \"IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n base64: \"base64-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437\",\n base64url: \"base64url-\u043A\u043E\u0434\u0438\u0440\u0430\u043D \u043D\u0438\u0437\",\n json_string: \"JSON \u043D\u0438\u0437\",\n e164: \"E.164 \u043D\u043E\u043C\u0435\u0440\",\n jwt: \"JWT\",\n template_literal: \"\u0432\u0445\u043E\u0434\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0447\u0438\u0441\u043B\u043E\",\n array: \"\u043C\u0430\u0441\u0438\u0432\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D instanceof ${issue.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`;\n }\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u043E\u043F\u0446\u0438\u044F: \u043E\u0447\u0430\u043A\u0432\u0430\u043D\u043E \u0435\u0434\u043D\u043E \u043E\u0442 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin ?? \"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\"} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\"}`;\n return `\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin ?? \"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442\"} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${issue.origin} \u0434\u0430 \u0431\u044A\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u0432\u0430 \u0441 \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0437\u0430\u0432\u044A\u0440\u0448\u0432\u0430 \u0441 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0432\u043A\u043B\u044E\u0447\u0432\u0430 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043D\u0438\u0437: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0441\u044A\u0432\u043F\u0430\u0434\u0430 \u0441 ${_issue.pattern}`;\n let invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D\";\n if (_issue.format === \"emoji\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n if (_issue.format === \"datetime\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n if (_issue.format === \"date\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430\";\n if (_issue.format === \"time\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E\";\n if (_issue.format === \"duration\")\n invalid_adj = \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430\";\n return `${invalid_adj} ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E \u0447\u0438\u0441\u043B\u043E: \u0442\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0431\u044A\u0434\u0435 \u043A\u0440\u0430\u0442\u043D\u043E \u043D\u0430 ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u041D\u0435\u0440\u0430\u0437\u043F\u043E\u0437\u043D\u0430\u0442${issue.keys.length > 1 ? \"\u0438\" : \"\"} \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u043E\u0432\u0435\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043A\u043B\u044E\u0447 \u0432 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434\";\n case \"invalid_element\":\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442 \u0432 ${issue.origin}`;\n default:\n return `\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"car\u00E0cters\", verb: \"contenir\" },\n file: { unit: \"bytes\", verb: \"contenir\" },\n array: { unit: \"elements\", verb: \"contenir\" },\n set: { unit: \"elements\", verb: \"contenir\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"entrada\",\n email: \"adre\u00E7a electr\u00F2nica\",\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: \"data i hora ISO\",\n date: \"data ISO\",\n time: \"hora ISO\",\n duration: \"durada ISO\",\n ipv4: \"adre\u00E7a IPv4\",\n ipv6: \"adre\u00E7a IPv6\",\n cidrv4: \"rang IPv4\",\n cidrv6: \"rang IPv6\",\n base64: \"cadena codificada en base64\",\n base64url: \"cadena codificada en base64url\",\n json_string: \"cadena JSON\",\n e164: \"n\u00FAmero E.164\",\n jwt: \"JWT\",\n template_literal: \"entrada\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Tipus inv\u00E0lid: s'esperava instanceof ${issue.expected}, s'ha rebut ${received}`;\n }\n return `Tipus inv\u00E0lid: s'esperava ${expected}, s'ha rebut ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Valor inv\u00E0lid: s'esperava ${util.stringifyPrimitive(issue.values[0])}`;\n return `Opci\u00F3 inv\u00E0lida: s'esperava una de ${util.joinValues(issue.values, \" o \")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"com a m\u00E0xim\" : \"menys de\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} contingu\u00E9s ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n return `Massa gran: s'esperava que ${issue.origin ?? \"el valor\"} fos ${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"com a m\u00EDnim\" : \"m\u00E9s de\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Massa petit: s'esperava que ${issue.origin} contingu\u00E9s ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Massa petit: s'esperava que ${issue.origin} fos ${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Format inv\u00E0lid: ha de comen\u00E7ar amb \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Format inv\u00E0lid: ha d'acabar amb \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Format inv\u00E0lid: ha d'incloure \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Format inv\u00E0lid: ha de coincidir amb el patr\u00F3 ${_issue.pattern}`;\n return `Format inv\u00E0lid per a ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `N\u00FAmero inv\u00E0lid: ha de ser m\u00FAltiple de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Clau${issue.keys.length > 1 ? \"s\" : \"\"} no reconeguda${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Clau inv\u00E0lida a ${issue.origin}`;\n case \"invalid_union\":\n return \"Entrada inv\u00E0lida\"; // Could also be \"Tipus d'uni\u00F3 inv\u00E0lid\" but \"Entrada inv\u00E0lida\" is more general\n case \"invalid_element\":\n return `Element inv\u00E0lid a ${issue.origin}`;\n default:\n return `Entrada inv\u00E0lida`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"znak\u016F\", verb: \"m\u00EDt\" },\n file: { unit: \"bajt\u016F\", verb: \"m\u00EDt\" },\n array: { unit: \"prvk\u016F\", verb: \"m\u00EDt\" },\n set: { unit: \"prvk\u016F\", verb: \"m\u00EDt\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"regul\u00E1rn\u00ED v\u00FDraz\",\n email: \"e-mailov\u00E1 adresa\",\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: \"datum a \u010Das ve form\u00E1tu ISO\",\n date: \"datum ve form\u00E1tu ISO\",\n time: \"\u010Das ve form\u00E1tu ISO\",\n duration: \"doba trv\u00E1n\u00ED ISO\",\n ipv4: \"IPv4 adresa\",\n ipv6: \"IPv6 adresa\",\n cidrv4: \"rozsah IPv4\",\n cidrv6: \"rozsah IPv6\",\n base64: \"\u0159et\u011Bzec zak\u00F3dovan\u00FD ve form\u00E1tu base64\",\n base64url: \"\u0159et\u011Bzec zak\u00F3dovan\u00FD ve form\u00E1tu base64url\",\n json_string: \"\u0159et\u011Bzec ve form\u00E1tu JSON\",\n e164: \"\u010D\u00EDslo E.164\",\n jwt: \"JWT\",\n template_literal: \"vstup\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u010D\u00EDslo\",\n string: \"\u0159et\u011Bzec\",\n function: \"funkce\",\n array: \"pole\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no instanceof ${issue.expected}, obdr\u017Eeno ${received}`;\n }\n return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no ${expected}, obdr\u017Eeno ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Neplatn\u00FD vstup: o\u010Dek\u00E1v\u00E1no ${util.stringifyPrimitive(issue.values[0])}`;\n return `Neplatn\u00E1 mo\u017Enost: o\u010Dek\u00E1v\u00E1na jedna z hodnot ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Hodnota je p\u0159\u00EDli\u0161 velk\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED m\u00EDt ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"prvk\u016F\"}`;\n }\n return `Hodnota je p\u0159\u00EDli\u0161 velk\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED b\u00FDt ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Hodnota je p\u0159\u00EDli\u0161 mal\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED m\u00EDt ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"prvk\u016F\"}`;\n }\n return `Hodnota je p\u0159\u00EDli\u0161 mal\u00E1: ${issue.origin ?? \"hodnota\"} mus\u00ED b\u00FDt ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED za\u010D\u00EDnat na \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED kon\u010Dit na \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED obsahovat \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Neplatn\u00FD \u0159et\u011Bzec: mus\u00ED odpov\u00EDdat vzoru ${_issue.pattern}`;\n return `Neplatn\u00FD form\u00E1t ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Neplatn\u00E9 \u010D\u00EDslo: mus\u00ED b\u00FDt n\u00E1sobkem ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Nezn\u00E1m\u00E9 kl\u00ED\u010De: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Neplatn\u00FD kl\u00ED\u010D v ${issue.origin}`;\n case \"invalid_union\":\n return \"Neplatn\u00FD vstup\";\n case \"invalid_element\":\n return `Neplatn\u00E1 hodnota v ${issue.origin}`;\n default:\n return `Neplatn\u00FD vstup`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"tegn\", verb: \"havde\" },\n file: { unit: \"bytes\", verb: \"havde\" },\n array: { unit: \"elementer\", verb: \"indeholdt\" },\n set: { unit: \"elementer\", verb: \"indeholdt\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"e-mailadresse\",\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 dato- og klokkesl\u00E6t\",\n date: \"ISO-dato\",\n time: \"ISO-klokkesl\u00E6t\",\n duration: \"ISO-varighed\",\n ipv4: \"IPv4-omr\u00E5de\",\n ipv6: \"IPv6-omr\u00E5de\",\n cidrv4: \"IPv4-spektrum\",\n cidrv6: \"IPv6-spektrum\",\n base64: \"base64-kodet streng\",\n base64url: \"base64url-kodet streng\",\n json_string: \"JSON-streng\",\n e164: \"E.164-nummer\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n string: \"streng\",\n number: \"tal\",\n boolean: \"boolean\",\n array: \"liste\",\n object: \"objekt\",\n set: \"s\u00E6t\",\n file: \"fil\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ugyldigt input: forventede instanceof ${issue.expected}, fik ${received}`;\n }\n return `Ugyldigt input: forventede ${expected}, fik ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ugyldig v\u00E6rdi: forventede ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ugyldigt valg: forventede en af f\u00F8lgende ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n if (sizing)\n return `For stor: forventede ${origin ?? \"value\"} ${sizing.verb} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n return `For stor: forventede ${origin ?? \"value\"} havde ${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n if (sizing) {\n return `For lille: forventede ${origin} ${sizing.verb} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `For lille: forventede ${origin} havde ${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Ugyldig streng: skal starte med \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Ugyldig streng: skal ende med \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Ugyldig streng: skal indeholde \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Ugyldig streng: skal matche m\u00F8nsteret ${_issue.pattern}`;\n return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ugyldigt tal: skal v\u00E6re deleligt med ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Ukendte n\u00F8gler\" : \"Ukendt n\u00F8gle\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ugyldig n\u00F8gle i ${issue.origin}`;\n case \"invalid_union\":\n return \"Ugyldigt input: matcher ingen af de tilladte typer\";\n case \"invalid_element\":\n return `Ugyldig v\u00E6rdi i ${issue.origin}`;\n default:\n return `Ugyldigt input`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"Zeichen\", verb: \"zu haben\" },\n file: { unit: \"Bytes\", verb: \"zu haben\" },\n array: { unit: \"Elemente\", verb: \"zu haben\" },\n set: { unit: \"Elemente\", verb: \"zu haben\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"Eingabe\",\n email: \"E-Mail-Adresse\",\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-Datum und -Uhrzeit\",\n date: \"ISO-Datum\",\n time: \"ISO-Uhrzeit\",\n duration: \"ISO-Dauer\",\n ipv4: \"IPv4-Adresse\",\n ipv6: \"IPv6-Adresse\",\n cidrv4: \"IPv4-Bereich\",\n cidrv6: \"IPv6-Bereich\",\n base64: \"Base64-codierter String\",\n base64url: \"Base64-URL-codierter String\",\n json_string: \"JSON-String\",\n e164: \"E.164-Nummer\",\n jwt: \"JWT\",\n template_literal: \"Eingabe\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"Zahl\",\n array: \"Array\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ung\u00FCltige Eingabe: erwartet instanceof ${issue.expected}, erhalten ${received}`;\n }\n return `Ung\u00FCltige Eingabe: erwartet ${expected}, erhalten ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ung\u00FCltige Eingabe: erwartet ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ung\u00FCltige Option: erwartet eine von ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Zu gro\u00DF: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"Elemente\"} hat`;\n return `Zu gro\u00DF: erwartet, dass ${issue.origin ?? \"Wert\"} ${adj}${issue.maximum.toString()} ist`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} hat`;\n }\n return `Zu klein: erwartet, dass ${issue.origin} ${adj}${issue.minimum.toString()} ist`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Ung\u00FCltiger String: muss mit \"${_issue.prefix}\" beginnen`;\n if (_issue.format === \"ends_with\")\n return `Ung\u00FCltiger String: muss mit \"${_issue.suffix}\" enden`;\n if (_issue.format === \"includes\")\n return `Ung\u00FCltiger String: muss \"${_issue.includes}\" enthalten`;\n if (_issue.format === \"regex\")\n return `Ung\u00FCltiger String: muss dem Muster ${_issue.pattern} entsprechen`;\n return `Ung\u00FCltig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ung\u00FCltige Zahl: muss ein Vielfaches von ${issue.divisor} sein`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Unbekannte Schl\u00FCssel\" : \"Unbekannter Schl\u00FCssel\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ung\u00FCltiger Schl\u00FCssel in ${issue.origin}`;\n case \"invalid_union\":\n return \"Ung\u00FCltige Eingabe\";\n case \"invalid_element\":\n return `Ung\u00FCltiger Wert in ${issue.origin}`;\n default:\n return `Ung\u00FCltige Eingabe`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03B5\u03C2\", verb: \"\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9\" },\n file: { unit: \"bytes\", verb: \"\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9\" },\n array: { unit: \"\u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03B1\", verb: \"\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9\" },\n set: { unit: \"\u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03B1\", verb: \"\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9\" },\n map: { unit: \"\u03BA\u03B1\u03C4\u03B1\u03C7\u03C9\u03C1\u03AE\u03C3\u03B5\u03B9\u03C2\", verb: \"\u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2\",\n email: \"\u03B4\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 email\",\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 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03BA\u03B1\u03B9 \u03CE\u03C1\u03B1\",\n date: \"ISO \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1\",\n time: \"ISO \u03CE\u03C1\u03B1\",\n duration: \"ISO \u03B4\u03B9\u03AC\u03C1\u03BA\u03B5\u03B9\u03B1\",\n ipv4: \"\u03B4\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 IPv4\",\n ipv6: \"\u03B4\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 IPv6\",\n mac: \"\u03B4\u03B9\u03B5\u03CD\u03B8\u03C5\u03BD\u03C3\u03B7 MAC\",\n cidrv4: \"\u03B5\u03CD\u03C1\u03BF\u03C2 IPv4\",\n cidrv6: \"\u03B5\u03CD\u03C1\u03BF\u03C2 IPv6\",\n base64: \"\u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03B7 \u03C3\u03B5 base64\",\n base64url: \"\u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03B7 \u03C3\u03B5 base64url\",\n json_string: \"\u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC JSON\",\n e164: \"\u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (typeof issue.expected === \"string\" && /^[A-Z]/.test(issue.expected)) {\n return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD instanceof ${issue.expected}, \u03BB\u03AE\u03C6\u03B8\u03B7\u03BA\u03B5 ${received}`;\n }\n return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${expected}, \u03BB\u03AE\u03C6\u03B8\u03B7\u03BA\u03B5 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD \u03AD\u03BD\u03B1 \u03B1\u03C0\u03CC ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u03A0\u03BF\u03BB\u03CD \u03BC\u03B5\u03B3\u03AC\u03BB\u03BF: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${issue.origin ?? \"\u03C4\u03B9\u03BC\u03AE\"} \u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03B1\"}`;\n return `\u03A0\u03BF\u03BB\u03CD \u03BC\u03B5\u03B3\u03AC\u03BB\u03BF: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${issue.origin ?? \"\u03C4\u03B9\u03BC\u03AE\"} \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u03A0\u03BF\u03BB\u03CD \u03BC\u03B9\u03BA\u03C1\u03CC: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${issue.origin} \u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u03A0\u03BF\u03BB\u03CD \u03BC\u03B9\u03BA\u03C1\u03CC: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${issue.origin} \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03BE\u03B5\u03BA\u03B9\u03BD\u03AC \u03BC\u03B5 \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C4\u03B5\u03BB\u03B5\u03B9\u03CE\u03BD\u03B5\u03B9 \u03BC\u03B5 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C4\u03B1\u03B9\u03C1\u03B9\u03AC\u03B6\u03B5\u03B9 \u03BC\u03B5 \u03C4\u03BF \u03BC\u03BF\u03C4\u03AF\u03B2\u03BF ${_issue.pattern}`;\n return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF\u03C2 \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2: \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C0\u03BF\u03BB\u03BB\u03B1\u03C0\u03BB\u03AC\u03C3\u03B9\u03BF \u03C4\u03BF\u03C5 ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u0386\u03B3\u03BD\u03C9\u03C3\u03C4${issue.keys.length > 1 ? \"\u03B1\" : \"\u03BF\"} \u03BA\u03BB\u03B5\u03B9\u03B4${issue.keys.length > 1 ? \"\u03B9\u03AC\" : \"\u03AF\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF \u03BA\u03BB\u03B5\u03B9\u03B4\u03AF \u03C3\u03C4\u03BF ${issue.origin}`;\n case \"invalid_union\":\n return \"\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2\";\n case \"invalid_element\":\n return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03C4\u03B9\u03BC\u03AE \u03C3\u03C4\u03BF ${issue.origin}`;\n default:\n return `\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\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 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 return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\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.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.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 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", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"karaktrojn\", verb: \"havi\" },\n file: { unit: \"bajtojn\", verb: \"havi\" },\n array: { unit: \"elementojn\", verb: \"havi\" },\n set: { unit: \"elementojn\", verb: \"havi\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"enigo\",\n email: \"retadreso\",\n url: \"URL\",\n emoji: \"emo\u011Dio\",\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-datotempo\",\n date: \"ISO-dato\",\n time: \"ISO-tempo\",\n duration: \"ISO-da\u016Dro\",\n ipv4: \"IPv4-adreso\",\n ipv6: \"IPv6-adreso\",\n cidrv4: \"IPv4-rango\",\n cidrv6: \"IPv6-rango\",\n base64: \"64-ume kodita karaktraro\",\n base64url: \"URL-64-ume kodita karaktraro\",\n json_string: \"JSON-karaktraro\",\n e164: \"E.164-nombro\",\n jwt: \"JWT\",\n template_literal: \"enigo\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"nombro\",\n array: \"tabelo\",\n null: \"senvalora\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Nevalida enigo: atendi\u011Dis instanceof ${issue.expected}, ricevi\u011Dis ${received}`;\n }\n return `Nevalida enigo: atendi\u011Dis ${expected}, ricevi\u011Dis ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Nevalida enigo: atendi\u011Dis ${util.stringifyPrimitive(issue.values[0])}`;\n return `Nevalida opcio: atendi\u011Dis unu el ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Tro granda: atendi\u011Dis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementojn\"}`;\n return `Tro granda: atendi\u011Dis ke ${issue.origin ?? \"valoro\"} havu ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Tro malgranda: atendi\u011Dis ke ${issue.origin} havu ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Tro malgranda: atendi\u011Dis ke ${issue.origin} estu ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Nevalida karaktraro: devas komenci\u011Di per \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Nevalida karaktraro: devas fini\u011Di per \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Nevalida karaktraro: devas inkluzivi \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Nevalida karaktraro: devas kongrui kun la modelo ${_issue.pattern}`;\n return `Nevalida ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Nevalida nombro: devas esti oblo de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Nekonata${issue.keys.length > 1 ? \"j\" : \"\"} \u015Dlosilo${issue.keys.length > 1 ? \"j\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Nevalida \u015Dlosilo en ${issue.origin}`;\n case \"invalid_union\":\n return \"Nevalida enigo\";\n case \"invalid_element\":\n return `Nevalida valoro en ${issue.origin}`;\n default:\n return `Nevalida enigo`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caracteres\", verb: \"tener\" },\n file: { unit: \"bytes\", verb: \"tener\" },\n array: { unit: \"elementos\", verb: \"tener\" },\n set: { unit: \"elementos\", verb: \"tener\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"entrada\",\n email: \"direcci\u00F3n de correo electr\u00F3nico\",\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: \"fecha y hora ISO\",\n date: \"fecha ISO\",\n time: \"hora ISO\",\n duration: \"duraci\u00F3n ISO\",\n ipv4: \"direcci\u00F3n IPv4\",\n ipv6: \"direcci\u00F3n IPv6\",\n cidrv4: \"rango IPv4\",\n cidrv6: \"rango IPv6\",\n base64: \"cadena codificada en base64\",\n base64url: \"URL codificada en base64\",\n json_string: \"cadena JSON\",\n e164: \"n\u00FAmero E.164\",\n jwt: \"JWT\",\n template_literal: \"entrada\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n string: \"texto\",\n number: \"n\u00FAmero\",\n boolean: \"booleano\",\n array: \"arreglo\",\n object: \"objeto\",\n set: \"conjunto\",\n file: \"archivo\",\n date: \"fecha\",\n bigint: \"n\u00FAmero grande\",\n symbol: \"s\u00EDmbolo\",\n undefined: \"indefinido\",\n null: \"nulo\",\n function: \"funci\u00F3n\",\n map: \"mapa\",\n record: \"registro\",\n tuple: \"tupla\",\n enum: \"enumeraci\u00F3n\",\n union: \"uni\u00F3n\",\n literal: \"literal\",\n promise: \"promesa\",\n void: \"vac\u00EDo\",\n never: \"nunca\",\n unknown: \"desconocido\",\n any: \"cualquiera\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Entrada inv\u00E1lida: se esperaba instanceof ${issue.expected}, recibido ${received}`;\n }\n return `Entrada inv\u00E1lida: se esperaba ${expected}, recibido ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Entrada inv\u00E1lida: se esperaba ${util.stringifyPrimitive(issue.values[0])}`;\n return `Opci\u00F3n inv\u00E1lida: se esperaba una de ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n if (sizing)\n return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} tuviera ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n return `Demasiado grande: se esperaba que ${origin ?? \"valor\"} fuera ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n if (sizing) {\n return `Demasiado peque\u00F1o: se esperaba que ${origin} tuviera ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Demasiado peque\u00F1o: se esperaba que ${origin} fuera ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Cadena inv\u00E1lida: debe comenzar con \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Cadena inv\u00E1lida: debe terminar en \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Cadena inv\u00E1lida: debe incluir \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Cadena inv\u00E1lida: debe coincidir con el patr\u00F3n ${_issue.pattern}`;\n return `Inv\u00E1lido ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `N\u00FAmero inv\u00E1lido: debe ser m\u00FAltiplo de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Llave${issue.keys.length > 1 ? \"s\" : \"\"} desconocida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Llave inv\u00E1lida en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n case \"invalid_union\":\n return \"Entrada inv\u00E1lida\";\n case \"invalid_element\":\n return `Valor inv\u00E1lido en ${TypeDictionary[issue.origin] ?? issue.origin}`;\n default:\n return `Entrada inv\u00E1lida`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n file: { unit: \"\u0628\u0627\u06CC\u062A\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n array: { unit: \"\u0622\u06CC\u062A\u0645\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n set: { unit: \"\u0622\u06CC\u062A\u0645\", verb: \"\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0648\u0631\u0648\u062F\u06CC\",\n email: \"\u0622\u062F\u0631\u0633 \u0627\u06CC\u0645\u06CC\u0644\",\n url: \"URL\",\n emoji: \"\u0627\u06CC\u0645\u0648\u062C\u06CC\",\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: \"\u062A\u0627\u0631\u06CC\u062E \u0648 \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n date: \"\u062A\u0627\u0631\u06CC\u062E \u0627\u06CC\u0632\u0648\",\n time: \"\u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n duration: \"\u0645\u062F\u062A \u0632\u0645\u0627\u0646 \u0627\u06CC\u0632\u0648\",\n ipv4: \"IPv4 \u0622\u062F\u0631\u0633\",\n ipv6: \"IPv6 \u0622\u062F\u0631\u0633\",\n cidrv4: \"IPv4 \u062F\u0627\u0645\u0646\u0647\",\n cidrv6: \"IPv6 \u062F\u0627\u0645\u0646\u0647\",\n base64: \"base64-encoded \u0631\u0634\u062A\u0647\",\n base64url: \"base64url-encoded \u0631\u0634\u062A\u0647\",\n json_string: \"JSON \u0631\u0634\u062A\u0647\",\n e164: \"E.164 \u0639\u062F\u062F\",\n jwt: \"JWT\",\n template_literal: \"\u0648\u0631\u0648\u062F\u06CC\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0639\u062F\u062F\",\n array: \"\u0622\u0631\u0627\u06CC\u0647\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A instanceof ${issue.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;\n }\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${received} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1) {\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${util.stringifyPrimitive(issue.values[0])} \u0645\u06CC\u200C\u0628\u0648\u062F`;\n }\n return `\u06AF\u0632\u06CC\u0646\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A \u06CC\u06A9\u06CC \u0627\u0632 ${util.joinValues(issue.values, \"|\")} \u0645\u06CC\u200C\u0628\u0648\u062F`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue.origin ?? \"\u0645\u0642\u062F\u0627\u0631\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\"} \u0628\u0627\u0634\u062F`;\n }\n return `\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${issue.origin ?? \"\u0645\u0642\u062F\u0627\u0631\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} \u0628\u0627\u0634\u062F`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} ${sizing.unit} \u0628\u0627\u0634\u062F`;\n }\n return `\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} \u0628\u0627\u0634\u062F`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \"${_issue.prefix}\" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`;\n }\n if (_issue.format === \"ends_with\") {\n return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \"${_issue.suffix}\" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`;\n }\n if (_issue.format === \"includes\") {\n return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 \"${_issue.includes}\" \u0628\u0627\u0634\u062F`;\n }\n if (_issue.format === \"regex\") {\n return `\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 \u0627\u0644\u06AF\u0648\u06CC ${_issue.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`;\n }\n return `${FormatDictionary[_issue.format] ?? issue.format} \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n }\n case \"not_multiple_of\":\n return `\u0639\u062F\u062F \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0645\u0636\u0631\u0628 ${issue.divisor} \u0628\u0627\u0634\u062F`;\n case \"unrecognized_keys\":\n return `\u06A9\u0644\u06CC\u062F${issue.keys.length > 1 ? \"\u0647\u0627\u06CC\" : \"\"} \u0646\u0627\u0634\u0646\u0627\u0633: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${issue.origin}`;\n case \"invalid_union\":\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n case \"invalid_element\":\n return `\u0645\u0642\u062F\u0627\u0631 \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u062F\u0631 ${issue.origin}`;\n default:\n return `\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"merkki\u00E4\", subject: \"merkkijonon\" },\n file: { unit: \"tavua\", subject: \"tiedoston\" },\n array: { unit: \"alkiota\", subject: \"listan\" },\n set: { unit: \"alkiota\", subject: \"joukon\" },\n number: { unit: \"\", subject: \"luvun\" },\n bigint: { unit: \"\", subject: \"suuren kokonaisluvun\" },\n int: { unit: \"\", subject: \"kokonaisluvun\" },\n date: { unit: \"\", subject: \"p\u00E4iv\u00E4m\u00E4\u00E4r\u00E4n\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"s\u00E4\u00E4nn\u00F6llinen lauseke\",\n email: \"s\u00E4hk\u00F6postiosoite\",\n url: \"URL-osoite\",\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-aikaleima\",\n date: \"ISO-p\u00E4iv\u00E4m\u00E4\u00E4r\u00E4\",\n time: \"ISO-aika\",\n duration: \"ISO-kesto\",\n ipv4: \"IPv4-osoite\",\n ipv6: \"IPv6-osoite\",\n cidrv4: \"IPv4-alue\",\n cidrv6: \"IPv6-alue\",\n base64: \"base64-koodattu merkkijono\",\n base64url: \"base64url-koodattu merkkijono\",\n json_string: \"JSON-merkkijono\",\n e164: \"E.164-luku\",\n jwt: \"JWT\",\n template_literal: \"templaattimerkkijono\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Virheellinen tyyppi: odotettiin instanceof ${issue.expected}, oli ${received}`;\n }\n return `Virheellinen tyyppi: odotettiin ${expected}, oli ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Virheellinen sy\u00F6te: t\u00E4ytyy olla ${util.stringifyPrimitive(issue.values[0])}`;\n return `Virheellinen valinta: t\u00E4ytyy olla yksi seuraavista: ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Liian suuri: ${sizing.subject} t\u00E4ytyy olla ${adj}${issue.maximum.toString()} ${sizing.unit}`.trim();\n }\n return `Liian suuri: arvon t\u00E4ytyy olla ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Liian pieni: ${sizing.subject} t\u00E4ytyy olla ${adj}${issue.minimum.toString()} ${sizing.unit}`.trim();\n }\n return `Liian pieni: arvon t\u00E4ytyy olla ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Virheellinen sy\u00F6te: t\u00E4ytyy alkaa \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Virheellinen sy\u00F6te: t\u00E4ytyy loppua \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Virheellinen sy\u00F6te: t\u00E4ytyy sis\u00E4lt\u00E4\u00E4 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\") {\n return `Virheellinen sy\u00F6te: t\u00E4ytyy vastata s\u00E4\u00E4nn\u00F6llist\u00E4 lauseketta ${_issue.pattern}`;\n }\n return `Virheellinen ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Virheellinen luku: t\u00E4ytyy olla luvun ${issue.divisor} monikerta`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Tuntemattomat avaimet\" : \"Tuntematon avain\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return \"Virheellinen avain tietueessa\";\n case \"invalid_union\":\n return \"Virheellinen unioni\";\n case \"invalid_element\":\n return \"Virheellinen arvo joukossa\";\n default:\n return `Virheellinen sy\u00F6te`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caract\u00E8res\", verb: \"avoir\" },\n file: { unit: \"octets\", verb: \"avoir\" },\n array: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n set: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"entr\u00E9e\",\n email: \"adresse e-mail\",\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: \"date et heure ISO\",\n date: \"date ISO\",\n time: \"heure ISO\",\n duration: \"dur\u00E9e ISO\",\n ipv4: \"adresse IPv4\",\n ipv6: \"adresse IPv6\",\n cidrv4: \"plage IPv4\",\n cidrv6: \"plage IPv6\",\n base64: \"cha\u00EEne encod\u00E9e en base64\",\n base64url: \"cha\u00EEne encod\u00E9e en base64url\",\n json_string: \"cha\u00EEne JSON\",\n e164: \"num\u00E9ro E.164\",\n jwt: \"JWT\",\n template_literal: \"entr\u00E9e\",\n };\n const TypeDictionary = {\n string: \"cha\u00EEne\",\n number: \"nombre\",\n int: \"entier\",\n boolean: \"bool\u00E9en\",\n bigint: \"grand entier\",\n symbol: \"symbole\",\n undefined: \"ind\u00E9fini\",\n null: \"null\",\n never: \"jamais\",\n void: \"vide\",\n date: \"date\",\n array: \"tableau\",\n object: \"objet\",\n tuple: \"tuple\",\n record: \"enregistrement\",\n map: \"carte\",\n set: \"ensemble\",\n file: \"fichier\",\n nonoptional: \"non-optionnel\",\n nan: \"NaN\",\n function: \"fonction\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Entr\u00E9e invalide : instanceof ${issue.expected} attendu, ${received} re\u00E7u`;\n }\n return `Entr\u00E9e invalide : ${expected} attendu, ${received} re\u00E7u`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Entr\u00E9e invalide : ${util.stringifyPrimitive(issue.values[0])} attendu`;\n return `Option invalide : une valeur parmi ${util.joinValues(issue.values, \"|\")} attendue`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Trop grand : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u00E9l\u00E9ment(s)\"}`;\n return `Trop grand : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit \u00EAtre ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Trop petit : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n return `Trop petit : ${TypeDictionary[issue.origin] ?? \"valeur\"} doit \u00EAtre ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Cha\u00EEne invalide : doit commencer par \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Cha\u00EEne invalide : doit se terminer par \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Cha\u00EEne invalide : doit inclure \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Cha\u00EEne invalide : doit correspondre au mod\u00E8le ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n }\n case \"not_multiple_of\":\n return `Nombre invalide : doit \u00EAtre un multiple de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Cl\u00E9${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Cl\u00E9 invalide dans ${issue.origin}`;\n case \"invalid_union\":\n return \"Entr\u00E9e invalide\";\n case \"invalid_element\":\n return `Valeur invalide dans ${issue.origin}`;\n default:\n return `Entr\u00E9e invalide`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caract\u00E8res\", verb: \"avoir\" },\n file: { unit: \"octets\", verb: \"avoir\" },\n array: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n set: { unit: \"\u00E9l\u00E9ments\", verb: \"avoir\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"entr\u00E9e\",\n email: \"adresse courriel\",\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: \"date-heure ISO\",\n date: \"date ISO\",\n time: \"heure ISO\",\n duration: \"dur\u00E9e ISO\",\n ipv4: \"adresse IPv4\",\n ipv6: \"adresse IPv6\",\n cidrv4: \"plage IPv4\",\n cidrv6: \"plage IPv6\",\n base64: \"cha\u00EEne encod\u00E9e en base64\",\n base64url: \"cha\u00EEne encod\u00E9e en base64url\",\n json_string: \"cha\u00EEne JSON\",\n e164: \"num\u00E9ro E.164\",\n jwt: \"JWT\",\n template_literal: \"entr\u00E9e\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Entr\u00E9e invalide : attendu instanceof ${issue.expected}, re\u00E7u ${received}`;\n }\n return `Entr\u00E9e invalide : attendu ${expected}, re\u00E7u ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Entr\u00E9e invalide : attendu ${util.stringifyPrimitive(issue.values[0])}`;\n return `Option invalide : attendu l'une des valeurs suivantes ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"\u2264\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} ait ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n return `Trop grand : attendu que ${issue.origin ?? \"la valeur\"} soit ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"\u2265\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Trop petit : attendu que ${issue.origin} ait ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Trop petit : attendu que ${issue.origin} soit ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Cha\u00EEne invalide : doit commencer par \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Cha\u00EEne invalide : doit se terminer par \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Cha\u00EEne invalide : doit inclure \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Cha\u00EEne invalide : doit correspondre au motif ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} invalide`;\n }\n case \"not_multiple_of\":\n return `Nombre invalide : doit \u00EAtre un multiple de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Cl\u00E9${issue.keys.length > 1 ? \"s\" : \"\"} non reconnue${issue.keys.length > 1 ? \"s\" : \"\"} : ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Cl\u00E9 invalide dans ${issue.origin}`;\n case \"invalid_union\":\n return \"Entr\u00E9e invalide\";\n case \"invalid_element\":\n return `Valeur invalide dans ${issue.origin}`;\n default:\n return `Entr\u00E9e invalide`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n // Hebrew labels + grammatical gender\n const TypeNames = {\n string: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA\", gender: \"f\" },\n number: { label: \"\u05DE\u05E1\u05E4\u05E8\", gender: \"m\" },\n boolean: { label: \"\u05E2\u05E8\u05DA \u05D1\u05D5\u05DC\u05D9\u05D0\u05E0\u05D9\", gender: \"m\" },\n bigint: { label: \"BigInt\", gender: \"m\" },\n date: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA\", gender: \"m\" },\n array: { label: \"\u05DE\u05E2\u05E8\u05DA\", gender: \"m\" },\n object: { label: \"\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8\", gender: \"m\" },\n null: { label: \"\u05E2\u05E8\u05DA \u05E8\u05D9\u05E7 (null)\", gender: \"m\" },\n undefined: { label: \"\u05E2\u05E8\u05DA \u05DC\u05D0 \u05DE\u05D5\u05D2\u05D3\u05E8 (undefined)\", gender: \"m\" },\n symbol: { label: \"\u05E1\u05D9\u05DE\u05D1\u05D5\u05DC (Symbol)\", gender: \"m\" },\n function: { label: \"\u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D4\", gender: \"f\" },\n map: { label: \"\u05DE\u05E4\u05D4 (Map)\", gender: \"f\" },\n set: { label: \"\u05E7\u05D1\u05D5\u05E6\u05D4 (Set)\", gender: \"f\" },\n file: { label: \"\u05E7\u05D5\u05D1\u05E5\", gender: \"m\" },\n promise: { label: \"Promise\", gender: \"m\" },\n NaN: { label: \"NaN\", gender: \"m\" },\n unknown: { label: \"\u05E2\u05E8\u05DA \u05DC\u05D0 \u05D9\u05D3\u05D5\u05E2\", gender: \"m\" },\n value: { label: \"\u05E2\u05E8\u05DA\", gender: \"m\" },\n };\n // Sizing units for size-related messages + localized origin labels\n const Sizable = {\n string: { unit: \"\u05EA\u05D5\u05D5\u05D9\u05DD\", shortLabel: \"\u05E7\u05E6\u05E8\", longLabel: \"\u05D0\u05E8\u05D5\u05DA\" },\n file: { unit: \"\u05D1\u05D9\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n array: { unit: \"\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n set: { unit: \"\u05E4\u05E8\u05D9\u05D8\u05D9\u05DD\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" },\n number: { unit: \"\", shortLabel: \"\u05E7\u05D8\u05DF\", longLabel: \"\u05D2\u05D3\u05D5\u05DC\" }, // no unit\n };\n // Helpers \u2014 labels, articles, and verbs\n const typeEntry = (t) => (t ? TypeNames[t] : undefined);\n const typeLabel = (t) => {\n const e = typeEntry(t);\n if (e)\n return e.label;\n // fallback: show raw string if unknown\n return t ?? TypeNames.unknown.label;\n };\n const withDefinite = (t) => `\u05D4${typeLabel(t)}`;\n const verbFor = (t) => {\n const e = typeEntry(t);\n const gender = e?.gender ?? \"m\";\n return gender === \"f\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05D9\u05D5\u05EA\" : \"\u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA\";\n };\n const getSizing = (origin) => {\n if (!origin)\n return null;\n return Sizable[origin] ?? null;\n };\n const FormatDictionary = {\n regex: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n email: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA \u05D0\u05D9\u05DE\u05D9\u05D9\u05DC\", gender: \"f\" },\n url: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA \u05E8\u05E9\u05EA\", gender: \"f\" },\n emoji: { label: \"\u05D0\u05D9\u05DE\u05D5\u05D2'\u05D9\", gender: \"m\" },\n uuid: { label: \"UUID\", gender: \"m\" },\n nanoid: { label: \"nanoid\", gender: \"m\" },\n guid: { label: \"GUID\", gender: \"m\" },\n cuid: { label: \"cuid\", gender: \"m\" },\n cuid2: { label: \"cuid2\", gender: \"m\" },\n ulid: { label: \"ULID\", gender: \"m\" },\n xid: { label: \"XID\", gender: \"m\" },\n ksuid: { label: \"KSUID\", gender: \"m\" },\n datetime: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA \u05D5\u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n date: { label: \"\u05EA\u05D0\u05E8\u05D9\u05DA ISO\", gender: \"m\" },\n time: { label: \"\u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n duration: { label: \"\u05DE\u05E9\u05DA \u05D6\u05DE\u05DF ISO\", gender: \"m\" },\n ipv4: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA IPv4\", gender: \"f\" },\n ipv6: { label: \"\u05DB\u05EA\u05D5\u05D1\u05EA IPv6\", gender: \"f\" },\n cidrv4: { label: \"\u05D8\u05D5\u05D5\u05D7 IPv4\", gender: \"m\" },\n cidrv6: { label: \"\u05D8\u05D5\u05D5\u05D7 IPv6\", gender: \"m\" },\n base64: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64\", gender: \"f\" },\n base64url: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D1\u05D1\u05E1\u05D9\u05E1 64 \u05DC\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05E8\u05E9\u05EA\", gender: \"f\" },\n json_string: { label: \"\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA JSON\", gender: \"f\" },\n e164: { label: \"\u05DE\u05E1\u05E4\u05E8 E.164\", gender: \"m\" },\n jwt: { label: \"JWT\", gender: \"m\" },\n ends_with: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n includes: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n lowercase: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n starts_with: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n uppercase: { label: \"\u05E7\u05DC\u05D8\", gender: \"m\" },\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n // Expected type: show without definite article for clearer Hebrew\n const expectedKey = issue.expected;\n const expected = TypeDictionary[expectedKey ?? \"\"] ?? typeLabel(expectedKey);\n // Received: show localized label if known, otherwise constructor/raw\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? TypeNames[receivedType]?.label ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA instanceof ${issue.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`;\n }\n return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${received}`;\n }\n case \"invalid_value\": {\n if (issue.values.length === 1) {\n return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05E2\u05E8\u05DA \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA ${util.stringifyPrimitive(issue.values[0])}`;\n }\n // Join values with proper Hebrew formatting\n const stringified = issue.values.map((v) => util.stringifyPrimitive(v));\n if (issue.values.length === 2) {\n return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${stringified[0]} \u05D0\u05D5 ${stringified[1]}`;\n }\n // For 3+ values: \"a\", \"b\" \u05D0\u05D5 \"c\"\n const lastValue = stringified[stringified.length - 1];\n const restValues = stringified.slice(0, -1).join(\", \");\n return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D4\u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA \u05D4\u05DE\u05EA\u05D0\u05D9\u05DE\u05D5\u05EA \u05D4\u05DF ${restValues} \u05D0\u05D5 ${lastValue}`;\n }\n case \"too_big\": {\n const sizing = getSizing(issue.origin);\n const subject = withDefinite(issue.origin ?? \"value\");\n if (issue.origin === \"string\") {\n // Special handling for strings - more natural Hebrew\n return `${sizing?.longLabel ?? \"\u05D0\u05E8\u05D5\u05DA\"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue.maximum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"\u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA\" : \"\u05DC\u05DB\u05DC \u05D4\u05D9\u05D5\u05EA\u05E8\"}`.trim();\n }\n if (issue.origin === \"number\") {\n // Natural Hebrew for numbers\n const comparison = issue.inclusive ? `\u05E7\u05D8\u05DF \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue.maximum}` : `\u05E7\u05D8\u05DF \u05DE-${issue.maximum}`;\n return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;\n }\n if (issue.origin === \"array\" || issue.origin === \"set\") {\n // Natural Hebrew for arrays and sets\n const verb = issue.origin === \"set\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4\" : \"\u05E6\u05E8\u05D9\u05DA\";\n const comparison = issue.inclusive\n ? `${issue.maximum} ${sizing?.unit ?? \"\"} \u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA`\n : `\u05E4\u05D7\u05D5\u05EA \u05DE-${issue.maximum} ${sizing?.unit ?? \"\"}`;\n return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();\n }\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const be = verbFor(issue.origin ?? \"value\");\n if (sizing?.unit) {\n return `${sizing.longLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n }\n return `${sizing?.longLabel ?? \"\u05D2\u05D3\u05D5\u05DC\"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const sizing = getSizing(issue.origin);\n const subject = withDefinite(issue.origin ?? \"value\");\n if (issue.origin === \"string\") {\n // Special handling for strings - more natural Hebrew\n return `${sizing?.shortLabel ?? \"\u05E7\u05E6\u05E8\"} \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue.minimum.toString()} ${sizing?.unit ?? \"\"} ${issue.inclusive ? \"\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8\" : \"\u05DC\u05E4\u05D7\u05D5\u05EA\"}`.trim();\n }\n if (issue.origin === \"number\") {\n // Natural Hebrew for numbers\n const comparison = issue.inclusive ? `\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue.minimum}` : `\u05D2\u05D3\u05D5\u05DC \u05DE-${issue.minimum}`;\n return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;\n }\n if (issue.origin === \"array\" || issue.origin === \"set\") {\n // Natural Hebrew for arrays and sets\n const verb = issue.origin === \"set\" ? \"\u05E6\u05E8\u05D9\u05DB\u05D4\" : \"\u05E6\u05E8\u05D9\u05DA\";\n // Special case for singular (minimum === 1)\n if (issue.minimum === 1 && issue.inclusive) {\n const singularPhrase = issue.origin === \"set\" ? \"\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3\" : \"\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3\";\n return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${singularPhrase}`;\n }\n const comparison = issue.inclusive\n ? `${issue.minimum} ${sizing?.unit ?? \"\"} \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8`\n : `\u05D9\u05D5\u05EA\u05E8 \u05DE-${issue.minimum} ${sizing?.unit ?? \"\"}`;\n return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();\n }\n const adj = issue.inclusive ? \">=\" : \">\";\n const be = verbFor(issue.origin ?? \"value\");\n if (sizing?.unit) {\n return `${sizing.shortLabel} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `${sizing?.shortLabel ?? \"\u05E7\u05D8\u05DF\"} \u05DE\u05D3\u05D9: ${subject} ${be} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n // These apply to strings \u2014 use feminine grammar + \u05D4\u05F3 \u05D4\u05D9\u05D3\u05D9\u05E2\u05D4\n if (_issue.format === \"starts_with\")\n return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D0\u05D9\u05DD \u05DC\u05EA\u05D1\u05E0\u05D9\u05EA ${_issue.pattern}`;\n // Handle gender agreement for formats\n const nounEntry = FormatDictionary[_issue.format];\n const noun = nounEntry?.label ?? _issue.format;\n const gender = nounEntry?.gender ?? \"m\";\n const adjective = gender === \"f\" ? \"\u05EA\u05E7\u05D9\u05E0\u05D4\" : \"\u05EA\u05E7\u05D9\u05DF\";\n return `${noun} \u05DC\u05D0 ${adjective}`;\n }\n case \"not_multiple_of\":\n return `\u05DE\u05E1\u05E4\u05E8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05D7\u05D9\u05D9\u05D1 \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05DB\u05E4\u05DC\u05D4 \u05E9\u05DC ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u05DE\u05E4\u05EA\u05D7${issue.keys.length > 1 ? \"\u05D5\u05EA\" : \"\"} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${issue.keys.length > 1 ? \"\u05D9\u05DD\" : \"\u05D4\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\": {\n return `\u05E9\u05D3\u05D4 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1\u05D0\u05D5\u05D1\u05D9\u05D9\u05E7\u05D8`;\n }\n case \"invalid_union\":\n return \"\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF\";\n case \"invalid_element\": {\n const place = withDefinite(issue.origin ?? \"array\");\n return `\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${place}`;\n }\n default:\n return `\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"znakova\", verb: \"imati\" },\n file: { unit: \"bajtova\", verb: \"imati\" },\n array: { unit: \"stavki\", verb: \"imati\" },\n set: { unit: \"stavki\", verb: \"imati\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"unos\",\n email: \"email adresa\",\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 datum i vrijeme\",\n date: \"ISO datum\",\n time: \"ISO vrijeme\",\n duration: \"ISO trajanje\",\n ipv4: \"IPv4 adresa\",\n ipv6: \"IPv6 adresa\",\n cidrv4: \"IPv4 raspon\",\n cidrv6: \"IPv6 raspon\",\n base64: \"base64 kodirani tekst\",\n base64url: \"base64url kodirani tekst\",\n json_string: \"JSON tekst\",\n e164: \"E.164 broj\",\n jwt: \"JWT\",\n template_literal: \"unos\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n string: \"tekst\",\n number: \"broj\",\n boolean: \"boolean\",\n array: \"niz\",\n object: \"objekt\",\n set: \"skup\",\n file: \"datoteka\",\n date: \"datum\",\n bigint: \"bigint\",\n symbol: \"simbol\",\n undefined: \"undefined\",\n null: \"null\",\n function: \"funkcija\",\n map: \"mapa\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Neispravan unos: o\u010Dekuje se instanceof ${issue.expected}, a primljeno je ${received}`;\n }\n return `Neispravan unos: o\u010Dekuje se ${expected}, a primljeno je ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Neispravna vrijednost: o\u010Dekivano ${util.stringifyPrimitive(issue.values[0])}`;\n return `Neispravna opcija: o\u010Dekivano jedno od ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n if (sizing)\n return `Preveliko: o\u010Dekivano da ${origin ?? \"vrijednost\"} ima ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemenata\"}`;\n return `Preveliko: o\u010Dekivano da ${origin ?? \"vrijednost\"} bude ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n if (sizing) {\n return `Premalo: o\u010Dekivano da ${origin} ima ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Premalo: o\u010Dekivano da ${origin} bude ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Neispravan tekst: mora zapo\u010Dinjati s \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Neispravan tekst: mora zavr\u0161avati s \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Neispravan tekst: mora sadr\u017Eavati \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Neispravan tekst: mora odgovarati uzorku ${_issue.pattern}`;\n return `Neispravna ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Neispravan broj: mora biti vi\u0161ekratnik od ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Neprepoznat${issue.keys.length > 1 ? \"i klju\u010Devi\" : \" klju\u010D\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Neispravan klju\u010D u ${TypeDictionary[issue.origin] ?? issue.origin}`;\n case \"invalid_union\":\n return \"Neispravan unos\";\n case \"invalid_element\":\n return `Neispravna vrijednost u ${TypeDictionary[issue.origin] ?? issue.origin}`;\n default:\n return `Neispravan unos`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"karakter\", verb: \"legyen\" },\n file: { unit: \"byte\", verb: \"legyen\" },\n array: { unit: \"elem\", verb: \"legyen\" },\n set: { unit: \"elem\", verb: \"legyen\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"bemenet\",\n email: \"email c\u00EDm\",\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 id\u0151b\u00E9lyeg\",\n date: \"ISO d\u00E1tum\",\n time: \"ISO id\u0151\",\n duration: \"ISO id\u0151intervallum\",\n ipv4: \"IPv4 c\u00EDm\",\n ipv6: \"IPv6 c\u00EDm\",\n cidrv4: \"IPv4 tartom\u00E1ny\",\n cidrv6: \"IPv6 tartom\u00E1ny\",\n base64: \"base64-k\u00F3dolt string\",\n base64url: \"base64url-k\u00F3dolt string\",\n json_string: \"JSON string\",\n e164: \"E.164 sz\u00E1m\",\n jwt: \"JWT\",\n template_literal: \"bemenet\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"sz\u00E1m\",\n array: \"t\u00F6mb\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k instanceof ${issue.expected}, a kapott \u00E9rt\u00E9k ${received}`;\n }\n return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k ${expected}, a kapott \u00E9rt\u00E9k ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u00C9rv\u00E9nytelen bemenet: a v\u00E1rt \u00E9rt\u00E9k ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u00C9rv\u00E9nytelen opci\u00F3: valamelyik \u00E9rt\u00E9k v\u00E1rt ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `T\u00FAl nagy: ${issue.origin ?? \"\u00E9rt\u00E9k\"} m\u00E9rete t\u00FAl nagy ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elem\"}`;\n return `T\u00FAl nagy: a bemeneti \u00E9rt\u00E9k ${issue.origin ?? \"\u00E9rt\u00E9k\"} t\u00FAl nagy: ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `T\u00FAl kicsi: a bemeneti \u00E9rt\u00E9k ${issue.origin} m\u00E9rete t\u00FAl kicsi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `T\u00FAl kicsi: a bemeneti \u00E9rt\u00E9k ${issue.origin} t\u00FAl kicsi ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u00C9rv\u00E9nytelen string: \"${_issue.prefix}\" \u00E9rt\u00E9kkel kell kezd\u0151dnie`;\n if (_issue.format === \"ends_with\")\n return `\u00C9rv\u00E9nytelen string: \"${_issue.suffix}\" \u00E9rt\u00E9kkel kell v\u00E9gz\u0151dnie`;\n if (_issue.format === \"includes\")\n return `\u00C9rv\u00E9nytelen string: \"${_issue.includes}\" \u00E9rt\u00E9ket kell tartalmaznia`;\n if (_issue.format === \"regex\")\n return `\u00C9rv\u00E9nytelen string: ${_issue.pattern} mint\u00E1nak kell megfelelnie`;\n return `\u00C9rv\u00E9nytelen ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u00C9rv\u00E9nytelen sz\u00E1m: ${issue.divisor} t\u00F6bbsz\u00F6r\u00F6s\u00E9nek kell lennie`;\n case \"unrecognized_keys\":\n return `Ismeretlen kulcs${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u00C9rv\u00E9nytelen kulcs ${issue.origin}`;\n case \"invalid_union\":\n return \"\u00C9rv\u00E9nytelen bemenet\";\n case \"invalid_element\":\n return `\u00C9rv\u00E9nytelen \u00E9rt\u00E9k: ${issue.origin}`;\n default:\n return `\u00C9rv\u00E9nytelen bemenet`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nfunction getArmenianPlural(count, one, many) {\n return Math.abs(count) === 1 ? one : many;\n}\nfunction withDefiniteArticle(word) {\n if (!word)\n return \"\";\n const vowels = [\"\u0561\", \"\u0565\", \"\u0568\", \"\u056B\", \"\u0578\", \"\u0578\u0582\", \"\u0585\"];\n const lastChar = word[word.length - 1];\n return word + (vowels.includes(lastChar) ? \"\u0576\" : \"\u0568\");\n}\nconst error = () => {\n const Sizable = {\n string: {\n unit: {\n one: \"\u0576\u0577\u0561\u0576\",\n many: \"\u0576\u0577\u0561\u0576\u0576\u0565\u0580\",\n },\n verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n },\n file: {\n unit: {\n one: \"\u0562\u0561\u0575\u0569\",\n many: \"\u0562\u0561\u0575\u0569\u0565\u0580\",\n },\n verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n },\n array: {\n unit: {\n one: \"\u057F\u0561\u0580\u0580\",\n many: \"\u057F\u0561\u0580\u0580\u0565\u0580\",\n },\n verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n },\n set: {\n unit: {\n one: \"\u057F\u0561\u0580\u0580\",\n many: \"\u057F\u0561\u0580\u0580\u0565\u0580\",\n },\n verb: \"\u0578\u0582\u0576\u0565\u0576\u0561\u056C\",\n },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0574\u0578\u0582\u057F\u0584\",\n email: \"\u0567\u056C. \u0570\u0561\u057D\u0581\u0565\",\n url: \"URL\",\n emoji: \"\u0567\u0574\u0578\u057B\u056B\",\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 \u0561\u0574\u057D\u0561\u0569\u056B\u057E \u0587 \u056A\u0561\u0574\",\n date: \"ISO \u0561\u0574\u057D\u0561\u0569\u056B\u057E\",\n time: \"ISO \u056A\u0561\u0574\",\n duration: \"ISO \u057F\u0587\u0578\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576\",\n ipv4: \"IPv4 \u0570\u0561\u057D\u0581\u0565\",\n ipv6: \"IPv6 \u0570\u0561\u057D\u0581\u0565\",\n cidrv4: \"IPv4 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584\",\n cidrv6: \"IPv6 \u0574\u056B\u057B\u0561\u056F\u0561\u0575\u0584\",\n base64: \"base64 \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572\",\n base64url: \"base64url \u0571\u0587\u0561\u0579\u0561\u0583\u0578\u057E \u057F\u0578\u0572\",\n json_string: \"JSON \u057F\u0578\u0572\",\n e164: \"E.164 \u0570\u0561\u0574\u0561\u0580\",\n jwt: \"JWT\",\n template_literal: \"\u0574\u0578\u0582\u057F\u0584\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0569\u056B\u057E\",\n array: \"\u0566\u0561\u0576\u0563\u057E\u0561\u056E\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 instanceof ${issue.expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`;\n }\n return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 ${util.stringifyPrimitive(issue.values[1])}`;\n return `\u054D\u056D\u0561\u056C \u057F\u0561\u0580\u0562\u0565\u0580\u0561\u056F\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567\u0580 \u0570\u0565\u057F\u0587\u0575\u0561\u056C\u0576\u0565\u0580\u056B\u0581 \u0574\u0565\u056F\u0568\u055D ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const maxValue = Number(issue.maximum);\n const unit = getArmenianPlural(maxValue, sizing.unit.one, sizing.unit.many);\n return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin ?? \"\u0561\u0580\u056A\u0565\u0584\")} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue.maximum.toString()} ${unit}`;\n }\n return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0574\u0565\u056E \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin ?? \"\u0561\u0580\u056A\u0565\u0584\")} \u056C\u056B\u0576\u056B ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const minValue = Number(issue.minimum);\n const unit = getArmenianPlural(minValue, sizing.unit.one, sizing.unit.many);\n return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin)} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${adj}${issue.minimum.toString()} ${unit}`;\n }\n return `\u0549\u0561\u0583\u0561\u0566\u0561\u0576\u0581 \u0583\u0578\u0584\u0580 \u0561\u0580\u056A\u0565\u0584\u2024 \u057D\u057A\u0561\u057D\u057E\u0578\u0582\u0574 \u0567, \u0578\u0580 ${withDefiniteArticle(issue.origin)} \u056C\u056B\u0576\u056B ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057D\u056F\u057D\u057E\u056B \"${_issue.prefix}\"-\u0578\u057E`;\n if (_issue.format === \"ends_with\")\n return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0561\u057E\u0561\u0580\u057F\u057E\u056B \"${_issue.suffix}\"-\u0578\u057E`;\n if (_issue.format === \"includes\")\n return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057A\u0561\u0580\u0578\u0582\u0576\u0561\u056F\u056B \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0570\u0561\u0574\u0561\u057A\u0561\u057F\u0561\u057D\u056D\u0561\u0576\u056B ${_issue.pattern} \u0571\u0587\u0561\u0579\u0561\u0583\u056B\u0576`;\n return `\u054D\u056D\u0561\u056C ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u054D\u056D\u0561\u056C \u0569\u056B\u057E\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0562\u0561\u0566\u0574\u0561\u057A\u0561\u057F\u056B\u056F \u056C\u056B\u0576\u056B ${issue.divisor}-\u056B`;\n case \"unrecognized_keys\":\n return `\u0549\u0573\u0561\u0576\u0561\u0579\u057E\u0561\u056E \u0562\u0561\u0576\u0561\u056C\u056B${issue.keys.length > 1 ? \"\u0576\u0565\u0580\" : \"\"}. ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u054D\u056D\u0561\u056C \u0562\u0561\u0576\u0561\u056C\u056B ${withDefiniteArticle(issue.origin)}-\u0578\u0582\u0574`;\n case \"invalid_union\":\n return \"\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574\";\n case \"invalid_element\":\n return `\u054D\u056D\u0561\u056C \u0561\u0580\u056A\u0565\u0584 ${withDefiniteArticle(issue.origin)}-\u0578\u0582\u0574`;\n default:\n return `\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"karakter\", verb: \"memiliki\" },\n file: { unit: \"byte\", verb: \"memiliki\" },\n array: { unit: \"item\", verb: \"memiliki\" },\n set: { unit: \"item\", verb: \"memiliki\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"alamat email\",\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: \"tanggal dan waktu format ISO\",\n date: \"tanggal format ISO\",\n time: \"jam format ISO\",\n duration: \"durasi format ISO\",\n ipv4: \"alamat IPv4\",\n ipv6: \"alamat IPv6\",\n cidrv4: \"rentang alamat IPv4\",\n cidrv6: \"rentang alamat IPv6\",\n base64: \"string dengan enkode base64\",\n base64url: \"string dengan enkode base64url\",\n json_string: \"string JSON\",\n e164: \"angka E.164\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Input tidak valid: diharapkan instanceof ${issue.expected}, diterima ${received}`;\n }\n return `Input tidak valid: diharapkan ${expected}, diterima ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Input tidak valid: diharapkan ${util.stringifyPrimitive(issue.values[0])}`;\n return `Pilihan tidak valid: diharapkan salah satu dari ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} memiliki ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n return `Terlalu besar: diharapkan ${issue.origin ?? \"value\"} menjadi ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Terlalu kecil: diharapkan ${issue.origin} memiliki ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Terlalu kecil: diharapkan ${issue.origin} menjadi ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `String tidak valid: harus dimulai dengan \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `String tidak valid: harus berakhir dengan \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `String tidak valid: harus menyertakan \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `String tidak valid: harus sesuai pola ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} tidak valid`;\n }\n case \"not_multiple_of\":\n return `Angka tidak valid: harus kelipatan dari ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Kunci tidak dikenali ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Kunci tidak valid di ${issue.origin}`;\n case \"invalid_union\":\n return \"Input tidak valid\";\n case \"invalid_element\":\n return `Nilai tidak valid di ${issue.origin}`;\n default:\n return `Input tidak valid`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"stafi\", verb: \"a\u00F0 hafa\" },\n file: { unit: \"b\u00E6ti\", verb: \"a\u00F0 hafa\" },\n array: { unit: \"hluti\", verb: \"a\u00F0 hafa\" },\n set: { unit: \"hluti\", verb: \"a\u00F0 hafa\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"gildi\",\n email: \"netfang\",\n url: \"vefsl\u00F3\u00F0\",\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 dagsetning og t\u00EDmi\",\n date: \"ISO dagsetning\",\n time: \"ISO t\u00EDmi\",\n duration: \"ISO t\u00EDmalengd\",\n ipv4: \"IPv4 address\",\n ipv6: \"IPv6 address\",\n cidrv4: \"IPv4 range\",\n cidrv6: \"IPv6 range\",\n base64: \"base64-encoded strengur\",\n base64url: \"base64url-encoded strengur\",\n json_string: \"JSON strengur\",\n e164: \"E.164 t\u00F6lugildi\",\n jwt: \"JWT\",\n template_literal: \"gildi\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"n\u00FAmer\",\n array: \"fylki\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Rangt gildi: \u00DE\u00FA sl\u00F3st inn ${received} \u00FEar sem \u00E1 a\u00F0 vera instanceof ${issue.expected}`;\n }\n return `Rangt gildi: \u00DE\u00FA sl\u00F3st inn ${received} \u00FEar sem \u00E1 a\u00F0 vera ${expected}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Rangt gildi: gert r\u00E1\u00F0 fyrir ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u00D3gilt val: m\u00E1 vera eitt af eftirfarandi ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Of st\u00F3rt: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin ?? \"gildi\"} hafi ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"hluti\"}`;\n return `Of st\u00F3rt: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin ?? \"gildi\"} s\u00E9 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Of l\u00EDti\u00F0: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin} hafi ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Of l\u00EDti\u00F0: gert er r\u00E1\u00F0 fyrir a\u00F0 ${issue.origin} s\u00E9 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 byrja \u00E1 \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 enda \u00E1 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 innihalda \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u00D3gildur strengur: ver\u00F0ur a\u00F0 fylgja mynstri ${_issue.pattern}`;\n return `Rangt ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `R\u00F6ng tala: ver\u00F0ur a\u00F0 vera margfeldi af ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u00D3\u00FEekkt ${issue.keys.length > 1 ? \"ir lyklar\" : \"ur lykill\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Rangur lykill \u00ED ${issue.origin}`;\n case \"invalid_union\":\n return \"Rangt gildi\";\n case \"invalid_element\":\n return `Rangt gildi \u00ED ${issue.origin}`;\n default:\n return `Rangt gildi`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caratteri\", verb: \"avere\" },\n file: { unit: \"byte\", verb: \"avere\" },\n array: { unit: \"elementi\", verb: \"avere\" },\n set: { unit: \"elementi\", verb: \"avere\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"indirizzo email\",\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: \"data e ora ISO\",\n date: \"data ISO\",\n time: \"ora ISO\",\n duration: \"durata ISO\",\n ipv4: \"indirizzo IPv4\",\n ipv6: \"indirizzo IPv6\",\n cidrv4: \"intervallo IPv4\",\n cidrv6: \"intervallo IPv6\",\n base64: \"stringa codificata in base64\",\n base64url: \"URL codificata in base64\",\n json_string: \"stringa JSON\",\n e164: \"numero E.164\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"numero\",\n array: \"vettore\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Input non valido: atteso instanceof ${issue.expected}, ricevuto ${received}`;\n }\n return `Input non valido: atteso ${expected}, ricevuto ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Input non valido: atteso ${util.stringifyPrimitive(issue.values[0])}`;\n return `Opzione non valida: atteso uno tra ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Troppo grande: ${issue.origin ?? \"valore\"} deve avere ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementi\"}`;\n return `Troppo grande: ${issue.origin ?? \"valore\"} deve essere ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Troppo piccolo: ${issue.origin} deve avere ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Troppo piccolo: ${issue.origin} deve essere ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Stringa non valida: deve iniziare con \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Stringa non valida: deve terminare con \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Stringa non valida: deve includere \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Stringa non valida: deve corrispondere al pattern ${_issue.pattern}`;\n return `Input non valido: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Numero non valido: deve essere un multiplo di ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Chiav${issue.keys.length > 1 ? \"i\" : \"e\"} non riconosciut${issue.keys.length > 1 ? \"e\" : \"a\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Chiave non valida in ${issue.origin}`;\n case \"invalid_union\":\n return \"Input non valido\";\n case \"invalid_element\":\n return `Valore non valido in ${issue.origin}`;\n default:\n return `Input non valido`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u6587\u5B57\", verb: \"\u3067\u3042\u308B\" },\n file: { unit: \"\u30D0\u30A4\u30C8\", verb: \"\u3067\u3042\u308B\" },\n array: { unit: \"\u8981\u7D20\", verb: \"\u3067\u3042\u308B\" },\n set: { unit: \"\u8981\u7D20\", verb: \"\u3067\u3042\u308B\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u5165\u529B\u5024\",\n email: \"\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\",\n url: \"URL\",\n emoji: \"\u7D75\u6587\u5B57\",\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\u65E5\u6642\",\n date: \"ISO\u65E5\u4ED8\",\n time: \"ISO\u6642\u523B\",\n duration: \"ISO\u671F\u9593\",\n ipv4: \"IPv4\u30A2\u30C9\u30EC\u30B9\",\n ipv6: \"IPv6\u30A2\u30C9\u30EC\u30B9\",\n cidrv4: \"IPv4\u7BC4\u56F2\",\n cidrv6: \"IPv6\u7BC4\u56F2\",\n base64: \"base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217\",\n base64url: \"base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217\",\n json_string: \"JSON\u6587\u5B57\u5217\",\n e164: \"E.164\u756A\u53F7\",\n jwt: \"JWT\",\n template_literal: \"\u5165\u529B\u5024\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u6570\u5024\",\n array: \"\u914D\u5217\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u7121\u52B9\u306A\u5165\u529B: instanceof ${issue.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;\n }\n return `\u7121\u52B9\u306A\u5165\u529B: ${expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${received}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u7121\u52B9\u306A\u5165\u529B: ${util.stringifyPrimitive(issue.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`;\n return `\u7121\u52B9\u306A\u9078\u629E: ${util.joinValues(issue.values, \"\u3001\")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"\u4EE5\u4E0B\u3067\u3042\u308B\" : \"\u3088\u308A\u5C0F\u3055\u3044\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue.origin ?? \"\u5024\"}\u306F${issue.maximum.toString()}${sizing.unit ?? \"\u8981\u7D20\"}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n return `\u5927\u304D\u3059\u304E\u308B\u5024: ${issue.origin ?? \"\u5024\"}\u306F${issue.maximum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"\u4EE5\u4E0A\u3067\u3042\u308B\" : \"\u3088\u308A\u5927\u304D\u3044\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue.origin}\u306F${issue.minimum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${issue.origin}\u306F${issue.minimum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.prefix}\"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n if (_issue.format === \"ends_with\")\n return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.suffix}\"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n if (_issue.format === \"includes\")\n return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \"${_issue.includes}\"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n if (_issue.format === \"regex\")\n return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${_issue.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n return `\u7121\u52B9\u306A${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u7121\u52B9\u306A\u6570\u5024: ${issue.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;\n case \"unrecognized_keys\":\n return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${issue.keys.length > 1 ? \"\u7FA4\" : \"\"}: ${util.joinValues(issue.keys, \"\u3001\")}`;\n case \"invalid_key\":\n return `${issue.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`;\n case \"invalid_union\":\n return \"\u7121\u52B9\u306A\u5165\u529B\";\n case \"invalid_element\":\n return `${issue.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`;\n default:\n return `\u7121\u52B9\u306A\u5165\u529B`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n file: { unit: \"\u10D1\u10D0\u10D8\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n array: { unit: \"\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n set: { unit: \"\u10D4\u10DA\u10D4\u10DB\u10D4\u10DC\u10E2\u10D8\", verb: \"\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\",\n email: \"\u10D4\u10DA-\u10E4\u10DD\u10E1\u10E2\u10D8\u10E1 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n url: \"URL\",\n emoji: \"\u10D4\u10DB\u10DD\u10EF\u10D8\",\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: \"\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8-\u10D3\u10E0\u10DD\",\n date: \"\u10D7\u10D0\u10E0\u10D8\u10E6\u10D8\",\n time: \"\u10D3\u10E0\u10DD\",\n duration: \"\u10EE\u10D0\u10DC\u10D2\u10E0\u10EB\u10DA\u10D8\u10D5\u10DD\u10D1\u10D0\",\n ipv4: \"IPv4 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n ipv6: \"IPv6 \u10DB\u10D8\u10E1\u10D0\u10DB\u10D0\u10E0\u10D7\u10D8\",\n cidrv4: \"IPv4 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8\",\n cidrv6: \"IPv6 \u10D3\u10D8\u10D0\u10DE\u10D0\u10D6\u10DD\u10DC\u10D8\",\n base64: \"base64-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10D5\u10D4\u10DA\u10D8\",\n base64url: \"base64url-\u10D9\u10DD\u10D3\u10D8\u10E0\u10D4\u10D1\u10E3\u10DA\u10D8 \u10D5\u10D4\u10DA\u10D8\",\n json_string: \"JSON \u10D5\u10D4\u10DA\u10D8\",\n e164: \"E.164 \u10DC\u10DD\u10DB\u10D4\u10E0\u10D8\",\n jwt: \"JWT\",\n template_literal: \"\u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u10E0\u10D8\u10EA\u10EE\u10D5\u10D8\",\n string: \"\u10D5\u10D4\u10DA\u10D8\",\n boolean: \"\u10D1\u10E3\u10DA\u10D4\u10D0\u10DC\u10D8\",\n function: \"\u10E4\u10E3\u10DC\u10E5\u10EA\u10D8\u10D0\",\n array: \"\u10DB\u10D0\u10E1\u10D8\u10D5\u10D8\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 instanceof ${issue.expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`;\n }\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D0\u10E0\u10D8\u10D0\u10DC\u10E2\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8\u10D0 \u10D4\u10E0\u10D7-\u10D4\u10E0\u10D7\u10D8 ${util.joinValues(issue.values, \"|\")}-\u10D3\u10D0\u10DC`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin ?? \"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit}`;\n return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin ?? \"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0\"} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10DE\u10D0\u10E2\u10D0\u10E0\u10D0: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${issue.origin} \u10D8\u10E7\u10DD\u10E1 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D4\u10DA\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10EC\u10E7\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \"${_issue.prefix}\"-\u10D8\u10D7`;\n }\n if (_issue.format === \"ends_with\")\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D4\u10DA\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10DB\u10D7\u10D0\u10D5\u10E0\u10D3\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \"${_issue.suffix}\"-\u10D8\u10D7`;\n if (_issue.format === \"includes\")\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D4\u10DA\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1 \"${_issue.includes}\"-\u10E1`;\n if (_issue.format === \"regex\")\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D5\u10D4\u10DA\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D4\u10E1\u10D0\u10D1\u10D0\u10DB\u10D4\u10D1\u10DD\u10D3\u10D4\u10E1 \u10E8\u10D0\u10D1\u10DA\u10DD\u10DC\u10E1 ${_issue.pattern}`;\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E0\u10D8\u10EA\u10EE\u10D5\u10D8: \u10E3\u10DC\u10D3\u10D0 \u10D8\u10E7\u10DD\u10E1 ${issue.divisor}-\u10D8\u10E1 \u10EF\u10D4\u10E0\u10D0\u10D3\u10D8`;\n case \"unrecognized_keys\":\n return `\u10E3\u10EA\u10DC\u10DD\u10D1\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1${issue.keys.length > 1 ? \"\u10D4\u10D1\u10D8\" : \"\u10D8\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1\u10D8 ${issue.origin}-\u10E8\u10D8`;\n case \"invalid_union\":\n return \"\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0\";\n case \"invalid_element\":\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0 ${issue.origin}-\u10E8\u10D8`;\n default:\n return `\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n file: { unit: \"\u1794\u17C3\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n array: { unit: \"\u1792\u17B6\u178F\u17BB\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n set: { unit: \"\u1792\u17B6\u178F\u17BB\", verb: \"\u1782\u17BD\u179A\u1798\u17B6\u1793\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\",\n email: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793\u17A2\u17CA\u17B8\u1798\u17C2\u179B\",\n url: \"URL\",\n emoji: \"\u179F\u1789\u17D2\u1789\u17B6\u17A2\u17B6\u179A\u1798\u17D2\u1798\u178E\u17CD\",\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: \"\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 \u1793\u17B7\u1784\u1798\u17C9\u17C4\u1784 ISO\",\n date: \"\u1780\u17B6\u179B\u1794\u179A\u17B7\u1785\u17D2\u1786\u17C1\u1791 ISO\",\n time: \"\u1798\u17C9\u17C4\u1784 ISO\",\n duration: \"\u179A\u1799\u17C8\u1796\u17C1\u179B ISO\",\n ipv4: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4\",\n ipv6: \"\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6\",\n cidrv4: \"\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv4\",\n cidrv6: \"\u178A\u17C2\u1793\u17A2\u17B6\u179F\u1799\u178A\u17D2\u178B\u17B6\u1793 IPv6\",\n base64: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64\",\n base64url: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u17A2\u17CA\u17B7\u1780\u17BC\u178A base64url\",\n json_string: \"\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A JSON\",\n e164: \"\u179B\u17C1\u1781 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u179B\u17C1\u1781\",\n array: \"\u17A2\u17B6\u179A\u17C1 (Array)\",\n null: \"\u1782\u17D2\u1798\u17B6\u1793\u178F\u1798\u17D2\u179B\u17C3 (null)\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A instanceof ${issue.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`;\n }\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1794\u1789\u17D2\u1785\u17BC\u179B\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u1787\u1798\u17D2\u179A\u17BE\u179F\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1787\u17B6\u1798\u17BD\u1799\u1780\u17D2\u1793\u17BB\u1784\u1785\u17C6\u178E\u17C4\u1798 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin ?? \"\u178F\u1798\u17D2\u179B\u17C3\"} ${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u1792\u17B6\u178F\u17BB\"}`;\n return `\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin ?? \"\u178F\u1798\u17D2\u179B\u17C3\"} ${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin} ${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${issue.origin} ${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1785\u17B6\u1794\u17CB\u1795\u17D2\u178F\u17BE\u1798\u178A\u17C4\u1799 \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1794\u1789\u17D2\u1785\u1794\u17CB\u178A\u17C4\u1799 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1798\u17B6\u1793 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u1781\u17D2\u179F\u17C2\u17A2\u1780\u17D2\u179F\u179A\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1795\u17D2\u1782\u17BC\u1795\u17D2\u1782\u1784\u1793\u17B9\u1784\u1791\u1798\u17D2\u179A\u1784\u17CB\u178A\u17C2\u179B\u1794\u17B6\u1793\u1780\u17C6\u178E\u178F\u17CB ${_issue.pattern}`;\n return `\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u179B\u17C1\u1781\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u178F\u17C2\u1787\u17B6\u1796\u17A0\u17BB\u1782\u17BB\u178E\u1793\u17C3 ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u179F\u17C4\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue.origin}`;\n case \"invalid_union\":\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;\n case \"invalid_element\":\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u1793\u17C5\u1780\u17D2\u1793\u17BB\u1784 ${issue.origin}`;\n default:\n return `\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import km from \"./km.js\";\n/** @deprecated Use `km` instead. */\nexport default function () {\n return km();\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\uBB38\uC790\", verb: \"to have\" },\n file: { unit: \"\uBC14\uC774\uD2B8\", verb: \"to have\" },\n array: { unit: \"\uAC1C\", verb: \"to have\" },\n set: { unit: \"\uAC1C\", verb: \"to have\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\uC785\uB825\",\n email: \"\uC774\uBA54\uC77C \uC8FC\uC18C\",\n url: \"URL\",\n emoji: \"\uC774\uBAA8\uC9C0\",\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 \uB0A0\uC9DC\uC2DC\uAC04\",\n date: \"ISO \uB0A0\uC9DC\",\n time: \"ISO \uC2DC\uAC04\",\n duration: \"ISO \uAE30\uAC04\",\n ipv4: \"IPv4 \uC8FC\uC18C\",\n ipv6: \"IPv6 \uC8FC\uC18C\",\n cidrv4: \"IPv4 \uBC94\uC704\",\n cidrv6: \"IPv6 \uBC94\uC704\",\n base64: \"base64 \uC778\uCF54\uB529 \uBB38\uC790\uC5F4\",\n base64url: \"base64url \uC778\uCF54\uB529 \uBB38\uC790\uC5F4\",\n json_string: \"JSON \uBB38\uC790\uC5F4\",\n e164: \"E.164 \uBC88\uD638\",\n jwt: \"JWT\",\n template_literal: \"\uC785\uB825\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 instanceof ${issue.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`;\n }\n return `\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${received}\uC785\uB2C8\uB2E4`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${util.stringifyPrimitive(issue.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`;\n return `\uC798\uBABB\uB41C \uC635\uC158: ${util.joinValues(issue.values, \"\uB610\uB294 \")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"\uC774\uD558\" : \"\uBBF8\uB9CC\";\n const suffix = adj === \"\uBBF8\uB9CC\" ? \"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4\" : \"\uC5EC\uC57C \uD569\uB2C8\uB2E4\";\n const sizing = getSizing(issue.origin);\n const unit = sizing?.unit ?? \"\uC694\uC18C\";\n if (sizing)\n return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue.maximum.toString()}${unit} ${adj}${suffix}`;\n return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${issue.maximum.toString()} ${adj}${suffix}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"\uC774\uC0C1\" : \"\uCD08\uACFC\";\n const suffix = adj === \"\uC774\uC0C1\" ? \"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4\" : \"\uC5EC\uC57C \uD569\uB2C8\uB2E4\";\n const sizing = getSizing(issue.origin);\n const unit = sizing?.unit ?? \"\uC694\uC18C\";\n if (sizing) {\n return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue.minimum.toString()}${unit} ${adj}${suffix}`;\n }\n return `${issue.origin ?? \"\uAC12\"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${issue.minimum.toString()} ${adj}${suffix}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.prefix}\"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`;\n }\n if (_issue.format === \"ends_with\")\n return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.suffix}\"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`;\n if (_issue.format === \"includes\")\n return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \"${_issue.includes}\"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`;\n if (_issue.format === \"regex\")\n return `\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${_issue.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`;\n return `\uC798\uBABB\uB41C ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\uC798\uBABB\uB41C \uC22B\uC790: ${issue.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`;\n case \"unrecognized_keys\":\n return `\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\uC798\uBABB\uB41C \uD0A4: ${issue.origin}`;\n case \"invalid_union\":\n return `\uC798\uBABB\uB41C \uC785\uB825`;\n case \"invalid_element\":\n return `\uC798\uBABB\uB41C \uAC12: ${issue.origin}`;\n default:\n return `\uC798\uBABB\uB41C \uC785\uB825`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst capitalizeFirstCharacter = (text) => {\n return text.charAt(0).toUpperCase() + text.slice(1);\n};\nfunction getUnitTypeFromNumber(number) {\n const abs = Math.abs(number);\n const last = abs % 10;\n const last2 = abs % 100;\n if ((last2 >= 11 && last2 <= 19) || last === 0)\n return \"many\";\n if (last === 1)\n return \"one\";\n return \"few\";\n}\nconst error = () => {\n const Sizable = {\n string: {\n unit: {\n one: \"simbolis\",\n few: \"simboliai\",\n many: \"simboli\u0173\",\n },\n verb: {\n smaller: {\n inclusive: \"turi b\u016Bti ne ilgesn\u0117 kaip\",\n notInclusive: \"turi b\u016Bti trumpesn\u0117 kaip\",\n },\n bigger: {\n inclusive: \"turi b\u016Bti ne trumpesn\u0117 kaip\",\n notInclusive: \"turi b\u016Bti ilgesn\u0117 kaip\",\n },\n },\n },\n file: {\n unit: {\n one: \"baitas\",\n few: \"baitai\",\n many: \"bait\u0173\",\n },\n verb: {\n smaller: {\n inclusive: \"turi b\u016Bti ne didesnis kaip\",\n notInclusive: \"turi b\u016Bti ma\u017Eesnis kaip\",\n },\n bigger: {\n inclusive: \"turi b\u016Bti ne ma\u017Eesnis kaip\",\n notInclusive: \"turi b\u016Bti didesnis kaip\",\n },\n },\n },\n array: {\n unit: {\n one: \"element\u0105\",\n few: \"elementus\",\n many: \"element\u0173\",\n },\n verb: {\n smaller: {\n inclusive: \"turi tur\u0117ti ne daugiau kaip\",\n notInclusive: \"turi tur\u0117ti ma\u017Eiau kaip\",\n },\n bigger: {\n inclusive: \"turi tur\u0117ti ne ma\u017Eiau kaip\",\n notInclusive: \"turi tur\u0117ti daugiau kaip\",\n },\n },\n },\n set: {\n unit: {\n one: \"element\u0105\",\n few: \"elementus\",\n many: \"element\u0173\",\n },\n verb: {\n smaller: {\n inclusive: \"turi tur\u0117ti ne daugiau kaip\",\n notInclusive: \"turi tur\u0117ti ma\u017Eiau kaip\",\n },\n bigger: {\n inclusive: \"turi tur\u0117ti ne ma\u017Eiau kaip\",\n notInclusive: \"turi tur\u0117ti daugiau kaip\",\n },\n },\n },\n };\n function getSizing(origin, unitType, inclusive, targetShouldBe) {\n const result = Sizable[origin] ?? null;\n if (result === null)\n return result;\n return {\n unit: result.unit[unitType],\n verb: result.verb[targetShouldBe][inclusive ? \"inclusive\" : \"notInclusive\"],\n };\n }\n const FormatDictionary = {\n regex: \"\u012Fvestis\",\n email: \"el. pa\u0161to adresas\",\n url: \"URL\",\n emoji: \"jaustukas\",\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 data ir laikas\",\n date: \"ISO data\",\n time: \"ISO laikas\",\n duration: \"ISO trukm\u0117\",\n ipv4: \"IPv4 adresas\",\n ipv6: \"IPv6 adresas\",\n cidrv4: \"IPv4 tinklo prefiksas (CIDR)\",\n cidrv6: \"IPv6 tinklo prefiksas (CIDR)\",\n base64: \"base64 u\u017Ekoduota eilut\u0117\",\n base64url: \"base64url u\u017Ekoduota eilut\u0117\",\n json_string: \"JSON eilut\u0117\",\n e164: \"E.164 numeris\",\n jwt: \"JWT\",\n template_literal: \"\u012Fvestis\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"skai\u010Dius\",\n bigint: \"sveikasis skai\u010Dius\",\n string: \"eilut\u0117\",\n boolean: \"login\u0117 reik\u0161m\u0117\",\n undefined: \"neapibr\u0117\u017Eta reik\u0161m\u0117\",\n function: \"funkcija\",\n symbol: \"simbolis\",\n array: \"masyvas\",\n object: \"objektas\",\n null: \"nulin\u0117 reik\u0161m\u0117\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Gautas tipas ${received}, o tik\u0117tasi - instanceof ${issue.expected}`;\n }\n return `Gautas tipas ${received}, o tik\u0117tasi - ${expected}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Privalo b\u016Bti ${util.stringifyPrimitive(issue.values[0])}`;\n return `Privalo b\u016Bti vienas i\u0161 ${util.joinValues(issue.values, \"|\")} pasirinkim\u0173`;\n case \"too_big\": {\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.maximum)), issue.inclusive ?? false, \"smaller\");\n if (sizing?.verb)\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} ${sizing.verb} ${issue.maximum.toString()} ${sizing.unit ?? \"element\u0173\"}`;\n const adj = issue.inclusive ? \"ne didesnis kaip\" : \"ma\u017Eesnis kaip\";\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi b\u016Bti ${adj} ${issue.maximum.toString()} ${sizing?.unit}`;\n }\n case \"too_small\": {\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n const sizing = getSizing(issue.origin, getUnitTypeFromNumber(Number(issue.minimum)), issue.inclusive ?? false, \"bigger\");\n if (sizing?.verb)\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} ${sizing.verb} ${issue.minimum.toString()} ${sizing.unit ?? \"element\u0173\"}`;\n const adj = issue.inclusive ? \"ne ma\u017Eesnis kaip\" : \"didesnis kaip\";\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi b\u016Bti ${adj} ${issue.minimum.toString()} ${sizing?.unit}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Eilut\u0117 privalo prasid\u0117ti \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Eilut\u0117 privalo pasibaigti \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Eilut\u0117 privalo \u012Ftraukti \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Eilut\u0117 privalo atitikti ${_issue.pattern}`;\n return `Neteisingas ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Skai\u010Dius privalo b\u016Bti ${issue.divisor} kartotinis.`;\n case \"unrecognized_keys\":\n return `Neatpa\u017Eint${issue.keys.length > 1 ? \"i\" : \"as\"} rakt${issue.keys.length > 1 ? \"ai\" : \"as\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return \"Rastas klaidingas raktas\";\n case \"invalid_union\":\n return \"Klaidinga \u012Fvestis\";\n case \"invalid_element\": {\n const origin = TypeDictionary[issue.origin] ?? issue.origin;\n return `${capitalizeFirstCharacter(origin ?? issue.origin ?? \"reik\u0161m\u0117\")} turi klaiding\u0105 \u012Fvest\u012F`;\n }\n default:\n return \"Klaidinga \u012Fvestis\";\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0437\u043D\u0430\u0446\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n file: { unit: \"\u0431\u0430\u0458\u0442\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n array: { unit: \"\u0441\u0442\u0430\u0432\u043A\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n set: { unit: \"\u0441\u0442\u0430\u0432\u043A\u0438\", verb: \"\u0434\u0430 \u0438\u043C\u0430\u0430\u0442\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0432\u043D\u0435\u0441\",\n email: \"\u0430\u0434\u0440\u0435\u0441\u0430 \u043D\u0430 \u0435-\u043F\u043E\u0448\u0442\u0430\",\n url: \"URL\",\n emoji: \"\u0435\u043C\u043E\u045F\u0438\",\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 \u0434\u0430\u0442\u0443\u043C \u0438 \u0432\u0440\u0435\u043C\u0435\",\n date: \"ISO \u0434\u0430\u0442\u0443\u043C\",\n time: \"ISO \u0432\u0440\u0435\u043C\u0435\",\n duration: \"ISO \u0432\u0440\u0435\u043C\u0435\u0442\u0440\u0430\u0435\u045A\u0435\",\n ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\u0430\",\n ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\u0430\",\n cidrv4: \"IPv4 \u043E\u043F\u0441\u0435\u0433\",\n cidrv6: \"IPv6 \u043E\u043F\u0441\u0435\u0433\",\n base64: \"base64-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430\",\n base64url: \"base64url-\u0435\u043D\u043A\u043E\u0434\u0438\u0440\u0430\u043D\u0430 \u043D\u0438\u0437\u0430\",\n json_string: \"JSON \u043D\u0438\u0437\u0430\",\n e164: \"E.164 \u0431\u0440\u043E\u0458\",\n jwt: \"JWT\",\n template_literal: \"\u0432\u043D\u0435\u0441\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0431\u0440\u043E\u0458\",\n array: \"\u043D\u0438\u0437\u0430\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 instanceof ${issue.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`;\n }\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u0413\u0440\u0435\u0448\u0430\u043D\u0430 \u043E\u043F\u0446\u0438\u0458\u0430: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 \u0435\u0434\u043D\u0430 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin ?? \"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430\"} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0438\"}`;\n return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin ?? \"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430\"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin} \u0434\u0430 \u0438\u043C\u0430 ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${issue.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u043F\u043E\u0447\u043D\u0443\u0432\u0430 \u0441\u043E \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0437\u0430\u0432\u0440\u0448\u0443\u0432\u0430 \u0441\u043E \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0432\u043A\u043B\u0443\u0447\u0443\u0432\u0430 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u0435\u0432\u0430\u0436\u0435\u0447\u043A\u0430 \u043D\u0438\u0437\u0430: \u043C\u043E\u0440\u0430 \u0434\u0430 \u043E\u0434\u0433\u043E\u0430\u0440\u0430 \u043D\u0430 \u043F\u0430\u0442\u0435\u0440\u043D\u043E\u0442 ${_issue.pattern}`;\n return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u0431\u0440\u043E\u0458: \u043C\u043E\u0440\u0430 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0434\u0435\u043B\u0438\u0432 \u0441\u043E ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D\u0438 \u043A\u043B\u0443\u0447\u0435\u0432\u0438\" : \"\u041D\u0435\u043F\u0440\u0435\u043F\u043E\u0437\u043D\u0430\u0435\u043D \u043A\u043B\u0443\u0447\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${issue.origin}`;\n case \"invalid_union\":\n return \"\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441\";\n case \"invalid_element\":\n return `\u0413\u0440\u0435\u0448\u043D\u0430 \u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442 \u0432\u043E ${issue.origin}`;\n default:\n return `\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"aksara\", verb: \"mempunyai\" },\n file: { unit: \"bait\", verb: \"mempunyai\" },\n array: { unit: \"elemen\", verb: \"mempunyai\" },\n set: { unit: \"elemen\", verb: \"mempunyai\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"alamat e-mel\",\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: \"tarikh masa ISO\",\n date: \"tarikh ISO\",\n time: \"masa ISO\",\n duration: \"tempoh ISO\",\n ipv4: \"alamat IPv4\",\n ipv6: \"alamat IPv6\",\n cidrv4: \"julat IPv4\",\n cidrv6: \"julat IPv6\",\n base64: \"string dikodkan base64\",\n base64url: \"string dikodkan base64url\",\n json_string: \"string JSON\",\n e164: \"nombor E.164\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"nombor\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Input tidak sah: dijangka instanceof ${issue.expected}, diterima ${received}`;\n }\n return `Input tidak sah: dijangka ${expected}, diterima ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Input tidak sah: dijangka ${util.stringifyPrimitive(issue.values[0])}`;\n return `Pilihan tidak sah: dijangka salah satu daripada ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemen\"}`;\n return `Terlalu besar: dijangka ${issue.origin ?? \"nilai\"} adalah ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Terlalu kecil: dijangka ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Terlalu kecil: dijangka ${issue.origin} adalah ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `String tidak sah: mesti bermula dengan \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `String tidak sah: mesti berakhir dengan \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `String tidak sah: mesti mengandungi \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `String tidak sah: mesti sepadan dengan corak ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} tidak sah`;\n }\n case \"not_multiple_of\":\n return `Nombor tidak sah: perlu gandaan ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Kunci tidak dikenali: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Kunci tidak sah dalam ${issue.origin}`;\n case \"invalid_union\":\n return \"Input tidak sah\";\n case \"invalid_element\":\n return `Nilai tidak sah dalam ${issue.origin}`;\n default:\n return `Input tidak sah`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"tekens\", verb: \"heeft\" },\n file: { unit: \"bytes\", verb: \"heeft\" },\n array: { unit: \"elementen\", verb: \"heeft\" },\n set: { unit: \"elementen\", verb: \"heeft\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"invoer\",\n email: \"emailadres\",\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 datum en tijd\",\n date: \"ISO datum\",\n time: \"ISO tijd\",\n duration: \"ISO duur\",\n ipv4: \"IPv4-adres\",\n ipv6: \"IPv6-adres\",\n cidrv4: \"IPv4-bereik\",\n cidrv6: \"IPv6-bereik\",\n base64: \"base64-gecodeerde tekst\",\n base64url: \"base64 URL-gecodeerde tekst\",\n json_string: \"JSON string\",\n e164: \"E.164-nummer\",\n jwt: \"JWT\",\n template_literal: \"invoer\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"getal\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ongeldige invoer: verwacht instanceof ${issue.expected}, ontving ${received}`;\n }\n return `Ongeldige invoer: verwacht ${expected}, ontving ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ongeldige invoer: verwacht ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ongeldige optie: verwacht \u00E9\u00E9n van ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n const longName = issue.origin === \"date\" ? \"laat\" : issue.origin === \"string\" ? \"lang\" : \"groot\";\n if (sizing)\n return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementen\"} ${sizing.verb}`;\n return `Te ${longName}: verwacht dat ${issue.origin ?? \"waarde\"} ${adj}${issue.maximum.toString()} is`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n const shortName = issue.origin === \"date\" ? \"vroeg\" : issue.origin === \"string\" ? \"kort\" : \"klein\";\n if (sizing) {\n return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n }\n return `Te ${shortName}: verwacht dat ${issue.origin} ${adj}${issue.minimum.toString()} is`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Ongeldige tekst: moet met \"${_issue.prefix}\" beginnen`;\n }\n if (_issue.format === \"ends_with\")\n return `Ongeldige tekst: moet op \"${_issue.suffix}\" eindigen`;\n if (_issue.format === \"includes\")\n return `Ongeldige tekst: moet \"${_issue.includes}\" bevatten`;\n if (_issue.format === \"regex\")\n return `Ongeldige tekst: moet overeenkomen met patroon ${_issue.pattern}`;\n return `Ongeldig: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ongeldig getal: moet een veelvoud van ${issue.divisor} zijn`;\n case \"unrecognized_keys\":\n return `Onbekende key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ongeldige key in ${issue.origin}`;\n case \"invalid_union\":\n return \"Ongeldige invoer\";\n case \"invalid_element\":\n return `Ongeldige waarde in ${issue.origin}`;\n default:\n return `Ongeldige invoer`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"tegn\", verb: \"\u00E5 ha\" },\n file: { unit: \"bytes\", verb: \"\u00E5 ha\" },\n array: { unit: \"elementer\", verb: \"\u00E5 inneholde\" },\n set: { unit: \"elementer\", verb: \"\u00E5 inneholde\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"e-postadresse\",\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 dato- og klokkeslett\",\n date: \"ISO-dato\",\n time: \"ISO-klokkeslett\",\n duration: \"ISO-varighet\",\n ipv4: \"IPv4-omr\u00E5de\",\n ipv6: \"IPv6-omr\u00E5de\",\n cidrv4: \"IPv4-spekter\",\n cidrv6: \"IPv6-spekter\",\n base64: \"base64-enkodet streng\",\n base64url: \"base64url-enkodet streng\",\n json_string: \"JSON-streng\",\n e164: \"E.164-nummer\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"tall\",\n array: \"liste\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ugyldig input: forventet instanceof ${issue.expected}, fikk ${received}`;\n }\n return `Ugyldig input: forventet ${expected}, fikk ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ugyldig verdi: forventet ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ugyldig valg: forventet en av ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `For stor(t): forventet ${issue.origin ?? \"value\"} til \u00E5 ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementer\"}`;\n return `For stor(t): forventet ${issue.origin ?? \"value\"} til \u00E5 ha ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `For lite(n): forventet ${issue.origin} til \u00E5 ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `For lite(n): forventet ${issue.origin} til \u00E5 ha ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Ugyldig streng: m\u00E5 starte med \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Ugyldig streng: m\u00E5 ende med \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Ugyldig streng: m\u00E5 inneholde \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Ugyldig streng: m\u00E5 matche m\u00F8nsteret ${_issue.pattern}`;\n return `Ugyldig ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ugyldig tall: m\u00E5 v\u00E6re et multiplum av ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Ukjente n\u00F8kler\" : \"Ukjent n\u00F8kkel\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ugyldig n\u00F8kkel i ${issue.origin}`;\n case \"invalid_union\":\n return \"Ugyldig input\";\n case \"invalid_element\":\n return `Ugyldig verdi i ${issue.origin}`;\n default:\n return `Ugyldig input`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"harf\", verb: \"olmal\u0131d\u0131r\" },\n file: { unit: \"bayt\", verb: \"olmal\u0131d\u0131r\" },\n array: { unit: \"unsur\", verb: \"olmal\u0131d\u0131r\" },\n set: { unit: \"unsur\", verb: \"olmal\u0131d\u0131r\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"giren\",\n email: \"epostag\u00E2h\",\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 heng\u00E2m\u0131\",\n date: \"ISO tarihi\",\n time: \"ISO zaman\u0131\",\n duration: \"ISO m\u00FCddeti\",\n ipv4: \"IPv4 ni\u015F\u00E2n\u0131\",\n ipv6: \"IPv6 ni\u015F\u00E2n\u0131\",\n cidrv4: \"IPv4 menzili\",\n cidrv6: \"IPv6 menzili\",\n base64: \"base64-\u015Fifreli metin\",\n base64url: \"base64url-\u015Fifreli metin\",\n json_string: \"JSON metin\",\n e164: \"E.164 say\u0131s\u0131\",\n jwt: \"JWT\",\n template_literal: \"giren\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"numara\",\n array: \"saf\",\n null: \"gayb\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `F\u00E2sit giren: umulan instanceof ${issue.expected}, al\u0131nan ${received}`;\n }\n return `F\u00E2sit giren: umulan ${expected}, al\u0131nan ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `F\u00E2sit giren: umulan ${util.stringifyPrimitive(issue.values[0])}`;\n return `F\u00E2sit tercih: m\u00FBteberler ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Fazla b\u00FCy\u00FCk: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"} sahip olmal\u0131yd\u0131.`;\n return `Fazla b\u00FCy\u00FCk: ${issue.origin ?? \"value\"}, ${adj}${issue.maximum.toString()} olmal\u0131yd\u0131.`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Fazla k\u00FC\u00E7\u00FCk: ${issue.origin}, ${adj}${issue.minimum.toString()} ${sizing.unit} sahip olmal\u0131yd\u0131.`;\n }\n return `Fazla k\u00FC\u00E7\u00FCk: ${issue.origin}, ${adj}${issue.minimum.toString()} olmal\u0131yd\u0131.`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `F\u00E2sit metin: \"${_issue.prefix}\" ile ba\u015Flamal\u0131.`;\n if (_issue.format === \"ends_with\")\n return `F\u00E2sit metin: \"${_issue.suffix}\" ile bitmeli.`;\n if (_issue.format === \"includes\")\n return `F\u00E2sit metin: \"${_issue.includes}\" ihtiv\u00E2 etmeli.`;\n if (_issue.format === \"regex\")\n return `F\u00E2sit metin: ${_issue.pattern} nak\u015F\u0131na uymal\u0131.`;\n return `F\u00E2sit ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `F\u00E2sit say\u0131: ${issue.divisor} kat\u0131 olmal\u0131yd\u0131.`;\n case \"unrecognized_keys\":\n return `Tan\u0131nmayan anahtar ${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} i\u00E7in tan\u0131nmayan anahtar var.`;\n case \"invalid_union\":\n return \"Giren tan\u0131namad\u0131.\";\n case \"invalid_element\":\n return `${issue.origin} i\u00E7in tan\u0131nmayan k\u0131ymet var.`;\n default:\n return `K\u0131ymet tan\u0131namad\u0131.`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n file: { unit: \"\u0628\u0627\u06CC\u067C\u0633\", verb: \"\u0648\u0644\u0631\u064A\" },\n array: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n set: { unit: \"\u062A\u0648\u06A9\u064A\", verb: \"\u0648\u0644\u0631\u064A\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0648\u0631\u0648\u062F\u064A\",\n email: \"\u0628\u0631\u06CC\u069A\u0646\u0627\u0644\u06CC\u06A9\",\n url: \"\u06CC\u0648 \u0622\u0631 \u0627\u0644\",\n emoji: \"\u0627\u06CC\u0645\u0648\u062C\u064A\",\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: \"\u0646\u06CC\u067C\u0647 \u0627\u0648 \u0648\u062E\u062A\",\n date: \"\u0646\u06D0\u067C\u0647\",\n time: \"\u0648\u062E\u062A\",\n duration: \"\u0645\u0648\u062F\u0647\",\n ipv4: \"\u062F IPv4 \u067E\u062A\u0647\",\n ipv6: \"\u062F IPv6 \u067E\u062A\u0647\",\n cidrv4: \"\u062F IPv4 \u0633\u0627\u062D\u0647\",\n cidrv6: \"\u062F IPv6 \u0633\u0627\u062D\u0647\",\n base64: \"base64-encoded \u0645\u062A\u0646\",\n base64url: \"base64url-encoded \u0645\u062A\u0646\",\n json_string: \"JSON \u0645\u062A\u0646\",\n e164: \"\u062F E.164 \u0634\u0645\u06D0\u0631\u0647\",\n jwt: \"JWT\",\n template_literal: \"\u0648\u0631\u0648\u062F\u064A\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0639\u062F\u062F\",\n array: \"\u0627\u0631\u06D0\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F instanceof ${issue.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;\n }\n return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${received} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1) {\n return `\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${util.stringifyPrimitive(issue.values[0])} \u0648\u0627\u06CC`;\n }\n return `\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${util.joinValues(issue.values, \"|\")} \u0685\u062E\u0647 \u0648\u0627\u06CC`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue.origin ?? \"\u0627\u0631\u0632\u069A\u062A\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0635\u0631\u0648\u0646\u0647\"} \u0648\u0644\u0631\u064A`;\n }\n return `\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${issue.origin ?? \"\u0627\u0631\u0632\u069A\u062A\"} \u0628\u0627\u06CC\u062F ${adj}${issue.maximum.toString()} \u0648\u064A`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} ${sizing.unit} \u0648\u0644\u0631\u064A`;\n }\n return `\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${issue.origin} \u0628\u0627\u06CC\u062F ${adj}${issue.minimum.toString()} \u0648\u064A`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F \"${_issue.prefix}\" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`;\n }\n if (_issue.format === \"ends_with\") {\n return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F \"${_issue.suffix}\" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`;\n }\n if (_issue.format === \"includes\") {\n return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \"${_issue.includes}\" \u0648\u0644\u0631\u064A`;\n }\n if (_issue.format === \"regex\") {\n return `\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${_issue.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`;\n }\n return `${FormatDictionary[_issue.format] ?? issue.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`;\n }\n case \"not_multiple_of\":\n return `\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${issue.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`;\n case \"unrecognized_keys\":\n return `\u0646\u0627\u0633\u0645 ${issue.keys.length > 1 ? \"\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647\" : \"\u06A9\u0644\u06CC\u0689\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${issue.origin} \u06A9\u06D0`;\n case \"invalid_union\":\n return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;\n case \"invalid_element\":\n return `\u0646\u0627\u0633\u0645 \u0639\u0646\u0635\u0631 \u067E\u0647 ${issue.origin} \u06A9\u06D0`;\n default:\n return `\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"znak\u00F3w\", verb: \"mie\u0107\" },\n file: { unit: \"bajt\u00F3w\", verb: \"mie\u0107\" },\n array: { unit: \"element\u00F3w\", verb: \"mie\u0107\" },\n set: { unit: \"element\u00F3w\", verb: \"mie\u0107\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"wyra\u017Cenie\",\n email: \"adres email\",\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: \"data i godzina w formacie ISO\",\n date: \"data w formacie ISO\",\n time: \"godzina w formacie ISO\",\n duration: \"czas trwania ISO\",\n ipv4: \"adres IPv4\",\n ipv6: \"adres IPv6\",\n cidrv4: \"zakres IPv4\",\n cidrv6: \"zakres IPv6\",\n base64: \"ci\u0105g znak\u00F3w zakodowany w formacie base64\",\n base64url: \"ci\u0105g znak\u00F3w zakodowany w formacie base64url\",\n json_string: \"ci\u0105g znak\u00F3w w formacie JSON\",\n e164: \"liczba E.164\",\n jwt: \"JWT\",\n template_literal: \"wej\u015Bcie\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"liczba\",\n array: \"tablica\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano instanceof ${issue.expected}, otrzymano ${received}`;\n }\n return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${expected}, otrzymano ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${util.stringifyPrimitive(issue.values[0])}`;\n return `Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie mie\u0107 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\u00F3w\"}`;\n }\n return `Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie wynosi\u0107 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie mie\u0107 ${adj}${issue.minimum.toString()} ${sizing.unit ?? \"element\u00F3w\"}`;\n }\n return `Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${issue.origin ?? \"warto\u015B\u0107\"} b\u0119dzie wynosi\u0107 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi zaczyna\u0107 si\u0119 od \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi ko\u0144czy\u0107 si\u0119 na \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi zawiera\u0107 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Nieprawid\u0142owy ci\u0105g znak\u00F3w: musi odpowiada\u0107 wzorcowi ${_issue.pattern}`;\n return `Nieprawid\u0142ow(y/a/e) ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Nierozpoznane klucze${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Nieprawid\u0142owy klucz w ${issue.origin}`;\n case \"invalid_union\":\n return \"Nieprawid\u0142owe dane wej\u015Bciowe\";\n case \"invalid_element\":\n return `Nieprawid\u0142owa warto\u015B\u0107 w ${issue.origin}`;\n default:\n return `Nieprawid\u0142owe dane wej\u015Bciowe`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caracteres\", verb: \"ter\" },\n file: { unit: \"bytes\", verb: \"ter\" },\n array: { unit: \"itens\", verb: \"ter\" },\n set: { unit: \"itens\", verb: \"ter\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"padr\u00E3o\",\n email: \"endere\u00E7o de e-mail\",\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: \"data e hora ISO\",\n date: \"data ISO\",\n time: \"hora ISO\",\n duration: \"dura\u00E7\u00E3o ISO\",\n ipv4: \"endere\u00E7o IPv4\",\n ipv6: \"endere\u00E7o IPv6\",\n cidrv4: \"faixa de IPv4\",\n cidrv6: \"faixa de IPv6\",\n base64: \"texto codificado em base64\",\n base64url: \"URL codificada em base64\",\n json_string: \"texto JSON\",\n e164: \"n\u00FAmero E.164\",\n jwt: \"JWT\",\n template_literal: \"entrada\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"n\u00FAmero\",\n null: \"nulo\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Tipo inv\u00E1lido: esperado instanceof ${issue.expected}, recebido ${received}`;\n }\n return `Tipo inv\u00E1lido: esperado ${expected}, recebido ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Entrada inv\u00E1lida: esperado ${util.stringifyPrimitive(issue.values[0])}`;\n return `Op\u00E7\u00E3o inv\u00E1lida: esperada uma das ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Muito grande: esperado que ${issue.origin ?? \"valor\"} tivesse ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementos\"}`;\n return `Muito grande: esperado que ${issue.origin ?? \"valor\"} fosse ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Muito pequeno: esperado que ${issue.origin} tivesse ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Muito pequeno: esperado que ${issue.origin} fosse ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Texto inv\u00E1lido: deve come\u00E7ar com \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Texto inv\u00E1lido: deve terminar com \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Texto inv\u00E1lido: deve incluir \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Texto inv\u00E1lido: deve corresponder ao padr\u00E3o ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} inv\u00E1lido`;\n }\n case \"not_multiple_of\":\n return `N\u00FAmero inv\u00E1lido: deve ser m\u00FAltiplo de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Chave${issue.keys.length > 1 ? \"s\" : \"\"} desconhecida${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Chave inv\u00E1lida em ${issue.origin}`;\n case \"invalid_union\":\n return \"Entrada inv\u00E1lida\";\n case \"invalid_element\":\n return `Valor inv\u00E1lido em ${issue.origin}`;\n default:\n return `Campo inv\u00E1lido`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"caractere\", verb: \"s\u0103 aib\u0103\" },\n file: { unit: \"octe\u021Bi\", verb: \"s\u0103 aib\u0103\" },\n array: { unit: \"elemente\", verb: \"s\u0103 aib\u0103\" },\n set: { unit: \"elemente\", verb: \"s\u0103 aib\u0103\" },\n map: { unit: \"intr\u0103ri\", verb: \"s\u0103 aib\u0103\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"intrare\",\n email: \"adres\u0103 de email\",\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: \"dat\u0103 \u0219i or\u0103 ISO\",\n date: \"dat\u0103 ISO\",\n time: \"or\u0103 ISO\",\n duration: \"durat\u0103 ISO\",\n ipv4: \"adres\u0103 IPv4\",\n ipv6: \"adres\u0103 IPv6\",\n mac: \"adres\u0103 MAC\",\n cidrv4: \"interval IPv4\",\n cidrv6: \"interval IPv6\",\n base64: \"\u0219ir codat base64\",\n base64url: \"\u0219ir codat base64url\",\n json_string: \"\u0219ir JSON\",\n e164: \"num\u0103r E.164\",\n jwt: \"JWT\",\n template_literal: \"intrare\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n string: \"\u0219ir\",\n number: \"num\u0103r\",\n boolean: \"boolean\",\n function: \"func\u021Bie\",\n array: \"matrice\",\n object: \"obiect\",\n undefined: \"nedefinit\",\n symbol: \"simbol\",\n bigint: \"num\u0103r mare\",\n void: \"void\",\n never: \"never\",\n map: \"hart\u0103\",\n set: \"set\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n return `Intrare invalid\u0103: a\u0219teptat ${expected}, primit ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Intrare invalid\u0103: a\u0219teptat ${util.stringifyPrimitive(issue.values[0])}`;\n return `Op\u021Biune invalid\u0103: a\u0219teptat una dintre ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Prea mare: a\u0219teptat ca ${issue.origin ?? \"valoarea\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elemente\"}`;\n return `Prea mare: a\u0219teptat ca ${issue.origin ?? \"valoarea\"} s\u0103 fie ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Prea mic: a\u0219teptat ca ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Prea mic: a\u0219teptat ca ${issue.origin} s\u0103 fie ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u0218ir invalid: trebuie s\u0103 \u00EEnceap\u0103 cu \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u0218ir invalid: trebuie s\u0103 se termine cu \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u0218ir invalid: trebuie s\u0103 includ\u0103 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u0218ir invalid: trebuie s\u0103 se potriveasc\u0103 cu modelul ${_issue.pattern}`;\n return `Format invalid: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Num\u0103r invalid: trebuie s\u0103 fie multiplu de ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Chei nerecunoscute: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Cheie invalid\u0103 \u00EEn ${issue.origin}`;\n case \"invalid_union\":\n return \"Intrare invalid\u0103\";\n case \"invalid_element\":\n return `Valoare invalid\u0103 \u00EEn ${issue.origin}`;\n default:\n return `Intrare invalid\u0103`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nfunction getRussianPlural(count, one, few, many) {\n const absCount = Math.abs(count);\n const lastDigit = absCount % 10;\n const lastTwoDigits = absCount % 100;\n if (lastTwoDigits >= 11 && lastTwoDigits <= 19) {\n return many;\n }\n if (lastDigit === 1) {\n return one;\n }\n if (lastDigit >= 2 && lastDigit <= 4) {\n return few;\n }\n return many;\n}\nconst error = () => {\n const Sizable = {\n string: {\n unit: {\n one: \"\u0441\u0438\u043C\u0432\u043E\u043B\",\n few: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0430\",\n many: \"\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432\",\n },\n verb: \"\u0438\u043C\u0435\u0442\u044C\",\n },\n file: {\n unit: {\n one: \"\u0431\u0430\u0439\u0442\",\n few: \"\u0431\u0430\u0439\u0442\u0430\",\n many: \"\u0431\u0430\u0439\u0442\",\n },\n verb: \"\u0438\u043C\u0435\u0442\u044C\",\n },\n array: {\n unit: {\n one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\",\n many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\",\n },\n verb: \"\u0438\u043C\u0435\u0442\u044C\",\n },\n set: {\n unit: {\n one: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\",\n few: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\",\n many: \"\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\",\n },\n verb: \"\u0438\u043C\u0435\u0442\u044C\",\n },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0432\u0432\u043E\u0434\",\n email: \"email \u0430\u0434\u0440\u0435\u0441\",\n url: \"URL\",\n emoji: \"\u044D\u043C\u043E\u0434\u0437\u0438\",\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 \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043C\u044F\",\n date: \"ISO \u0434\u0430\u0442\u0430\",\n time: \"ISO \u0432\u0440\u0435\u043C\u044F\",\n duration: \"ISO \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u044C\",\n ipv4: \"IPv4 \u0430\u0434\u0440\u0435\u0441\",\n ipv6: \"IPv6 \u0430\u0434\u0440\u0435\u0441\",\n cidrv4: \"IPv4 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n cidrv6: \"IPv6 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D\",\n base64: \"\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64\",\n base64url: \"\u0441\u0442\u0440\u043E\u043A\u0430 \u0432 \u0444\u043E\u0440\u043C\u0430\u0442\u0435 base64url\",\n json_string: \"JSON \u0441\u0442\u0440\u043E\u043A\u0430\",\n e164: \"\u043D\u043E\u043C\u0435\u0440 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0432\u0432\u043E\u0434\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0447\u0438\u0441\u043B\u043E\",\n array: \"\u043C\u0430\u0441\u0441\u0438\u0432\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C instanceof ${issue.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`;\n }\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0430\u0440\u0438\u0430\u043D\u0442: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C \u043E\u0434\u043D\u043E \u0438\u0437 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const maxValue = Number(issue.maximum);\n const unit = getRussianPlural(maxValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue.maximum.toString()} ${unit}`;\n }\n return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\"} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n const minValue = Number(issue.minimum);\n const unit = getRussianPlural(minValue, sizing.unit.one, sizing.unit.few, sizing.unit.many);\n return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${adj}${issue.minimum.toString()} ${unit}`;\n }\n return `\u0421\u043B\u0438\u0448\u043A\u043E\u043C \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C, \u0447\u0442\u043E ${issue.origin} \u0431\u0443\u0434\u0435\u0442 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441 \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F \u043D\u0430 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430: \u0434\u043E\u043B\u0436\u043D\u0430 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0447\u0438\u0441\u043B\u043E: \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043A\u0440\u0430\u0442\u043D\u044B\u043C ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${issue.keys.length > 1 ? \"\u044B\u0435\" : \"\u044B\u0439\"} \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u0438\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435\";\n case \"invalid_element\":\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432 ${issue.origin}`;\n default:\n return `\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"znakov\", verb: \"imeti\" },\n file: { unit: \"bajtov\", verb: \"imeti\" },\n array: { unit: \"elementov\", verb: \"imeti\" },\n set: { unit: \"elementov\", verb: \"imeti\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"vnos\",\n email: \"e-po\u0161tni naslov\",\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 datum in \u010Das\",\n date: \"ISO datum\",\n time: \"ISO \u010Das\",\n duration: \"ISO trajanje\",\n ipv4: \"IPv4 naslov\",\n ipv6: \"IPv6 naslov\",\n cidrv4: \"obseg IPv4\",\n cidrv6: \"obseg IPv6\",\n base64: \"base64 kodiran niz\",\n base64url: \"base64url kodiran niz\",\n json_string: \"JSON niz\",\n e164: \"E.164 \u0161tevilka\",\n jwt: \"JWT\",\n template_literal: \"vnos\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0161tevilo\",\n array: \"tabela\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Neveljaven vnos: pri\u010Dakovano instanceof ${issue.expected}, prejeto ${received}`;\n }\n return `Neveljaven vnos: pri\u010Dakovano ${expected}, prejeto ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Neveljaven vnos: pri\u010Dakovano ${util.stringifyPrimitive(issue.values[0])}`;\n return `Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Preveliko: pri\u010Dakovano, da bo ${issue.origin ?? \"vrednost\"} imelo ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elementov\"}`;\n return `Preveliko: pri\u010Dakovano, da bo ${issue.origin ?? \"vrednost\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Premajhno: pri\u010Dakovano, da bo ${issue.origin} imelo ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Premajhno: pri\u010Dakovano, da bo ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Neveljaven niz: mora se za\u010Deti z \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Neveljaven niz: mora se kon\u010Dati z \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Neveljaven niz: mora vsebovati \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Neveljaven niz: mora ustrezati vzorcu ${_issue.pattern}`;\n return `Neveljaven ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Neveljavno \u0161tevilo: mora biti ve\u010Dkratnik ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Neprepoznan${issue.keys.length > 1 ? \"i klju\u010Di\" : \" klju\u010D\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Neveljaven klju\u010D v ${issue.origin}`;\n case \"invalid_union\":\n return \"Neveljaven vnos\";\n case \"invalid_element\":\n return `Neveljavna vrednost v ${issue.origin}`;\n default:\n return \"Neveljaven vnos\";\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"tecken\", verb: \"att ha\" },\n file: { unit: \"bytes\", verb: \"att ha\" },\n array: { unit: \"objekt\", verb: \"att inneh\u00E5lla\" },\n set: { unit: \"objekt\", verb: \"att inneh\u00E5lla\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"regulj\u00E4rt uttryck\",\n email: \"e-postadress\",\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-datum och tid\",\n date: \"ISO-datum\",\n time: \"ISO-tid\",\n duration: \"ISO-varaktighet\",\n ipv4: \"IPv4-intervall\",\n ipv6: \"IPv6-intervall\",\n cidrv4: \"IPv4-spektrum\",\n cidrv6: \"IPv6-spektrum\",\n base64: \"base64-kodad str\u00E4ng\",\n base64url: \"base64url-kodad str\u00E4ng\",\n json_string: \"JSON-str\u00E4ng\",\n e164: \"E.164-nummer\",\n jwt: \"JWT\",\n template_literal: \"mall-literal\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"antal\",\n array: \"lista\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ogiltig inmatning: f\u00F6rv\u00E4ntat instanceof ${issue.expected}, fick ${received}`;\n }\n return `Ogiltig inmatning: f\u00F6rv\u00E4ntat ${expected}, fick ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ogiltig inmatning: f\u00F6rv\u00E4ntat ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ogiltigt val: f\u00F6rv\u00E4ntade en av ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `F\u00F6r stor(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"element\"}`;\n }\n return `F\u00F6r stor(t): f\u00F6rv\u00E4ntat ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `F\u00F6r lite(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `F\u00F6r lite(t): f\u00F6rv\u00E4ntade ${issue.origin ?? \"v\u00E4rdet\"} att ha ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Ogiltig str\u00E4ng: m\u00E5ste b\u00F6rja med \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Ogiltig str\u00E4ng: m\u00E5ste sluta med \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Ogiltig str\u00E4ng: m\u00E5ste inneh\u00E5lla \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Ogiltig str\u00E4ng: m\u00E5ste matcha m\u00F6nstret \"${_issue.pattern}\"`;\n return `Ogiltig(t) ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ogiltigt tal: m\u00E5ste vara en multipel av ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `${issue.keys.length > 1 ? \"Ok\u00E4nda nycklar\" : \"Ok\u00E4nd nyckel\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Ogiltig nyckel i ${issue.origin ?? \"v\u00E4rdet\"}`;\n case \"invalid_union\":\n return \"Ogiltig input\";\n case \"invalid_element\":\n return `Ogiltigt v\u00E4rde i ${issue.origin ?? \"v\u00E4rdet\"}`;\n default:\n return `Ogiltig input`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n file: { unit: \"\u0BAA\u0BC8\u0B9F\u0BCD\u0B9F\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n array: { unit: \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n set: { unit: \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\", verb: \"\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1\",\n email: \"\u0BAE\u0BBF\u0BA9\u0BCD\u0BA9\u0B9E\u0BCD\u0B9A\u0BB2\u0BCD \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\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 \u0BA4\u0BC7\u0BA4\u0BBF \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD\",\n date: \"ISO \u0BA4\u0BC7\u0BA4\u0BBF\",\n time: \"ISO \u0BA8\u0BC7\u0BB0\u0BAE\u0BCD\",\n duration: \"ISO \u0B95\u0BBE\u0BB2 \u0B85\u0BB3\u0BB5\u0BC1\",\n ipv4: \"IPv4 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n ipv6: \"IPv6 \u0BAE\u0BC1\u0B95\u0BB5\u0BB0\u0BBF\",\n cidrv4: \"IPv4 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1\",\n cidrv6: \"IPv6 \u0BB5\u0BB0\u0BAE\u0BCD\u0BAA\u0BC1\",\n base64: \"base64-encoded \u0B9A\u0BB0\u0BAE\u0BCD\",\n base64url: \"base64url-encoded \u0B9A\u0BB0\u0BAE\u0BCD\",\n json_string: \"JSON \u0B9A\u0BB0\u0BAE\u0BCD\",\n e164: \"E.164 \u0B8E\u0BA3\u0BCD\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0B8E\u0BA3\u0BCD\",\n array: \"\u0B85\u0BA3\u0BBF\",\n null: \"\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 instanceof ${issue.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`;\n }\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0BB0\u0BC1\u0BAA\u0BCD\u0BAA\u0BAE\u0BCD: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${util.joinValues(issue.values, \"|\")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin ?? \"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0B89\u0BB1\u0BC1\u0BAA\u0BCD\u0BAA\u0BC1\u0B95\u0BB3\u0BCD\"} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n }\n return `\u0BAE\u0BBF\u0B95 \u0BAA\u0BC6\u0BB0\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin ?? \"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1\"} ${adj}${issue.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`; //\n }\n return `\u0BAE\u0BBF\u0B95\u0B9A\u0BCD \u0B9A\u0BBF\u0BB1\u0BBF\u0BAF\u0BA4\u0BC1: \u0B8E\u0BA4\u0BBF\u0BB0\u0BCD\u0BAA\u0BBE\u0BB0\u0BCD\u0B95\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${issue.origin} ${adj}${issue.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.prefix}\" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n if (_issue.format === \"ends_with\")\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.suffix}\" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n if (_issue.format === \"includes\")\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: \"${_issue.includes}\" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n if (_issue.format === \"regex\")\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${_issue.pattern} \u0BAE\u0BC1\u0BB1\u0BC8\u0BAA\u0BBE\u0B9F\u0BCD\u0B9F\u0BC1\u0B9F\u0BA9\u0BCD \u0BAA\u0BCA\u0BB0\u0BC1\u0BA8\u0BCD\u0BA4 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${issue.divisor} \u0B87\u0BA9\u0BCD \u0BAA\u0BB2\u0BAE\u0BBE\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;\n case \"unrecognized_keys\":\n return `\u0B85\u0B9F\u0BC8\u0BAF\u0BBE\u0BB3\u0BAE\u0BCD \u0BA4\u0BC6\u0BB0\u0BBF\u0BAF\u0BBE\u0BA4 \u0BB5\u0BBF\u0B9A\u0BC8${issue.keys.length > 1 ? \"\u0B95\u0BB3\u0BCD\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BB5\u0BBF\u0B9A\u0BC8`;\n case \"invalid_union\":\n return \"\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1\";\n case \"invalid_element\":\n return `${issue.origin} \u0B87\u0BB2\u0BCD \u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1`;\n default:\n return `\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B89\u0BB3\u0BCD\u0BB3\u0BC0\u0B9F\u0BC1`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n file: { unit: \"\u0E44\u0E1A\u0E15\u0E4C\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n array: { unit: \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n set: { unit: \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\", verb: \"\u0E04\u0E27\u0E23\u0E21\u0E35\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19\",\n email: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48\u0E2D\u0E35\u0E40\u0E21\u0E25\",\n url: \"URL\",\n emoji: \"\u0E2D\u0E34\u0E42\u0E21\u0E08\u0E34\",\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: \"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n date: \"\u0E27\u0E31\u0E19\u0E17\u0E35\u0E48\u0E41\u0E1A\u0E1A ISO\",\n time: \"\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n duration: \"\u0E0A\u0E48\u0E27\u0E07\u0E40\u0E27\u0E25\u0E32\u0E41\u0E1A\u0E1A ISO\",\n ipv4: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv4\",\n ipv6: \"\u0E17\u0E35\u0E48\u0E2D\u0E22\u0E39\u0E48 IPv6\",\n cidrv4: \"\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv4\",\n cidrv6: \"\u0E0A\u0E48\u0E27\u0E07 IP \u0E41\u0E1A\u0E1A IPv6\",\n base64: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64\",\n base64url: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A Base64 \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A URL\",\n json_string: \"\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E1A\u0E1A JSON\",\n e164: \"\u0E40\u0E1A\u0E2D\u0E23\u0E4C\u0E42\u0E17\u0E23\u0E28\u0E31\u0E1E\u0E17\u0E4C\u0E23\u0E30\u0E2B\u0E27\u0E48\u0E32\u0E07\u0E1B\u0E23\u0E30\u0E40\u0E17\u0E28 (E.164)\",\n jwt: \"\u0E42\u0E17\u0E40\u0E04\u0E19 JWT\",\n template_literal: \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E1B\u0E49\u0E2D\u0E19\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\",\n array: \"\u0E2D\u0E32\u0E23\u0E4C\u0E40\u0E23\u0E22\u0E4C (Array)\",\n null: \"\u0E44\u0E21\u0E48\u0E21\u0E35\u0E04\u0E48\u0E32 (null)\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 instanceof ${issue.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`;\n }\n return `\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19\u0E2B\u0E19\u0E36\u0E48\u0E07\u0E43\u0E19 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19\" : \"\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin ?? \"\u0E04\u0E48\u0E32\"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.maximum.toString()} ${sizing.unit ?? \"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\"}`;\n return `\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin ?? \"\u0E04\u0E48\u0E32\"} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \"\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22\" : \"\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${issue.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${adj} ${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E02\u0E36\u0E49\u0E19\u0E15\u0E49\u0E19\u0E14\u0E49\u0E27\u0E22 \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E25\u0E07\u0E17\u0E49\u0E32\u0E22\u0E14\u0E49\u0E27\u0E22 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E15\u0E49\u0E2D\u0E07\u0E21\u0E35 \"${_issue.includes}\" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`;\n if (_issue.format === \"regex\")\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14 ${_issue.pattern}`;\n return `\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u0E15\u0E31\u0E27\u0E40\u0E25\u0E02\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E15\u0E49\u0E2D\u0E07\u0E40\u0E1B\u0E47\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E17\u0E35\u0E48\u0E2B\u0E32\u0E23\u0E14\u0E49\u0E27\u0E22 ${issue.divisor} \u0E44\u0E14\u0E49\u0E25\u0E07\u0E15\u0E31\u0E27`;\n case \"unrecognized_keys\":\n return `\u0E1E\u0E1A\u0E04\u0E35\u0E22\u0E4C\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E08\u0E31\u0E01: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E44\u0E21\u0E48\u0E15\u0E23\u0E07\u0E01\u0E31\u0E1A\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E22\u0E39\u0E40\u0E19\u0E35\u0E22\u0E19\u0E17\u0E35\u0E48\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E44\u0E27\u0E49\";\n case \"invalid_element\":\n return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${issue.origin}`;\n default:\n return `\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"karakter\", verb: \"olmal\u0131\" },\n file: { unit: \"bayt\", verb: \"olmal\u0131\" },\n array: { unit: \"\u00F6\u011Fe\", verb: \"olmal\u0131\" },\n set: { unit: \"\u00F6\u011Fe\", verb: \"olmal\u0131\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"girdi\",\n email: \"e-posta adresi\",\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 tarih ve saat\",\n date: \"ISO tarih\",\n time: \"ISO saat\",\n duration: \"ISO s\u00FCre\",\n ipv4: \"IPv4 adresi\",\n ipv6: \"IPv6 adresi\",\n cidrv4: \"IPv4 aral\u0131\u011F\u0131\",\n cidrv6: \"IPv6 aral\u0131\u011F\u0131\",\n base64: \"base64 ile \u015Fifrelenmi\u015F metin\",\n base64url: \"base64url ile \u015Fifrelenmi\u015F metin\",\n json_string: \"JSON dizesi\",\n e164: \"E.164 say\u0131s\u0131\",\n jwt: \"JWT\",\n template_literal: \"\u015Eablon dizesi\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Ge\u00E7ersiz de\u011Fer: beklenen instanceof ${issue.expected}, al\u0131nan ${received}`;\n }\n return `Ge\u00E7ersiz de\u011Fer: beklenen ${expected}, al\u0131nan ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Ge\u00E7ersiz de\u011Fer: beklenen ${util.stringifyPrimitive(issue.values[0])}`;\n return `Ge\u00E7ersiz se\u00E7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u00C7ok b\u00FCy\u00FCk: beklenen ${issue.origin ?? \"de\u011Fer\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u00F6\u011Fe\"}`;\n return `\u00C7ok b\u00FCy\u00FCk: beklenen ${issue.origin ?? \"de\u011Fer\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u00C7ok k\u00FC\u00E7\u00FCk: beklenen ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n return `\u00C7ok k\u00FC\u00E7\u00FCk: beklenen ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Ge\u00E7ersiz metin: \"${_issue.prefix}\" ile ba\u015Flamal\u0131`;\n if (_issue.format === \"ends_with\")\n return `Ge\u00E7ersiz metin: \"${_issue.suffix}\" ile bitmeli`;\n if (_issue.format === \"includes\")\n return `Ge\u00E7ersiz metin: \"${_issue.includes}\" i\u00E7ermeli`;\n if (_issue.format === \"regex\")\n return `Ge\u00E7ersiz metin: ${_issue.pattern} desenine uymal\u0131`;\n return `Ge\u00E7ersiz ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Ge\u00E7ersiz say\u0131: ${issue.divisor} ile tam b\u00F6l\u00FCnebilmeli`;\n case \"unrecognized_keys\":\n return `Tan\u0131nmayan anahtar${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} i\u00E7inde ge\u00E7ersiz anahtar`;\n case \"invalid_union\":\n return \"Ge\u00E7ersiz de\u011Fer\";\n case \"invalid_element\":\n return `${issue.origin} i\u00E7inde ge\u00E7ersiz de\u011Fer`;\n default:\n return `Ge\u00E7ersiz de\u011Fer`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n file: { unit: \"\u0431\u0430\u0439\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n array: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n set: { unit: \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\", verb: \"\u043C\u0430\u0442\u0438\u043C\u0435\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\",\n email: \"\u0430\u0434\u0440\u0435\u0441\u0430 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u043F\u043E\u0448\u0442\u0438\",\n url: \"URL\",\n emoji: \"\u0435\u043C\u043E\u0434\u0437\u0456\",\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: \"\u0434\u0430\u0442\u0430 \u0442\u0430 \u0447\u0430\u0441 ISO\",\n date: \"\u0434\u0430\u0442\u0430 ISO\",\n time: \"\u0447\u0430\u0441 ISO\",\n duration: \"\u0442\u0440\u0438\u0432\u0430\u043B\u0456\u0441\u0442\u044C ISO\",\n ipv4: \"\u0430\u0434\u0440\u0435\u0441\u0430 IPv4\",\n ipv6: \"\u0430\u0434\u0440\u0435\u0441\u0430 IPv6\",\n cidrv4: \"\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv4\",\n cidrv6: \"\u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D IPv6\",\n base64: \"\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64\",\n base64url: \"\u0440\u044F\u0434\u043E\u043A \u0443 \u043A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u0456 base64url\",\n json_string: \"\u0440\u044F\u0434\u043E\u043A JSON\",\n e164: \"\u043D\u043E\u043C\u0435\u0440 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0447\u0438\u0441\u043B\u043E\",\n array: \"\u043C\u0430\u0441\u0438\u0432\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F instanceof ${issue.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`;\n }\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0430 \u043E\u043F\u0446\u0456\u044F: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F \u043E\u0434\u043D\u0435 \u0437 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432\"}`;\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u0432\u0435\u043B\u0438\u043A\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin ?? \"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\"} \u0431\u0443\u0434\u0435 ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${issue.origin} \u0431\u0443\u0434\u0435 ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043F\u043E\u0447\u0438\u043D\u0430\u0442\u0438\u0441\u044F \u0437 \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0437\u0430\u043A\u0456\u043D\u0447\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u043D\u0430 \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u043C\u0456\u0441\u0442\u0438\u0442\u0438 \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: \u043F\u043E\u0432\u0438\u043D\u0435\u043D \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438 \u0448\u0430\u0431\u043B\u043E\u043D\u0443 ${_issue.pattern}`;\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0447\u0438\u0441\u043B\u043E: \u043F\u043E\u0432\u0438\u043D\u043D\u043E \u0431\u0443\u0442\u0438 \u043A\u0440\u0430\u0442\u043D\u0438\u043C ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${issue.keys.length > 1 ? \"\u0456\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${issue.origin}`;\n case \"invalid_union\":\n return \"\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456\";\n case \"invalid_element\":\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0443 ${issue.origin}`;\n default:\n return `\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import uk from \"./uk.js\";\n/** @deprecated Use `uk` instead. */\nexport default function () {\n return uk();\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u062D\u0631\u0648\u0641\", verb: \"\u06C1\u0648\u0646\u0627\" },\n file: { unit: \"\u0628\u0627\u0626\u0679\u0633\", verb: \"\u06C1\u0648\u0646\u0627\" },\n array: { unit: \"\u0622\u0626\u0679\u0645\u0632\", verb: \"\u06C1\u0648\u0646\u0627\" },\n set: { unit: \"\u0622\u0626\u0679\u0645\u0632\", verb: \"\u06C1\u0648\u0646\u0627\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0627\u0646 \u067E\u0679\",\n email: \"\u0627\u06CC \u0645\u06CC\u0644 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n url: \"\u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644\",\n emoji: \"\u0627\u06CC\u0645\u0648\u062C\u06CC\",\n uuid: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n uuidv4: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 4\",\n uuidv6: \"\u06CC\u0648 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC \u0648\u06CC 6\",\n nanoid: \"\u0646\u06CC\u0646\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n guid: \"\u062C\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n cuid: \"\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n cuid2: \"\u0633\u06CC \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC 2\",\n ulid: \"\u06CC\u0648 \u0627\u06CC\u0644 \u0622\u0626\u06CC \u0688\u06CC\",\n xid: \"\u0627\u06CC\u06A9\u0633 \u0622\u0626\u06CC \u0688\u06CC\",\n ksuid: \"\u06A9\u06D2 \u0627\u06CC\u0633 \u06CC\u0648 \u0622\u0626\u06CC \u0688\u06CC\",\n datetime: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0688\u06CC\u0679 \u0679\u0627\u0626\u0645\",\n date: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u062A\u0627\u0631\u06CC\u062E\",\n time: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0648\u0642\u062A\",\n duration: \"\u0622\u0626\u06CC \u0627\u06CC\u0633 \u0627\u0648 \u0645\u062F\u062A\",\n ipv4: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n ipv6: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0627\u06CC\u0688\u0631\u06CC\u0633\",\n cidrv4: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 4 \u0631\u06CC\u0646\u062C\",\n cidrv6: \"\u0622\u0626\u06CC \u067E\u06CC \u0648\u06CC 6 \u0631\u06CC\u0646\u062C\",\n base64: \"\u0628\u06CC\u0633 64 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF\",\n base64url: \"\u0628\u06CC\u0633 64 \u06CC\u0648 \u0622\u0631 \u0627\u06CC\u0644 \u0627\u0646 \u06A9\u0648\u0688\u0688 \u0633\u0679\u0631\u0646\u06AF\",\n json_string: \"\u062C\u06D2 \u0627\u06CC\u0633 \u0627\u0648 \u0627\u06CC\u0646 \u0633\u0679\u0631\u0646\u06AF\",\n e164: \"\u0627\u06CC 164 \u0646\u0645\u0628\u0631\",\n jwt: \"\u062C\u06D2 \u0688\u0628\u0644\u06CC\u0648 \u0679\u06CC\",\n template_literal: \"\u0627\u0646 \u067E\u0679\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u0646\u0645\u0628\u0631\",\n array: \"\u0622\u0631\u06D2\",\n null: \"\u0646\u0644\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: instanceof ${issue.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;\n }\n return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${received} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${util.stringifyPrimitive(issue.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n return `\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${util.joinValues(issue.values, \"|\")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue.origin ?? \"\u0648\u06CC\u0644\u06CC\u0648\"} \u06A9\u06D2 ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u0639\u0646\u0627\u0635\u0631\"} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;\n return `\u0628\u06C1\u062A \u0628\u0691\u0627: ${issue.origin ?? \"\u0648\u06CC\u0644\u06CC\u0648\"} \u06A9\u0627 ${adj}${issue.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue.origin} \u06A9\u06D2 ${adj}${issue.minimum.toString()} ${sizing.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;\n }\n return `\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${issue.origin} \u06A9\u0627 ${adj}${issue.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.prefix}\" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n }\n if (_issue.format === \"ends_with\")\n return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.suffix}\" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n if (_issue.format === \"includes\")\n return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \"${_issue.includes}\" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n if (_issue.format === \"regex\")\n return `\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${_issue.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n return `\u063A\u0644\u0637 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${issue.divisor} \u06A9\u0627 \u0645\u0636\u0627\u0639\u0641 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;\n case \"unrecognized_keys\":\n return `\u063A\u06CC\u0631 \u062A\u0633\u0644\u06CC\u0645 \u0634\u062F\u06C1 \u06A9\u06CC${issue.keys.length > 1 ? \"\u0632\" : \"\"}: ${util.joinValues(issue.keys, \"\u060C \")}`;\n case \"invalid_key\":\n return `${issue.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`;\n case \"invalid_union\":\n return \"\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679\";\n case \"invalid_element\":\n return `${issue.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`;\n default:\n return `\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"belgi\", verb: \"bo\u2018lishi kerak\" },\n file: { unit: \"bayt\", verb: \"bo\u2018lishi kerak\" },\n array: { unit: \"element\", verb: \"bo\u2018lishi kerak\" },\n set: { unit: \"element\", verb: \"bo\u2018lishi kerak\" },\n map: { unit: \"yozuv\", verb: \"bo\u2018lishi kerak\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"kirish\",\n email: \"elektron pochta manzili\",\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 sana va vaqti\",\n date: \"ISO sana\",\n time: \"ISO vaqt\",\n duration: \"ISO davomiylik\",\n ipv4: \"IPv4 manzil\",\n ipv6: \"IPv6 manzil\",\n mac: \"MAC manzil\",\n cidrv4: \"IPv4 diapazon\",\n cidrv6: \"IPv6 diapazon\",\n base64: \"base64 kodlangan satr\",\n base64url: \"base64url kodlangan satr\",\n json_string: \"JSON satr\",\n e164: \"E.164 raqam\",\n jwt: \"JWT\",\n template_literal: \"kirish\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"raqam\",\n array: \"massiv\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `Noto\u2018g\u2018ri kirish: kutilgan instanceof ${issue.expected}, qabul qilingan ${received}`;\n }\n return `Noto\u2018g\u2018ri kirish: kutilgan ${expected}, qabul qilingan ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Noto\u2018g\u2018ri kirish: kutilgan ${util.stringifyPrimitive(issue.values[0])}`;\n return `Noto\u2018g\u2018ri variant: quyidagilardan biri kutilgan ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()} ${sizing.unit} ${sizing.verb}`;\n return `Juda katta: kutilgan ${issue.origin ?? \"qiymat\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit} ${sizing.verb}`;\n }\n return `Juda kichik: kutilgan ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Noto\u2018g\u2018ri satr: \"${_issue.prefix}\" bilan boshlanishi kerak`;\n if (_issue.format === \"ends_with\")\n return `Noto\u2018g\u2018ri satr: \"${_issue.suffix}\" bilan tugashi kerak`;\n if (_issue.format === \"includes\")\n return `Noto\u2018g\u2018ri satr: \"${_issue.includes}\" ni o\u2018z ichiga olishi kerak`;\n if (_issue.format === \"regex\")\n return `Noto\u2018g\u2018ri satr: ${_issue.pattern} shabloniga mos kelishi kerak`;\n return `Noto\u2018g\u2018ri ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Noto\u2018g\u2018ri raqam: ${issue.divisor} ning karralisi bo\u2018lishi kerak`;\n case \"unrecognized_keys\":\n return `Noma\u2019lum kalit${issue.keys.length > 1 ? \"lar\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} dagi kalit noto\u2018g\u2018ri`;\n case \"invalid_union\":\n return \"Noto\u2018g\u2018ri kirish\";\n case \"invalid_element\":\n return `${issue.origin} da noto\u2018g\u2018ri qiymat`;\n default:\n return `Noto\u2018g\u2018ri kirish`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"k\u00FD t\u1EF1\", verb: \"c\u00F3\" },\n file: { unit: \"byte\", verb: \"c\u00F3\" },\n array: { unit: \"ph\u1EA7n t\u1EED\", verb: \"c\u00F3\" },\n set: { unit: \"ph\u1EA7n t\u1EED\", verb: \"c\u00F3\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u0111\u1EA7u v\u00E0o\",\n email: \"\u0111\u1ECBa ch\u1EC9 email\",\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: \"ng\u00E0y gi\u1EDD ISO\",\n date: \"ng\u00E0y ISO\",\n time: \"gi\u1EDD ISO\",\n duration: \"kho\u1EA3ng th\u1EDDi gian ISO\",\n ipv4: \"\u0111\u1ECBa ch\u1EC9 IPv4\",\n ipv6: \"\u0111\u1ECBa ch\u1EC9 IPv6\",\n cidrv4: \"d\u1EA3i IPv4\",\n cidrv6: \"d\u1EA3i IPv6\",\n base64: \"chu\u1ED7i m\u00E3 h\u00F3a base64\",\n base64url: \"chu\u1ED7i m\u00E3 h\u00F3a base64url\",\n json_string: \"chu\u1ED7i JSON\",\n e164: \"s\u1ED1 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u0111\u1EA7u v\u00E0o\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"s\u1ED1\",\n array: \"m\u1EA3ng\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i instanceof ${issue.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`;\n }\n return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${util.stringifyPrimitive(issue.values[0])}`;\n return `T\u00F9y ch\u1ECDn kh\u00F4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i m\u1ED9t trong c\u00E1c gi\u00E1 tr\u1ECB ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Qu\u00E1 l\u1EDBn: mong \u0111\u1EE3i ${issue.origin ?? \"gi\u00E1 tr\u1ECB\"} ${sizing.verb} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"ph\u1EA7n t\u1EED\"}`;\n return `Qu\u00E1 l\u1EDBn: mong \u0111\u1EE3i ${issue.origin ?? \"gi\u00E1 tr\u1ECB\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Qu\u00E1 nh\u1ECF: mong \u0111\u1EE3i ${issue.origin} ${sizing.verb} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Qu\u00E1 nh\u1ECF: mong \u0111\u1EE3i ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\u00FAc b\u1EB1ng \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Chu\u1ED7i kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${_issue.pattern}`;\n return `${FormatDictionary[_issue.format] ?? issue.format} kh\u00F4ng h\u1EE3p l\u1EC7`;\n }\n case \"not_multiple_of\":\n return `S\u1ED1 kh\u00F4ng h\u1EE3p l\u1EC7: ph\u1EA3i l\u00E0 b\u1ED9i s\u1ED1 c\u1EE7a ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Kh\u00F3a kh\u00F4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Kh\u00F3a kh\u00F4ng h\u1EE3p l\u1EC7 trong ${issue.origin}`;\n case \"invalid_union\":\n return \"\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7\";\n case \"invalid_element\":\n return `Gi\u00E1 tr\u1ECB kh\u00F4ng h\u1EE3p l\u1EC7 trong ${issue.origin}`;\n default:\n return `\u0110\u1EA7u v\u00E0o kh\u00F4ng h\u1EE3p l\u1EC7`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u5B57\u7B26\", verb: \"\u5305\u542B\" },\n file: { unit: \"\u5B57\u8282\", verb: \"\u5305\u542B\" },\n array: { unit: \"\u9879\", verb: \"\u5305\u542B\" },\n set: { unit: \"\u9879\", verb: \"\u5305\u542B\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u8F93\u5165\",\n email: \"\u7535\u5B50\u90AE\u4EF6\",\n url: \"URL\",\n emoji: \"\u8868\u60C5\u7B26\u53F7\",\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\u65E5\u671F\u65F6\u95F4\",\n date: \"ISO\u65E5\u671F\",\n time: \"ISO\u65F6\u95F4\",\n duration: \"ISO\u65F6\u957F\",\n ipv4: \"IPv4\u5730\u5740\",\n ipv6: \"IPv6\u5730\u5740\",\n cidrv4: \"IPv4\u7F51\u6BB5\",\n cidrv6: \"IPv6\u7F51\u6BB5\",\n base64: \"base64\u7F16\u7801\u5B57\u7B26\u4E32\",\n base64url: \"base64url\u7F16\u7801\u5B57\u7B26\u4E32\",\n json_string: \"JSON\u5B57\u7B26\u4E32\",\n e164: \"E.164\u53F7\u7801\",\n jwt: \"JWT\",\n template_literal: \"\u8F93\u5165\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"\u6570\u5B57\",\n array: \"\u6570\u7EC4\",\n null: \"\u7A7A\u503C(null)\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B instanceof ${issue.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`;\n }\n return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue.origin ?? \"\u503C\"} ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u4E2A\u5143\u7D20\"}`;\n return `\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${issue.origin ?? \"\u503C\"} ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue.origin} ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${issue.origin} ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 \"${_issue.prefix}\" \u5F00\u5934`;\n if (_issue.format === \"ends_with\")\n return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 \"${_issue.suffix}\" \u7ED3\u5C3E`;\n if (_issue.format === \"includes\")\n return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${_issue.pattern}`;\n return `\u65E0\u6548${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${issue.divisor} \u7684\u500D\u6570`;\n case \"unrecognized_keys\":\n return `\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `${issue.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`;\n case \"invalid_union\":\n return \"\u65E0\u6548\u8F93\u5165\";\n case \"invalid_element\":\n return `${issue.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`;\n default:\n return `\u65E0\u6548\u8F93\u5165`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u5B57\u5143\", verb: \"\u64C1\u6709\" },\n file: { unit: \"\u4F4D\u5143\u7D44\", verb: \"\u64C1\u6709\" },\n array: { unit: \"\u9805\u76EE\", verb: \"\u64C1\u6709\" },\n set: { unit: \"\u9805\u76EE\", verb: \"\u64C1\u6709\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u8F38\u5165\",\n email: \"\u90F5\u4EF6\u5730\u5740\",\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 \u65E5\u671F\u6642\u9593\",\n date: \"ISO \u65E5\u671F\",\n time: \"ISO \u6642\u9593\",\n duration: \"ISO \u671F\u9593\",\n ipv4: \"IPv4 \u4F4D\u5740\",\n ipv6: \"IPv6 \u4F4D\u5740\",\n cidrv4: \"IPv4 \u7BC4\u570D\",\n cidrv6: \"IPv6 \u7BC4\u570D\",\n base64: \"base64 \u7DE8\u78BC\u5B57\u4E32\",\n base64url: \"base64url \u7DE8\u78BC\u5B57\u4E32\",\n json_string: \"JSON \u5B57\u4E32\",\n e164: \"E.164 \u6578\u503C\",\n jwt: \"JWT\",\n template_literal: \"\u8F38\u5165\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA instanceof ${issue.expected}\uFF0C\u4F46\u6536\u5230 ${received}`;\n }\n return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${expected}\uFF0C\u4F46\u6536\u5230 ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue.origin ?? \"\u503C\"} \u61C9\u70BA ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"\u500B\u5143\u7D20\"}`;\n return `\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${issue.origin ?? \"\u503C\"} \u61C9\u70BA ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue.origin} \u61C9\u70BA ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${issue.origin} \u61C9\u70BA ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 \"${_issue.prefix}\" \u958B\u982D`;\n }\n if (_issue.format === \"ends_with\")\n return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 \"${_issue.suffix}\" \u7D50\u5C3E`;\n if (_issue.format === \"includes\")\n return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${_issue.pattern}`;\n return `\u7121\u6548\u7684 ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${issue.divisor} \u7684\u500D\u6578`;\n case \"unrecognized_keys\":\n return `\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${issue.keys.length > 1 ? \"\u5011\" : \"\"}\uFF1A${util.joinValues(issue.keys, \"\u3001\")}`;\n case \"invalid_key\":\n return `${issue.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`;\n case \"invalid_union\":\n return \"\u7121\u6548\u7684\u8F38\u5165\u503C\";\n case \"invalid_element\":\n return `${issue.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`;\n default:\n return `\u7121\u6548\u7684\u8F38\u5165\u503C`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"\u00E0mi\", verb: \"n\u00ED\" },\n file: { unit: \"bytes\", verb: \"n\u00ED\" },\n array: { unit: \"nkan\", verb: \"n\u00ED\" },\n set: { unit: \"nkan\", verb: \"n\u00ED\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"\u1EB9\u0300r\u1ECD \u00ECb\u00E1w\u1ECDl\u00E9\",\n email: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC \u00ECm\u1EB9\u0301l\u00EC\",\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: \"\u00E0k\u00F3k\u00F2 ISO\",\n date: \"\u1ECDj\u1ECD\u0301 ISO\",\n time: \"\u00E0k\u00F3k\u00F2 ISO\",\n duration: \"\u00E0k\u00F3k\u00F2 t\u00F3 p\u00E9 ISO\",\n ipv4: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC IPv4\",\n ipv6: \"\u00E0d\u00EDr\u1EB9\u0301s\u00EC IPv6\",\n cidrv4: \"\u00E0gb\u00E8gb\u00E8 IPv4\",\n cidrv6: \"\u00E0gb\u00E8gb\u00E8 IPv6\",\n base64: \"\u1ECD\u0300r\u1ECD\u0300 t\u00ED a k\u1ECD\u0301 n\u00ED base64\",\n base64url: \"\u1ECD\u0300r\u1ECD\u0300 base64url\",\n json_string: \"\u1ECD\u0300r\u1ECD\u0300 JSON\",\n e164: \"n\u1ECD\u0301mb\u00E0 E.164\",\n jwt: \"JWT\",\n template_literal: \"\u1EB9\u0300r\u1ECD \u00ECb\u00E1w\u1ECDl\u00E9\",\n };\n const TypeDictionary = {\n nan: \"NaN\",\n number: \"n\u1ECD\u0301mb\u00E0\",\n array: \"akop\u1ECD\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = TypeDictionary[issue.expected] ?? issue.expected;\n const receivedType = util.parsedType(issue.input);\n const received = TypeDictionary[receivedType] ?? receivedType;\n if (/^[A-Z]/.test(issue.expected)) {\n return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi instanceof ${issue.expected}, \u00E0m\u1ECD\u0300 a r\u00ED ${received}`;\n }\n return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi ${expected}, \u00E0m\u1ECD\u0300 a r\u00ED ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e: a n\u00ED l\u00E1ti fi ${util.stringifyPrimitive(issue.values[0])}`;\n return `\u00C0\u1E63\u00E0y\u00E0n a\u1E63\u00EC\u1E63e: yan \u1ECD\u0300kan l\u00E1ra ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `T\u00F3 p\u1ECD\u0300 j\u00F9: a n\u00ED l\u00E1ti j\u1EB9\u0301 p\u00E9 ${issue.origin ?? \"iye\"} ${sizing.verb} ${adj}${issue.maximum} ${sizing.unit}`;\n return `T\u00F3 p\u1ECD\u0300 j\u00F9: a n\u00ED l\u00E1ti j\u1EB9\u0301 ${adj}${issue.maximum}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `K\u00E9r\u00E9 ju: a n\u00ED l\u00E1ti j\u1EB9\u0301 p\u00E9 ${issue.origin} ${sizing.verb} ${adj}${issue.minimum} ${sizing.unit}`;\n return `K\u00E9r\u00E9 ju: a n\u00ED l\u00E1ti j\u1EB9\u0301 ${adj}${issue.minimum}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\")\n return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u1EB9\u0300r\u1EB9\u0300 p\u1EB9\u0300l\u00FA \"${_issue.prefix}\"`;\n if (_issue.format === \"ends_with\")\n return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 par\u00ED p\u1EB9\u0300l\u00FA \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 n\u00ED \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `\u1ECC\u0300r\u1ECD\u0300 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\u00E1 \u00E0p\u1EB9\u1EB9r\u1EB9 mu ${_issue.pattern}`;\n return `A\u1E63\u00EC\u1E63e: ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `N\u1ECD\u0301mb\u00E0 a\u1E63\u00EC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 j\u1EB9\u0301 \u00E8y\u00E0 p\u00EDp\u00EDn ti ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `B\u1ECDt\u00ECn\u00EC \u00E0\u00ECm\u1ECD\u0300: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `B\u1ECDt\u00ECn\u00EC a\u1E63\u00EC\u1E63e n\u00EDn\u00FA ${issue.origin}`;\n case \"invalid_union\":\n return \"\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e\";\n case \"invalid_element\":\n return `Iye a\u1E63\u00EC\u1E63e n\u00EDn\u00FA ${issue.origin}`;\n default:\n return \"\u00CCb\u00E1w\u1ECDl\u00E9 a\u1E63\u00EC\u1E63e\";\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n", "var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = 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 _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 _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,\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,\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 : () => 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 _issue.input ?? (_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 return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\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\";\n// function initializeContext(inputs: JSONSchemaGeneratorParams): ToJSONSchemaContext {\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 cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\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 // 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 Object.assign(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}\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 // 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\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // 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}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // 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\n // 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(\"/\")}/` +\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}\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 Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(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\n // This handles cases like: readonly().meta({id}).describe()\n // 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 for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\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 Object.assign(result, root.def ?? root.schema);\n // The `id` in `.meta()` is a Zod-specific registration tag used to extract\n // schemas into $defs \u2014 it is not user-facing JSON Schema metadata. Strip it\n // from the output body where it would otherwise leak. The id is preserved\n // 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\n const defs = ctx.external?.defs ?? {};\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 defs[seen.defId] = seen.def;\n }\n }\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\n // each call to finalize() is functionally independent\n // 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 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, initializeContext, process, } from \"./to-json-schema.js\";\nimport { 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 } = 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 // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\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.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\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 if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\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 if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\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 const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\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 if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\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 if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\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};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n 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 v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.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)\n // 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};\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 if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\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 json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\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\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // 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 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 if (keyValues) {\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};\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 json.default = JSON.parse(JSON.stringify(def.defaultValue));\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 json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\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 throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\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 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 { allProcessors } from \"./json-schema-processors.js\";\nimport { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\n/**\n * Legacy class-based interface for JSON Schema generation.\n * This class wraps the new functional implementation to provide backward compatibility.\n *\n * @deprecated Use the `toJSONSchema` function instead for new code.\n *\n * @example\n * ```typescript\n * // Legacy usage (still supported)\n * const gen = new JSONSchemaGenerator({ target: \"draft-07\" });\n * gen.process(schema);\n * const result = gen.emit(schema);\n *\n * // Preferred modern usage\n * const result = toJSONSchema(schema, { target: \"draft-07\" });\n * ```\n */\nexport class JSONSchemaGenerator {\n /** @deprecated Access via ctx instead */\n get metadataRegistry() {\n return this.ctx.metadataRegistry;\n }\n /** @deprecated Access via ctx instead */\n get target() {\n return this.ctx.target;\n }\n /** @deprecated Access via ctx instead */\n get unrepresentable() {\n return this.ctx.unrepresentable;\n }\n /** @deprecated Access via ctx instead */\n get override() {\n return this.ctx.override;\n }\n /** @deprecated Access via ctx instead */\n get io() {\n return this.ctx.io;\n }\n /** @deprecated Access via ctx instead */\n get counter() {\n return this.ctx.counter;\n }\n set counter(value) {\n this.ctx.counter = value;\n }\n /** @deprecated Access via ctx instead */\n get seen() {\n return this.ctx.seen;\n }\n constructor(params) {\n // Normalize target for internal context\n let normalizedTarget = params?.target ?? \"draft-2020-12\";\n if (normalizedTarget === \"draft-4\")\n normalizedTarget = \"draft-04\";\n if (normalizedTarget === \"draft-7\")\n normalizedTarget = \"draft-07\";\n this.ctx = initializeContext({\n processors: allProcessors,\n target: normalizedTarget,\n ...(params?.metadata && { metadata: params.metadata }),\n ...(params?.unrepresentable && { unrepresentable: params.unrepresentable }),\n ...(params?.override && { override: params.override }),\n ...(params?.io && { io: params.io }),\n });\n }\n /**\n * Process a schema to prepare it for JSON Schema generation.\n * This must be called before emit().\n */\n process(schema, _params = { path: [], schemaPath: [] }) {\n return process(schema, this.ctx, _params);\n }\n /**\n * Emit the final JSON Schema after processing.\n * Must call process() first.\n */\n emit(schema, _params) {\n // Apply emit params to the context\n if (_params) {\n if (_params.cycles)\n this.ctx.cycles = _params.cycles;\n if (_params.reused)\n this.ctx.reused = _params.reused;\n if (_params.external)\n this.ctx.external = _params.external;\n }\n extractDefs(this.ctx, schema);\n const result = finalize(this.ctx, schema);\n // Strip ~standard property to match old implementation's return type\n const { \"~standard\": _, ...plainResult } = result;\n return plainResult;\n }\n}\n", "export {};\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 * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\n// Lazy-bind builder methods.\n//\n// Builder methods (`.optional`, `.array`, `.refine`, ...) live as\n// non-enumerable getters on each concrete schema constructor's\n// prototype. On first access from an instance the getter allocates\n// `fn.bind(this)` and caches it as an own property on that instance,\n// so detached usage (`const m = schema.optional; m()`) still works\n// and the per-instance allocation only happens for methods actually\n// touched.\n//\n// One install per (prototype, group), memoized by `_installedGroups`.\nconst _installedGroups = /* @__PURE__ */ new WeakMap();\nfunction _installLazyMethods(inst, group, methods) {\n const proto = Object.getPrototypeOf(inst);\n let installed = _installedGroups.get(proto);\n if (!installed) {\n installed = new Set();\n _installedGroups.set(proto, installed);\n }\n if (installed.has(group))\n return;\n installed.add(group);\n for (const key in methods) {\n const fn = methods[key];\n Object.defineProperty(proto, key, {\n configurable: true,\n enumerable: false,\n get() {\n const bound = fn.bind(this);\n Object.defineProperty(this, key, {\n configurable: true,\n writable: true,\n enumerable: true,\n value: bound,\n });\n return bound;\n },\n set(v) {\n Object.defineProperty(this, key, {\n configurable: true,\n writable: true,\n enumerable: true,\n value: v,\n });\n },\n });\n }\n}\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n Object.assign(inst[\"~standard\"], {\n jsonSchema: {\n input: createStandardJSONSchemaMethod(inst, \"input\"),\n output: createStandardJSONSchemaMethod(inst, \"output\"),\n },\n });\n inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n inst.def = def;\n inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // Parse-family is intentionally kept as per-instance closures: these are\n // the hot path AND the most-detached methods (`arr.map(schema.parse)`,\n // `const { parse } = schema`, etc.). Eager closures here mean callers pay\n // ~12 closure allocations per schema but get monomorphic call sites and\n // detached usage that \"just works\".\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n inst.encode = (data, params) => parse.encode(inst, data, params);\n inst.decode = (data, params) => parse.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n // All builder methods are placed on the internal prototype as lazy-bind\n // getters. On first access per-instance, a bound thunk is allocated and\n // cached as an own property; subsequent accesses skip the getter. This\n // means: no per-instance allocation for unused methods, full\n // detachability preserved (`const m = schema.optional; m()` works), and\n // shared underlying function references across all instances.\n _installLazyMethods(inst, \"ZodType\", {\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)\n // returns a clone with `data` registered. The mapped type picks\n // up the second overload, so we accept variadic any-args and\n // 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) {\n return fn(this);\n },\n });\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n return inst;\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 _installLazyMethods(inst, \"_ZodString\", {\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 });\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(core._email(ZodEmail, params));\n inst.url = (params) => inst.check(core._url(ZodURL, params));\n inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(iso.datetime(params));\n inst.date = (params) => inst.check(iso.date(params));\n inst.time = (params) => inst.check(iso.time(params));\n inst.duration = (params) => inst.check(iso.duration(params));\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 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 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 _installLazyMethods(inst, \"ZodNumber\", {\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 });\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});\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 inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, 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});\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});\n// int64\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\n// uint64\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 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 _installLazyMethods(inst, \"ZodArray\", {\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 });\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 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.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\n _installLazyMethods(inst, \"ZodObject\", {\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 required(...args) {\n return util.required(ZodNonOptional, this, args[0]);\n },\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,\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 core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\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 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?) \u2014 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;\nexport function partialRecord(keyType, valueType, params) {\n const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\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 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 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 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 _issue.input ?? (_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 payload.fallback = true;\n return payload;\n });\n }\n payload.value = output;\n payload.fallback = true;\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 : () => 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", "export { _lt as lt, _lte as lte, _gt as gt, _gte as gte, _positive as positive, _negative as negative, _nonpositive as nonpositive, _nonnegative as nonnegative, _multipleOf as multipleOf, _maxSize as maxSize, _minSize as minSize, _size as size, _maxLength as maxLength, _minLength as minLength, _length as length, _regex as regex, _lowercase as lowercase, _uppercase as uppercase, _includes as includes, _startsWith as startsWith, _endsWith as endsWith, _property as property, _mime as mime, _overwrite as overwrite, _normalize as normalize, _trim as trim, _toLowerCase as toLowerCase, _toUpperCase as toUpperCase, _slugify as slugify, } from \"../core/index.js\";\n", "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n", "import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => core.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => core.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nexport const ZodError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer, {\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);\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", "// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n invalid_type: \"invalid_type\",\n too_big: \"too_big\",\n too_small: \"too_small\",\n invalid_format: \"invalid_format\",\n not_multiple_of: \"not_multiple_of\",\n unrecognized_keys: \"unrecognized_keys\",\n invalid_union: \"invalid_union\",\n invalid_key: \"invalid_key\",\n invalid_element: \"invalid_element\",\n invalid_value: \"invalid_value\",\n custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n core.config({\n customError: map,\n });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n", "import { globalRegistry } from \"../core/registries.js\";\nimport * as _checks from \"./checks.js\";\nimport * as _iso from \"./iso.js\";\nimport * as _schemas from \"./schemas.js\";\n// Local z object to avoid circular dependency with ../index.js\nconst z = {\n ..._schemas,\n ..._checks,\n iso: _iso,\n};\n// Keys that are recognized and handled by the conversion logic\nconst RECOGNIZED_KEYS = /*@__PURE__*/ new Set([\n // Schema identification\n \"$schema\",\n \"$ref\",\n \"$defs\",\n \"definitions\",\n // Core schema keywords\n \"$id\",\n \"id\",\n \"$comment\",\n \"$anchor\",\n \"$vocabulary\",\n \"$dynamicRef\",\n \"$dynamicAnchor\",\n // Type\n \"type\",\n \"enum\",\n \"const\",\n // Composition\n \"anyOf\",\n \"oneOf\",\n \"allOf\",\n \"not\",\n // Object\n \"properties\",\n \"required\",\n \"additionalProperties\",\n \"patternProperties\",\n \"propertyNames\",\n \"minProperties\",\n \"maxProperties\",\n // Array\n \"items\",\n \"prefixItems\",\n \"additionalItems\",\n \"minItems\",\n \"maxItems\",\n \"uniqueItems\",\n \"contains\",\n \"minContains\",\n \"maxContains\",\n // String\n \"minLength\",\n \"maxLength\",\n \"pattern\",\n \"format\",\n // Number\n \"minimum\",\n \"maximum\",\n \"exclusiveMinimum\",\n \"exclusiveMaximum\",\n \"multipleOf\",\n // Already handled metadata\n \"description\",\n \"default\",\n // Content\n \"contentEncoding\",\n \"contentMediaType\",\n \"contentSchema\",\n // Unsupported (error-throwing)\n \"unevaluatedItems\",\n \"unevaluatedProperties\",\n \"if\",\n \"then\",\n \"else\",\n \"dependentSchemas\",\n \"dependentRequired\",\n // OpenAPI\n \"nullable\",\n \"readOnly\",\n]);\nfunction detectVersion(schema, defaultTarget) {\n const $schema = schema.$schema;\n if ($schema === \"https://json-schema.org/draft/2020-12/schema\") {\n return \"draft-2020-12\";\n }\n if ($schema === \"http://json-schema.org/draft-07/schema#\") {\n return \"draft-7\";\n }\n if ($schema === \"http://json-schema.org/draft-04/schema#\") {\n return \"draft-4\";\n }\n // Use defaultTarget if provided, otherwise default to draft-2020-12\n return defaultTarget ?? \"draft-2020-12\";\n}\nfunction resolveRef(ref, ctx) {\n if (!ref.startsWith(\"#\")) {\n throw new Error(\"External $ref is not supported, only local refs (#/...) are allowed\");\n }\n const path = ref.slice(1).split(\"/\").filter(Boolean);\n // Handle root reference \"#\"\n if (path.length === 0) {\n return ctx.rootSchema;\n }\n const defsKey = ctx.version === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (path[0] === defsKey) {\n const key = path[1];\n if (!key || !ctx.defs[key]) {\n throw new Error(`Reference not found: ${ref}`);\n }\n return ctx.defs[key];\n }\n throw new Error(`Reference not found: ${ref}`);\n}\nfunction convertBaseSchema(schema, ctx) {\n // Handle unsupported features\n if (schema.not !== undefined) {\n // Special case: { not: {} } represents never\n if (typeof schema.not === \"object\" && Object.keys(schema.not).length === 0) {\n return z.never();\n }\n throw new Error(\"not is not supported in Zod (except { not: {} } for never)\");\n }\n if (schema.unevaluatedItems !== undefined) {\n throw new Error(\"unevaluatedItems is not supported\");\n }\n if (schema.unevaluatedProperties !== undefined) {\n throw new Error(\"unevaluatedProperties is not supported\");\n }\n if (schema.if !== undefined || schema.then !== undefined || schema.else !== undefined) {\n throw new Error(\"Conditional schemas (if/then/else) are not supported\");\n }\n if (schema.dependentSchemas !== undefined || schema.dependentRequired !== undefined) {\n throw new Error(\"dependentSchemas and dependentRequired are not supported\");\n }\n // Handle $ref\n if (schema.$ref) {\n const refPath = schema.$ref;\n if (ctx.refs.has(refPath)) {\n return ctx.refs.get(refPath);\n }\n if (ctx.processing.has(refPath)) {\n // Circular reference - use lazy\n return z.lazy(() => {\n if (!ctx.refs.has(refPath)) {\n throw new Error(`Circular reference not resolved: ${refPath}`);\n }\n return ctx.refs.get(refPath);\n });\n }\n ctx.processing.add(refPath);\n const resolved = resolveRef(refPath, ctx);\n const zodSchema = convertSchema(resolved, ctx);\n ctx.refs.set(refPath, zodSchema);\n ctx.processing.delete(refPath);\n return zodSchema;\n }\n // Handle enum\n if (schema.enum !== undefined) {\n const enumValues = schema.enum;\n // Special case: OpenAPI 3.0 null representation { type: \"string\", nullable: true, enum: [null] }\n if (ctx.version === \"openapi-3.0\" &&\n schema.nullable === true &&\n enumValues.length === 1 &&\n enumValues[0] === null) {\n return z.null();\n }\n if (enumValues.length === 0) {\n return z.never();\n }\n if (enumValues.length === 1) {\n return z.literal(enumValues[0]);\n }\n // Check if all values are strings\n if (enumValues.every((v) => typeof v === \"string\")) {\n return z.enum(enumValues);\n }\n // Mixed types - use union of literals\n const literalSchemas = enumValues.map((v) => z.literal(v));\n if (literalSchemas.length < 2) {\n return literalSchemas[0];\n }\n return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]);\n }\n // Handle const\n if (schema.const !== undefined) {\n return z.literal(schema.const);\n }\n // Handle type\n const type = schema.type;\n if (Array.isArray(type)) {\n // Expand type array into anyOf union\n const typeSchemas = type.map((t) => {\n const typeSchema = { ...schema, type: t };\n return convertBaseSchema(typeSchema, ctx);\n });\n if (typeSchemas.length === 0) {\n return z.never();\n }\n if (typeSchemas.length === 1) {\n return typeSchemas[0];\n }\n return z.union(typeSchemas);\n }\n if (!type) {\n // No type specified - empty schema (any)\n return z.any();\n }\n let zodSchema;\n switch (type) {\n case \"string\": {\n let stringSchema = z.string();\n // Apply format using .check() with Zod format functions\n if (schema.format) {\n const format = schema.format;\n // Map common formats to Zod check functions\n if (format === \"email\") {\n stringSchema = stringSchema.check(z.email());\n }\n else if (format === \"uri\" || format === \"uri-reference\") {\n stringSchema = stringSchema.check(z.url());\n }\n else if (format === \"uuid\" || format === \"guid\") {\n stringSchema = stringSchema.check(z.uuid());\n }\n else if (format === \"date-time\") {\n stringSchema = stringSchema.check(z.iso.datetime());\n }\n else if (format === \"date\") {\n stringSchema = stringSchema.check(z.iso.date());\n }\n else if (format === \"time\") {\n stringSchema = stringSchema.check(z.iso.time());\n }\n else if (format === \"duration\") {\n stringSchema = stringSchema.check(z.iso.duration());\n }\n else if (format === \"ipv4\") {\n stringSchema = stringSchema.check(z.ipv4());\n }\n else if (format === \"ipv6\") {\n stringSchema = stringSchema.check(z.ipv6());\n }\n else if (format === \"mac\") {\n stringSchema = stringSchema.check(z.mac());\n }\n else if (format === \"cidr\") {\n stringSchema = stringSchema.check(z.cidrv4());\n }\n else if (format === \"cidr-v6\") {\n stringSchema = stringSchema.check(z.cidrv6());\n }\n else if (format === \"base64\") {\n stringSchema = stringSchema.check(z.base64());\n }\n else if (format === \"base64url\") {\n stringSchema = stringSchema.check(z.base64url());\n }\n else if (format === \"e164\") {\n stringSchema = stringSchema.check(z.e164());\n }\n else if (format === \"jwt\") {\n stringSchema = stringSchema.check(z.jwt());\n }\n else if (format === \"emoji\") {\n stringSchema = stringSchema.check(z.emoji());\n }\n else if (format === \"nanoid\") {\n stringSchema = stringSchema.check(z.nanoid());\n }\n else if (format === \"cuid\") {\n stringSchema = stringSchema.check(z.cuid());\n }\n else if (format === \"cuid2\") {\n stringSchema = stringSchema.check(z.cuid2());\n }\n else if (format === \"ulid\") {\n stringSchema = stringSchema.check(z.ulid());\n }\n else if (format === \"xid\") {\n stringSchema = stringSchema.check(z.xid());\n }\n else if (format === \"ksuid\") {\n stringSchema = stringSchema.check(z.ksuid());\n }\n // Note: json-string format is not currently supported by Zod\n // Custom formats are ignored - keep as plain string\n }\n // Apply constraints\n if (typeof schema.minLength === \"number\") {\n stringSchema = stringSchema.min(schema.minLength);\n }\n if (typeof schema.maxLength === \"number\") {\n stringSchema = stringSchema.max(schema.maxLength);\n }\n if (schema.pattern) {\n // JSON Schema patterns are not implicitly anchored (match anywhere in string)\n stringSchema = stringSchema.regex(new RegExp(schema.pattern));\n }\n zodSchema = stringSchema;\n break;\n }\n case \"number\":\n case \"integer\": {\n let numberSchema = type === \"integer\" ? z.number().int() : z.number();\n // Apply constraints\n if (typeof schema.minimum === \"number\") {\n numberSchema = numberSchema.min(schema.minimum);\n }\n if (typeof schema.maximum === \"number\") {\n numberSchema = numberSchema.max(schema.maximum);\n }\n if (typeof schema.exclusiveMinimum === \"number\") {\n numberSchema = numberSchema.gt(schema.exclusiveMinimum);\n }\n else if (schema.exclusiveMinimum === true && typeof schema.minimum === \"number\") {\n numberSchema = numberSchema.gt(schema.minimum);\n }\n if (typeof schema.exclusiveMaximum === \"number\") {\n numberSchema = numberSchema.lt(schema.exclusiveMaximum);\n }\n else if (schema.exclusiveMaximum === true && typeof schema.maximum === \"number\") {\n numberSchema = numberSchema.lt(schema.maximum);\n }\n if (typeof schema.multipleOf === \"number\") {\n numberSchema = numberSchema.multipleOf(schema.multipleOf);\n }\n zodSchema = numberSchema;\n break;\n }\n case \"boolean\": {\n zodSchema = z.boolean();\n break;\n }\n case \"null\": {\n zodSchema = z.null();\n break;\n }\n case \"object\": {\n const shape = {};\n const properties = schema.properties || {};\n const requiredSet = new Set(schema.required || []);\n // Convert properties - mark optional ones\n for (const [key, propSchema] of Object.entries(properties)) {\n const propZodSchema = convertSchema(propSchema, ctx);\n // If not in required array, make it optional\n shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional();\n }\n // Handle propertyNames\n if (schema.propertyNames) {\n const keySchema = convertSchema(schema.propertyNames, ctx);\n const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === \"object\"\n ? convertSchema(schema.additionalProperties, ctx)\n : z.any();\n // Case A: No properties (pure record)\n if (Object.keys(shape).length === 0) {\n zodSchema = z.record(keySchema, valueSchema);\n break;\n }\n // Case B: With properties (intersection of object and looseRecord)\n const objectSchema = z.object(shape).passthrough();\n const recordSchema = z.looseRecord(keySchema, valueSchema);\n zodSchema = z.intersection(objectSchema, recordSchema);\n break;\n }\n // Handle patternProperties\n if (schema.patternProperties) {\n // patternProperties: keys matching pattern must satisfy corresponding schema\n // Use loose records so non-matching keys pass through\n const patternProps = schema.patternProperties;\n const patternKeys = Object.keys(patternProps);\n const looseRecords = [];\n for (const pattern of patternKeys) {\n const patternValue = convertSchema(patternProps[pattern], ctx);\n const keySchema = z.string().regex(new RegExp(pattern));\n looseRecords.push(z.looseRecord(keySchema, patternValue));\n }\n // Build intersection: object schema + all pattern property records\n const schemasToIntersect = [];\n if (Object.keys(shape).length > 0) {\n // Use passthrough so patternProperties can validate additional keys\n schemasToIntersect.push(z.object(shape).passthrough());\n }\n schemasToIntersect.push(...looseRecords);\n if (schemasToIntersect.length === 0) {\n zodSchema = z.object({}).passthrough();\n }\n else if (schemasToIntersect.length === 1) {\n zodSchema = schemasToIntersect[0];\n }\n else {\n // Chain intersections: (A & B) & C & D ...\n let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]);\n for (let i = 2; i < schemasToIntersect.length; i++) {\n result = z.intersection(result, schemasToIntersect[i]);\n }\n zodSchema = result;\n }\n break;\n }\n // Handle additionalProperties\n // In JSON Schema, additionalProperties defaults to true (allow any extra properties)\n // In Zod, objects strip unknown keys by default, so we need to handle this explicitly\n const objectSchema = z.object(shape);\n if (schema.additionalProperties === false) {\n // Strict mode - no extra properties allowed\n zodSchema = objectSchema.strict();\n }\n else if (typeof schema.additionalProperties === \"object\") {\n // Extra properties must match the specified schema\n zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx));\n }\n else {\n // additionalProperties is true or undefined - allow any extra properties (passthrough)\n zodSchema = objectSchema.passthrough();\n }\n break;\n }\n case \"array\": {\n // TODO: uniqueItems is not supported\n // TODO: contains/minContains/maxContains are not supported\n // Check if this is a tuple (prefixItems or items as array)\n const prefixItems = schema.prefixItems;\n const items = schema.items;\n if (prefixItems && Array.isArray(prefixItems)) {\n // Tuple with prefixItems (draft-2020-12)\n const tupleItems = prefixItems.map((item) => convertSchema(item, ctx));\n const rest = items && typeof items === \"object\" && !Array.isArray(items)\n ? convertSchema(items, ctx)\n : undefined;\n if (rest) {\n zodSchema = z.tuple(tupleItems).rest(rest);\n }\n else {\n zodSchema = z.tuple(tupleItems);\n }\n // Apply minItems/maxItems constraints to tuples\n if (typeof schema.minItems === \"number\") {\n zodSchema = zodSchema.check(z.minLength(schema.minItems));\n }\n if (typeof schema.maxItems === \"number\") {\n zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n }\n }\n else if (Array.isArray(items)) {\n // Tuple with items array (draft-7)\n const tupleItems = items.map((item) => convertSchema(item, ctx));\n const rest = schema.additionalItems && typeof schema.additionalItems === \"object\"\n ? convertSchema(schema.additionalItems, ctx)\n : undefined; // additionalItems: false means no rest, handled by default tuple behavior\n if (rest) {\n zodSchema = z.tuple(tupleItems).rest(rest);\n }\n else {\n zodSchema = z.tuple(tupleItems);\n }\n // Apply minItems/maxItems constraints to tuples\n if (typeof schema.minItems === \"number\") {\n zodSchema = zodSchema.check(z.minLength(schema.minItems));\n }\n if (typeof schema.maxItems === \"number\") {\n zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n }\n }\n else if (items !== undefined) {\n // Regular array\n const element = convertSchema(items, ctx);\n let arraySchema = z.array(element);\n // Apply constraints\n if (typeof schema.minItems === \"number\") {\n arraySchema = arraySchema.min(schema.minItems);\n }\n if (typeof schema.maxItems === \"number\") {\n arraySchema = arraySchema.max(schema.maxItems);\n }\n zodSchema = arraySchema;\n }\n else {\n // No items specified - array of any\n zodSchema = z.array(z.any());\n }\n break;\n }\n default:\n throw new Error(`Unsupported type: ${type}`);\n }\n return zodSchema;\n}\nfunction convertSchema(schema, ctx) {\n if (typeof schema === \"boolean\") {\n return schema ? z.any() : z.never();\n }\n // Convert base schema first (ignoring composition keywords)\n let baseSchema = convertBaseSchema(schema, ctx);\n const hasExplicitType = schema.type || schema.enum !== undefined || schema.const !== undefined;\n // Process composition keywords LAST (they can appear together)\n // Handle anyOf - wrap base schema with union\n if (schema.anyOf && Array.isArray(schema.anyOf)) {\n const options = schema.anyOf.map((s) => convertSchema(s, ctx));\n const anyOfUnion = z.union(options);\n baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;\n }\n // Handle oneOf - exclusive union (exactly one must match)\n if (schema.oneOf && Array.isArray(schema.oneOf)) {\n const options = schema.oneOf.map((s) => convertSchema(s, ctx));\n const oneOfUnion = z.xor(options);\n baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;\n }\n // Handle allOf - wrap base schema with intersection\n if (schema.allOf && Array.isArray(schema.allOf)) {\n if (schema.allOf.length === 0) {\n baseSchema = hasExplicitType ? baseSchema : z.any();\n }\n else {\n let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx);\n const startIdx = hasExplicitType ? 0 : 1;\n for (let i = startIdx; i < schema.allOf.length; i++) {\n result = z.intersection(result, convertSchema(schema.allOf[i], ctx));\n }\n baseSchema = result;\n }\n }\n // Handle nullable (OpenAPI 3.0)\n if (schema.nullable === true && ctx.version === \"openapi-3.0\") {\n baseSchema = z.nullable(baseSchema);\n }\n // Handle readOnly\n if (schema.readOnly === true) {\n baseSchema = z.readonly(baseSchema);\n }\n // Apply `default` so it wraps the fully-composed schema. This ensures\n // `parse(undefined) -> default` works regardless of which branch of\n // `convertBaseSchema` produced the inner schema (enum/const/not/typed/etc.).\n if (schema.default !== undefined) {\n baseSchema = baseSchema.default(schema.default);\n }\n // Collect non-description annotation metadata into the user-supplied\n // registry. Description is handled separately below via `.describe()` to\n // preserve the contract that `schema.description` reads from globalRegistry.\n const extraMeta = {};\n const coreMetadataKeys = [\"$id\", \"id\", \"$comment\", \"$anchor\", \"$vocabulary\", \"$dynamicRef\", \"$dynamicAnchor\"];\n for (const key of coreMetadataKeys) {\n if (key in schema) {\n extraMeta[key] = schema[key];\n }\n }\n const contentMetadataKeys = [\"contentEncoding\", \"contentMediaType\", \"contentSchema\"];\n for (const key of contentMetadataKeys) {\n if (key in schema) {\n extraMeta[key] = schema[key];\n }\n }\n for (const key of Object.keys(schema)) {\n if (!RECOGNIZED_KEYS.has(key)) {\n extraMeta[key] = schema[key];\n }\n }\n if (Object.keys(extraMeta).length > 0) {\n ctx.registry.add(baseSchema, extraMeta);\n }\n // Apply description last. `.describe()` clones the schema and sets\n // `_zod.parent` on the clone, so registry lookups on the returned reference\n // still resolve `extraMeta` via parent inheritance.\n if (schema.description) {\n baseSchema = baseSchema.describe(schema.description);\n }\n return baseSchema;\n}\n/**\n * Converts a JSON Schema to a Zod schema. This function should be considered semi-experimental. It's behavior is liable to change. */\nexport function fromJSONSchema(schema, params) {\n // Handle boolean schemas\n if (typeof schema === \"boolean\") {\n return schema ? z.any() : z.never();\n }\n // Normalize input via a JSON round-trip. This guarantees the converter\n // walks a plain, finite, JSON-valid object graph: cyclic inputs fail here,\n // getter/Proxy-based properties are materialized into static values, and\n // class instances collapse to plain objects.\n let normalized;\n try {\n normalized = JSON.parse(JSON.stringify(schema));\n }\n catch {\n throw new Error(\"fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas\");\n }\n const version = detectVersion(normalized, params?.defaultTarget);\n const defs = (normalized.$defs || normalized.definitions || {});\n const ctx = {\n version,\n defs,\n refs: new Map(),\n processing: new Set(),\n rootSchema: normalized,\n registry: params?.registry ?? globalRegistry,\n };\n return convertSchema(normalized, ctx);\n}\n", "import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport function string(params) {\n return core._coercedString(schemas.ZodString, params);\n}\nexport function number(params) {\n return core._coercedNumber(schemas.ZodNumber, params);\n}\nexport function boolean(params) {\n return core._coercedBoolean(schemas.ZodBoolean, params);\n}\nexport function bigint(params) {\n return core._coercedBigint(schemas.ZodBigInt, params);\n}\nexport function date(params) {\n return core._coercedDate(schemas.ZodDate, params);\n}\n", "export const COMMENT_BODY_CODE_POINT_LIMIT = 10_000;\n\nexport function commentBodyError(value: string): string | null {\n if (value.trim() === \"\") return \"Comment body is required\";\n if (Array.from(value).length > COMMENT_BODY_CODE_POINT_LIMIT)\n return \"Comment body must be at most 10,000 Unicode code points\";\n return null;\n}\n"], + "mappings": "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", + "names": ["Buffer", "_default", "base64", "base64url", "bigint", "boolean", "_catch", "cidrv4", "cidrv6", "core_exports", "cuid", "cuid2", "date", "decode", "decodeAsync", "describe", "e164", "email", "emoji", "encode", "encodeAsync", "_enum", "guid", "hex", "hostname", "ipv4", "ipv6", "ksuid", "mac", "meta", "nanoid", "_null", "nullish", "number", "parse", "parseAsync", "safeDecode", "safeDecodeAsync", "safeEncode", "safeEncodeAsync", "safeParse", "safeParseAsync", "string", "ulid", "_undefined", "uuid", "_void", "xid", "core_exports", "_emoji", "_null", "_undefined", "initializer", "_a", "array", "set", "object", "Class", "_a", "config", "base64", "base64url", "hex", "error", "issue", "_a", "version", "time", "_a", "inst", "result", "_a", "checks", "checkResult", "canary", "result", "_", "url", "base64", "r", "isObject", "allowsEval", "results", "map", "left", "right", "keyResult", "valueResult", "output", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "number", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "error", "issue", "_a", "meta", "Class", "_emoji", "_undefined", "_null", "Class", "issue", "codec", "_a", "meta", "id", "schema", "json", "file", "registry", "ctx", "schemas_exports", "_default", "base64", "base64url", "bigint", "boolean", "_catch", "cidrv4", "cidrv6", "cuid", "cuid2", "date", "describe", "e164", "email", "emoji", "_enum", "guid", "hex", "hostname", "ipv4", "ipv6", "ksuid", "mac", "meta", "nanoid", "_null", "nullish", "number", "string", "ulid", "_undefined", "uuid", "_void", "xid", "checks_exports", "date", "datetime", "duration", "time", "datetime", "date", "time", "duration", "initializer", "issue", "issues", "parse", "parseAsync", "safeParse", "safeParseAsync", "encode", "decode", "encodeAsync", "decodeAsync", "safeEncode", "safeDecode", "safeEncodeAsync", "safeDecodeAsync", "parse", "safeParse", "parseAsync", "safeParseAsync", "encode", "decode", "encodeAsync", "decodeAsync", "safeEncode", "safeDecode", "safeEncodeAsync", "safeDecodeAsync", "def", "meta", "check", "_default", "_catch", "json", "_emoji", "datetime", "date", "time", "duration", "string", "email", "guid", "uuid", "emoji", "nanoid", "cuid", "cuid2", "ulid", "xid", "ksuid", "ipv4", "mac", "ipv6", "cidrv4", "cidrv6", "base64", "base64url", "e164", "hostname", "hex", "number", "boolean", "bigint", "_undefined", "json", "_null", "json", "_void", "json", "date", "_enum", "string", "json", "issue", "output", "nullish", "_default", "_catch", "json", "codec", "json", "describe", "meta", "string", "number", "boolean", "_null", "map", "ZodFirstPartyTypeKind", "schemas_exports", "checks_exports", "zodSchema", "objectSchema", "version", "bigint", "boolean", "date", "number", "string", "string", "number", "boolean", "bigint", "date", "Buffer", "json", "error"] +} diff --git a/plugins/timeline-comments/dist/server.meta.json b/plugins/timeline-comments/dist/server.meta.json new file mode 100644 index 0000000..ece4a55 --- /dev/null +++ b/plugins/timeline-comments/dist/server.meta.json @@ -0,0 +1,11 @@ +{ + "sdkMajor": 0, + "sdkVersion": "0.4.1", + "artifactFormatVersion": 1, + "pluginId": "timeline-comments", + "pluginVersion": "0.1.0", + "builtWith": { + "bbVersion": "0.0.34", + "pluginSdkVersion": "0.4.1" + } +} diff --git a/plugins/timeline-comments/package.json b/plugins/timeline-comments/package.json index 247fff5..75761e2 100644 --- a/plugins/timeline-comments/package.json +++ b/plugins/timeline-comments/package.json @@ -18,7 +18,7 @@ }, "engines": { "bb": ">=0.0.34", - "bbPluginSdk": "^0.4.0" + "bbPluginSdk": "^0.4.1" }, "bb": { "name": "Timeline Comments", @@ -31,7 +31,7 @@ "skills": [] }, "devDependencies": { - "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.1.tgz", "@testing-library/react": "^16.3.2", "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.0.0", diff --git a/plugins/timeline-comments/test/plugin-sdk-app-harness.js b/plugins/timeline-comments/test/plugin-sdk-app-harness.js index 19cf4a2..9227293 100644 --- a/plugins/timeline-comments/test/plugin-sdk-app-harness.js +++ b/plugins/timeline-comments/test/plugin-sdk-app-harness.js @@ -348,8 +348,8 @@ var testPluginSdkApp = { [composer, version] ); }, - experimental_ThreadChat: TestThreadChat, - experimental_Markdown: TestMarkdown, + ThreadChat: TestThreadChat, + Markdown: TestMarkdown, useComposerView() { const composer = useSlotEnv("useComposerView").composer; const version = useSyncExternalStore( @@ -536,8 +536,8 @@ function collectRegistrations(definition) { component: requireComponent(kind, registration.component) }); }, - experimental_messageAction(registration) { - const kind = "slots.experimental_messageAction"; + messageAction(registration) { + const kind = "slots.messageAction"; const id = requireSlotId(kind, registration?.id); requireUniqueId(kind, seenIds.messageAction, id); if (typeof registration.run !== "function") { @@ -587,9 +587,9 @@ function collectRegistrations(definition) { } } }, - experimental_contentScripts: { + contentScripts: { register(registration) { - const kind = "experimental_contentScripts.register"; + const kind = "contentScripts.register"; const id = requireSlotId(kind, registration?.id); requireUniqueId(kind, seenIds.contentScript, id); if (typeof registration.mount !== "function") { @@ -826,9 +826,9 @@ function renderSlot(registration, props, options = {}) { ...composeOptions !== void 0 ? { options: composeOptions } : {} }); }, - experimental_openThreadPanel(panelOptions) { + openThreadPanel(panelOptions) { navigateCalls.push({ - method: "experimental_openThreadPanel", + method: "openThreadPanel", options: panelOptions }); return options.openThreadPanel?.(panelOptions) ?? false; diff --git a/plugins/timeline-comments/types/bb-plugin-sdk-app.d.ts b/plugins/timeline-comments/types/bb-plugin-sdk-app.d.ts index 22cf8e7..763f78f 100644 --- a/plugins/timeline-comments/types/bb-plugin-sdk-app.d.ts +++ b/plugins/timeline-comments/types/bb-plugin-sdk-app.d.ts @@ -255,7 +255,7 @@ interface PluginThreadPanelActionRegistration { * right for document-like content. "flush" gives the component the full * tab area (no padding, definite height, no host scrolling) — right for * app-like content that manages its own layout, such as - * `experimental_ThreadChat`. + * `ThreadChat`. */ layout?: "padded" | "flush"; /** @@ -274,9 +274,8 @@ interface PluginPendingInteractionRegistration { /** Context handed to a `sidebarFooterAction`'s `run`. */ interface PluginSidebarFooterActionContext { /** - * Navigate to this plugin's Settings detail page - * (`/settings/plugins/`), where declarative settings and - * `settingsSection` slots render. + * Navigate to this plugin's detail page in Tools, where declarative settings + * and `settingsSection` slots render. */ openSettings(): void; } @@ -361,7 +360,7 @@ interface PluginMessageActionContext { /** * Open one of this plugin's `threadPanelAction` components in the current * thread's side panel — the registration-callback equivalent of - * `useBbNavigate().experimental_openThreadPanel`. Returns true when the host + * `useBbNavigate().openThreadPanel`. Returns true when the host * accepted (the action id exists and the surface has a panel); false * otherwise. */ @@ -395,7 +394,7 @@ interface PluginAppSlots { sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void; fileOpener(registration: PluginFileOpenerRegistration): void; messageDirective(registration: PluginMessageDirectiveRegistration): void; - experimental_messageAction(registration: PluginMessageActionRegistration): void; + messageAction(registration: PluginMessageActionRegistration): void; } interface PluginAppComposer { customize(registration: ComposerCustomization): void; @@ -424,14 +423,14 @@ interface PluginContentScriptRegistration { */ mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise; } -/** Experimental lifecycle surface for trusted frontend content scripts. */ +/** Lifecycle surface for trusted frontend content scripts. */ interface PluginAppContentScripts { register(registration: PluginContentScriptRegistration): void; } interface PluginAppBuilder { slots: PluginAppSlots; composer: PluginAppComposer; - experimental_contentScripts: PluginAppContentScripts; + contentScripts: PluginAppContentScripts; } type PluginAppSetup = (app: PluginAppBuilder) => void; /** @@ -563,8 +562,12 @@ interface PluginComposerThreadRowStatus { icon: string; /** Accessible label for the status glyph. */ label: string; - /** Semantic host color for the status glyph. Defaults to the neutral tone. */ - tone?: "default" | "success"; + /** + * Semantic host treatment for the status glyph. `running` automatically + * shimmers; terminal `success` and `error` tones are static. Defaults to the + * neutral tone. + */ + tone?: "default" | "running" | "success" | "error"; } /** An @-mention pill bound to one of the calling plugin's mention providers. */ interface PluginComposerMention { @@ -684,6 +687,15 @@ interface ThreadChatProps { layout?: "contained" | "document"; /** Bump to focus the composer (ignored by `variant: "timeline"`). */ focusRequest?: number; + /** + * Who controls the permission mode sends run with. "inherit" (default) + * pins every send to the thread's own resolved default and renders the + * picker as a dimmed label — a plugin surface can never widen it. + * "editable" gives this chat its own picker, so the user can raise or + * lower permissions for this thread independently of the thread it was + * forked from. Ignored by `variant: "timeline"` (no composer). + */ + permissionPolicy?: "inherit" | "editable"; className?: string; /** Rendered above the conversation, scrolling with it. */ leadingContent?: ReactNode; @@ -738,7 +750,7 @@ interface BbNavigate { * thread surface. Returns false when the surface has no thread side panel or * the action is unavailable. */ - experimental_openThreadPanel(options: { + openThreadPanel(options: { actionId: string; title?: string; params?: JsonValue; @@ -769,18 +781,18 @@ interface PluginSdkApp { * with `Markdown`, the only components the SDK ships — everything else * stays vendored per §5.5. */ - experimental_ThreadChat: ComponentType; + ThreadChat: ComponentType; /** * The host-owned chat-message markdown renderer (see * {@link MarkdownProps}). */ - experimental_Markdown: ComponentType; + Markdown: ComponentType; useComposerView(): ComposerView; } declare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition; -declare const experimental_ThreadChat: react.ComponentType; -declare const experimental_Markdown: react.ComponentType; +declare const ThreadChat: react.ComponentType; +declare const Markdown: react.ComponentType; declare const useRpc: , StandardSchemaV1>>>>() => PluginRpcClient; declare const useRealtime: (channel: string, handler: (payload: unknown) => void) => void; declare const useRealtimeConnectionState: () => PluginRealtimeConnectionState; @@ -790,5 +802,5 @@ declare const useBbNavigate: () => BbNavigate; declare const useComposer: () => PluginComposerApi; declare const useComposerView: () => ComposerView; -export { definePluginApp, experimental_Markdown, experimental_ThreadChat, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings }; +export { Markdown, ThreadChat, definePluginApp, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings }; export type { BbContext, BbNavigate, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtimeConnectionState, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps }; diff --git a/plugins/timeline-comments/types/bb-plugin-sdk.d.ts b/plugins/timeline-comments/types/bb-plugin-sdk.d.ts index 8125dda..aa4ea0e 100644 --- a/plugins/timeline-comments/types/bb-plugin-sdk.d.ts +++ b/plugins/timeline-comments/types/bb-plugin-sdk.d.ts @@ -260,7 +260,7 @@ interface PluginThreadPanelActionRegistration { * right for document-like content. "flush" gives the component the full * tab area (no padding, definite height, no host scrolling) — right for * app-like content that manages its own layout, such as - * `experimental_ThreadChat`. + * `ThreadChat`. */ layout?: "padded" | "flush"; /** @@ -279,9 +279,8 @@ interface PluginPendingInteractionRegistration { /** Context handed to a `sidebarFooterAction`'s `run`. */ interface PluginSidebarFooterActionContext { /** - * Navigate to this plugin's Settings detail page - * (`/settings/plugins/`), where declarative settings and - * `settingsSection` slots render. + * Navigate to this plugin's detail page in Tools, where declarative settings + * and `settingsSection` slots render. */ openSettings(): void; } @@ -366,7 +365,7 @@ interface PluginMessageActionContext { /** * Open one of this plugin's `threadPanelAction` components in the current * thread's side panel — the registration-callback equivalent of - * `useBbNavigate().experimental_openThreadPanel`. Returns true when the host + * `useBbNavigate().openThreadPanel`. Returns true when the host * accepted (the action id exists and the surface has a panel); false * otherwise. */ @@ -400,7 +399,7 @@ interface PluginAppSlots { sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void; fileOpener(registration: PluginFileOpenerRegistration): void; messageDirective(registration: PluginMessageDirectiveRegistration): void; - experimental_messageAction(registration: PluginMessageActionRegistration): void; + messageAction(registration: PluginMessageActionRegistration): void; } interface PluginAppComposer { customize(registration: ComposerCustomization): void; @@ -429,14 +428,14 @@ interface PluginContentScriptRegistration { */ mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise; } -/** Experimental lifecycle surface for trusted frontend content scripts. */ +/** Lifecycle surface for trusted frontend content scripts. */ interface PluginAppContentScripts { register(registration: PluginContentScriptRegistration): void; } interface PluginAppBuilder { slots: PluginAppSlots; composer: PluginAppComposer; - experimental_contentScripts: PluginAppContentScripts; + contentScripts: PluginAppContentScripts; } type PluginAppSetup = (app: PluginAppBuilder) => void; /** @@ -568,8 +567,12 @@ interface PluginComposerThreadRowStatus { icon: string; /** Accessible label for the status glyph. */ label: string; - /** Semantic host color for the status glyph. Defaults to the neutral tone. */ - tone?: "default" | "success"; + /** + * Semantic host treatment for the status glyph. `running` automatically + * shimmers; terminal `success` and `error` tones are static. Defaults to the + * neutral tone. + */ + tone?: "default" | "running" | "success" | "error"; } /** An @-mention pill bound to one of the calling plugin's mention providers. */ interface PluginComposerMention { @@ -689,6 +692,15 @@ interface ThreadChatProps { layout?: "contained" | "document"; /** Bump to focus the composer (ignored by `variant: "timeline"`). */ focusRequest?: number; + /** + * Who controls the permission mode sends run with. "inherit" (default) + * pins every send to the thread's own resolved default and renders the + * picker as a dimmed label — a plugin surface can never widen it. + * "editable" gives this chat its own picker, so the user can raise or + * lower permissions for this thread independently of the thread it was + * forked from. Ignored by `variant: "timeline"` (no composer). + */ + permissionPolicy?: "inherit" | "editable"; className?: string; /** Rendered above the conversation, scrolling with it. */ leadingContent?: ReactNode; @@ -743,7 +755,7 @@ interface BbNavigate { * thread surface. Returns false when the surface has no thread side panel or * the action is unavailable. */ - experimental_openThreadPanel(options: { + openThreadPanel(options: { actionId: string; title?: string; params?: JsonValue$1; @@ -774,12 +786,12 @@ interface PluginSdkApp { * with `Markdown`, the only components the SDK ships — everything else * stays vendored per §5.5. */ - experimental_ThreadChat: ComponentType; + ThreadChat: ComponentType; /** * The host-owned chat-message markdown renderer (see * {@link MarkdownProps}). */ - experimental_Markdown: ComponentType; + Markdown: ComponentType; useComposerView(): ComposerView; } @@ -790,6 +802,7 @@ interface PluginSdkApp { declare const appSettingsSchema: z$1.ZodObject<{ caffeinate: z$1.ZodBoolean; showKeyboardHints: z$1.ZodBoolean; + steerActiveThreadOnEnter: z$1.ZodBoolean; showUnhandledProviderEvents: z$1.ZodBoolean; codexMemoryEnabled: z$1.ZodBoolean; claudeCodeMemoryEnabled: z$1.ZodBoolean; @@ -1011,7 +1024,7 @@ type Environment = z$1.infer; */ declare const experimentsSchema: z$1.ZodObject<{ claudeCodeMockCliTraffic: z$1.ZodBoolean; - plugins: z$1.ZodBoolean; + toolsHub: z$1.ZodBoolean; sideChatPlugin: z$1.ZodBoolean; }, z$1.core.$strip>; type Experiments = z$1.infer; @@ -3110,11 +3123,47 @@ declare const projectCommandsQuerySchema: z$1.ZodObject<{ environmentId: z$1.ZodOptional, z$1.ZodOptional>>; }, z$1.core.$strict>; type ProjectCommandsQuery = z$1.infer; +declare const skillListResponseSchema: z$1.ZodObject<{ + skills: z$1.ZodArray; + provider: z$1.ZodNullable>; + scope: z$1.ZodEnum<{ + plugin: "plugin"; + "bb-builtin": "bb-builtin"; + "bb-user": "bb-user"; + "bb-project": "bb-project"; + "claude-user": "claude-user"; + "claude-project": "claude-project"; + "codex-user": "codex-user"; + "codex-project": "codex-project"; + }>; + pluginId: z$1.ZodNullable; + filePath: z$1.ZodString; + manageable: z$1.ZodBoolean; + registrySkillId: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SkillListResponse = z$1.infer; +declare const skillContentResponseSchema: z$1.ZodObject<{ + content: z$1.ZodString; + revision: z$1.ZodString; +}, z$1.core.$strip>; +type SkillContentResponse = z$1.infer; +declare const skillFilesResponseSchema: z$1.ZodObject<{ + files: z$1.ZodArray; + truncated: z$1.ZodBoolean; +}, z$1.core.$strip>; +type SkillFilesResponse = z$1.infer; declare const projectResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - standard: "standard"; personal: "personal"; + standard: "standard"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable; @@ -3135,8 +3184,8 @@ type ProjectResponse = z$1.infer; declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - standard: "standard"; personal: "personal"; + standard: "standard"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable; @@ -3238,8 +3287,8 @@ declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ ultra: "ultra"; }>; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; }, z$1.core.$strip>>; @@ -3262,6 +3311,61 @@ declare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{ }, z$1.core.$strict>; type CopyProjectAttachmentsRequest = z$1.infer; +declare const registrySkillSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + skillId: z$1.ZodString; + name: z$1.ZodString; + installs: z$1.ZodNumber; + stars: z$1.ZodNullable; + installUrl: z$1.ZodNullable; + url: z$1.ZodString; + topic: z$1.ZodNullable; + summary: z$1.ZodNullable; +}, z$1.core.$strip>; +type RegistrySkill = z$1.infer; +declare const registrySkillsPageSchema: z$1.ZodObject<{ + skills: z$1.ZodArray; + installUrl: z$1.ZodNullable; + url: z$1.ZodString; + topic: z$1.ZodNullable; + summary: z$1.ZodNullable; + }, z$1.core.$strip>>; + pagination: z$1.ZodObject<{ + page: z$1.ZodNumber; + perPage: z$1.ZodNumber; + total: z$1.ZodNumber; + hasMore: z$1.ZodBoolean; + }, z$1.core.$strip>; +}, z$1.core.$strip>; +type RegistrySkillsPage = z$1.infer; +declare const registryRepositoryStarsSchema: z$1.ZodObject<{ + stars: z$1.ZodNumber; +}, z$1.core.$strip>; +type RegistryRepositoryStars = z$1.infer; +declare const registrySkillDetailSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + skillId: z$1.ZodString; + hash: z$1.ZodNullable; + files: z$1.ZodNullable>>; +}, z$1.core.$strip>; +type RegistrySkillDetail = z$1.infer; +declare const registrySkillInstallResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + filePath: z$1.ZodString; +}, z$1.core.$strip>; +type RegistrySkillInstallResponse = z$1.infer; + declare const updateEnvironmentRequestSchema: z$1.ZodObject<{ mergeBaseBranch: z$1.ZodOptional>; name: z$1.ZodOptional>; @@ -3373,8 +3477,8 @@ declare const environmentDiffFileResponseSchema: z$1.ZodObject<{ path: z$1.ZodString; content: z$1.ZodString; contentEncoding: z$1.ZodEnum<{ - utf8: "utf8"; base64: "base64"; + utf8: "utf8"; }>; mimeType: z$1.ZodOptional; sizeBytes: z$1.ZodNumber; @@ -3986,16 +4090,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4079,9 +4183,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4160,9 +4264,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4253,9 +4357,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4334,9 +4438,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4399,16 +4503,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4517,12 +4621,13 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; - projectId: z$1.ZodString; - providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; - providerThreadId: z$1.ZodString; }, z$1.core.$strict>; target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ mode: z$1.ZodLiteral<"start">; @@ -4653,8 +4757,8 @@ declare const hostDaemonCommandRegistry: { }, z$1.core.$strip>], "mode">; }, z$1.core.$strict>, z$1.ZodObject<{ appliedAs: z$1.ZodEnum<{ - steer: "steer"; "new-turn": "new-turn"; + steer: "steer"; }>; }, z$1.core.$strip>, "settled", false>; "thread.stop": HostDaemonCommandDescriptor<"thread.stop", z$1.ZodObject<{ @@ -4695,16 +4799,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4813,12 +4917,13 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; - projectId: z$1.ZodString; - providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; - providerThreadId: z$1.ZodString; }, z$1.core.$strict>; }, z$1.core.$strict>, z$1.ZodObject<{ cleared: z$1.ZodBoolean; @@ -5095,9 +5199,9 @@ declare const hostDaemonCommandRegistry: { text: z$1.ZodString; startedAt: z$1.ZodOptional; status: z$1.ZodOptional>; metadata: z$1.ZodOptional>; }, z$1.core.$strip>>; @@ -5325,13 +5429,91 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - project: "project"; user: "user"; + project: "project"; }>; description: z$1.ZodNullable; argumentHint: z$1.ZodNullable; }, z$1.core.$strip>>; }, z$1.core.$strip>, "onlineRpc", true>; + "host.list_skills": HostDaemonCommandDescriptor<"host.list_skills", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.list_skills">; + providerId: z$1.ZodString; + cwd: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + skills: z$1.ZodArray; + filePath: z$1.ZodString; + rootKind: z$1.ZodEnum<{ + plugin: "plugin"; + "bb-project": "bb-project"; + "bb-data-dir": "bb-data-dir"; + "bb-builtin": "bb-builtin"; + "provider-project": "provider-project"; + "provider-user": "provider-user"; + }>; + linked: z$1.ZodBoolean; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.delete_skill": HostDaemonCommandDescriptor<"host.delete_skill", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.delete_skill">; + scope: z$1.ZodEnum<{ + "bb-project": "bb-project"; + "bb-user": "bb-user"; + "claude-user": "claude-user"; + "claude-project": "claude-project"; + "codex-user": "codex-user"; + "codex-project": "codex-project"; + }>; + name: z$1.ZodString; + cwd: z$1.ZodNullable; + rootPath: z$1.ZodNullable; + }, z$1.core.$strict>, z$1.ZodObject<{ + deletedPath: z$1.ZodString; + }, z$1.core.$strip>, "onlineRpc", false>; + "host.write_skill": HostDaemonCommandDescriptor<"host.write_skill", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.write_skill">; + scope: z$1.ZodEnum<{ + "bb-project": "bb-project"; + "bb-user": "bb-user"; + }>; + name: z$1.ZodString; + cwd: z$1.ZodNullable; + content: z$1.ZodString; + expectedSha256: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"written">; + filePath: z$1.ZodString; + sha256: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"conflict">; + currentSha256: z$1.ZodNullable; + }, z$1.core.$strip>], "outcome">, "onlineRpc", false>; + "host.install_global_skills": HostDaemonCommandDescriptor<"host.install_global_skills", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.install_global_skills">; + skills: z$1.ZodArray>; + }, z$1.core.$strict>, z$1.ZodObject<{ + installations: z$1.ZodArray>; + }, z$1.core.$strict>, "onlineRpc", false>; + "host.global_skills_status": HostDaemonCommandDescriptor<"host.global_skills_status", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.global_skills_status">; + names: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodObject<{ + entries: z$1.ZodArray; + }, z$1.core.$strict>>; + }, z$1.core.$strict>, "onlineRpc", true>; "host.list_branches": HostDaemonCommandDescriptor<"host.list_branches", z$1.ZodObject<{ type: z$1.ZodLiteral<"host.list_branches">; path: z$1.ZodString; @@ -5728,8 +5910,8 @@ declare const hostDaemonCommandRegistry: { npmGlobalPackageVersion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -5751,8 +5933,8 @@ declare const hostDaemonCommandRegistry: { cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - install: "install"; update: "update"; + install: "install"; }>; type: z$1.ZodLiteral<"provider_cli.install">; }, z$1.core.$strict>, z$1.ZodObject<{ @@ -5892,13 +6074,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -5942,13 +6124,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6004,13 +6186,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6052,13 +6234,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6101,9 +6283,9 @@ declare const hostDaemonCommandRegistry: { conclusion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -6211,8 +6393,8 @@ declare const providerCliInstallRequestSchema: z$1.ZodObject<{ cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - install: "install"; update: "update"; + install: "install"; }>; }, z$1.core.$strip>; type ProviderCliInstallRequest = z$1.infer; @@ -6420,6 +6602,7 @@ declare const installedPluginSchema: z$1.ZodObject<{ description: z$1.ZodNullable; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6460,6 +6643,17 @@ declare const installedPluginSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6477,7 +6671,6 @@ declare const installedPluginSchema: z$1.ZodObject<{ }, z$1.core.$strip>; type InstalledPlugin = z$1.infer; declare const pluginListResponseSchema: z$1.ZodObject<{ - enabled: z$1.ZodBoolean; plugins: z$1.ZodArray; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6553,6 +6747,17 @@ declare const pluginListResponseSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6607,6 +6812,7 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{ description: z$1.ZodNullable; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6647,6 +6853,17 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6707,6 +6924,7 @@ declare const pluginCatalogStatusSchema: z$1.ZodObject<{ type PluginCatalogStatus = z$1.infer; declare const pluginCatalogSearchResultSchema: z$1.ZodObject<{ entryId: z$1.ZodString; + pluginId: z$1.ZodString; displayName: z$1.ZodString; description: z$1.ZodString; icon: z$1.ZodNullable; @@ -6730,8 +6948,8 @@ declare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{ supportsUserQuestion: z$1.ZodBoolean; supportsFork: z$1.ZodBoolean; supportedPermissionModes: z$1.ZodArray>; }, z$1.core.$strip>; @@ -6851,6 +7069,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ generalSettings: z$1.ZodObject<{ caffeinate: z$1.ZodBoolean; showKeyboardHints: z$1.ZodBoolean; + steerActiveThreadOnEnter: z$1.ZodBoolean; showUnhandledProviderEvents: z$1.ZodBoolean; codexMemoryEnabled: z$1.ZodBoolean; claudeCodeMemoryEnabled: z$1.ZodBoolean; @@ -7093,7 +7312,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ }, z$1.core.$strict>>; experiments: z$1.ZodObject<{ claudeCodeMockCliTraffic: z$1.ZodBoolean; - plugins: z$1.ZodBoolean; + toolsHub: z$1.ZodBoolean; sideChatPlugin: z$1.ZodBoolean; }, z$1.core.$strip>; appearance: z$1.ZodObject<{ @@ -7120,6 +7339,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ }, z$1.core.$strip>>; featureFlags: z$1.ZodObject<{ placeholder: z$1.ZodBoolean; + timelineWindowEventBudget: z$1.ZodNumber; }, z$1.core.$strip>; hostDaemonPort: z$1.ZodNullable; primaryHostId: z$1.ZodNullable; @@ -7179,6 +7399,46 @@ type SystemVersionResponse = z$1.infer; declare const systemConfigReloadResponseSchema: z$1.ZodObject<{ ok: z$1.ZodLiteral; }, z$1.core.$strip>; +declare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{ + machines: z$1.ZodArray; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SystemCliSkillsStatusResponse = z$1.infer; +/** The machines to copy the built-in bb CLI skills onto. */ +declare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{ + hostIds: z$1.ZodArray; +}, z$1.core.$strip>; +type SystemInstallCliSkillsRequest = z$1.infer; +/** + * One entry per requested machine. A machine that is offline or otherwise + * refuses the install fails on its own without taking the others down, so the + * caller can report exactly which machines got the skills. + */ +declare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{ + results: z$1.ZodArray; + hostId: z$1.ZodString; + hostName: z$1.ZodString; + installations: z$1.ZodArray>; + }, z$1.core.$strip>, z$1.ZodObject<{ + ok: z$1.ZodLiteral; + hostId: z$1.ZodString; + hostName: z$1.ZodString; + errorMessage: z$1.ZodString; + }, z$1.core.$strip>], "ok">>; +}, z$1.core.$strip>; +type SystemInstallCliSkillsResponse = z$1.infer; type SystemConfigReloadResponse = z$1.infer; declare const terminalSessionSchema: z$1.ZodObject<{ @@ -8041,10 +8301,10 @@ declare const createThreadRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional>>>; title: z$1.ZodOptional; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; visibility: z$1.ZodDefault>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -9141,9 +9401,9 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{ isGitRepo: z$1.ZodBoolean; isWorktree: z$1.ZodBoolean; workspaceProvisionType: z$1.ZodEnum<{ - personal: "personal"; - "managed-worktree": "managed-worktree"; unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; }>; branchName: z$1.ZodNullable; baseBranch: z$1.ZodNullable; @@ -9437,8 +9697,8 @@ declare const threadQueuedMessageListResponseSchema: z$1.ZodArray; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -9619,8 +9879,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ activePromptMode: z$1.ZodNullable; providerId: z$1.ZodEnum<{ - codex: "codex"; "claude-code": "claude-code"; + codex: "codex"; }>; prompt: z$1.ZodString; }, z$1.core.$strict>>; @@ -9630,7 +9890,7 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ startedAt: z$1.ZodNumber; updatedAt: z$1.ZodNumber; }, z$1.core.$strip>>; - activeWorkflow: z$1.ZodNullable; @@ -9811,8 +10071,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ originalModel: z$1.ZodString; fallbackModel: z$1.ZodString; reason: z$1.ZodEnum<{ - provider: "provider"; refusal: "refusal"; + provider: "provider"; }>; message: z$1.ZodString; }, z$1.core.$strip>>; @@ -10669,6 +10929,78 @@ interface StatusArea { get(args?: StatusGetArgs): Promise; } +interface SkillWorkspaceArgs { + projectId: string; + environmentId: string | null; +} +interface SkillListArgs extends SkillWorkspaceArgs { + signal?: AbortSignal; +} +interface SkillIdentityArgs extends SkillListArgs { + skillId: string; +} +interface SkillContentArgs extends SkillIdentityArgs { + path: string; +} +interface SkillUpdateArgs extends SkillWorkspaceArgs { + skillId: string; + content: string; + revision: string; +} +interface SkillDeleteArgs extends SkillWorkspaceArgs { + skillId: string; +} +/** + * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans + * out one per card. Callers pass their query's AbortSignal so abandoning a + * page cancels its requests instead of leaving them in flight. + */ +interface AbortableArgs { + signal?: AbortSignal; +} +interface RegistrySkillsSearchArgs extends AbortableArgs { + query?: string; + page?: number; + perPage?: number; +} +interface RegistrySkillIdArgs extends AbortableArgs { + registrySkillId: string; +} +interface RegistrySkillSourceArgs extends AbortableArgs { + source: string; + skillId: string; +} +interface RegistryRepositoryArgs extends AbortableArgs { + source: string; +} +/** + * Install is a mutation and deliberately takes no signal: its body is parsed + * with a strict schema, so an extra key would throw at runtime. + */ +interface RegistrySkillInstallArgs { + registrySkillId: string; +} +interface SkillsRegistryArea { + detail(args: RegistrySkillSourceArgs): Promise; + get(args: RegistrySkillIdArgs): Promise; + install(args: RegistrySkillInstallArgs): Promise; + repositoryStars(args: RegistryRepositoryArgs): Promise; + search(args?: RegistrySkillsSearchArgs): Promise; +} +interface SkillsArea { + getContent(args: SkillContentArgs): Promise; + list(args: SkillListArgs): Promise; + listFiles(args: SkillIdentityArgs): Promise; + registry: SkillsRegistryArea; + remove(args: SkillDeleteArgs): Promise<{ + deletedPath: string; + }>; + update(args: SkillUpdateArgs): Promise<{ + filePath: string; + revision: string; + }>; +} + type ThemeGetResult = AppTheme; type ThemeCatalogResult = ThemeCatalogResponse; type ThemeSetInput = AppThemeSelection; @@ -10719,6 +11051,14 @@ type SystemAttentionResult = SystemAttentionResponse; type SystemConfigResult = SystemConfigResponse; type SystemExecutionOptionsResult = SystemExecutionOptionsResponse; type SystemReloadConfigResult = SystemConfigReloadResponse; +type SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest; +interface SystemCliSkillsStatusArgs { + /** Omit for every enrolled machine. */ + hostIds?: readonly string[]; + signal?: AbortSignal; +} +type SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse; +type SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse; type SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse; type SystemUpdateExperimentsResult = Experiments; type SystemUpdateGeneralSettingsResult = AppSettings; @@ -10729,6 +11069,14 @@ interface SystemArea { attention(args?: SystemAttentionArgs): Promise; config(args?: SystemConfigArgs): Promise; executionOptions(args?: SystemExecutionOptionsArgs): Promise; + /** + * Copy bb's built-in CLI skills into each named machine's global agent skill + * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install + * independently; the result reports each machine's outcome. + */ + /** Per-machine install state of bb's built-in CLI skills. */ + cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise; + installCliSkills(args: SystemInstallCliSkillsArgs): Promise; reloadConfig(): Promise; transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise; updateExperiments(args: Experiments): Promise; @@ -11148,6 +11496,7 @@ interface BbSdk extends BbRealtime { projects: ProjectsArea; plugins: PluginsArea; providers: ProvidersArea; + skills: SkillsArea; status: StatusArea; system: SystemArea; terminals: TerminalsArea; diff --git a/plugins/ui-patterns/composer-action.test.tsx b/plugins/ui-patterns/composer-action.test.tsx index f42edbb..b3df520 100644 --- a/plugins/ui-patterns/composer-action.test.tsx +++ b/plugins/ui-patterns/composer-action.test.tsx @@ -12,7 +12,7 @@ const navigation = vi.hoisted(() => ({ vi.mock("@bb/plugin-sdk/app", () => ({ useBbNavigate: () => navigation.supported - ? { experimental_openThreadPanel: navigation.openThreadPanel } + ? { openThreadPanel: navigation.openThreadPanel } : {}, })); diff --git a/plugins/ui-patterns/composer-action.tsx b/plugins/ui-patterns/composer-action.tsx index 6f82563..a8df3a2 100644 --- a/plugins/ui-patterns/composer-action.tsx +++ b/plugins/ui-patterns/composer-action.tsx @@ -10,7 +10,7 @@ import { export function UiPatternsComposerAction() { const navigate = useBbNavigate(); - const openThreadPanel = navigate.experimental_openThreadPanel; + const openThreadPanel = navigate.openThreadPanel; if (typeof openThreadPanel !== "function") return null; diff --git a/plugins/ui-patterns/dist/app.css b/plugins/ui-patterns/dist/app.css index fd4372c..6e26e6a 100644 --- a/plugins/ui-patterns/dist/app.css +++ b/plugins/ui-patterns/dist/app.css @@ -166,7 +166,7 @@ initial-value: 0; } @layer utilities { - @scope ([data-bb-plugin="ui-patterns"], [data-bb-plugin-root]:not([data-bb-plugin]), [data-bb-plugin-decoration="ui-patterns"]) { + @scope ([data-bb-plugin="ui-patterns"], [data-bb-plugin-root]:not([data-bb-plugin])) { .\@container\/card-header { container-type: inline-size; container-name: card-header; diff --git a/plugins/ui-patterns/dist/app.js b/plugins/ui-patterns/dist/app.js index 56efc8f..571423c 100644 --- a/plugins/ui-patterns/dist/app.js +++ b/plugins/ui-patterns/dist/app.js @@ -126708,9 +126708,9 @@ if (runtime2 == null || runtime2.pluginSdkApp == null) { } var mod2 = runtime2.pluginSdkApp; var { + Markdown, + ThreadChat, definePluginApp, - experimental_Markdown, - experimental_ThreadChat, useBbContext, useBbNavigate, useComposer, @@ -126822,7 +126822,7 @@ TooltipContent2.displayName = Content.displayName; init_jsx_runtime(); function UiPatternsComposerAction() { const navigate = useBbNavigate(); - const openThreadPanel = navigate.experimental_openThreadPanel; + const openThreadPanel = navigate.openThreadPanel; if (typeof openThreadPanel !== "function") return null; return /* @__PURE__ */ jsx(TooltipProvider2, { delayDuration: 300, children: /* @__PURE__ */ jsxs(Tooltip2, { children: [ /* @__PURE__ */ jsx(TooltipTrigger2, { asChild: true, children: /* @__PURE__ */ jsx( diff --git a/plugins/ui-patterns/dist/app.meta.json b/plugins/ui-patterns/dist/app.meta.json index 7b40051..06d572d 100644 --- a/plugins/ui-patterns/dist/app.meta.json +++ b/plugins/ui-patterns/dist/app.meta.json @@ -1,11 +1,11 @@ { "sdkMajor": 0, - "sdkVersion": "0.4.0", + "sdkVersion": "0.4.1", "artifactFormatVersion": 1, "pluginId": "ui-patterns", "pluginVersion": "0.1.0", "builtWith": { "bbVersion": "0.0.34", - "pluginSdkVersion": "0.4.0" + "pluginSdkVersion": "0.4.1" } } diff --git a/plugins/ui-patterns/dist/server.meta.json b/plugins/ui-patterns/dist/server.meta.json index 7b40051..06d572d 100644 --- a/plugins/ui-patterns/dist/server.meta.json +++ b/plugins/ui-patterns/dist/server.meta.json @@ -1,11 +1,11 @@ { "sdkMajor": 0, - "sdkVersion": "0.4.0", + "sdkVersion": "0.4.1", "artifactFormatVersion": 1, "pluginId": "ui-patterns", "pluginVersion": "0.1.0", "builtWith": { "bbVersion": "0.0.34", - "pluginSdkVersion": "0.4.0" + "pluginSdkVersion": "0.4.1" } } diff --git a/plugins/ui-patterns/package.json b/plugins/ui-patterns/package.json index 29ba88b..ef32668 100644 --- a/plugins/ui-patterns/package.json +++ b/plugins/ui-patterns/package.json @@ -11,7 +11,7 @@ "license": "UNLICENSED", "engines": { "bb": ">=0.34.0", - "bbPluginSdk": "^0.4.0" + "bbPluginSdk": "^0.4.1" }, "bb": { "name": "UI Patterns", @@ -92,7 +92,7 @@ "zod": "^4.3.6" }, "devDependencies": { - "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.1.tgz", "@radix-ui/react-dialog": "^1.1.19", "@testing-library/react": "^16.3.2", "@tailwindcss/node": "4.3.0", diff --git a/plugins/ui-patterns/tests/contract.test.mjs b/plugins/ui-patterns/tests/contract.test.mjs index b56a3b4..ec04aed 100644 --- a/plugins/ui-patterns/tests/contract.test.mjs +++ b/plugins/ui-patterns/tests/contract.test.mjs @@ -156,11 +156,11 @@ test("the thread composer action opens the UI Patterns side-panel", () => { assert.match(composerAction, /actionId: "library-panel"/); assert.match( composerAction, - /const openThreadPanel = navigate\.experimental_openThreadPanel/, + /const openThreadPanel = navigate\.openThreadPanel/, ); assert.match(composerAction, /typeof openThreadPanel !== "function"/); assert.match(composerAction, /openThreadPanel\(\{/); - assert.match(builtApp, /experimental_openThreadPanel/); + assert.match(builtApp, /openThreadPanel/); assert.doesNotMatch(composerAction, /PluginMessageDirectiveOpenThreadPanel/); assert.match(app, /run: \(\{ openPanel \}\) => \{/); assert.match(app, /openPanel\(\{ title: "UI Patterns" \}\)/); diff --git a/plugins/ui-patterns/types/bb-plugin-sdk-app.d.ts b/plugins/ui-patterns/types/bb-plugin-sdk-app.d.ts index 22cf8e7..763f78f 100644 --- a/plugins/ui-patterns/types/bb-plugin-sdk-app.d.ts +++ b/plugins/ui-patterns/types/bb-plugin-sdk-app.d.ts @@ -255,7 +255,7 @@ interface PluginThreadPanelActionRegistration { * right for document-like content. "flush" gives the component the full * tab area (no padding, definite height, no host scrolling) — right for * app-like content that manages its own layout, such as - * `experimental_ThreadChat`. + * `ThreadChat`. */ layout?: "padded" | "flush"; /** @@ -274,9 +274,8 @@ interface PluginPendingInteractionRegistration { /** Context handed to a `sidebarFooterAction`'s `run`. */ interface PluginSidebarFooterActionContext { /** - * Navigate to this plugin's Settings detail page - * (`/settings/plugins/`), where declarative settings and - * `settingsSection` slots render. + * Navigate to this plugin's detail page in Tools, where declarative settings + * and `settingsSection` slots render. */ openSettings(): void; } @@ -361,7 +360,7 @@ interface PluginMessageActionContext { /** * Open one of this plugin's `threadPanelAction` components in the current * thread's side panel — the registration-callback equivalent of - * `useBbNavigate().experimental_openThreadPanel`. Returns true when the host + * `useBbNavigate().openThreadPanel`. Returns true when the host * accepted (the action id exists and the surface has a panel); false * otherwise. */ @@ -395,7 +394,7 @@ interface PluginAppSlots { sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void; fileOpener(registration: PluginFileOpenerRegistration): void; messageDirective(registration: PluginMessageDirectiveRegistration): void; - experimental_messageAction(registration: PluginMessageActionRegistration): void; + messageAction(registration: PluginMessageActionRegistration): void; } interface PluginAppComposer { customize(registration: ComposerCustomization): void; @@ -424,14 +423,14 @@ interface PluginContentScriptRegistration { */ mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise; } -/** Experimental lifecycle surface for trusted frontend content scripts. */ +/** Lifecycle surface for trusted frontend content scripts. */ interface PluginAppContentScripts { register(registration: PluginContentScriptRegistration): void; } interface PluginAppBuilder { slots: PluginAppSlots; composer: PluginAppComposer; - experimental_contentScripts: PluginAppContentScripts; + contentScripts: PluginAppContentScripts; } type PluginAppSetup = (app: PluginAppBuilder) => void; /** @@ -563,8 +562,12 @@ interface PluginComposerThreadRowStatus { icon: string; /** Accessible label for the status glyph. */ label: string; - /** Semantic host color for the status glyph. Defaults to the neutral tone. */ - tone?: "default" | "success"; + /** + * Semantic host treatment for the status glyph. `running` automatically + * shimmers; terminal `success` and `error` tones are static. Defaults to the + * neutral tone. + */ + tone?: "default" | "running" | "success" | "error"; } /** An @-mention pill bound to one of the calling plugin's mention providers. */ interface PluginComposerMention { @@ -684,6 +687,15 @@ interface ThreadChatProps { layout?: "contained" | "document"; /** Bump to focus the composer (ignored by `variant: "timeline"`). */ focusRequest?: number; + /** + * Who controls the permission mode sends run with. "inherit" (default) + * pins every send to the thread's own resolved default and renders the + * picker as a dimmed label — a plugin surface can never widen it. + * "editable" gives this chat its own picker, so the user can raise or + * lower permissions for this thread independently of the thread it was + * forked from. Ignored by `variant: "timeline"` (no composer). + */ + permissionPolicy?: "inherit" | "editable"; className?: string; /** Rendered above the conversation, scrolling with it. */ leadingContent?: ReactNode; @@ -738,7 +750,7 @@ interface BbNavigate { * thread surface. Returns false when the surface has no thread side panel or * the action is unavailable. */ - experimental_openThreadPanel(options: { + openThreadPanel(options: { actionId: string; title?: string; params?: JsonValue; @@ -769,18 +781,18 @@ interface PluginSdkApp { * with `Markdown`, the only components the SDK ships — everything else * stays vendored per §5.5. */ - experimental_ThreadChat: ComponentType; + ThreadChat: ComponentType; /** * The host-owned chat-message markdown renderer (see * {@link MarkdownProps}). */ - experimental_Markdown: ComponentType; + Markdown: ComponentType; useComposerView(): ComposerView; } declare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition; -declare const experimental_ThreadChat: react.ComponentType; -declare const experimental_Markdown: react.ComponentType; +declare const ThreadChat: react.ComponentType; +declare const Markdown: react.ComponentType; declare const useRpc: , StandardSchemaV1>>>>() => PluginRpcClient; declare const useRealtime: (channel: string, handler: (payload: unknown) => void) => void; declare const useRealtimeConnectionState: () => PluginRealtimeConnectionState; @@ -790,5 +802,5 @@ declare const useBbNavigate: () => BbNavigate; declare const useComposer: () => PluginComposerApi; declare const useComposerView: () => ComposerView; -export { definePluginApp, experimental_Markdown, experimental_ThreadChat, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings }; +export { Markdown, ThreadChat, definePluginApp, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings }; export type { BbContext, BbNavigate, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtimeConnectionState, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps }; diff --git a/plugins/ui-patterns/types/bb-plugin-sdk.d.ts b/plugins/ui-patterns/types/bb-plugin-sdk.d.ts index 8125dda..aa4ea0e 100644 --- a/plugins/ui-patterns/types/bb-plugin-sdk.d.ts +++ b/plugins/ui-patterns/types/bb-plugin-sdk.d.ts @@ -260,7 +260,7 @@ interface PluginThreadPanelActionRegistration { * right for document-like content. "flush" gives the component the full * tab area (no padding, definite height, no host scrolling) — right for * app-like content that manages its own layout, such as - * `experimental_ThreadChat`. + * `ThreadChat`. */ layout?: "padded" | "flush"; /** @@ -279,9 +279,8 @@ interface PluginPendingInteractionRegistration { /** Context handed to a `sidebarFooterAction`'s `run`. */ interface PluginSidebarFooterActionContext { /** - * Navigate to this plugin's Settings detail page - * (`/settings/plugins/`), where declarative settings and - * `settingsSection` slots render. + * Navigate to this plugin's detail page in Tools, where declarative settings + * and `settingsSection` slots render. */ openSettings(): void; } @@ -366,7 +365,7 @@ interface PluginMessageActionContext { /** * Open one of this plugin's `threadPanelAction` components in the current * thread's side panel — the registration-callback equivalent of - * `useBbNavigate().experimental_openThreadPanel`. Returns true when the host + * `useBbNavigate().openThreadPanel`. Returns true when the host * accepted (the action id exists and the surface has a panel); false * otherwise. */ @@ -400,7 +399,7 @@ interface PluginAppSlots { sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void; fileOpener(registration: PluginFileOpenerRegistration): void; messageDirective(registration: PluginMessageDirectiveRegistration): void; - experimental_messageAction(registration: PluginMessageActionRegistration): void; + messageAction(registration: PluginMessageActionRegistration): void; } interface PluginAppComposer { customize(registration: ComposerCustomization): void; @@ -429,14 +428,14 @@ interface PluginContentScriptRegistration { */ mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise; } -/** Experimental lifecycle surface for trusted frontend content scripts. */ +/** Lifecycle surface for trusted frontend content scripts. */ interface PluginAppContentScripts { register(registration: PluginContentScriptRegistration): void; } interface PluginAppBuilder { slots: PluginAppSlots; composer: PluginAppComposer; - experimental_contentScripts: PluginAppContentScripts; + contentScripts: PluginAppContentScripts; } type PluginAppSetup = (app: PluginAppBuilder) => void; /** @@ -568,8 +567,12 @@ interface PluginComposerThreadRowStatus { icon: string; /** Accessible label for the status glyph. */ label: string; - /** Semantic host color for the status glyph. Defaults to the neutral tone. */ - tone?: "default" | "success"; + /** + * Semantic host treatment for the status glyph. `running` automatically + * shimmers; terminal `success` and `error` tones are static. Defaults to the + * neutral tone. + */ + tone?: "default" | "running" | "success" | "error"; } /** An @-mention pill bound to one of the calling plugin's mention providers. */ interface PluginComposerMention { @@ -689,6 +692,15 @@ interface ThreadChatProps { layout?: "contained" | "document"; /** Bump to focus the composer (ignored by `variant: "timeline"`). */ focusRequest?: number; + /** + * Who controls the permission mode sends run with. "inherit" (default) + * pins every send to the thread's own resolved default and renders the + * picker as a dimmed label — a plugin surface can never widen it. + * "editable" gives this chat its own picker, so the user can raise or + * lower permissions for this thread independently of the thread it was + * forked from. Ignored by `variant: "timeline"` (no composer). + */ + permissionPolicy?: "inherit" | "editable"; className?: string; /** Rendered above the conversation, scrolling with it. */ leadingContent?: ReactNode; @@ -743,7 +755,7 @@ interface BbNavigate { * thread surface. Returns false when the surface has no thread side panel or * the action is unavailable. */ - experimental_openThreadPanel(options: { + openThreadPanel(options: { actionId: string; title?: string; params?: JsonValue$1; @@ -774,12 +786,12 @@ interface PluginSdkApp { * with `Markdown`, the only components the SDK ships — everything else * stays vendored per §5.5. */ - experimental_ThreadChat: ComponentType; + ThreadChat: ComponentType; /** * The host-owned chat-message markdown renderer (see * {@link MarkdownProps}). */ - experimental_Markdown: ComponentType; + Markdown: ComponentType; useComposerView(): ComposerView; } @@ -790,6 +802,7 @@ interface PluginSdkApp { declare const appSettingsSchema: z$1.ZodObject<{ caffeinate: z$1.ZodBoolean; showKeyboardHints: z$1.ZodBoolean; + steerActiveThreadOnEnter: z$1.ZodBoolean; showUnhandledProviderEvents: z$1.ZodBoolean; codexMemoryEnabled: z$1.ZodBoolean; claudeCodeMemoryEnabled: z$1.ZodBoolean; @@ -1011,7 +1024,7 @@ type Environment = z$1.infer; */ declare const experimentsSchema: z$1.ZodObject<{ claudeCodeMockCliTraffic: z$1.ZodBoolean; - plugins: z$1.ZodBoolean; + toolsHub: z$1.ZodBoolean; sideChatPlugin: z$1.ZodBoolean; }, z$1.core.$strip>; type Experiments = z$1.infer; @@ -3110,11 +3123,47 @@ declare const projectCommandsQuerySchema: z$1.ZodObject<{ environmentId: z$1.ZodOptional, z$1.ZodOptional>>; }, z$1.core.$strict>; type ProjectCommandsQuery = z$1.infer; +declare const skillListResponseSchema: z$1.ZodObject<{ + skills: z$1.ZodArray; + provider: z$1.ZodNullable>; + scope: z$1.ZodEnum<{ + plugin: "plugin"; + "bb-builtin": "bb-builtin"; + "bb-user": "bb-user"; + "bb-project": "bb-project"; + "claude-user": "claude-user"; + "claude-project": "claude-project"; + "codex-user": "codex-user"; + "codex-project": "codex-project"; + }>; + pluginId: z$1.ZodNullable; + filePath: z$1.ZodString; + manageable: z$1.ZodBoolean; + registrySkillId: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SkillListResponse = z$1.infer; +declare const skillContentResponseSchema: z$1.ZodObject<{ + content: z$1.ZodString; + revision: z$1.ZodString; +}, z$1.core.$strip>; +type SkillContentResponse = z$1.infer; +declare const skillFilesResponseSchema: z$1.ZodObject<{ + files: z$1.ZodArray; + truncated: z$1.ZodBoolean; +}, z$1.core.$strip>; +type SkillFilesResponse = z$1.infer; declare const projectResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - standard: "standard"; personal: "personal"; + standard: "standard"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable; @@ -3135,8 +3184,8 @@ type ProjectResponse = z$1.infer; declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ id: z$1.ZodString; kind: z$1.ZodEnum<{ - standard: "standard"; personal: "personal"; + standard: "standard"; }>; name: z$1.ZodString; gitRemoteUrl: z$1.ZodNullable; @@ -3238,8 +3287,8 @@ declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ ultra: "ultra"; }>; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; }, z$1.core.$strip>>; @@ -3262,6 +3311,61 @@ declare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{ }, z$1.core.$strict>; type CopyProjectAttachmentsRequest = z$1.infer; +declare const registrySkillSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + skillId: z$1.ZodString; + name: z$1.ZodString; + installs: z$1.ZodNumber; + stars: z$1.ZodNullable; + installUrl: z$1.ZodNullable; + url: z$1.ZodString; + topic: z$1.ZodNullable; + summary: z$1.ZodNullable; +}, z$1.core.$strip>; +type RegistrySkill = z$1.infer; +declare const registrySkillsPageSchema: z$1.ZodObject<{ + skills: z$1.ZodArray; + installUrl: z$1.ZodNullable; + url: z$1.ZodString; + topic: z$1.ZodNullable; + summary: z$1.ZodNullable; + }, z$1.core.$strip>>; + pagination: z$1.ZodObject<{ + page: z$1.ZodNumber; + perPage: z$1.ZodNumber; + total: z$1.ZodNumber; + hasMore: z$1.ZodBoolean; + }, z$1.core.$strip>; +}, z$1.core.$strip>; +type RegistrySkillsPage = z$1.infer; +declare const registryRepositoryStarsSchema: z$1.ZodObject<{ + stars: z$1.ZodNumber; +}, z$1.core.$strip>; +type RegistryRepositoryStars = z$1.infer; +declare const registrySkillDetailSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + skillId: z$1.ZodString; + hash: z$1.ZodNullable; + files: z$1.ZodNullable>>; +}, z$1.core.$strip>; +type RegistrySkillDetail = z$1.infer; +declare const registrySkillInstallResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + filePath: z$1.ZodString; +}, z$1.core.$strip>; +type RegistrySkillInstallResponse = z$1.infer; + declare const updateEnvironmentRequestSchema: z$1.ZodObject<{ mergeBaseBranch: z$1.ZodOptional>; name: z$1.ZodOptional>; @@ -3373,8 +3477,8 @@ declare const environmentDiffFileResponseSchema: z$1.ZodObject<{ path: z$1.ZodString; content: z$1.ZodString; contentEncoding: z$1.ZodEnum<{ - utf8: "utf8"; base64: "base64"; + utf8: "utf8"; }>; mimeType: z$1.ZodOptional; sizeBytes: z$1.ZodNumber; @@ -3986,16 +4090,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4079,9 +4183,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4160,9 +4264,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4253,9 +4357,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4334,9 +4438,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4399,16 +4503,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4517,12 +4621,13 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; - projectId: z$1.ZodString; - providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; - providerThreadId: z$1.ZodString; }, z$1.core.$strict>; target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ mode: z$1.ZodLiteral<"start">; @@ -4653,8 +4757,8 @@ declare const hostDaemonCommandRegistry: { }, z$1.core.$strip>], "mode">; }, z$1.core.$strict>, z$1.ZodObject<{ appliedAs: z$1.ZodEnum<{ - steer: "steer"; "new-turn": "new-turn"; + steer: "steer"; }>; }, z$1.core.$strip>, "settled", false>; "thread.stop": HostDaemonCommandDescriptor<"thread.stop", z$1.ZodObject<{ @@ -4695,16 +4799,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4813,12 +4917,13 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; - projectId: z$1.ZodString; - providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; - providerThreadId: z$1.ZodString; }, z$1.core.$strict>; }, z$1.core.$strict>, z$1.ZodObject<{ cleared: z$1.ZodBoolean; @@ -5095,9 +5199,9 @@ declare const hostDaemonCommandRegistry: { text: z$1.ZodString; startedAt: z$1.ZodOptional; status: z$1.ZodOptional>; metadata: z$1.ZodOptional>; }, z$1.core.$strip>>; @@ -5325,13 +5429,91 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - project: "project"; user: "user"; + project: "project"; }>; description: z$1.ZodNullable; argumentHint: z$1.ZodNullable; }, z$1.core.$strip>>; }, z$1.core.$strip>, "onlineRpc", true>; + "host.list_skills": HostDaemonCommandDescriptor<"host.list_skills", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.list_skills">; + providerId: z$1.ZodString; + cwd: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + skills: z$1.ZodArray; + filePath: z$1.ZodString; + rootKind: z$1.ZodEnum<{ + plugin: "plugin"; + "bb-project": "bb-project"; + "bb-data-dir": "bb-data-dir"; + "bb-builtin": "bb-builtin"; + "provider-project": "provider-project"; + "provider-user": "provider-user"; + }>; + linked: z$1.ZodBoolean; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.delete_skill": HostDaemonCommandDescriptor<"host.delete_skill", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.delete_skill">; + scope: z$1.ZodEnum<{ + "bb-project": "bb-project"; + "bb-user": "bb-user"; + "claude-user": "claude-user"; + "claude-project": "claude-project"; + "codex-user": "codex-user"; + "codex-project": "codex-project"; + }>; + name: z$1.ZodString; + cwd: z$1.ZodNullable; + rootPath: z$1.ZodNullable; + }, z$1.core.$strict>, z$1.ZodObject<{ + deletedPath: z$1.ZodString; + }, z$1.core.$strip>, "onlineRpc", false>; + "host.write_skill": HostDaemonCommandDescriptor<"host.write_skill", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.write_skill">; + scope: z$1.ZodEnum<{ + "bb-project": "bb-project"; + "bb-user": "bb-user"; + }>; + name: z$1.ZodString; + cwd: z$1.ZodNullable; + content: z$1.ZodString; + expectedSha256: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"written">; + filePath: z$1.ZodString; + sha256: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"conflict">; + currentSha256: z$1.ZodNullable; + }, z$1.core.$strip>], "outcome">, "onlineRpc", false>; + "host.install_global_skills": HostDaemonCommandDescriptor<"host.install_global_skills", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.install_global_skills">; + skills: z$1.ZodArray>; + }, z$1.core.$strict>, z$1.ZodObject<{ + installations: z$1.ZodArray>; + }, z$1.core.$strict>, "onlineRpc", false>; + "host.global_skills_status": HostDaemonCommandDescriptor<"host.global_skills_status", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.global_skills_status">; + names: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodObject<{ + entries: z$1.ZodArray; + }, z$1.core.$strict>>; + }, z$1.core.$strict>, "onlineRpc", true>; "host.list_branches": HostDaemonCommandDescriptor<"host.list_branches", z$1.ZodObject<{ type: z$1.ZodLiteral<"host.list_branches">; path: z$1.ZodString; @@ -5728,8 +5910,8 @@ declare const hostDaemonCommandRegistry: { npmGlobalPackageVersion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -5751,8 +5933,8 @@ declare const hostDaemonCommandRegistry: { cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - install: "install"; update: "update"; + install: "install"; }>; type: z$1.ZodLiteral<"provider_cli.install">; }, z$1.core.$strict>, z$1.ZodObject<{ @@ -5892,13 +6074,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -5942,13 +6124,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6004,13 +6186,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6052,13 +6234,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6101,9 +6283,9 @@ declare const hostDaemonCommandRegistry: { conclusion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -6211,8 +6393,8 @@ declare const providerCliInstallRequestSchema: z$1.ZodObject<{ cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - install: "install"; update: "update"; + install: "install"; }>; }, z$1.core.$strip>; type ProviderCliInstallRequest = z$1.infer; @@ -6420,6 +6602,7 @@ declare const installedPluginSchema: z$1.ZodObject<{ description: z$1.ZodNullable; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6460,6 +6643,17 @@ declare const installedPluginSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6477,7 +6671,6 @@ declare const installedPluginSchema: z$1.ZodObject<{ }, z$1.core.$strip>; type InstalledPlugin = z$1.infer; declare const pluginListResponseSchema: z$1.ZodObject<{ - enabled: z$1.ZodBoolean; plugins: z$1.ZodArray; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6553,6 +6747,17 @@ declare const pluginListResponseSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6607,6 +6812,7 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{ description: z$1.ZodNullable; name: z$1.ZodNullable; icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; status: z$1.ZodEnum<{ error: "error"; running: "running"; @@ -6647,6 +6853,17 @@ declare const pluginReloadResponseSchema: z$1.ZodObject<{ name: z$1.ZodString; summary: z$1.ZodString; }, z$1.core.$strip>>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; hasSettings: z$1.ZodBoolean; app: z$1.ZodObject<{ hasApp: z$1.ZodBoolean; @@ -6707,6 +6924,7 @@ declare const pluginCatalogStatusSchema: z$1.ZodObject<{ type PluginCatalogStatus = z$1.infer; declare const pluginCatalogSearchResultSchema: z$1.ZodObject<{ entryId: z$1.ZodString; + pluginId: z$1.ZodString; displayName: z$1.ZodString; description: z$1.ZodString; icon: z$1.ZodNullable; @@ -6730,8 +6948,8 @@ declare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{ supportsUserQuestion: z$1.ZodBoolean; supportsFork: z$1.ZodBoolean; supportedPermissionModes: z$1.ZodArray>; }, z$1.core.$strip>; @@ -6851,6 +7069,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ generalSettings: z$1.ZodObject<{ caffeinate: z$1.ZodBoolean; showKeyboardHints: z$1.ZodBoolean; + steerActiveThreadOnEnter: z$1.ZodBoolean; showUnhandledProviderEvents: z$1.ZodBoolean; codexMemoryEnabled: z$1.ZodBoolean; claudeCodeMemoryEnabled: z$1.ZodBoolean; @@ -7093,7 +7312,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ }, z$1.core.$strict>>; experiments: z$1.ZodObject<{ claudeCodeMockCliTraffic: z$1.ZodBoolean; - plugins: z$1.ZodBoolean; + toolsHub: z$1.ZodBoolean; sideChatPlugin: z$1.ZodBoolean; }, z$1.core.$strip>; appearance: z$1.ZodObject<{ @@ -7120,6 +7339,7 @@ declare const systemConfigResponseSchema: z$1.ZodObject<{ }, z$1.core.$strip>>; featureFlags: z$1.ZodObject<{ placeholder: z$1.ZodBoolean; + timelineWindowEventBudget: z$1.ZodNumber; }, z$1.core.$strip>; hostDaemonPort: z$1.ZodNullable; primaryHostId: z$1.ZodNullable; @@ -7179,6 +7399,46 @@ type SystemVersionResponse = z$1.infer; declare const systemConfigReloadResponseSchema: z$1.ZodObject<{ ok: z$1.ZodLiteral; }, z$1.core.$strip>; +declare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{ + machines: z$1.ZodArray; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SystemCliSkillsStatusResponse = z$1.infer; +/** The machines to copy the built-in bb CLI skills onto. */ +declare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{ + hostIds: z$1.ZodArray; +}, z$1.core.$strip>; +type SystemInstallCliSkillsRequest = z$1.infer; +/** + * One entry per requested machine. A machine that is offline or otherwise + * refuses the install fails on its own without taking the others down, so the + * caller can report exactly which machines got the skills. + */ +declare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{ + results: z$1.ZodArray; + hostId: z$1.ZodString; + hostName: z$1.ZodString; + installations: z$1.ZodArray>; + }, z$1.core.$strip>, z$1.ZodObject<{ + ok: z$1.ZodLiteral; + hostId: z$1.ZodString; + hostName: z$1.ZodString; + errorMessage: z$1.ZodString; + }, z$1.core.$strip>], "ok">>; +}, z$1.core.$strip>; +type SystemInstallCliSkillsResponse = z$1.infer; type SystemConfigReloadResponse = z$1.infer; declare const terminalSessionSchema: z$1.ZodObject<{ @@ -8041,10 +8301,10 @@ declare const createThreadRequestSchema: z$1.ZodObject<{ ultra: "ultra"; }>>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional>>>; title: z$1.ZodOptional; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; visibility: z$1.ZodDefault>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional>; permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"accept-edits" | "auto" | "full", "accept-edits" | "auto" | "full" | "workspace-write">>>; + }>, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; executionInputSources: z$1.ZodOptional; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -9141,9 +9401,9 @@ declare const threadWithIncludesResponseSchema: z$1.ZodObject<{ isGitRepo: z$1.ZodBoolean; isWorktree: z$1.ZodBoolean; workspaceProvisionType: z$1.ZodEnum<{ - personal: "personal"; - "managed-worktree": "managed-worktree"; unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; }>; branchName: z$1.ZodNullable; baseBranch: z$1.ZodNullable; @@ -9437,8 +9697,8 @@ declare const threadQueuedMessageListResponseSchema: z$1.ZodArray; permissionMode: z$1.ZodEnum<{ - "accept-edits": "accept-edits"; auto: "auto"; + "accept-edits": "accept-edits"; full: "full"; }>; serviceTier: z$1.ZodEnum<{ @@ -9619,8 +9879,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ activePromptMode: z$1.ZodNullable; providerId: z$1.ZodEnum<{ - codex: "codex"; "claude-code": "claude-code"; + codex: "codex"; }>; prompt: z$1.ZodString; }, z$1.core.$strict>>; @@ -9630,7 +9890,7 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ startedAt: z$1.ZodNumber; updatedAt: z$1.ZodNumber; }, z$1.core.$strip>>; - activeWorkflow: z$1.ZodNullable; @@ -9811,8 +10071,8 @@ declare const threadTimelineResponseSchema: z$1.ZodObject<{ originalModel: z$1.ZodString; fallbackModel: z$1.ZodString; reason: z$1.ZodEnum<{ - provider: "provider"; refusal: "refusal"; + provider: "provider"; }>; message: z$1.ZodString; }, z$1.core.$strip>>; @@ -10669,6 +10929,78 @@ interface StatusArea { get(args?: StatusGetArgs): Promise; } +interface SkillWorkspaceArgs { + projectId: string; + environmentId: string | null; +} +interface SkillListArgs extends SkillWorkspaceArgs { + signal?: AbortSignal; +} +interface SkillIdentityArgs extends SkillListArgs { + skillId: string; +} +interface SkillContentArgs extends SkillIdentityArgs { + path: string; +} +interface SkillUpdateArgs extends SkillWorkspaceArgs { + skillId: string; + content: string; + revision: string; +} +interface SkillDeleteArgs extends SkillWorkspaceArgs { + skillId: string; +} +/** + * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans + * out one per card. Callers pass their query's AbortSignal so abandoning a + * page cancels its requests instead of leaving them in flight. + */ +interface AbortableArgs { + signal?: AbortSignal; +} +interface RegistrySkillsSearchArgs extends AbortableArgs { + query?: string; + page?: number; + perPage?: number; +} +interface RegistrySkillIdArgs extends AbortableArgs { + registrySkillId: string; +} +interface RegistrySkillSourceArgs extends AbortableArgs { + source: string; + skillId: string; +} +interface RegistryRepositoryArgs extends AbortableArgs { + source: string; +} +/** + * Install is a mutation and deliberately takes no signal: its body is parsed + * with a strict schema, so an extra key would throw at runtime. + */ +interface RegistrySkillInstallArgs { + registrySkillId: string; +} +interface SkillsRegistryArea { + detail(args: RegistrySkillSourceArgs): Promise; + get(args: RegistrySkillIdArgs): Promise; + install(args: RegistrySkillInstallArgs): Promise; + repositoryStars(args: RegistryRepositoryArgs): Promise; + search(args?: RegistrySkillsSearchArgs): Promise; +} +interface SkillsArea { + getContent(args: SkillContentArgs): Promise; + list(args: SkillListArgs): Promise; + listFiles(args: SkillIdentityArgs): Promise; + registry: SkillsRegistryArea; + remove(args: SkillDeleteArgs): Promise<{ + deletedPath: string; + }>; + update(args: SkillUpdateArgs): Promise<{ + filePath: string; + revision: string; + }>; +} + type ThemeGetResult = AppTheme; type ThemeCatalogResult = ThemeCatalogResponse; type ThemeSetInput = AppThemeSelection; @@ -10719,6 +11051,14 @@ type SystemAttentionResult = SystemAttentionResponse; type SystemConfigResult = SystemConfigResponse; type SystemExecutionOptionsResult = SystemExecutionOptionsResponse; type SystemReloadConfigResult = SystemConfigReloadResponse; +type SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest; +interface SystemCliSkillsStatusArgs { + /** Omit for every enrolled machine. */ + hostIds?: readonly string[]; + signal?: AbortSignal; +} +type SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse; +type SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse; type SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse; type SystemUpdateExperimentsResult = Experiments; type SystemUpdateGeneralSettingsResult = AppSettings; @@ -10729,6 +11069,14 @@ interface SystemArea { attention(args?: SystemAttentionArgs): Promise; config(args?: SystemConfigArgs): Promise; executionOptions(args?: SystemExecutionOptionsArgs): Promise; + /** + * Copy bb's built-in CLI skills into each named machine's global agent skill + * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install + * independently; the result reports each machine's outcome. + */ + /** Per-machine install state of bb's built-in CLI skills. */ + cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise; + installCliSkills(args: SystemInstallCliSkillsArgs): Promise; reloadConfig(): Promise; transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise; updateExperiments(args: Experiments): Promise; @@ -11148,6 +11496,7 @@ interface BbSdk extends BbRealtime { projects: ProjectsArea; plugins: PluginsArea; providers: ProvidersArea; + skills: SkillsArea; status: StatusArea; system: SystemArea; terminals: TerminalsArea; diff --git a/tooling/check-repository.mjs b/tooling/check-repository.mjs index 1634a4d..69717e7 100644 --- a/tooling/check-repository.mjs +++ b/tooling/check-repository.mjs @@ -4,6 +4,10 @@ import { dirname, resolve } from "node:path"; import { fileURLToPath } from "node:url"; import { readPluginWorkspaces } from "./plugin-workspaces.mjs"; +import { + pluginSdkArchive, + pluginSdkVersion, +} from "./plugin-sdk-provenance.mjs"; const defaultRoot = resolve(dirname(fileURLToPath(import.meta.url)), ".."); @@ -96,6 +100,11 @@ export async function checkRepository(repositoryRoot = defaultRoot, options = {} assert(rootManifest.workspaces.includes("plugins/*"), "plugins workspace missing"); assert(rootManifest.workspaces.includes("packages/*"), "packages workspace missing"); + assert( + rootManifest.devDependencies?.["@bb/plugin-sdk"] === + `file:tooling/vendor/${pluginSdkArchive}`, + "root plugin SDK dependency drift", + ); assert( !(await stat(resolve(root, "plugins/design-loop")).catch(() => null)), "Design Loop is intentionally excluded", @@ -135,7 +144,17 @@ export async function checkRepository(repositoryRoot = defaultRoot, options = {} manifest.engines?.bb === (minimumBbEngines.get(slug) ?? ">=0.0.34"), `${slug}: bb engine drift`, ); - assert(manifest.engines?.bbPluginSdk === "^0.4.0", `${slug}: SDK engine drift`); + assert( + manifest.engines?.bbPluginSdk === `^${pluginSdkVersion}`, + `${slug}: SDK engine drift`, + ); + if (manifest.devDependencies?.["@bb/plugin-sdk"] !== undefined) { + assert( + manifest.devDependencies["@bb/plugin-sdk"] === + `file:../../tooling/vendor/${pluginSdkArchive}`, + `${slug}: plugin SDK dependency drift`, + ); + } assert(pluginReadme.startsWith(`# ${name}\n`), `${slug}: README title drift`); for (const heading of ["## Install", "## Use", "## Develop"]) { assert(pluginReadme.includes(heading), `${slug}: README missing ${heading}`); diff --git a/tooling/create-plugin.mjs b/tooling/create-plugin.mjs index c8e3896..b0c6b67 100644 --- a/tooling/create-plugin.mjs +++ b/tooling/create-plugin.mjs @@ -3,6 +3,11 @@ import { dirname, resolve } from "node:path"; import { spawnSync } from "node:child_process"; import { fileURLToPath } from "node:url"; +import { + pluginSdkArchive, + pluginSdkVersion, +} from "./plugin-sdk-provenance.mjs"; + const defaultRepositoryRoot = resolve(dirname(fileURLToPath(import.meta.url)), ".."); function command(executable, args, repositoryRoot) { @@ -64,7 +69,7 @@ function filesFor(options) { test: "vitest run", typecheck: "tsc --noEmit", }, - engines: { bb: ">=0.0.34", bbPluginSdk: "^0.4.0" }, + engines: { bb: ">=0.0.34", bbPluginSdk: `^${pluginSdkVersion}` }, bb: { name: options.name, description: options.description, @@ -73,7 +78,7 @@ function filesFor(options) { skills: [], }, devDependencies: { - "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": `file:../../tooling/vendor/${pluginSdkArchive}`, "@types/better-sqlite3": "^7.6.12", "@types/node": "^22.0.0", "better-sqlite3": "^12.10.0", diff --git a/tooling/plugin-sdk-provenance.mjs b/tooling/plugin-sdk-provenance.mjs new file mode 100644 index 0000000..306c785 --- /dev/null +++ b/tooling/plugin-sdk-provenance.mjs @@ -0,0 +1,21 @@ +import { readFile } from "node:fs/promises"; + +const provenance = JSON.parse( + await readFile( + new URL("./vendor/sdk-provenance.json", import.meta.url), + "utf8", + ), +); +const packageVersion = /^@bb\/plugin-sdk@(\d+\.\d+\.\d+)$/.exec( + provenance.package, +)?.[1]; + +if (packageVersion === undefined) { + throw new Error("vendored plugin SDK has no concrete version"); +} +if (provenance.archive !== `bb-plugin-sdk-${packageVersion}.tgz`) { + throw new Error("vendored plugin SDK archive does not match its version"); +} + +export const pluginSdkArchive = provenance.archive; +export const pluginSdkVersion = packageVersion; diff --git a/tooling/publish-install-refs.mjs b/tooling/publish-install-refs.mjs index daf43fe..1907b1a 100644 --- a/tooling/publish-install-refs.mjs +++ b/tooling/publish-install-refs.mjs @@ -85,7 +85,7 @@ async function filesBelow(directory, prefix = "") { return files; } -export function releaseManifest(sourceManifest, bundledPackageNames = new Set()) { +export function releaseManifest(sourceManifest) { const manifest = structuredClone(sourceManifest); delete manifest.devDependencies; delete manifest.scripts; @@ -95,92 +95,11 @@ export function releaseManifest(sourceManifest, bundledPackageNames = new Set()) // also carries plugin-authored CSS through that second build. if (manifest.bb?.app) manifest.bb.app = releaseAppEntry; for (const field of productionDependencyFields) { - const dependencies = manifest[field]; - if (!dependencies) continue; - for (const [name, version] of Object.entries(dependencies)) { - if (bundledPackageNames.has(name)) { - dependencies[name] = `file:${bundledPackageVendorPath(name)}`; - continue; - } - if (String(version).startsWith("file:")) { - throw new Error(`${manifest.name}: production dependency ${name} uses ${version}`); - } - } - if (Object.keys(dependencies).length === 0) delete manifest[field]; + delete manifest[field]; } return `${JSON.stringify(manifest, null, 2)}\n`; } -function bundledPackageVendorPath(name) { - if (!/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/.test(name)) { - throw new Error(`invalid bundled package name: ${name}`); - } - return `vendor/${name}`; -} - -function bundledPackageInstallPath(name) { - bundledPackageVendorPath(name); - return `node_modules/${name}`; -} - -function bundledPackageRuntimeManifest(sourceManifest) { - const manifest = structuredClone(sourceManifest); - delete manifest.devDependencies; - delete manifest.scripts; - delete manifest.private; - return `${JSON.stringify(manifest, null, 2)}\n`; -} - -function normalizeBundledPackageFilePath(entry) { - if (typeof entry !== "string") { - throw new Error(`invalid bundled package file path: ${String(entry)}`); - } - const normalized = entry.replace(/\\/g, "/").replace(/^\.\//, "").replace(/\/+$/, ""); - if ( - normalized === "" || - normalized.startsWith("/") || - normalized.split("/").some((segment) => segment === "." || segment === "..") - ) { - throw new Error(`invalid bundled package file path: ${entry}`); - } - return normalized; -} - -function bundledPackageFileIncluded(relativePath, manifestFiles) { - return manifestFiles.some((entry) => { - const normalized = normalizeBundledPackageFilePath(entry); - return relativePath === normalized || relativePath.startsWith(`${normalized}/`); - }); -} - -async function readBundledPackages() { - const packagesDirectory = resolve(root, "packages"); - const entries = await readdir(packagesDirectory, { - withFileTypes: true, - }).catch((error) => { - if (error?.code === "ENOENT") return []; - throw error; - }); - const packages = new Map(); - for (const entry of entries) { - if (!entry.isDirectory() || entry.name.startsWith(".")) continue; - const directory = resolve(packagesDirectory, entry.name); - const manifest = JSON.parse(await readFile(resolve(directory, "package.json"), "utf8")); - if (!manifest.name) { - throw new Error(`packages/${entry.name}/package.json has no package name`); - } - if (!Array.isArray(manifest.files) || manifest.files.length === 0) { - throw new Error(`packages/${entry.name}/package.json has no runtime files allowlist`); - } - bundledPackageVendorPath(manifest.name); - for (const runtimePath of manifest.files) { - normalizeBundledPackageFilePath(runtimePath); - } - packages.set(manifest.name, { directory, manifest }); - } - return packages; -} - function addBlob(indexPath, repositoryPath, input) { const blob = git(["hash-object", "-w", "--stdin"], { input }); git( @@ -189,7 +108,15 @@ function addBlob(indexPath, repositoryPath, input) { ); } -async function createReleaseTree(plugin, sourceCommit, bundledPackages) { +function addBlobFile(indexPath, repositoryPath, sourcePath) { + const blob = git(["hash-object", "-w", sourcePath]); + git( + ["update-index", "--add", "--cacheinfo", `100644,${blob},${repositoryPath}`], + { env: { GIT_INDEX_FILE: indexPath } }, + ); +} + +async function createReleaseTree(plugin, sourceCommit) { const pluginDirectory = resolve(root, plugin.source); const sourceManifest = JSON.parse( await readFile(resolve(pluginDirectory, "package.json"), "utf8"), @@ -220,34 +147,7 @@ async function createReleaseTree(plugin, sourceCommit, bundledPackages) { } for (const file of await filesBelow(resolve(pluginDirectory, "dist"))) { - const contents = await readFile(file.absolutePath); - addBlob(indexPath, `dist/${file.relativePath}`, contents); - } - - const bundledPackageNames = new Set(bundledPackages.keys()); - for (const field of productionDependencyFields) { - const dependencies = sourceManifest[field]; - if (!dependencies) continue; - for (const name of Object.keys(dependencies)) { - const bundledPackage = bundledPackages.get(name); - if (!bundledPackage) continue; - const vendorPath = bundledPackageVendorPath(name); - const packagePaths = [vendorPath, bundledPackageInstallPath(name)]; - const runtimeManifest = bundledPackageRuntimeManifest(bundledPackage.manifest); - for (const packagePath of packagePaths) { - addBlob(indexPath, `${packagePath}/package.json`, runtimeManifest); - } - for (const file of await filesBelow(bundledPackage.directory)) { - if (file.relativePath === "package.json") continue; - if (!bundledPackageFileIncluded(file.relativePath, bundledPackage.manifest.files)) { - continue; - } - const contents = await readFile(file.absolutePath); - for (const packagePath of packagePaths) { - addBlob(indexPath, `${packagePath}/${file.relativePath}`, contents); - } - } - } + addBlobFile(indexPath, `dist/${file.relativePath}`, file.absolutePath); } if (sourceManifest.bb?.app) { @@ -275,7 +175,7 @@ async function createReleaseTree(plugin, sourceCommit, bundledPackages) { addBlob( indexPath, "package.json", - releaseManifest(sourceManifest, bundledPackageNames), + releaseManifest(sourceManifest), ); return git(["write-tree"], { env: { GIT_INDEX_FILE: indexPath } }); @@ -376,47 +276,7 @@ export function assertPublishWorktreeClean( } } -function bundledPluginDependencyNames(plugin, bundledPackageNames) { - const names = new Set(); - for (const field of productionDependencyFields) { - for (const name of Object.keys(plugin.manifest[field] ?? {})) { - if (bundledPackageNames.has(name)) names.add(name); - } - } - return [...names]; -} - -async function verifyBundledRuntimePackage(plugin, directory, name, location) { - const bundledManifest = JSON.parse( - await readFile(resolve(directory, "package.json"), "utf8").catch((error) => { - if (error?.code === "ENOENT") { - throw new Error( - `${plugin.installRef}: ${location} omits bundled runtime package ${name}`, - ); - } - throw error; - }), - ); - if (bundledManifest.name !== name) { - throw new Error( - `${plugin.installRef}: ${location} runtime package ${name} has mismatched manifest name`, - ); - } - for (const runtimePath of bundledManifest.files ?? []) { - const normalized = normalizeBundledPackageFilePath(runtimePath); - const details = await stat(resolve(directory, normalized)).catch((error) => { - if (error?.code === "ENOENT") return null; - throw error; - }); - if (details === null) { - throw new Error( - `${plugin.installRef}: ${location} runtime package ${name} omits ${normalized}`, - ); - } - } -} - -async function verifyReleaseCommit(plugin, releaseCommit, bundledPackageNames) { +async function verifyReleaseCommit(plugin, releaseCommit) { const checkoutRoot = await mkdtemp( resolve(tmpdir(), `bb-plugin-install-${plugin.slug}-`), ); @@ -435,37 +295,17 @@ async function verifyReleaseCommit(plugin, releaseCommit, bundledPackageNames) { if (manifest.devDependencies || manifest.scripts) { throw new Error(`${plugin.installRef}: release manifest contains development-only fields`); } - if (manifest.bb?.app && manifest.bb.app !== releaseAppEntry) { - throw new Error(`${plugin.installRef}: release app entry is not the prebuilt wrapper`); - } - - const bundledDependencyNames = bundledPluginDependencyNames( - plugin, - bundledPackageNames, - ); - for (const name of bundledDependencyNames) { - const vendorPath = bundledPackageVendorPath(name); - const sourceField = productionDependencyFields.find( - (field) => plugin.manifest[field]?.[name] !== undefined, - ); - if (manifest[sourceField]?.[name] !== `file:${vendorPath}`) { + for (const field of productionDependencyFields) { + if (manifest[field] !== undefined) { throw new Error( - `${plugin.installRef}: release manifest does not install bundled runtime package ${name}`, + `${plugin.installRef}: release manifest contains ${field}`, ); } - await verifyBundledRuntimePackage( - plugin, - resolve(checkout, vendorPath), - name, - "release vendor", - ); - await verifyBundledRuntimePackage( - plugin, - resolve(checkout, bundledPackageInstallPath(name)), - name, - "release checkout", - ); } + if (manifest.bb?.app && manifest.bb.app !== releaseAppEntry) { + throw new Error(`${plugin.installRef}: release app entry is not the prebuilt wrapper`); + } + await validatePluginArtifacts(checkout, { expectedId: plugin.pluginId, expectedName: plugin.name, @@ -510,14 +350,6 @@ async function verifyReleaseCommit(plugin, releaseCommit, bundledPackageNames) { ], { cwd: checkout }, ); - for (const name of bundledDependencyNames) { - await verifyBundledRuntimePackage( - plugin, - resolve(checkout, "node_modules", name), - name, - "production install", - ); - } await validatePluginArtifacts(checkout, { expectedId: plugin.pluginId, expectedName: plugin.name, @@ -530,8 +362,6 @@ async function verifyReleaseCommit(plugin, releaseCommit, bundledPackageNames) { export async function publishInstallRefs(options = {}) { const push = options.push ?? false; const plugins = await readPluginWorkspaces(root); - const bundledPackages = await readBundledPackages(); - const bundledPackageNames = new Set(bundledPackages.keys()); if (push) assertPublishWorktreeClean(); const sourceRevision = git(["rev-parse", "HEAD"]); @@ -552,24 +382,20 @@ export async function publishInstallRefs(options = {}) { .at(-1); if (!sourceCommit) throw new Error(`no subtree commit produced for ${plugin.slug}`); - const candidateTree = await createReleaseTree( - plugin, - sourceCommit, - bundledPackages, - ); + const candidateTree = await createReleaseTree(plugin, sourceCommit); const currentCommit = currentReleaseCommit(plugin, push); const currentTree = currentCommit ? git(["rev-parse", `${currentCommit}^{tree}`]) : null; if (currentCommit && currentTree === candidateTree) { - await verifyReleaseCommit(plugin, currentCommit, bundledPackageNames); + await verifyReleaseCommit(plugin, currentCommit); console.log(`${plugin.installRef} ${currentCommit} unchanged and verified`); continue; } const releaseCommit = createReleaseCommit(plugin, candidateTree, sourceRevision); const ref = `refs/heads/${plugin.installRef}`; - await verifyReleaseCommit(plugin, releaseCommit, bundledPackageNames); + await verifyReleaseCommit(plugin, releaseCommit); git(["update-ref", ref, releaseCommit]); if (push) { diff --git a/tooling/scaffold-smoke.mjs b/tooling/scaffold-smoke.mjs index 00e56ac..1d03468 100644 --- a/tooling/scaffold-smoke.mjs +++ b/tooling/scaffold-smoke.mjs @@ -52,7 +52,7 @@ async function createFixtureRepository(directory) { type: "module", workspaces: ["plugins/*", "packages/*"], devDependencies: { - "@bb/plugin-sdk": "file:tooling/vendor/bb-plugin-sdk-0.4.0.tgz", + "@bb/plugin-sdk": rootManifest.devDependencies["@bb/plugin-sdk"], "@tailwindcss/node": rootManifest.devDependencies["@tailwindcss/node"], "@tailwindcss/oxide": rootManifest.devDependencies["@tailwindcss/oxide"], esbuild: rootManifest.devDependencies.esbuild, @@ -244,6 +244,26 @@ try { }); await checkRepository(fixtureRoot, { bundledTypesDirectory }); + const serverMetaPath = resolve(generated.directory, "dist/server.meta.json"); + const serverMetaRaw = await readFile(serverMetaPath, "utf8"); + const serverMeta = JSON.parse(serverMetaRaw); + serverMeta.builtWith.pluginSdkVersion = "0.4.999"; + await writeFile(serverMetaPath, `${JSON.stringify(serverMeta, null, 2)}\n`); + await assert.rejects( + validatePluginArtifacts(generated.directory), + /expected builtWith\.pluginSdkVersion=/, + ); + await writeFile(serverMetaPath, serverMetaRaw); + + const serverBundlePath = resolve(generated.directory, "dist/server.js"); + const serverBundle = await readFile(serverBundlePath, "utf8"); + await writeFile(serverBundlePath, `${serverBundle}\nimport "zod";\n`); + await assert.rejects( + validatePluginArtifacts(generated.directory), + /server bundle has unmanaged runtime import "zod"/, + ); + await writeFile(serverBundlePath, serverBundle); + await rm(resolve(fixtureRoot, "node_modules"), { recursive: true, force: true, diff --git a/tooling/validate-plugin-artifacts.mjs b/tooling/validate-plugin-artifacts.mjs index 4f276b0..89bfa70 100644 --- a/tooling/validate-plugin-artifacts.mjs +++ b/tooling/validate-plugin-artifacts.mjs @@ -1,10 +1,12 @@ import { spawnSync } from "node:child_process"; import { readFile, readdir, stat } from "node:fs/promises"; +import { builtinModules } from "node:module"; import { dirname, resolve } from "node:path"; import { fileURLToPath } from "node:url"; import { readPluginWorkspaces } from "./plugin-workspaces.mjs"; import { pluginBuildBbVersion } from "./plugin-build-provenance.mjs"; +import { pluginSdkVersion } from "./plugin-sdk-provenance.mjs"; const repositoryRoot = resolve(dirname(fileURLToPath(import.meta.url)), ".."); @@ -28,7 +30,6 @@ function expectedPluginId(packageName) { async function validateMetadata(path, manifest, id, bbVersion) { const metadata = await readJson(path); - const expectedSdk = manifest.engines.bbPluginSdk.match(/\d+\.\d+\.\d+/)?.[0]; const expected = { artifactFormatVersion: 1, pluginId: id, @@ -39,12 +40,56 @@ async function validateMetadata(path, manifest, id, bbVersion) { throw new Error(`${path}: expected ${key}=${JSON.stringify(value)}`); } } - if (metadata.sdkVersion !== expectedSdk) { - throw new Error(`${path}: expected sdkVersion=${expectedSdk}`); + if (metadata.sdkVersion !== pluginSdkVersion) { + throw new Error(`${path}: expected sdkVersion=${pluginSdkVersion}`); } if (metadata.builtWith?.bbVersion !== bbVersion) { throw new Error(`${path}: expected bb ${bbVersion} build metadata`); } + if (metadata.builtWith?.pluginSdkVersion !== pluginSdkVersion) { + throw new Error( + `${path}: expected builtWith.pluginSdkVersion=${pluginSdkVersion}`, + ); + } +} + +const builtinModuleNames = new Set( + builtinModules.flatMap((name) => [name, `node:${name}`]), +); +const managedServerRuntimeImports = new Set([ + "@bb/plugin-sdk", + "better-sqlite3", +]); + +function serverRuntimeImports(source) { + const imports = new Set(); + for (const match of source.matchAll(/(?:^|\n)import\s+[^;]+;/gu)) { + const specifier = + /^import\s*["']([^"']+)["']/u.exec(match[0].trim())?.[1] ?? + /\bfrom\s+["']([^"']+)["']/u.exec(match[0])?.[1]; + if (specifier !== undefined) imports.add(specifier); + } + for (const match of source.matchAll( + /\b(?:import|require)\s*\(\s*["']([^"']+)["']\s*\)/gu, + )) { + imports.add(match[1]); + } + return imports; +} + +async function validateManagedServerBundle(path) { + const source = await readFile(path, "utf8"); + for (const specifier of serverRuntimeImports(source)) { + if ( + builtinModuleNames.has(specifier) || + managedServerRuntimeImports.has(specifier) + ) { + continue; + } + throw new Error( + `${path}: server bundle has unmanaged runtime import ${JSON.stringify(specifier)}`, + ); + } } function normalizePackagePath(path) { @@ -174,8 +219,15 @@ export async function validatePluginArtifacts(pluginDirectory, options = {}) { if (options.expectedName && manifest.bb.name !== options.expectedName) { throw new Error(`${directory}: expected display name ${options.expectedName}`); } + if (manifest.engines?.bbPluginSdk !== `^${pluginSdkVersion}`) { + throw new Error( + `${directory}: expected engines.bbPluginSdk=^${pluginSdkVersion}`, + ); + } - await requireNonEmpty(resolve(directory, "dist/server.js")); + const serverBundlePath = resolve(directory, "dist/server.js"); + await requireNonEmpty(serverBundlePath); + await validateManagedServerBundle(serverBundlePath); await validateMetadata( resolve(directory, "dist/server.meta.json"), manifest, diff --git a/tooling/vendor/bb-plugin-build-0.0.34.mjs b/tooling/vendor/bb-plugin-build-0.0.34.mjs index 4052536..f49345b 100644 --- a/tooling/vendor/bb-plugin-build-0.0.34.mjs +++ b/tooling/vendor/bb-plugin-build-0.0.34.mjs @@ -1,14 +1,1950 @@ +var __create = Object.create; var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + try { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; + } catch (e) { + throw mod = 0, e; + } +}; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/xmlchars@2.2.0/node_modules/xmlchars/xml/1.0/ed5.js +var require_ed5 = __commonJS({ + "../env_ag7ffajzdy/bb/node_modules/.pnpm/xmlchars@2.2.0/node_modules/xmlchars/xml/1.0/ed5.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.CHAR = " \n\r -\uD7FF\uE000-\uFFFD\u{10000}-\u{10FFFF}"; + exports.S = " \r\n"; + exports.NAME_START_CHAR = ":A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\u{EFFFF}"; + exports.NAME_CHAR = "-" + exports.NAME_START_CHAR + ".0-9\xB7\u0300-\u036F\u203F-\u2040"; + exports.CHAR_RE = new RegExp("^[" + exports.CHAR + "]$", "u"); + exports.S_RE = new RegExp("^[" + exports.S + "]+$", "u"); + exports.NAME_START_CHAR_RE = new RegExp("^[" + exports.NAME_START_CHAR + "]$", "u"); + exports.NAME_CHAR_RE = new RegExp("^[" + exports.NAME_CHAR + "]$", "u"); + exports.NAME_RE = new RegExp("^[" + exports.NAME_START_CHAR + "][" + exports.NAME_CHAR + "]*$", "u"); + exports.NMTOKEN_RE = new RegExp("^[" + exports.NAME_CHAR + "]+$", "u"); + var TAB = 9; + var NL = 10; + var CR = 13; + var SPACE = 32; + exports.S_LIST = [SPACE, NL, CR, TAB]; + function isChar(c) { + return c >= SPACE && c <= 55295 || c === NL || c === CR || c === TAB || c >= 57344 && c <= 65533 || c >= 65536 && c <= 1114111; + } + exports.isChar = isChar; + function isS(c) { + return c === SPACE || c === NL || c === CR || c === TAB; + } + exports.isS = isS; + function isNameStartChar(c) { + return c >= 65 && c <= 90 || c >= 97 && c <= 122 || c === 58 || c === 95 || c === 8204 || c === 8205 || c >= 192 && c <= 214 || c >= 216 && c <= 246 || c >= 248 && c <= 767 || c >= 880 && c <= 893 || c >= 895 && c <= 8191 || c >= 8304 && c <= 8591 || c >= 11264 && c <= 12271 || c >= 12289 && c <= 55295 || c >= 63744 && c <= 64975 || c >= 65008 && c <= 65533 || c >= 65536 && c <= 983039; + } + exports.isNameStartChar = isNameStartChar; + function isNameChar(c) { + return isNameStartChar(c) || c >= 48 && c <= 57 || c === 45 || c === 46 || c === 183 || c >= 768 && c <= 879 || c >= 8255 && c <= 8256; + } + exports.isNameChar = isNameChar; + } +}); + +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/xmlchars@2.2.0/node_modules/xmlchars/xml/1.1/ed2.js +var require_ed2 = __commonJS({ + "../env_ag7ffajzdy/bb/node_modules/.pnpm/xmlchars@2.2.0/node_modules/xmlchars/xml/1.1/ed2.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.CHAR = "-\uD7FF\uE000-\uFFFD\u{10000}-\u{10FFFF}"; + exports.RESTRICTED_CHAR = "-\b\v\f-\x7F-\x84\x86-\x9F"; + exports.S = " \r\n"; + exports.NAME_START_CHAR = ":A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\u{EFFFF}"; + exports.NAME_CHAR = "-" + exports.NAME_START_CHAR + ".0-9\xB7\u0300-\u036F\u203F-\u2040"; + exports.CHAR_RE = new RegExp("^[" + exports.CHAR + "]$", "u"); + exports.RESTRICTED_CHAR_RE = new RegExp("^[" + exports.RESTRICTED_CHAR + "]$", "u"); + exports.S_RE = new RegExp("^[" + exports.S + "]+$", "u"); + exports.NAME_START_CHAR_RE = new RegExp("^[" + exports.NAME_START_CHAR + "]$", "u"); + exports.NAME_CHAR_RE = new RegExp("^[" + exports.NAME_CHAR + "]$", "u"); + exports.NAME_RE = new RegExp("^[" + exports.NAME_START_CHAR + "][" + exports.NAME_CHAR + "]*$", "u"); + exports.NMTOKEN_RE = new RegExp("^[" + exports.NAME_CHAR + "]+$", "u"); + var TAB = 9; + var NL = 10; + var CR = 13; + var SPACE = 32; + exports.S_LIST = [SPACE, NL, CR, TAB]; + function isChar(c) { + return c >= 1 && c <= 55295 || c >= 57344 && c <= 65533 || c >= 65536 && c <= 1114111; + } + exports.isChar = isChar; + function isRestrictedChar(c) { + return c >= 1 && c <= 8 || c === 11 || c === 12 || c >= 14 && c <= 31 || c >= 127 && c <= 132 || c >= 134 && c <= 159; + } + exports.isRestrictedChar = isRestrictedChar; + function isCharAndNotRestricted(c) { + return c === 9 || c === 10 || c === 13 || c > 31 && c < 127 || c === 133 || c > 159 && c <= 55295 || c >= 57344 && c <= 65533 || c >= 65536 && c <= 1114111; + } + exports.isCharAndNotRestricted = isCharAndNotRestricted; + function isS(c) { + return c === SPACE || c === NL || c === CR || c === TAB; + } + exports.isS = isS; + function isNameStartChar(c) { + return c >= 65 && c <= 90 || c >= 97 && c <= 122 || c === 58 || c === 95 || c === 8204 || c === 8205 || c >= 192 && c <= 214 || c >= 216 && c <= 246 || c >= 248 && c <= 767 || c >= 880 && c <= 893 || c >= 895 && c <= 8191 || c >= 8304 && c <= 8591 || c >= 11264 && c <= 12271 || c >= 12289 && c <= 55295 || c >= 63744 && c <= 64975 || c >= 65008 && c <= 65533 || c >= 65536 && c <= 983039; + } + exports.isNameStartChar = isNameStartChar; + function isNameChar(c) { + return isNameStartChar(c) || c >= 48 && c <= 57 || c === 45 || c === 46 || c === 183 || c >= 768 && c <= 879 || c >= 8255 && c <= 8256; + } + exports.isNameChar = isNameChar; + } +}); + +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/xmlchars@2.2.0/node_modules/xmlchars/xmlns/1.0/ed3.js +var require_ed3 = __commonJS({ + "../env_ag7ffajzdy/bb/node_modules/.pnpm/xmlchars@2.2.0/node_modules/xmlchars/xmlns/1.0/ed3.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.NC_NAME_START_CHAR = "A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\u{EFFFF}"; + exports.NC_NAME_CHAR = "-" + exports.NC_NAME_START_CHAR + ".0-9\xB7\u0300-\u036F\u203F-\u2040"; + exports.NC_NAME_START_CHAR_RE = new RegExp("^[" + exports.NC_NAME_START_CHAR + "]$", "u"); + exports.NC_NAME_CHAR_RE = new RegExp("^[" + exports.NC_NAME_CHAR + "]$", "u"); + exports.NC_NAME_RE = new RegExp("^[" + exports.NC_NAME_START_CHAR + "][" + exports.NC_NAME_CHAR + "]*$", "u"); + function isNCNameStartChar(c) { + return c >= 65 && c <= 90 || c === 95 || c >= 97 && c <= 122 || c >= 192 && c <= 214 || c >= 216 && c <= 246 || c >= 248 && c <= 767 || c >= 880 && c <= 893 || c >= 895 && c <= 8191 || c >= 8204 && c <= 8205 || c >= 8304 && c <= 8591 || c >= 11264 && c <= 12271 || c >= 12289 && c <= 55295 || c >= 63744 && c <= 64975 || c >= 65008 && c <= 65533 || c >= 65536 && c <= 983039; + } + exports.isNCNameStartChar = isNCNameStartChar; + function isNCNameChar(c) { + return isNCNameStartChar(c) || (c === 45 || c === 46 || c >= 48 && c <= 57 || c === 183 || c >= 768 && c <= 879 || c >= 8255 && c <= 8256); + } + exports.isNCNameChar = isNCNameChar; + } +}); + +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/saxes@6.0.0/node_modules/saxes/saxes.js +var require_saxes = __commonJS({ + "../env_ag7ffajzdy/bb/node_modules/.pnpm/saxes@6.0.0/node_modules/saxes/saxes.js"(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.SaxesParser = exports.EVENTS = void 0; + var ed5 = require_ed5(); + var ed2 = require_ed2(); + var NSed3 = require_ed3(); + var isS = ed5.isS; + var isChar10 = ed5.isChar; + var isNameStartChar = ed5.isNameStartChar; + var isNameChar = ed5.isNameChar; + var S_LIST = ed5.S_LIST; + var NAME_RE = ed5.NAME_RE; + var isChar11 = ed2.isChar; + var isNCNameStartChar = NSed3.isNCNameStartChar; + var isNCNameChar = NSed3.isNCNameChar; + var NC_NAME_RE = NSed3.NC_NAME_RE; + var XML_NAMESPACE = "http://www.w3.org/XML/1998/namespace"; + var XMLNS_NAMESPACE = "http://www.w3.org/2000/xmlns/"; + var rootNS = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment + __proto__: null, + xml: XML_NAMESPACE, + xmlns: XMLNS_NAMESPACE + }; + var XML_ENTITIES = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment + __proto__: null, + amp: "&", + gt: ">", + lt: "<", + quot: '"', + apos: "'" + }; + var EOC = -1; + var NL_LIKE = -2; + var S_BEGIN = 0; + var S_BEGIN_WHITESPACE = 1; + var S_DOCTYPE = 2; + var S_DOCTYPE_QUOTE = 3; + var S_DTD = 4; + var S_DTD_QUOTED = 5; + var S_DTD_OPEN_WAKA = 6; + var S_DTD_OPEN_WAKA_BANG = 7; + var S_DTD_COMMENT = 8; + var S_DTD_COMMENT_ENDING = 9; + var S_DTD_COMMENT_ENDED = 10; + var S_DTD_PI = 11; + var S_DTD_PI_ENDING = 12; + var S_TEXT = 13; + var S_ENTITY = 14; + var S_OPEN_WAKA = 15; + var S_OPEN_WAKA_BANG = 16; + var S_COMMENT = 17; + var S_COMMENT_ENDING = 18; + var S_COMMENT_ENDED = 19; + var S_CDATA = 20; + var S_CDATA_ENDING = 21; + var S_CDATA_ENDING_2 = 22; + var S_PI_FIRST_CHAR = 23; + var S_PI_REST = 24; + var S_PI_BODY = 25; + var S_PI_ENDING = 26; + var S_XML_DECL_NAME_START = 27; + var S_XML_DECL_NAME = 28; + var S_XML_DECL_EQ = 29; + var S_XML_DECL_VALUE_START = 30; + var S_XML_DECL_VALUE = 31; + var S_XML_DECL_SEPARATOR = 32; + var S_XML_DECL_ENDING = 33; + var S_OPEN_TAG = 34; + var S_OPEN_TAG_SLASH = 35; + var S_ATTRIB = 36; + var S_ATTRIB_NAME = 37; + var S_ATTRIB_NAME_SAW_WHITE = 38; + var S_ATTRIB_VALUE = 39; + var S_ATTRIB_VALUE_QUOTED = 40; + var S_ATTRIB_VALUE_CLOSED = 41; + var S_ATTRIB_VALUE_UNQUOTED = 42; + var S_CLOSE_TAG = 43; + var S_CLOSE_TAG_SAW_WHITE = 44; + var TAB = 9; + var NL = 10; + var CR = 13; + var SPACE = 32; + var BANG = 33; + var DQUOTE = 34; + var AMP = 38; + var SQUOTE = 39; + var MINUS = 45; + var FORWARD_SLASH = 47; + var SEMICOLON = 59; + var LESS = 60; + var EQUAL = 61; + var GREATER = 62; + var QUESTION = 63; + var OPEN_BRACKET = 91; + var CLOSE_BRACKET = 93; + var NEL = 133; + var LS = 8232; + var isQuote = (c) => c === DQUOTE || c === SQUOTE; + var QUOTES = [DQUOTE, SQUOTE]; + var DOCTYPE_TERMINATOR = [...QUOTES, OPEN_BRACKET, GREATER]; + var DTD_TERMINATOR = [...QUOTES, LESS, CLOSE_BRACKET]; + var XML_DECL_NAME_TERMINATOR = [EQUAL, QUESTION, ...S_LIST]; + var ATTRIB_VALUE_UNQUOTED_TERMINATOR = [...S_LIST, GREATER, AMP, LESS]; + function nsPairCheck(parser, prefix, uri) { + switch (prefix) { + case "xml": + if (uri !== XML_NAMESPACE) { + parser.fail(`xml prefix must be bound to ${XML_NAMESPACE}.`); + } + break; + case "xmlns": + if (uri !== XMLNS_NAMESPACE) { + parser.fail(`xmlns prefix must be bound to ${XMLNS_NAMESPACE}.`); + } + break; + default: + } + switch (uri) { + case XMLNS_NAMESPACE: + parser.fail(prefix === "" ? `the default namespace may not be set to ${uri}.` : `may not assign a prefix (even "xmlns") to the URI ${XMLNS_NAMESPACE}.`); + break; + case XML_NAMESPACE: + switch (prefix) { + case "xml": + break; + case "": + parser.fail(`the default namespace may not be set to ${uri}.`); + break; + default: + parser.fail("may not assign the xml namespace to another prefix."); + } + break; + default: + } + } + function nsMappingCheck(parser, mapping) { + for (const local of Object.keys(mapping)) { + nsPairCheck(parser, local, mapping[local]); + } + } + var isNCName = (name) => NC_NAME_RE.test(name); + var isName = (name) => NAME_RE.test(name); + var FORBIDDEN_START = 0; + var FORBIDDEN_BRACKET = 1; + var FORBIDDEN_BRACKET_BRACKET = 2; + exports.EVENTS = [ + "xmldecl", + "text", + "processinginstruction", + "doctype", + "comment", + "opentagstart", + "attribute", + "opentag", + "closetag", + "cdata", + "error", + "end", + "ready" + ]; + var EVENT_NAME_TO_HANDLER_NAME = { + xmldecl: "xmldeclHandler", + text: "textHandler", + processinginstruction: "piHandler", + doctype: "doctypeHandler", + comment: "commentHandler", + opentagstart: "openTagStartHandler", + attribute: "attributeHandler", + opentag: "openTagHandler", + closetag: "closeTagHandler", + cdata: "cdataHandler", + error: "errorHandler", + end: "endHandler", + ready: "readyHandler" + }; + var SaxesParser2 = class { + /** + * @param opt The parser options. + */ + constructor(opt) { + this.opt = opt !== null && opt !== void 0 ? opt : {}; + this.fragmentOpt = !!this.opt.fragment; + const xmlnsOpt = this.xmlnsOpt = !!this.opt.xmlns; + this.trackPosition = this.opt.position !== false; + this.fileName = this.opt.fileName; + if (xmlnsOpt) { + this.nameStartCheck = isNCNameStartChar; + this.nameCheck = isNCNameChar; + this.isName = isNCName; + this.processAttribs = this.processAttribsNS; + this.pushAttrib = this.pushAttribNS; + this.ns = Object.assign({ __proto__: null }, rootNS); + const additional = this.opt.additionalNamespaces; + if (additional != null) { + nsMappingCheck(this, additional); + Object.assign(this.ns, additional); + } + } else { + this.nameStartCheck = isNameStartChar; + this.nameCheck = isNameChar; + this.isName = isName; + this.processAttribs = this.processAttribsPlain; + this.pushAttrib = this.pushAttribPlain; + } + this.stateTable = [ + /* eslint-disable @typescript-eslint/unbound-method */ + this.sBegin, + this.sBeginWhitespace, + this.sDoctype, + this.sDoctypeQuote, + this.sDTD, + this.sDTDQuoted, + this.sDTDOpenWaka, + this.sDTDOpenWakaBang, + this.sDTDComment, + this.sDTDCommentEnding, + this.sDTDCommentEnded, + this.sDTDPI, + this.sDTDPIEnding, + this.sText, + this.sEntity, + this.sOpenWaka, + this.sOpenWakaBang, + this.sComment, + this.sCommentEnding, + this.sCommentEnded, + this.sCData, + this.sCDataEnding, + this.sCDataEnding2, + this.sPIFirstChar, + this.sPIRest, + this.sPIBody, + this.sPIEnding, + this.sXMLDeclNameStart, + this.sXMLDeclName, + this.sXMLDeclEq, + this.sXMLDeclValueStart, + this.sXMLDeclValue, + this.sXMLDeclSeparator, + this.sXMLDeclEnding, + this.sOpenTag, + this.sOpenTagSlash, + this.sAttrib, + this.sAttribName, + this.sAttribNameSawWhite, + this.sAttribValue, + this.sAttribValueQuoted, + this.sAttribValueClosed, + this.sAttribValueUnquoted, + this.sCloseTag, + this.sCloseTagSawWhite + /* eslint-enable @typescript-eslint/unbound-method */ + ]; + this._init(); + } + /** + * Indicates whether or not the parser is closed. If ``true``, wait for + * the ``ready`` event to write again. + */ + get closed() { + return this._closed; + } + _init() { + var _a2; + this.openWakaBang = ""; + this.text = ""; + this.name = ""; + this.piTarget = ""; + this.entity = ""; + this.q = null; + this.tags = []; + this.tag = null; + this.topNS = null; + this.chunk = ""; + this.chunkPosition = 0; + this.i = 0; + this.prevI = 0; + this.carriedFromPrevious = void 0; + this.forbiddenState = FORBIDDEN_START; + this.attribList = []; + const { fragmentOpt } = this; + this.state = fragmentOpt ? S_TEXT : S_BEGIN; + this.reportedTextBeforeRoot = this.reportedTextAfterRoot = this.closedRoot = this.sawRoot = fragmentOpt; + this.xmlDeclPossible = !fragmentOpt; + this.xmlDeclExpects = ["version"]; + this.entityReturnState = void 0; + let { defaultXMLVersion } = this.opt; + if (defaultXMLVersion === void 0) { + if (this.opt.forceXMLVersion === true) { + throw new Error("forceXMLVersion set but defaultXMLVersion is not set"); + } + defaultXMLVersion = "1.0"; + } + this.setXMLVersion(defaultXMLVersion); + this.positionAtNewLine = 0; + this.doctype = false; + this._closed = false; + this.xmlDecl = { + version: void 0, + encoding: void 0, + standalone: void 0 + }; + this.line = 1; + this.column = 0; + this.ENTITIES = Object.create(XML_ENTITIES); + (_a2 = this.readyHandler) === null || _a2 === void 0 ? void 0 : _a2.call(this); + } + /** + * The stream position the parser is currently looking at. This field is + * zero-based. + * + * This field is not based on counting Unicode characters but is to be + * interpreted as a plain index into a JavaScript string. + */ + get position() { + return this.chunkPosition + this.i; + } + /** + * The column number of the next character to be read by the parser. * + * This field is zero-based. (The first column in a line is 0.) + * + * This field reports the index at which the next character would be in the + * line if the line were represented as a JavaScript string. Note that this + * *can* be different to a count based on the number of *Unicode characters* + * due to how JavaScript handles astral plane characters. + * + * See [[column]] for a number that corresponds to a count of Unicode + * characters. + */ + get columnIndex() { + return this.position - this.positionAtNewLine; + } + /** + * Set an event listener on an event. The parser supports one handler per + * event type. If you try to set an event handler over an existing handler, + * the old handler is silently overwritten. + * + * @param name The event to listen to. + * + * @param handler The handler to set. + */ + on(name, handler) { + this[EVENT_NAME_TO_HANDLER_NAME[name]] = handler; + } + /** + * Unset an event handler. + * + * @parma name The event to stop listening to. + */ + off(name) { + this[EVENT_NAME_TO_HANDLER_NAME[name]] = void 0; + } + /** + * Make an error object. The error object will have a message that contains + * the ``fileName`` option passed at the creation of the parser. If position + * tracking was turned on, it will also have line and column number + * information. + * + * @param message The message describing the error to report. + * + * @returns An error object with a properly formatted message. + */ + makeError(message) { + var _a2; + let msg = (_a2 = this.fileName) !== null && _a2 !== void 0 ? _a2 : ""; + if (this.trackPosition) { + if (msg.length > 0) { + msg += ":"; + } + msg += `${this.line}:${this.column}`; + } + if (msg.length > 0) { + msg += ": "; + } + return new Error(msg + message); + } + /** + * Report a parsing error. This method is made public so that client code may + * check for issues that are outside the scope of this project and can report + * errors. + * + * @param message The error to report. + * + * @returns this + */ + fail(message) { + const err = this.makeError(message); + const handler = this.errorHandler; + if (handler === void 0) { + throw err; + } else { + handler(err); + } + return this; + } + /** + * Write a XML data to the parser. + * + * @param chunk The XML data to write. + * + * @returns this + */ + // We do need object for the type here. Yes, it often causes problems + // but not in this case. + write(chunk) { + if (this.closed) { + return this.fail("cannot write after close; assign an onready handler."); + } + let end = false; + if (chunk === null) { + end = true; + chunk = ""; + } else if (typeof chunk === "object") { + chunk = chunk.toString(); + } + if (this.carriedFromPrevious !== void 0) { + chunk = `${this.carriedFromPrevious}${chunk}`; + this.carriedFromPrevious = void 0; + } + let limit = chunk.length; + const lastCode = chunk.charCodeAt(limit - 1); + if (!end && // A trailing CR or surrogate must be carried over to the next + // chunk. + (lastCode === CR || lastCode >= 55296 && lastCode <= 56319)) { + this.carriedFromPrevious = chunk[limit - 1]; + limit--; + chunk = chunk.slice(0, limit); + } + const { stateTable } = this; + this.chunk = chunk; + this.i = 0; + while (this.i < limit) { + stateTable[this.state].call(this); + } + this.chunkPosition += limit; + return end ? this.end() : this; + } + /** + * Close the current stream. Perform final well-formedness checks and reset + * the parser tstate. + * + * @returns this + */ + close() { + return this.write(null); + } + /** + * Get a single code point out of the current chunk. This updates the current + * position if we do position tracking. + * + * This is the algorithm to use for XML 1.0. + * + * @returns The character read. + */ + getCode10() { + const { chunk, i } = this; + this.prevI = i; + this.i = i + 1; + if (i >= chunk.length) { + return EOC; + } + const code = chunk.charCodeAt(i); + this.column++; + if (code < 55296) { + if (code >= SPACE || code === TAB) { + return code; + } + switch (code) { + case NL: + this.line++; + this.column = 0; + this.positionAtNewLine = this.position; + return NL; + case CR: + if (chunk.charCodeAt(i + 1) === NL) { + this.i = i + 2; + } + this.line++; + this.column = 0; + this.positionAtNewLine = this.position; + return NL_LIKE; + default: + this.fail("disallowed character."); + return code; + } + } + if (code > 56319) { + if (!(code >= 57344 && code <= 65533)) { + this.fail("disallowed character."); + } + return code; + } + const final = 65536 + (code - 55296) * 1024 + (chunk.charCodeAt(i + 1) - 56320); + this.i = i + 2; + if (final > 1114111) { + this.fail("disallowed character."); + } + return final; + } + /** + * Get a single code point out of the current chunk. This updates the current + * position if we do position tracking. + * + * This is the algorithm to use for XML 1.1. + * + * @returns {number} The character read. + */ + getCode11() { + const { chunk, i } = this; + this.prevI = i; + this.i = i + 1; + if (i >= chunk.length) { + return EOC; + } + const code = chunk.charCodeAt(i); + this.column++; + if (code < 55296) { + if (code > 31 && code < 127 || code > 159 && code !== LS || code === TAB) { + return code; + } + switch (code) { + case NL: + this.line++; + this.column = 0; + this.positionAtNewLine = this.position; + return NL; + case CR: { + const next = chunk.charCodeAt(i + 1); + if (next === NL || next === NEL) { + this.i = i + 2; + } + } + /* yes, fall through */ + case NEL: + // 0x85 + case LS: + this.line++; + this.column = 0; + this.positionAtNewLine = this.position; + return NL_LIKE; + default: + this.fail("disallowed character."); + return code; + } + } + if (code > 56319) { + if (!(code >= 57344 && code <= 65533)) { + this.fail("disallowed character."); + } + return code; + } + const final = 65536 + (code - 55296) * 1024 + (chunk.charCodeAt(i + 1) - 56320); + this.i = i + 2; + if (final > 1114111) { + this.fail("disallowed character."); + } + return final; + } + /** + * Like ``getCode`` but with the return value normalized so that ``NL`` is + * returned for ``NL_LIKE``. + */ + getCodeNorm() { + const c = this.getCode(); + return c === NL_LIKE ? NL : c; + } + unget() { + this.i = this.prevI; + this.column--; + } + /** + * Capture characters into a buffer until encountering one of a set of + * characters. + * + * @param chars An array of codepoints. Encountering a character in the array + * ends the capture. (``chars`` may safely contain ``NL``.) + * + * @return The character code that made the capture end, or ``EOC`` if we hit + * the end of the chunk. The return value cannot be NL_LIKE: NL is returned + * instead. + */ + captureTo(chars) { + let { i: start } = this; + const { chunk } = this; + while (true) { + const c = this.getCode(); + const isNLLike = c === NL_LIKE; + const final = isNLLike ? NL : c; + if (final === EOC || chars.includes(final)) { + this.text += chunk.slice(start, this.prevI); + return final; + } + if (isNLLike) { + this.text += `${chunk.slice(start, this.prevI)} +`; + start = this.i; + } + } + } + /** + * Capture characters into a buffer until encountering a character. + * + * @param char The codepoint that ends the capture. **NOTE ``char`` MAY NOT + * CONTAIN ``NL``.** Passing ``NL`` will result in buggy behavior. + * + * @return ``true`` if we ran into the character. Otherwise, we ran into the + * end of the current chunk. + */ + captureToChar(char) { + let { i: start } = this; + const { chunk } = this; + while (true) { + let c = this.getCode(); + switch (c) { + case NL_LIKE: + this.text += `${chunk.slice(start, this.prevI)} +`; + start = this.i; + c = NL; + break; + case EOC: + this.text += chunk.slice(start); + return false; + default: + } + if (c === char) { + this.text += chunk.slice(start, this.prevI); + return true; + } + } + } + /** + * Capture characters that satisfy ``isNameChar`` into the ``name`` field of + * this parser. + * + * @return The character code that made the test fail, or ``EOC`` if we hit + * the end of the chunk. The return value cannot be NL_LIKE: NL is returned + * instead. + */ + captureNameChars() { + const { chunk, i: start } = this; + while (true) { + const c = this.getCode(); + if (c === EOC) { + this.name += chunk.slice(start); + return EOC; + } + if (!isNameChar(c)) { + this.name += chunk.slice(start, this.prevI); + return c === NL_LIKE ? NL : c; + } + } + } + /** + * Skip white spaces. + * + * @return The character that ended the skip, or ``EOC`` if we hit + * the end of the chunk. The return value cannot be NL_LIKE: NL is returned + * instead. + */ + skipSpaces() { + while (true) { + const c = this.getCodeNorm(); + if (c === EOC || !isS(c)) { + return c; + } + } + } + setXMLVersion(version2) { + this.currentXMLVersion = version2; + if (version2 === "1.0") { + this.isChar = isChar10; + this.getCode = this.getCode10; + } else { + this.isChar = isChar11; + this.getCode = this.getCode11; + } + } + // STATE ENGINE METHODS + // This needs to be a state separate from S_BEGIN_WHITESPACE because we want + // to be sure never to come back to this state later. + sBegin() { + if (this.chunk.charCodeAt(0) === 65279) { + this.i++; + this.column++; + } + this.state = S_BEGIN_WHITESPACE; + } + sBeginWhitespace() { + const iBefore = this.i; + const c = this.skipSpaces(); + if (this.prevI !== iBefore) { + this.xmlDeclPossible = false; + } + switch (c) { + case LESS: + this.state = S_OPEN_WAKA; + if (this.text.length !== 0) { + throw new Error("no-empty text at start"); + } + break; + case EOC: + break; + default: + this.unget(); + this.state = S_TEXT; + this.xmlDeclPossible = false; + } + } + sDoctype() { + var _a2; + const c = this.captureTo(DOCTYPE_TERMINATOR); + switch (c) { + case GREATER: { + (_a2 = this.doctypeHandler) === null || _a2 === void 0 ? void 0 : _a2.call(this, this.text); + this.text = ""; + this.state = S_TEXT; + this.doctype = true; + break; + } + case EOC: + break; + default: + this.text += String.fromCodePoint(c); + if (c === OPEN_BRACKET) { + this.state = S_DTD; + } else if (isQuote(c)) { + this.state = S_DOCTYPE_QUOTE; + this.q = c; + } + } + } + sDoctypeQuote() { + const q = this.q; + if (this.captureToChar(q)) { + this.text += String.fromCodePoint(q); + this.q = null; + this.state = S_DOCTYPE; + } + } + sDTD() { + const c = this.captureTo(DTD_TERMINATOR); + if (c === EOC) { + return; + } + this.text += String.fromCodePoint(c); + if (c === CLOSE_BRACKET) { + this.state = S_DOCTYPE; + } else if (c === LESS) { + this.state = S_DTD_OPEN_WAKA; + } else if (isQuote(c)) { + this.state = S_DTD_QUOTED; + this.q = c; + } + } + sDTDQuoted() { + const q = this.q; + if (this.captureToChar(q)) { + this.text += String.fromCodePoint(q); + this.state = S_DTD; + this.q = null; + } + } + sDTDOpenWaka() { + const c = this.getCodeNorm(); + this.text += String.fromCodePoint(c); + switch (c) { + case BANG: + this.state = S_DTD_OPEN_WAKA_BANG; + this.openWakaBang = ""; + break; + case QUESTION: + this.state = S_DTD_PI; + break; + default: + this.state = S_DTD; + } + } + sDTDOpenWakaBang() { + const char = String.fromCodePoint(this.getCodeNorm()); + const owb = this.openWakaBang += char; + this.text += char; + if (owb !== "-") { + this.state = owb === "--" ? S_DTD_COMMENT : S_DTD; + this.openWakaBang = ""; + } + } + sDTDComment() { + if (this.captureToChar(MINUS)) { + this.text += "-"; + this.state = S_DTD_COMMENT_ENDING; + } + } + sDTDCommentEnding() { + const c = this.getCodeNorm(); + this.text += String.fromCodePoint(c); + this.state = c === MINUS ? S_DTD_COMMENT_ENDED : S_DTD_COMMENT; + } + sDTDCommentEnded() { + const c = this.getCodeNorm(); + this.text += String.fromCodePoint(c); + if (c === GREATER) { + this.state = S_DTD; + } else { + this.fail("malformed comment."); + this.state = S_DTD_COMMENT; + } + } + sDTDPI() { + if (this.captureToChar(QUESTION)) { + this.text += "?"; + this.state = S_DTD_PI_ENDING; + } + } + sDTDPIEnding() { + const c = this.getCodeNorm(); + this.text += String.fromCodePoint(c); + if (c === GREATER) { + this.state = S_DTD; + } + } + sText() { + if (this.tags.length !== 0) { + this.handleTextInRoot(); + } else { + this.handleTextOutsideRoot(); + } + } + sEntity() { + let { i: start } = this; + const { chunk } = this; + loop: + while (true) { + switch (this.getCode()) { + case NL_LIKE: + this.entity += `${chunk.slice(start, this.prevI)} +`; + start = this.i; + break; + case SEMICOLON: { + const { entityReturnState } = this; + const entity = this.entity + chunk.slice(start, this.prevI); + this.state = entityReturnState; + let parsed; + if (entity === "") { + this.fail("empty entity name."); + parsed = "&;"; + } else { + parsed = this.parseEntity(entity); + this.entity = ""; + } + if (entityReturnState !== S_TEXT || this.textHandler !== void 0) { + this.text += parsed; + } + break loop; + } + case EOC: + this.entity += chunk.slice(start); + break loop; + default: + } + } + } + sOpenWaka() { + const c = this.getCode(); + if (isNameStartChar(c)) { + this.state = S_OPEN_TAG; + this.unget(); + this.xmlDeclPossible = false; + } else { + switch (c) { + case FORWARD_SLASH: + this.state = S_CLOSE_TAG; + this.xmlDeclPossible = false; + break; + case BANG: + this.state = S_OPEN_WAKA_BANG; + this.openWakaBang = ""; + this.xmlDeclPossible = false; + break; + case QUESTION: + this.state = S_PI_FIRST_CHAR; + break; + default: + this.fail("disallowed character in tag name"); + this.state = S_TEXT; + this.xmlDeclPossible = false; + } + } + } + sOpenWakaBang() { + this.openWakaBang += String.fromCodePoint(this.getCodeNorm()); + switch (this.openWakaBang) { + case "[CDATA[": + if (!this.sawRoot && !this.reportedTextBeforeRoot) { + this.fail("text data outside of root node."); + this.reportedTextBeforeRoot = true; + } + if (this.closedRoot && !this.reportedTextAfterRoot) { + this.fail("text data outside of root node."); + this.reportedTextAfterRoot = true; + } + this.state = S_CDATA; + this.openWakaBang = ""; + break; + case "--": + this.state = S_COMMENT; + this.openWakaBang = ""; + break; + case "DOCTYPE": + this.state = S_DOCTYPE; + if (this.doctype || this.sawRoot) { + this.fail("inappropriately located doctype declaration."); + } + this.openWakaBang = ""; + break; + default: + if (this.openWakaBang.length >= 7) { + this.fail("incorrect syntax."); + } + } + } + sComment() { + if (this.captureToChar(MINUS)) { + this.state = S_COMMENT_ENDING; + } + } + sCommentEnding() { + var _a2; + const c = this.getCodeNorm(); + if (c === MINUS) { + this.state = S_COMMENT_ENDED; + (_a2 = this.commentHandler) === null || _a2 === void 0 ? void 0 : _a2.call(this, this.text); + this.text = ""; + } else { + this.text += `-${String.fromCodePoint(c)}`; + this.state = S_COMMENT; + } + } + sCommentEnded() { + const c = this.getCodeNorm(); + if (c !== GREATER) { + this.fail("malformed comment."); + this.text += `--${String.fromCodePoint(c)}`; + this.state = S_COMMENT; + } else { + this.state = S_TEXT; + } + } + sCData() { + if (this.captureToChar(CLOSE_BRACKET)) { + this.state = S_CDATA_ENDING; + } + } + sCDataEnding() { + const c = this.getCodeNorm(); + if (c === CLOSE_BRACKET) { + this.state = S_CDATA_ENDING_2; + } else { + this.text += `]${String.fromCodePoint(c)}`; + this.state = S_CDATA; + } + } + sCDataEnding2() { + var _a2; + const c = this.getCodeNorm(); + switch (c) { + case GREATER: { + (_a2 = this.cdataHandler) === null || _a2 === void 0 ? void 0 : _a2.call(this, this.text); + this.text = ""; + this.state = S_TEXT; + break; + } + case CLOSE_BRACKET: + this.text += "]"; + break; + default: + this.text += `]]${String.fromCodePoint(c)}`; + this.state = S_CDATA; + } + } + // We need this separate state to check the first character fo the pi target + // with this.nameStartCheck which allows less characters than this.nameCheck. + sPIFirstChar() { + const c = this.getCodeNorm(); + if (this.nameStartCheck(c)) { + this.piTarget += String.fromCodePoint(c); + this.state = S_PI_REST; + } else if (c === QUESTION || isS(c)) { + this.fail("processing instruction without a target."); + this.state = c === QUESTION ? S_PI_ENDING : S_PI_BODY; + } else { + this.fail("disallowed character in processing instruction name."); + this.piTarget += String.fromCodePoint(c); + this.state = S_PI_REST; + } + } + sPIRest() { + const { chunk, i: start } = this; + while (true) { + const c = this.getCodeNorm(); + if (c === EOC) { + this.piTarget += chunk.slice(start); + return; + } + if (!this.nameCheck(c)) { + this.piTarget += chunk.slice(start, this.prevI); + const isQuestion = c === QUESTION; + if (isQuestion || isS(c)) { + if (this.piTarget === "xml") { + if (!this.xmlDeclPossible) { + this.fail("an XML declaration must be at the start of the document."); + } + this.state = isQuestion ? S_XML_DECL_ENDING : S_XML_DECL_NAME_START; + } else { + this.state = isQuestion ? S_PI_ENDING : S_PI_BODY; + } + } else { + this.fail("disallowed character in processing instruction name."); + this.piTarget += String.fromCodePoint(c); + } + break; + } + } + } + sPIBody() { + if (this.text.length === 0) { + const c = this.getCodeNorm(); + if (c === QUESTION) { + this.state = S_PI_ENDING; + } else if (!isS(c)) { + this.text = String.fromCodePoint(c); + } + } else if (this.captureToChar(QUESTION)) { + this.state = S_PI_ENDING; + } + } + sPIEnding() { + var _a2; + const c = this.getCodeNorm(); + if (c === GREATER) { + const { piTarget } = this; + if (piTarget.toLowerCase() === "xml") { + this.fail("the XML declaration must appear at the start of the document."); + } + (_a2 = this.piHandler) === null || _a2 === void 0 ? void 0 : _a2.call(this, { + target: piTarget, + body: this.text + }); + this.piTarget = this.text = ""; + this.state = S_TEXT; + } else if (c === QUESTION) { + this.text += "?"; + } else { + this.text += `?${String.fromCodePoint(c)}`; + this.state = S_PI_BODY; + } + this.xmlDeclPossible = false; + } + sXMLDeclNameStart() { + const c = this.skipSpaces(); + if (c === QUESTION) { + this.state = S_XML_DECL_ENDING; + return; + } + if (c !== EOC) { + this.state = S_XML_DECL_NAME; + this.name = String.fromCodePoint(c); + } + } + sXMLDeclName() { + const c = this.captureTo(XML_DECL_NAME_TERMINATOR); + if (c === QUESTION) { + this.state = S_XML_DECL_ENDING; + this.name += this.text; + this.text = ""; + this.fail("XML declaration is incomplete."); + return; + } + if (!(isS(c) || c === EQUAL)) { + return; + } + this.name += this.text; + this.text = ""; + if (!this.xmlDeclExpects.includes(this.name)) { + switch (this.name.length) { + case 0: + this.fail("did not expect any more name/value pairs."); + break; + case 1: + this.fail(`expected the name ${this.xmlDeclExpects[0]}.`); + break; + default: + this.fail(`expected one of ${this.xmlDeclExpects.join(", ")}`); + } + } + this.state = c === EQUAL ? S_XML_DECL_VALUE_START : S_XML_DECL_EQ; + } + sXMLDeclEq() { + const c = this.getCodeNorm(); + if (c === QUESTION) { + this.state = S_XML_DECL_ENDING; + this.fail("XML declaration is incomplete."); + return; + } + if (isS(c)) { + return; + } + if (c !== EQUAL) { + this.fail("value required."); + } + this.state = S_XML_DECL_VALUE_START; + } + sXMLDeclValueStart() { + const c = this.getCodeNorm(); + if (c === QUESTION) { + this.state = S_XML_DECL_ENDING; + this.fail("XML declaration is incomplete."); + return; + } + if (isS(c)) { + return; + } + if (!isQuote(c)) { + this.fail("value must be quoted."); + this.q = SPACE; + } else { + this.q = c; + } + this.state = S_XML_DECL_VALUE; + } + sXMLDeclValue() { + const c = this.captureTo([this.q, QUESTION]); + if (c === QUESTION) { + this.state = S_XML_DECL_ENDING; + this.text = ""; + this.fail("XML declaration is incomplete."); + return; + } + if (c === EOC) { + return; + } + const value = this.text; + this.text = ""; + switch (this.name) { + case "version": { + this.xmlDeclExpects = ["encoding", "standalone"]; + const version2 = value; + this.xmlDecl.version = version2; + if (!/^1\.[0-9]+$/.test(version2)) { + this.fail("version number must match /^1\\.[0-9]+$/."); + } else if (!this.opt.forceXMLVersion) { + this.setXMLVersion(version2); + } + break; + } + case "encoding": + if (!/^[A-Za-z][A-Za-z0-9._-]*$/.test(value)) { + this.fail("encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/."); + } + this.xmlDeclExpects = ["standalone"]; + this.xmlDecl.encoding = value; + break; + case "standalone": + if (value !== "yes" && value !== "no") { + this.fail('standalone value must match "yes" or "no".'); + } + this.xmlDeclExpects = []; + this.xmlDecl.standalone = value; + break; + default: + } + this.name = ""; + this.state = S_XML_DECL_SEPARATOR; + } + sXMLDeclSeparator() { + const c = this.getCodeNorm(); + if (c === QUESTION) { + this.state = S_XML_DECL_ENDING; + return; + } + if (!isS(c)) { + this.fail("whitespace required."); + this.unget(); + } + this.state = S_XML_DECL_NAME_START; + } + sXMLDeclEnding() { + var _a2; + const c = this.getCodeNorm(); + if (c === GREATER) { + if (this.piTarget !== "xml") { + this.fail("processing instructions are not allowed before root."); + } else if (this.name !== "version" && this.xmlDeclExpects.includes("version")) { + this.fail("XML declaration must contain a version."); + } + (_a2 = this.xmldeclHandler) === null || _a2 === void 0 ? void 0 : _a2.call(this, this.xmlDecl); + this.name = ""; + this.piTarget = this.text = ""; + this.state = S_TEXT; + } else { + this.fail("The character ? is disallowed anywhere in XML declarations."); + } + this.xmlDeclPossible = false; + } + sOpenTag() { + var _a2; + const c = this.captureNameChars(); + if (c === EOC) { + return; + } + const tag = this.tag = { + name: this.name, + attributes: /* @__PURE__ */ Object.create(null) + }; + this.name = ""; + if (this.xmlnsOpt) { + this.topNS = tag.ns = /* @__PURE__ */ Object.create(null); + } + (_a2 = this.openTagStartHandler) === null || _a2 === void 0 ? void 0 : _a2.call(this, tag); + this.sawRoot = true; + if (!this.fragmentOpt && this.closedRoot) { + this.fail("documents may contain only one root."); + } + switch (c) { + case GREATER: + this.openTag(); + break; + case FORWARD_SLASH: + this.state = S_OPEN_TAG_SLASH; + break; + default: + if (!isS(c)) { + this.fail("disallowed character in tag name."); + } + this.state = S_ATTRIB; + } + } + sOpenTagSlash() { + if (this.getCode() === GREATER) { + this.openSelfClosingTag(); + } else { + this.fail("forward-slash in opening tag not followed by >."); + this.state = S_ATTRIB; + } + } + sAttrib() { + const c = this.skipSpaces(); + if (c === EOC) { + return; + } + if (isNameStartChar(c)) { + this.unget(); + this.state = S_ATTRIB_NAME; + } else if (c === GREATER) { + this.openTag(); + } else if (c === FORWARD_SLASH) { + this.state = S_OPEN_TAG_SLASH; + } else { + this.fail("disallowed character in attribute name."); + } + } + sAttribName() { + const c = this.captureNameChars(); + if (c === EQUAL) { + this.state = S_ATTRIB_VALUE; + } else if (isS(c)) { + this.state = S_ATTRIB_NAME_SAW_WHITE; + } else if (c === GREATER) { + this.fail("attribute without value."); + this.pushAttrib(this.name, this.name); + this.name = this.text = ""; + this.openTag(); + } else if (c !== EOC) { + this.fail("disallowed character in attribute name."); + } + } + sAttribNameSawWhite() { + const c = this.skipSpaces(); + switch (c) { + case EOC: + return; + case EQUAL: + this.state = S_ATTRIB_VALUE; + break; + default: + this.fail("attribute without value."); + this.text = ""; + this.name = ""; + if (c === GREATER) { + this.openTag(); + } else if (isNameStartChar(c)) { + this.unget(); + this.state = S_ATTRIB_NAME; + } else { + this.fail("disallowed character in attribute name."); + this.state = S_ATTRIB; + } + } + } + sAttribValue() { + const c = this.getCodeNorm(); + if (isQuote(c)) { + this.q = c; + this.state = S_ATTRIB_VALUE_QUOTED; + } else if (!isS(c)) { + this.fail("unquoted attribute value."); + this.state = S_ATTRIB_VALUE_UNQUOTED; + this.unget(); + } + } + sAttribValueQuoted() { + const { q, chunk } = this; + let { i: start } = this; + while (true) { + switch (this.getCode()) { + case q: + this.pushAttrib(this.name, this.text + chunk.slice(start, this.prevI)); + this.name = this.text = ""; + this.q = null; + this.state = S_ATTRIB_VALUE_CLOSED; + return; + case AMP: + this.text += chunk.slice(start, this.prevI); + this.state = S_ENTITY; + this.entityReturnState = S_ATTRIB_VALUE_QUOTED; + return; + case NL: + case NL_LIKE: + case TAB: + this.text += `${chunk.slice(start, this.prevI)} `; + start = this.i; + break; + case LESS: + this.text += chunk.slice(start, this.prevI); + this.fail("disallowed character."); + return; + case EOC: + this.text += chunk.slice(start); + return; + default: + } + } + } + sAttribValueClosed() { + const c = this.getCodeNorm(); + if (isS(c)) { + this.state = S_ATTRIB; + } else if (c === GREATER) { + this.openTag(); + } else if (c === FORWARD_SLASH) { + this.state = S_OPEN_TAG_SLASH; + } else if (isNameStartChar(c)) { + this.fail("no whitespace between attributes."); + this.unget(); + this.state = S_ATTRIB_NAME; + } else { + this.fail("disallowed character in attribute name."); + } + } + sAttribValueUnquoted() { + const c = this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR); + switch (c) { + case AMP: + this.state = S_ENTITY; + this.entityReturnState = S_ATTRIB_VALUE_UNQUOTED; + break; + case LESS: + this.fail("disallowed character."); + break; + case EOC: + break; + default: + if (this.text.includes("]]>")) { + this.fail('the string "]]>" is disallowed in char data.'); + } + this.pushAttrib(this.name, this.text); + this.name = this.text = ""; + if (c === GREATER) { + this.openTag(); + } else { + this.state = S_ATTRIB; + } + } + } + sCloseTag() { + const c = this.captureNameChars(); + if (c === GREATER) { + this.closeTag(); + } else if (isS(c)) { + this.state = S_CLOSE_TAG_SAW_WHITE; + } else if (c !== EOC) { + this.fail("disallowed character in closing tag."); + } + } + sCloseTagSawWhite() { + switch (this.skipSpaces()) { + case GREATER: + this.closeTag(); + break; + case EOC: + break; + default: + this.fail("disallowed character in closing tag."); + } + } + // END OF STATE ENGINE METHODS + handleTextInRoot() { + let { i: start, forbiddenState } = this; + const { chunk, textHandler: handler } = this; + scanLoop: + while (true) { + switch (this.getCode()) { + case LESS: { + this.state = S_OPEN_WAKA; + if (handler !== void 0) { + const { text } = this; + const slice = chunk.slice(start, this.prevI); + if (text.length !== 0) { + handler(text + slice); + this.text = ""; + } else if (slice.length !== 0) { + handler(slice); + } + } + forbiddenState = FORBIDDEN_START; + break scanLoop; + } + case AMP: + this.state = S_ENTITY; + this.entityReturnState = S_TEXT; + if (handler !== void 0) { + this.text += chunk.slice(start, this.prevI); + } + forbiddenState = FORBIDDEN_START; + break scanLoop; + case CLOSE_BRACKET: + switch (forbiddenState) { + case FORBIDDEN_START: + forbiddenState = FORBIDDEN_BRACKET; + break; + case FORBIDDEN_BRACKET: + forbiddenState = FORBIDDEN_BRACKET_BRACKET; + break; + case FORBIDDEN_BRACKET_BRACKET: + break; + default: + throw new Error("impossible state"); + } + break; + case GREATER: + if (forbiddenState === FORBIDDEN_BRACKET_BRACKET) { + this.fail('the string "]]>" is disallowed in char data.'); + } + forbiddenState = FORBIDDEN_START; + break; + case NL_LIKE: + if (handler !== void 0) { + this.text += `${chunk.slice(start, this.prevI)} +`; + } + start = this.i; + forbiddenState = FORBIDDEN_START; + break; + case EOC: + if (handler !== void 0) { + this.text += chunk.slice(start); + } + break scanLoop; + default: + forbiddenState = FORBIDDEN_START; + } + } + this.forbiddenState = forbiddenState; + } + handleTextOutsideRoot() { + let { i: start } = this; + const { chunk, textHandler: handler } = this; + let nonSpace = false; + outRootLoop: + while (true) { + const code = this.getCode(); + switch (code) { + case LESS: { + this.state = S_OPEN_WAKA; + if (handler !== void 0) { + const { text } = this; + const slice = chunk.slice(start, this.prevI); + if (text.length !== 0) { + handler(text + slice); + this.text = ""; + } else if (slice.length !== 0) { + handler(slice); + } + } + break outRootLoop; + } + case AMP: + this.state = S_ENTITY; + this.entityReturnState = S_TEXT; + if (handler !== void 0) { + this.text += chunk.slice(start, this.prevI); + } + nonSpace = true; + break outRootLoop; + case NL_LIKE: + if (handler !== void 0) { + this.text += `${chunk.slice(start, this.prevI)} +`; + } + start = this.i; + break; + case EOC: + if (handler !== void 0) { + this.text += chunk.slice(start); + } + break outRootLoop; + default: + if (!isS(code)) { + nonSpace = true; + } + } + } + if (!nonSpace) { + return; + } + if (!this.sawRoot && !this.reportedTextBeforeRoot) { + this.fail("text data outside of root node."); + this.reportedTextBeforeRoot = true; + } + if (this.closedRoot && !this.reportedTextAfterRoot) { + this.fail("text data outside of root node."); + this.reportedTextAfterRoot = true; + } + } + pushAttribNS(name, value) { + var _a2; + const { prefix, local } = this.qname(name); + const attr = { name, prefix, local, value }; + this.attribList.push(attr); + (_a2 = this.attributeHandler) === null || _a2 === void 0 ? void 0 : _a2.call(this, attr); + if (prefix === "xmlns") { + const trimmed = value.trim(); + if (this.currentXMLVersion === "1.0" && trimmed === "") { + this.fail("invalid attempt to undefine prefix in XML 1.0"); + } + this.topNS[local] = trimmed; + nsPairCheck(this, local, trimmed); + } else if (name === "xmlns") { + const trimmed = value.trim(); + this.topNS[""] = trimmed; + nsPairCheck(this, "", trimmed); + } + } + pushAttribPlain(name, value) { + var _a2; + const attr = { name, value }; + this.attribList.push(attr); + (_a2 = this.attributeHandler) === null || _a2 === void 0 ? void 0 : _a2.call(this, attr); + } + /** + * End parsing. This performs final well-formedness checks and resets the + * parser to a clean state. + * + * @returns this + */ + end() { + var _a2, _b; + if (!this.sawRoot) { + this.fail("document must contain a root element."); + } + const { tags } = this; + while (tags.length > 0) { + const tag = tags.pop(); + this.fail(`unclosed tag: ${tag.name}`); + } + if (this.state !== S_BEGIN && this.state !== S_TEXT) { + this.fail("unexpected end."); + } + const { text } = this; + if (text.length !== 0) { + (_a2 = this.textHandler) === null || _a2 === void 0 ? void 0 : _a2.call(this, text); + this.text = ""; + } + this._closed = true; + (_b = this.endHandler) === null || _b === void 0 ? void 0 : _b.call(this); + this._init(); + return this; + } + /** + * Resolve a namespace prefix. + * + * @param prefix The prefix to resolve. + * + * @returns The namespace URI or ``undefined`` if the prefix is not defined. + */ + resolve(prefix) { + var _a2, _b; + let uri = this.topNS[prefix]; + if (uri !== void 0) { + return uri; + } + const { tags } = this; + for (let index = tags.length - 1; index >= 0; index--) { + uri = tags[index].ns[prefix]; + if (uri !== void 0) { + return uri; + } + } + uri = this.ns[prefix]; + if (uri !== void 0) { + return uri; + } + return (_b = (_a2 = this.opt).resolvePrefix) === null || _b === void 0 ? void 0 : _b.call(_a2, prefix); + } + /** + * Parse a qname into its prefix and local name parts. + * + * @param name The name to parse + * + * @returns + */ + qname(name) { + const colon = name.indexOf(":"); + if (colon === -1) { + return { prefix: "", local: name }; + } + const local = name.slice(colon + 1); + const prefix = name.slice(0, colon); + if (prefix === "" || local === "" || local.includes(":")) { + this.fail(`malformed name: ${name}.`); + } + return { prefix, local }; + } + processAttribsNS() { + var _a2; + const { attribList } = this; + const tag = this.tag; + { + const { prefix, local } = this.qname(tag.name); + tag.prefix = prefix; + tag.local = local; + const uri = tag.uri = (_a2 = this.resolve(prefix)) !== null && _a2 !== void 0 ? _a2 : ""; + if (prefix !== "") { + if (prefix === "xmlns") { + this.fail('tags may not have "xmlns" as prefix.'); + } + if (uri === "") { + this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`); + tag.uri = prefix; + } + } + } + if (attribList.length === 0) { + return; + } + const { attributes } = tag; + const seen = /* @__PURE__ */ new Set(); + for (const attr of attribList) { + const { name, prefix, local } = attr; + let uri; + let eqname; + if (prefix === "") { + uri = name === "xmlns" ? XMLNS_NAMESPACE : ""; + eqname = name; + } else { + uri = this.resolve(prefix); + if (uri === void 0) { + this.fail(`unbound namespace prefix: ${JSON.stringify(prefix)}.`); + uri = prefix; + } + eqname = `{${uri}}${local}`; + } + if (seen.has(eqname)) { + this.fail(`duplicate attribute: ${eqname}.`); + } + seen.add(eqname); + attr.uri = uri; + attributes[name] = attr; + } + this.attribList = []; + } + processAttribsPlain() { + const { attribList } = this; + const attributes = this.tag.attributes; + for (const { name, value } of attribList) { + if (attributes[name] !== void 0) { + this.fail(`duplicate attribute: ${name}.`); + } + attributes[name] = value; + } + this.attribList = []; + } + /** + * Handle a complete open tag. This parser code calls this once it has seen + * the whole tag. This method checks for well-formeness and then emits + * ``onopentag``. + */ + openTag() { + var _a2; + this.processAttribs(); + const { tags } = this; + const tag = this.tag; + tag.isSelfClosing = false; + (_a2 = this.openTagHandler) === null || _a2 === void 0 ? void 0 : _a2.call(this, tag); + tags.push(tag); + this.state = S_TEXT; + this.name = ""; + } + /** + * Handle a complete self-closing tag. This parser code calls this once it has + * seen the whole tag. This method checks for well-formeness and then emits + * ``onopentag`` and ``onclosetag``. + */ + openSelfClosingTag() { + var _a2, _b, _c; + this.processAttribs(); + const { tags } = this; + const tag = this.tag; + tag.isSelfClosing = true; + (_a2 = this.openTagHandler) === null || _a2 === void 0 ? void 0 : _a2.call(this, tag); + (_b = this.closeTagHandler) === null || _b === void 0 ? void 0 : _b.call(this, tag); + const top = this.tag = (_c = tags[tags.length - 1]) !== null && _c !== void 0 ? _c : null; + if (top === null) { + this.closedRoot = true; + } + this.state = S_TEXT; + this.name = ""; + } + /** + * Handle a complete close tag. This parser code calls this once it has seen + * the whole tag. This method checks for well-formeness and then emits + * ``onclosetag``. + */ + closeTag() { + const { tags, name } = this; + this.state = S_TEXT; + this.name = ""; + if (name === "") { + this.fail("weird empty close tag."); + this.text += ""; + return; + } + const handler = this.closeTagHandler; + let l = tags.length; + while (l-- > 0) { + const tag = this.tag = tags.pop(); + this.topNS = tag.ns; + handler === null || handler === void 0 ? void 0 : handler(tag); + if (tag.name === name) { + break; + } + this.fail("unexpected close tag."); + } + if (l === 0) { + this.closedRoot = true; + } else if (l < 0) { + this.fail(`unmatched closing tag: ${name}.`); + this.text += ``; + } + } + /** + * Resolves an entity. Makes any necessary well-formedness checks. + * + * @param entity The entity to resolve. + * + * @returns The parsed entity. + */ + parseEntity(entity) { + if (entity[0] !== "#") { + const defined = this.ENTITIES[entity]; + if (defined !== void 0) { + return defined; + } + this.fail(this.isName(entity) ? "undefined entity." : "disallowed character in entity name."); + return `&${entity};`; + } + let num = NaN; + if (entity[1] === "x" && /^#x[0-9a-f]+$/i.test(entity)) { + num = parseInt(entity.slice(2), 16); + } else if (/^#[0-9]+$/.test(entity)) { + num = parseInt(entity.slice(1), 10); + } + if (!this.isChar(num)) { + this.fail("malformed character entity."); + return `&${entity};`; + } + return String.fromCodePoint(num); + } + }; + exports.SaxesParser = SaxesParser2; + } +}); -// packages/plugin-build/src/build-plugin-app.ts +// ../env_ag7ffajzdy/bb/packages/plugin-build/src/build-plugin-app.ts import { mkdir, mkdtemp, - readFile, + readFile as readFile2, rename, rm, stat as stat2, @@ -17,7 +1953,7 @@ import { import { createRequire } from "node:module"; import { dirname, isAbsolute as isAbsolute2, join, resolve as resolve2 } from "node:path"; -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/external.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/external.js var external_exports = {}; __export(external_exports, { $brand: () => $brand, @@ -258,7 +2194,7 @@ __export(external_exports, { xor: () => xor }); -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/index.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/index.js var core_exports2 = {}; __export(core_exports2, { $ZodAny: () => $ZodAny, @@ -536,7 +2472,7 @@ __export(core_exports2, { version: () => version }); -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.js var NEVER = Object.freeze({ status: "aborted" }); @@ -611,7 +2547,7 @@ function config(newConfig) { return globalConfig; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.js var util_exports = {}; __export(util_exports, { BIGINT_FORMAT_RANGES: () => BIGINT_FORMAT_RANGES, @@ -1290,7 +3226,7 @@ var Class = class { } }; -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.js var initializer = (inst, def) => { inst.name = "$ZodError"; Object.defineProperty(inst, "_zod", { @@ -1426,7 +3362,7 @@ function prettifyError(error48) { return lines.join("\n"); } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/parse.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/parse.js var _parse = (_Err) => (schema, value, _ctx, _params) => { const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false }; const result = schema._zod.run({ value, issues: [] }, ctx); @@ -1514,7 +3450,7 @@ var _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => { }; var safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync($ZodRealError); -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/regexes.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/regexes.js var regexes_exports = {}; __export(regexes_exports, { base64: () => base64, @@ -1671,7 +3607,7 @@ var sha512_hex = /^[0-9a-fA-F]{128}$/; var sha512_base64 = /* @__PURE__ */ fixedBase64(86, "=="); var sha512_base64url = /* @__PURE__ */ fixedBase64url(86); -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.js var $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => { var _a2; inst._zod ?? (inst._zod = {}); @@ -2219,7 +4155,7 @@ var $ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (ins }; }); -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/doc.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/doc.js var Doc = class { constructor(args = []) { this.content = []; @@ -2255,14 +4191,14 @@ var Doc = class { } }; -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.js var version = { major: 4, minor: 3, patch: 6 }; -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.js var $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => { var _a2; inst ?? (inst = {}); @@ -4233,7 +6169,7 @@ function handleRefineResult(result, payload, input, inst) { } } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/index.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/index.js var locales_exports = {}; __export(locales_exports, { ar: () => ar_default, @@ -4287,7 +6223,7 @@ __export(locales_exports, { zhTW: () => zh_TW_default }); -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ar.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ar.js var error = () => { const Sizable = { string: { unit: "\u062D\u0631\u0641", verb: "\u0623\u0646 \u064A\u062D\u0648\u064A" }, @@ -4394,7 +6330,7 @@ function ar_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/az.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/az.js var error2 = () => { const Sizable = { string: { unit: "simvol", verb: "olmal\u0131d\u0131r" }, @@ -4500,7 +6436,7 @@ function az_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/be.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/be.js function getBelarusianPlural(count, one, few, many) { const absCount = Math.abs(count); const lastDigit = absCount % 10; @@ -4657,7 +6593,7 @@ function be_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/bg.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/bg.js var error4 = () => { const Sizable = { string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0430", verb: "\u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430" }, @@ -4778,7 +6714,7 @@ function bg_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ca.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ca.js var error5 = () => { const Sizable = { string: { unit: "car\xE0cters", verb: "contenir" }, @@ -4887,7 +6823,7 @@ function ca_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/cs.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/cs.js var error6 = () => { const Sizable = { string: { unit: "znak\u016F", verb: "m\xEDt" }, @@ -4999,7 +6935,7 @@ function cs_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/da.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/da.js var error7 = () => { const Sizable = { string: { unit: "tegn", verb: "havde" }, @@ -5115,7 +7051,7 @@ function da_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/de.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/de.js var error8 = () => { const Sizable = { string: { unit: "Zeichen", verb: "zu haben" }, @@ -5224,7 +7160,7 @@ function de_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/en.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/en.js var error9 = () => { const Sizable = { string: { unit: "characters", verb: "to have" }, @@ -5333,7 +7269,7 @@ function en_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/eo.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/eo.js var error10 = () => { const Sizable = { string: { unit: "karaktrojn", verb: "havi" }, @@ -5443,7 +7379,7 @@ function eo_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/es.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/es.js var error11 = () => { const Sizable = { string: { unit: "caracteres", verb: "tener" }, @@ -5576,7 +7512,7 @@ function es_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fa.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fa.js var error12 = () => { const Sizable = { string: { unit: "\u06A9\u0627\u0631\u0627\u06A9\u062A\u0631", verb: "\u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F" }, @@ -5691,7 +7627,7 @@ function fa_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fi.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fi.js var error13 = () => { const Sizable = { string: { unit: "merkki\xE4", subject: "merkkijonon" }, @@ -5804,7 +7740,7 @@ function fi_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr.js var error14 = () => { const Sizable = { string: { unit: "caract\xE8res", verb: "avoir" }, @@ -5913,7 +7849,7 @@ function fr_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr-CA.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/fr-CA.js var error15 = () => { const Sizable = { string: { unit: "caract\xE8res", verb: "avoir" }, @@ -6021,7 +7957,7 @@ function fr_CA_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/he.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/he.js var error16 = () => { const TypeNames = { string: { label: "\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA", gender: "f" }, @@ -6216,7 +8152,7 @@ function he_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hu.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hu.js var error17 = () => { const Sizable = { string: { unit: "karakter", verb: "legyen" }, @@ -6325,7 +8261,7 @@ function hu_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hy.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/hy.js function getArmenianPlural(count, one, many) { return Math.abs(count) === 1 ? one : many; } @@ -6473,7 +8409,7 @@ function hy_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/id.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/id.js var error19 = () => { const Sizable = { string: { unit: "karakter", verb: "memiliki" }, @@ -6580,7 +8516,7 @@ function id_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/is.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/is.js var error20 = () => { const Sizable = { string: { unit: "stafi", verb: "a\xF0 hafa" }, @@ -6690,7 +8626,7 @@ function is_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/it.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/it.js var error21 = () => { const Sizable = { string: { unit: "caratteri", verb: "avere" }, @@ -6799,7 +8735,7 @@ function it_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ja.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ja.js var error22 = () => { const Sizable = { string: { unit: "\u6587\u5B57", verb: "\u3067\u3042\u308B" }, @@ -6907,7 +8843,7 @@ function ja_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ka.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ka.js var error23 = () => { const Sizable = { string: { unit: "\u10E1\u10D8\u10DB\u10D1\u10DD\u10DA\u10DD", verb: "\u10E3\u10DC\u10D3\u10D0 \u10E8\u10D4\u10D8\u10EA\u10D0\u10D5\u10D3\u10D4\u10E1" }, @@ -7020,7 +8956,7 @@ function ka_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/km.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/km.js var error24 = () => { const Sizable = { string: { unit: "\u178F\u17BD\u17A2\u1780\u17D2\u179F\u179A", verb: "\u1782\u17BD\u179A\u1798\u17B6\u1793" }, @@ -7131,12 +9067,12 @@ function km_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/kh.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/kh.js function kh_default() { return km_default(); } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ko.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ko.js var error25 = () => { const Sizable = { string: { unit: "\uBB38\uC790", verb: "to have" }, @@ -7248,7 +9184,7 @@ function ko_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/lt.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/lt.js var capitalizeFirstCharacter = (text) => { return text.charAt(0).toUpperCase() + text.slice(1); }; @@ -7452,7 +9388,7 @@ function lt_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/mk.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/mk.js var error27 = () => { const Sizable = { string: { unit: "\u0437\u043D\u0430\u0446\u0438", verb: "\u0434\u0430 \u0438\u043C\u0430\u0430\u0442" }, @@ -7562,7 +9498,7 @@ function mk_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ms.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ms.js var error28 = () => { const Sizable = { string: { unit: "aksara", verb: "mempunyai" }, @@ -7670,7 +9606,7 @@ function ms_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/nl.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/nl.js var error29 = () => { const Sizable = { string: { unit: "tekens", verb: "heeft" }, @@ -7781,7 +9717,7 @@ function nl_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/no.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/no.js var error30 = () => { const Sizable = { string: { unit: "tegn", verb: "\xE5 ha" }, @@ -7890,7 +9826,7 @@ function no_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ota.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ota.js var error31 = () => { const Sizable = { string: { unit: "harf", verb: "olmal\u0131d\u0131r" }, @@ -8000,7 +9936,7 @@ function ota_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ps.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ps.js var error32 = () => { const Sizable = { string: { unit: "\u062A\u0648\u06A9\u064A", verb: "\u0648\u0644\u0631\u064A" }, @@ -8115,7 +10051,7 @@ function ps_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pl.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pl.js var error33 = () => { const Sizable = { string: { unit: "znak\xF3w", verb: "mie\u0107" }, @@ -8225,7 +10161,7 @@ function pl_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pt.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/pt.js var error34 = () => { const Sizable = { string: { unit: "caracteres", verb: "ter" }, @@ -8334,7 +10270,7 @@ function pt_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ru.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ru.js function getRussianPlural(count, one, few, many) { const absCount = Math.abs(count); const lastDigit = absCount % 10; @@ -8491,7 +10427,7 @@ function ru_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sl.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sl.js var error36 = () => { const Sizable = { string: { unit: "znakov", verb: "imeti" }, @@ -8601,7 +10537,7 @@ function sl_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sv.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/sv.js var error37 = () => { const Sizable = { string: { unit: "tecken", verb: "att ha" }, @@ -8712,7 +10648,7 @@ function sv_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ta.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ta.js var error38 = () => { const Sizable = { string: { unit: "\u0B8E\u0BB4\u0BC1\u0BA4\u0BCD\u0BA4\u0BC1\u0B95\u0BCD\u0B95\u0BB3\u0BCD", verb: "\u0B95\u0BCA\u0BA3\u0BCD\u0B9F\u0BBF\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD" }, @@ -8823,7 +10759,7 @@ function ta_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/th.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/th.js var error39 = () => { const Sizable = { string: { unit: "\u0E15\u0E31\u0E27\u0E2D\u0E31\u0E01\u0E29\u0E23", verb: "\u0E04\u0E27\u0E23\u0E21\u0E35" }, @@ -8934,7 +10870,7 @@ function th_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/tr.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/tr.js var error40 = () => { const Sizable = { string: { unit: "karakter", verb: "olmal\u0131" }, @@ -9040,7 +10976,7 @@ function tr_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uk.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uk.js var error41 = () => { const Sizable = { string: { unit: "\u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432", verb: "\u043C\u0430\u0442\u0438\u043C\u0435" }, @@ -9149,12 +11085,12 @@ function uk_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ua.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ua.js function ua_default() { return uk_default(); } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ur.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/ur.js var error42 = () => { const Sizable = { string: { unit: "\u062D\u0631\u0648\u0641", verb: "\u06C1\u0648\u0646\u0627" }, @@ -9265,7 +11201,7 @@ function ur_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uz.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/uz.js var error43 = () => { const Sizable = { string: { unit: "belgi", verb: "bo\u2018lishi kerak" }, @@ -9375,7 +11311,7 @@ function uz_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/vi.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/vi.js var error44 = () => { const Sizable = { string: { unit: "k\xFD t\u1EF1", verb: "c\xF3" }, @@ -9484,7 +11420,7 @@ function vi_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-CN.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-CN.js var error45 = () => { const Sizable = { string: { unit: "\u5B57\u7B26", verb: "\u5305\u542B" }, @@ -9594,7 +11530,7 @@ function zh_CN_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-TW.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/zh-TW.js var error46 = () => { const Sizable = { string: { unit: "\u5B57\u5143", verb: "\u64C1\u6709" }, @@ -9702,7 +11638,7 @@ function zh_TW_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/yo.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/locales/yo.js var error47 = () => { const Sizable = { string: { unit: "\xE0mi", verb: "n\xED" }, @@ -9810,7 +11746,7 @@ function yo_default() { }; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.js var _a; var $output = /* @__PURE__ */ Symbol("ZodOutput"); var $input = /* @__PURE__ */ Symbol("ZodInput"); @@ -9860,7 +11796,7 @@ function registry() { (_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry()); var globalRegistry = globalThis.__zod_globalRegistry; -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/api.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/api.js // @__NO_SIDE_EFFECTS__ function _string(Class2, params) { return new Class2({ @@ -10899,7 +12835,7 @@ function _stringFormat(Class2, format, fnOrRegex, _params = {}) { return inst; } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.js function initializeContext(params) { let target = params?.target ?? "draft-2020-12"; if (target === "draft-4") @@ -11251,7 +13187,7 @@ var createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) = return finalize(ctx, schema); }; -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.js var formatMap = { guid: "uuid", url: "uri", @@ -11802,7 +13738,7 @@ function toJSONSchema(input, params) { return finalize(ctx, input); } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-generator.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-generator.js var JSONSchemaGenerator = class { /** @deprecated Access via ctx instead */ get metadataRegistry() { @@ -11877,10 +13813,10 @@ var JSONSchemaGenerator = class { } }; -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema.js var json_schema_exports = {}; -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.js var schemas_exports2 = {}; __export(schemas_exports2, { ZodAny: () => ZodAny, @@ -12049,7 +13985,7 @@ __export(schemas_exports2, { xor: () => xor }); -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/checks.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/checks.js var checks_exports2 = {}; __export(checks_exports2, { endsWith: () => _endsWith, @@ -12083,7 +14019,7 @@ __export(checks_exports2, { uppercase: () => _uppercase }); -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/iso.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/iso.js var iso_exports = {}; __export(iso_exports, { ZodISODate: () => ZodISODate, @@ -12124,7 +14060,7 @@ function duration2(params) { return _isoDuration(ZodISODuration, params); } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/errors.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/errors.js var initializer2 = (inst, issues) => { $ZodError.init(inst, issues); inst.name = "ZodError"; @@ -12164,7 +14100,7 @@ var ZodRealError = $constructor("ZodError", initializer2, { Parent: Error }); -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/parse.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/parse.js var parse2 = /* @__PURE__ */ _parse(ZodRealError); var parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError); var safeParse2 = /* @__PURE__ */ _safeParse(ZodRealError); @@ -12178,7 +14114,7 @@ var safeDecode2 = /* @__PURE__ */ _safeDecode(ZodRealError); var safeEncodeAsync2 = /* @__PURE__ */ _safeEncodeAsync(ZodRealError); var safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError); -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.js var ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => { $ZodType.init(inst, def); Object.assign(inst["~standard"], { @@ -13257,7 +15193,7 @@ function preprocess(fn, schema) { return pipe(transform(fn), schema); } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/compat.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/compat.js var ZodIssueCode = { invalid_type: "invalid_type", too_big: "too_big", @@ -13283,7 +15219,7 @@ var ZodFirstPartyTypeKind; /* @__PURE__ */ (function(ZodFirstPartyTypeKind2) { })(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {})); -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/from-json-schema.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/from-json-schema.js var z = { ...schemas_exports2, ...checks_exports2, @@ -13757,7 +15693,7 @@ function fromJSONSchema(schema, params) { return convertSchema(schema, ctx); } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/coerce.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/coerce.js var coerce_exports = {}; __export(coerce_exports, { bigint: () => bigint3, @@ -13782,10 +15718,10 @@ function date4(params) { return _coercedDate(ZodDate, params); } -// node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/external.js +// ../env_ag7ffajzdy/bb/node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/external.js config(en_default()); -// packages/domain/src/active-thinking.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/active-thinking.ts var activeThinkingSchema = external_exports.object({ id: external_exports.string(), text: external_exports.string(), @@ -13793,7 +15729,7 @@ var activeThinkingSchema = external_exports.object({ updatedAt: external_exports.number() }); -// packages/domain/src/shared-types.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/shared-types.ts var reasoningLevelValues = [ "none", "low", @@ -14076,7 +16012,7 @@ var projectExecutionDefaultsSchema = external_exports.object({ permissionMode: permissionModeSchema }); -// packages/domain/src/acp-cli.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/acp-cli.ts var acpReasoningCliLevelValueOverridesSchema = external_exports.partialRecord( reasoningLevelSchema, external_exports.string().min(1) @@ -14140,7 +16076,7 @@ var acpPermissionCliSchema = external_exports.object({ } }); -// packages/domain/src/app-settings.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/app-settings.ts var appSettingsSchema = external_exports.object({ /** * macOS-only: keep the machine from idle sleeping while bb is running by @@ -14149,6 +16085,11 @@ var appSettingsSchema = external_exports.object({ caffeinate: external_exports.boolean(), /** Show shortcut hints after holding Command or Control. */ showKeyboardHints: external_exports.boolean(), + /** + * While a thread is running, make Enter steer the active turn and use + * Command+Enter to queue a follow-up. + */ + steerActiveThreadOnEnter: external_exports.boolean(), /** Show raw provider events that bb does not yet understand. */ showUnhandledProviderEvents: external_exports.boolean(), /** Enable Codex's native memory recall and generation for bb threads. */ @@ -14163,7 +16104,7 @@ var appSettingsSchema = external_exports.object({ claudeCodeWorkflowsDisabled: external_exports.boolean() }).strict(); -// packages/domain/src/app-keybindings.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/app-keybindings.ts var THREAD_JUMP_APP_COMMAND_IDS = [ "thread.jump.1", "thread.jump.2", @@ -14277,7 +16218,7 @@ var appKeybindingOverridesSchema = external_exports.array(appKeybindingOverrideS } }); -// packages/domain/src/app-theme.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/app-theme.ts var builtInThemeIdSchema = external_exports.enum([ "default", "nord", @@ -14330,7 +16271,7 @@ var appThemeSelectionSchema = external_exports.object({ faviconColor: faviconColorPreferenceSchema }); -// packages/domain/src/background-task.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/background-task.ts var backgroundTaskStatusValues = [ "pending", "running", @@ -14390,7 +16331,7 @@ var backgroundTaskUsageSchema = external_exports.object({ durationMs: external_exports.number() }); -// packages/domain/src/json-value.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/json-value.ts var jsonValueSchema = external_exports.lazy( () => external_exports.union([ external_exports.string(), @@ -14406,7 +16347,7 @@ var jsonObjectSchema = external_exports.record( jsonValueSchema ); -// packages/domain/src/pending-interactions.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/pending-interactions.ts var pendingInteractionStatusSchema = external_exports.enum([ "pending", "resolving", @@ -14717,10 +16658,10 @@ var pendingInteractionSchema = external_exports.union([ pluginPendingInteractionSchema ]); -// packages/domain/src/protocol-ids.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/protocol-ids.ts var clientTurnRequestIdSchema = external_exports.string().regex(/^creq_[23456789abcdefghijkmnpqrstuvwxyz]{10}$/u); -// packages/domain/src/thread-events.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/thread-events.ts var systemEventTypeValues = [ "client/thread/start", "client/turn/requested", @@ -14954,7 +16895,7 @@ var systemProviderTurnWatchdogEventDataSchema = external_exports.object({ firedAt: external_exports.number().int().nonnegative() }); -// packages/domain/src/thread-event-scope.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/thread-event-scope.ts var threadEventScopeKindValues = ["thread", "turn"]; var threadEventScopeKindSchema = external_exports.enum(threadEventScopeKindValues); var threadEventScopeSchema = external_exports.discriminatedUnion("kind", [ @@ -15117,7 +17058,7 @@ function validateThreadEventScope(args) { return { valid: true }; } -// packages/domain/src/thread-timeline-goal.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/thread-timeline-goal.ts var threadTimelineGoalStatusSchema = external_exports.enum([ "active", "paused", @@ -15134,7 +17075,7 @@ var threadTimelineGoalSchema = external_exports.object({ timeUsedSeconds: external_exports.number() }); -// packages/domain/src/provider-event.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/provider-event.ts var threadEventItemStatusSchema = external_exports.enum([ "pending", "completed", @@ -15692,7 +17633,7 @@ var threadEventTypeSchema = external_exports.string().refine( "Invalid thread event type" ); -// packages/domain/src/change-kinds.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/change-kinds.ts var THREAD_CHANGE_KINDS = [ "thread-created", "thread-deleted", @@ -15885,7 +17826,7 @@ var changedMessageLenientSchema = external_exports.discriminatedUnion("entity", systemChangedMessageLenientSchema ]); -// packages/domain/src/claude-task-tools.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/claude-task-tools.ts var claudeTaskToolNameValues = [ "TaskCreate", "TaskGet", @@ -15957,7 +17898,7 @@ var claudeTaskToolOutputSchema = external_exports.union([ claudeTaskUpdateOutputSchema ]); -// packages/domain/src/environment.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/environment.ts var environmentStatusValues = [ "provisioning", "ready", @@ -16007,7 +17948,7 @@ var environmentSchema = external_exports.object({ updatedAt: external_exports.number() }); -// packages/domain/src/experiments.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/experiments.ts var experimentsSchema = external_exports.object({ /** * Claude Code mock CLI traffic: routes Claude Code API requests through the @@ -16015,27 +17956,38 @@ var experimentsSchema = external_exports.object({ */ claudeCodeMockCliTraffic: external_exports.boolean(), /** - * Plugins: enables the plugin system (loader, `bb plugin` commands, plugin - * API routes). Off by default — when off no plugin code is loaded and the - * plugin endpoints return a structured "disabled" error. + * Tools Hub: exposes the unified Skills, Plugins, and Automations management + * UI. This is a presentation gate only; it does not load or unload tools. */ - plugins: external_exports.boolean(), + toolsHub: external_exports.boolean(), /** * Side chat plugin: replaces the native side-chat implementation with the * builtin `side-chat` plugin. ON hides the native "Reply in side chat" * entry points and loads the plugin; OFF suppresses the plugin and keeps - * the legacy path fully functional. Only surfaced in Settings while the - * `plugins` experiment is on. + * the legacy path fully functional. */ sideChatPlugin: external_exports.boolean() }); -// packages/domain/src/feature-flags.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/feature-flags.ts var featureFlagsSchema = external_exports.object({ - placeholder: external_exports.boolean() + placeholder: external_exports.boolean(), + /** + * Max events a single thread-timeline window may span. + * + * A window is otherwise bounded only by segment (user-message) count, which + * is a weak bound on work: an agentic turn can be thousands of events, so a + * thread with few user messages and a long history reprojects all of it on + * every request and blocks the server's event loop. + * + * Operator escape hatch rather than a product knob — raising it far above the + * default restores the old unbounded-in-practice behavior without a second + * code path. + */ + timelineWindowEventBudget: external_exports.number().int().positive() }); -// packages/domain/src/git-checkout.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/git-checkout.ts var gitBranchForbiddenCharacterPattern = /[\u0000-\u001f\u007f\\:~^?*\[]/u; var gitBranchWhitespacePattern = /[ \t]/u; var gitReservedBranchNames = /* @__PURE__ */ new Set([ @@ -16130,7 +18082,7 @@ var projectSourceCheckoutSchema = external_exports.object({ selectedBranch: gitBranchRefClassificationSchema.nullable() }); -// packages/domain/src/host.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/host.ts var hostTypeValues = ["persistent"]; var hostTypeSchema = external_exports.enum(hostTypeValues); var hostStatusValues = ["connected", "disconnected"]; @@ -16146,7 +18098,7 @@ var hostSchema = external_exports.object({ updatedAt: external_exports.number() }); -// packages/domain/src/plugin-id.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/plugin-id.ts function derivePluginId(packageName) { const base = packageName.includes("/") ? packageName.split("/").at(-1) ?? packageName : packageName; const id = base.replace(/^bb-plugin-/, "").toLowerCase().replace(/[^a-z0-9-]/g, "-").replace(/^-+|-+$/g, ""); @@ -16158,15 +18110,26 @@ function derivePluginId(packageName) { return id; } -// packages/domain/src/plugin-manifest.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/plugin-manifest.ts var requiredManifestString = external_exports.string().trim().min(1); +function isPluginOwnedIconPath(icon) { + return icon.startsWith("./"); +} var pluginBrandingSchema = external_exports.object({ icon: requiredManifestString.optional(), logo: external_exports.object({ light: requiredManifestString, dark: requiredManifestString.optional() }).strict().optional() -}).strict().refine( +}).strict().superRefine((branding, context) => { + if (branding.icon !== void 0 && isPluginOwnedIconPath(branding.icon) && !branding.icon.toLowerCase().endsWith(".svg")) { + context.addIssue({ + code: "custom", + path: ["icon"], + message: 'plugin-owned branding.icon paths must point at an .svg file (for example "./assets/icon.svg")' + }); + } +}).refine( (branding) => branding.icon !== void 0 || branding.logo !== void 0, { message: "must declare at least branding.icon or branding.logo.light" @@ -16198,11 +18161,11 @@ var pluginPackageJsonSchema = external_exports.object({ bb: pluginBbManifestSchema }).passthrough(); -// packages/domain/src/plugin-sdk-version.ts -var PLUGIN_SDK_VERSION = "0.4.0"; +// ../env_ag7ffajzdy/bb/packages/domain/src/plugin-sdk-version.ts +var PLUGIN_SDK_VERSION = "0.4.1"; var PLUGIN_SDK_MAJOR = Number(PLUGIN_SDK_VERSION.split(".", 1)[0]); -// packages/domain/src/project.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/project.ts var projectKindValues = ["standard", "personal"]; var projectKindSchema = external_exports.enum(projectKindValues); var projectSchema = external_exports.object({ @@ -16228,7 +18191,7 @@ var localPathProjectSourceSchema = baseProjectSourceSchema.extend({ path: external_exports.string() }); -// packages/domain/src/prompt-history.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/prompt-history.ts var promptHistoryScopeValues = ["project", "thread"]; var promptHistoryScopeSchema = external_exports.enum(promptHistoryScopeValues); var promptHistoryEntrySchema = external_exports.object({ @@ -16237,7 +18200,7 @@ var promptHistoryEntrySchema = external_exports.object({ input: external_exports.array(promptInputSchema).min(1) }); -// packages/domain/src/provider-types.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/provider-types.ts var modelReasoningEffortSchema = external_exports.object({ reasoningEffort: reasoningLevelSchema, description: external_exports.string() @@ -16315,7 +18278,7 @@ var dynamicToolSchema = external_exports.object({ inputSchema: external_exports.unknown() }); -// packages/domain/src/stored-thread-event.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/stored-thread-event.ts var threadEventRowInputSchema = external_exports.object({ id: external_exports.string(), scope: threadEventScopeSchema, @@ -16393,7 +18356,7 @@ var threadEventRowSchema = threadEventRowInputSchema.transform( (row) => parseThreadEventRowInput(row) ); -// packages/domain/src/terminal.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/terminal.ts var TERMINAL_COLS_MAX = 500; var TERMINAL_ROWS_MAX = 200; var TERMINAL_DATA_MAX_BYTES = 64 * 1024; @@ -16437,7 +18400,7 @@ var terminalDataBase64Schema = external_exports.string().min(1).max(TERMINAL_DAT } ); -// packages/domain/src/thread-git-diff.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/thread-git-diff.ts var workspaceDiffTargetSchema = external_exports.discriminatedUnion("type", [ external_exports.object({ type: external_exports.literal("uncommitted") @@ -16482,7 +18445,7 @@ var threadGitDiffResponseSchema = external_exports.object({ mergeBaseRef: external_exports.string().nullable() }); -// packages/domain/src/thread-search.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/thread-search.ts var threadSearchSourceKindValues = [ "title", "title_fallback", @@ -16494,14 +18457,14 @@ var threadSearchSourceKindSchema = external_exports.enum( threadSearchSourceKindValues ); -// packages/domain/src/thread-timeline-active-prompt-mode.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/thread-timeline-active-prompt-mode.ts var threadTimelineActivePromptModeSchema = external_exports.object({ mode: external_exports.literal("plan"), providerId: external_exports.enum(["claude-code", "codex"]), prompt: external_exports.string() }).strict(); -// packages/domain/src/thread-timeline-model-fallback.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/thread-timeline-model-fallback.ts var threadTimelineModelFallbackSchema = external_exports.object({ sourceSeq: external_exports.number().int().nonnegative(), detectedAt: external_exports.number(), @@ -16511,7 +18474,7 @@ var threadTimelineModelFallbackSchema = external_exports.object({ message: external_exports.string() }); -// packages/domain/src/thread-timeline-pending-todos.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/thread-timeline-pending-todos.ts var threadTimelinePendingTodoItemStatusSchema = external_exports.enum([ "pending", "in_progress", @@ -16528,11 +18491,11 @@ var threadTimelinePendingTodosSchema = external_exports.object({ items: external_exports.array(threadTimelinePendingTodoItemSchema) }); -// packages/domain/src/thread-visibility.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/thread-visibility.ts var threadVisibilityValues = ["visible", "hidden"]; var threadVisibilitySchema = external_exports.enum(threadVisibilityValues); -// packages/domain/src/thread-status.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/thread-status.ts var threadStatusValues = [ "idle", "starting", @@ -16542,12 +18505,12 @@ var threadStatusValues = [ ]; var threadStatusSchema = external_exports.enum(threadStatusValues); -// packages/domain/src/thread-child-origin.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/thread-child-origin.ts var threadOriginKindValues = ["fork", "side-chat"]; var threadOriginKindSchema = external_exports.enum(threadOriginKindValues); var threadChildOriginSchema = threadOriginKindSchema; -// packages/domain/src/thread.ts +// ../env_ag7ffajzdy/bb/packages/domain/src/thread.ts var threadRuntimeDisplayStatusValues = [ ...threadStatusValues, "provisioning", @@ -16813,10 +18776,7 @@ var threadListEntrySchema = threadWithRuntimeSchema.extend({ environmentWorkspaceDisplayKind: environmentWorkspaceDisplayKindSchema }); -// packages/plugin-build/src/build-plugin-app.ts -import * as bundledPluginSdkAppFacade from "@bb/plugin-sdk/app"; - -// packages/plugin-build/src/generated/plugin-theme.generated.ts +// ../env_ag7ffajzdy/bb/packages/plugin-build/src/generated/plugin-theme.generated.ts var PLUGIN_THEME_CSS = `@theme inline { --color-background: var(--background); --color-foreground: var(--foreground); @@ -16862,11 +18822,13 @@ var PLUGIN_THEME_CSS = `@theme inline { --color-ring: var(--ring); --color-surface-recessed: var(--surface-recessed); --color-surface-recessed-solid: var(--surface-recessed-solid); + --color-surface-recessed-soft-solid: var(--surface-recessed-soft-solid); --color-surface-raised: var(--surface-raised); --color-surface-raised-solid: var(--surface-raised-solid); --color-surface-scrim: var(--surface-scrim); --color-surface-destructive: var(--surface-destructive); --color-surface-destructive-border: var(--surface-destructive-border); + --color-surface-attention: var(--surface-attention); --color-surface-selected: var(--surface-selected); --color-surface-selected-border: var(--surface-selected-border); --color-sidebar: var(--sidebar); @@ -16907,8 +18869,21 @@ var PLUGIN_THEME_CSS = `@theme inline { }`; var TW_ANIMATE_CSS = `@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}@theme inline{--animation-delay-0: 0s; --animation-delay-75: 75ms; --animation-delay-100: .1s; --animation-delay-150: .15s; --animation-delay-200: .2s; --animation-delay-300: .3s; --animation-delay-500: .5s; --animation-delay-700: .7s; --animation-delay-1000: 1s; --animation-repeat-0: 0; --animation-repeat-1: 1; --animation-repeat-infinite: infinite; --animation-direction-normal: normal; --animation-direction-reverse: reverse; --animation-direction-alternate: alternate; --animation-direction-alternate-reverse: alternate-reverse; --animation-fill-mode-none: none; --animation-fill-mode-forwards: forwards; --animation-fill-mode-backwards: backwards; --animation-fill-mode-both: both; --percentage-0: 0; --percentage-5: .05; --percentage-10: .1; --percentage-15: .15; --percentage-20: .2; --percentage-25: .25; --percentage-30: .3; --percentage-35: .35; --percentage-40: .4; --percentage-45: .45; --percentage-50: .5; --percentage-55: .55; --percentage-60: .6; --percentage-65: .65; --percentage-70: .7; --percentage-75: .75; --percentage-80: .8; --percentage-85: .85; --percentage-90: .9; --percentage-95: .95; --percentage-100: 1; --percentage-translate-full: 1; --animate-in: enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); --animate-out: exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); @keyframes enter { from { opacity: var(--tw-enter-opacity,1); transform: translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0)); filter: blur(var(--tw-enter-blur,0)); }}@keyframes exit { to { opacity: var(--tw-exit-opacity,1); transform: translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0)); filter: blur(var(--tw-exit-blur,0)); }}--animate-accordion-down: accordion-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); --animate-accordion-up: accordion-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); --animate-collapsible-down: collapsible-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); --animate-collapsible-up: collapsible-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none); @keyframes accordion-down { from { height: 0; }to { height: var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto))))); }}@keyframes accordion-up { from { height: var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto))))); }to { height: 0; }}@keyframes collapsible-down { from { height: 0; }to { height: var(--radix-collapsible-content-height,var(--bits-collapsible-content-height,var(--reka-collapsible-content-height,var(--kb-collapsible-content-height,auto)))); }}@keyframes collapsible-up { from { height: var(--radix-collapsible-content-height,var(--bits-collapsible-content-height,var(--reka-collapsible-content-height,var(--kb-collapsible-content-height,auto)))); }to { height: 0; }}--animate-caret-blink: caret-blink 1.25s ease-out infinite; @keyframes caret-blink { 0%,70%,100% { opacity: 1; }20%,50% { opacity: 0; }}}@utility animation-duration-*{--tw-animation-duration: calc(--value(number)*1ms); --tw-animation-duration: --value(--animation-duration-*,[duration],"initial",[*]); animation-duration: calc(--value(number)*1ms); animation-duration: --value(--animation-duration-*,[duration],"initial",[*]);}@utility delay-*{animation-delay: calc(--value(number)*1ms); animation-delay: --value(--animation-delay-*,[duration],"initial",[*]); --tw-animation-delay: calc(--value(number)*1ms); --tw-animation-delay: --value(--animation-delay-*,[duration],"initial",[*]);}@utility repeat-*{animation-iteration-count: --value(--animation-repeat-*,number,"initial",[*]); --tw-animation-iteration-count: --value(--animation-repeat-*,number,"initial",[*]);}@utility direction-*{animation-direction: --value(--animation-direction-*,"initial",[*]); --tw-animation-direction: --value(--animation-direction-*,"initial",[*]);}@utility fill-mode-*{animation-fill-mode: --value(--animation-fill-mode-*,"initial",[*]); --tw-animation-fill-mode: --value(--animation-fill-mode-*,"initial",[*]);}@utility running{animation-play-state: running;}@utility paused{animation-play-state: paused;}@utility play-state-*{animation-play-state: --value("initial",[*]);}@utility blur-in{--tw-enter-blur: 20px;}@utility blur-in-*{--tw-enter-blur: calc(--value(number)*1px); --tw-enter-blur: --value(--blur-*,[*]);}@utility blur-out{--tw-exit-blur: 20px;}@utility blur-out-*{--tw-exit-blur: calc(--value(number)*1px); --tw-exit-blur: --value(--blur-*,[*]);}@utility fade-in{--tw-enter-opacity: 0;}@utility fade-in-*{--tw-enter-opacity: calc(--value(number)/100); --tw-enter-opacity: --value(--percentage-*,[*]);}@utility fade-out{--tw-exit-opacity: 0;}@utility fade-out-*{--tw-exit-opacity: calc(--value(number)/100); --tw-exit-opacity: --value(--percentage-*,[*]);}@utility zoom-in{--tw-enter-scale: 0;}@utility zoom-in-*{--tw-enter-scale: calc(--value(number)*1%); --tw-enter-scale: calc(--value(ratio)); --tw-enter-scale: --value(--percentage-*,[*]);}@utility -zoom-in-*{--tw-enter-scale: calc(--value(number)*-1%); --tw-enter-scale: calc(--value(ratio)*-1); --tw-enter-scale: --value(--percentage-*,[*]);}@utility zoom-out{--tw-exit-scale: 0;}@utility zoom-out-*{--tw-exit-scale: calc(--value(number)*1%); --tw-exit-scale: calc(--value(ratio)); --tw-exit-scale: --value(--percentage-*,[*]);}@utility -zoom-out-*{--tw-exit-scale: calc(--value(number)*-1%); --tw-exit-scale: calc(--value(ratio)*-1); --tw-exit-scale: --value(--percentage-*,[*]);}@utility spin-in{--tw-enter-rotate: 30deg;}@utility spin-in-*{--tw-enter-rotate: calc(--value(number)*1deg); --tw-enter-rotate: calc(--value(ratio)*360deg); --tw-enter-rotate: --value(--rotate-*,[*]);}@utility -spin-in{--tw-enter-rotate: -30deg;}@utility -spin-in-*{--tw-enter-rotate: calc(--value(number)*-1deg); --tw-enter-rotate: calc(--value(ratio)*-360deg); --tw-enter-rotate: --value(--rotate-*,[*]);}@utility spin-out{--tw-exit-rotate: 30deg;}@utility spin-out-*{--tw-exit-rotate: calc(--value(number)*1deg); --tw-exit-rotate: calc(--value(ratio)*360deg); --tw-exit-rotate: --value(--rotate-*,[*]);}@utility -spin-out{--tw-exit-rotate: -30deg;}@utility -spin-out-*{--tw-exit-rotate: calc(--value(number)*-1deg); --tw-exit-rotate: calc(--value(ratio)*-360deg); --tw-exit-rotate: --value(--rotate-*,[*]);}@utility slide-in-from-top{--tw-enter-translate-y: -100%;}@utility slide-in-from-top-*{--tw-enter-translate-y: calc(--value(integer)*var(--spacing)*-1); --tw-enter-translate-y: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-enter-translate-y: calc(--value(ratio)*-100%); --tw-enter-translate-y: calc(--value(--translate-*,[percentage],[length])*-1);}@utility slide-in-from-bottom{--tw-enter-translate-y: 100%;}@utility slide-in-from-bottom-*{--tw-enter-translate-y: calc(--value(integer)*var(--spacing)); --tw-enter-translate-y: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-enter-translate-y: calc(--value(ratio)*100%); --tw-enter-translate-y: --value(--translate-*,[percentage],[length]);}@utility slide-in-from-left{--tw-enter-translate-x: -100%;}@utility slide-in-from-left-*{--tw-enter-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-enter-translate-x: calc(--value(ratio)*-100%); --tw-enter-translate-x: calc(--value(--translate-*,[percentage],[length])*-1);}@utility slide-in-from-right{--tw-enter-translate-x: 100%;}@utility slide-in-from-right-*{--tw-enter-translate-x: calc(--value(integer)*var(--spacing)); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-enter-translate-x: calc(--value(ratio)*100%); --tw-enter-translate-x: --value(--translate-*,[percentage],[length]);}@utility slide-in-from-start{&:dir(ltr){ --tw-enter-translate-x: -100%; }&:dir(rtl){ --tw-enter-translate-x: 100%; }}@utility slide-in-from-start-*{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"]*){ --tw-enter-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-enter-translate-x: calc(--value(ratio)*-100%); --tw-enter-translate-x: calc(--value(--translate-*,[percentage],[length])*-1); }&:where(:dir(rtl),[dir="rtl"],[dir="rtl"]*){ --tw-enter-translate-x: calc(--value(integer)*var(--spacing)); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-enter-translate-x: calc(--value(ratio)*100%); --tw-enter-translate-x: --value(--translate-*,[percentage],[length]); }}@utility slide-in-from-end{&:dir(ltr){ --tw-enter-translate-x: 100%; }&:dir(rtl){ --tw-enter-translate-x: -100%; }}@utility slide-in-from-end-*{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"]*){ --tw-enter-translate-x: calc(--value(integer)*var(--spacing)); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-enter-translate-x: calc(--value(ratio)*100%); --tw-enter-translate-x: --value(--translate-*,[percentage],[length]); }&:where(:dir(rtl),[dir="rtl"],[dir="rtl"]*){ --tw-enter-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-enter-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-enter-translate-x: calc(--value(ratio)*-100%); --tw-enter-translate-x: calc(--value(--translate-*,[percentage],[length])*-1); }}@utility slide-out-to-top{--tw-exit-translate-y: -100%;}@utility slide-out-to-top-*{--tw-exit-translate-y: calc(--value(integer)*var(--spacing)*-1); --tw-exit-translate-y: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-exit-translate-y: calc(--value(ratio)*-100%); --tw-exit-translate-y: calc(--value(--translate-*,[percentage],[length])*-1);}@utility slide-out-to-bottom{--tw-exit-translate-y: 100%;}@utility slide-out-to-bottom-*{--tw-exit-translate-y: calc(--value(integer)*var(--spacing)); --tw-exit-translate-y: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-exit-translate-y: calc(--value(ratio)*100%); --tw-exit-translate-y: --value(--translate-*,[percentage],[length]);}@utility slide-out-to-left{--tw-exit-translate-x: -100%;}@utility slide-out-to-left-*{--tw-exit-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-exit-translate-x: calc(--value(ratio)*-100%); --tw-exit-translate-x: calc(--value(--translate-*,[percentage],[length])*-1);}@utility slide-out-to-right{--tw-exit-translate-x: 100%;}@utility slide-out-to-right-*{--tw-exit-translate-x: calc(--value(integer)*var(--spacing)); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-exit-translate-x: calc(--value(ratio)*100%); --tw-exit-translate-x: --value(--translate-*,[percentage],[length]);}@utility slide-out-to-start{&:dir(ltr){ --tw-exit-translate-x: -100%; }&:dir(rtl){ --tw-exit-translate-x: 100%; }}@utility slide-out-to-start-*{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"]*){ --tw-exit-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-exit-translate-x: calc(--value(ratio)*-100%); --tw-exit-translate-x: calc(--value(--translate-*,[percentage],[length])*-1); }&:where(:dir(rtl),[dir="rtl"],[dir="rtl"]*){ --tw-exit-translate-x: calc(--value(integer)*var(--spacing)); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-exit-translate-x: calc(--value(ratio)*100%); --tw-exit-translate-x: --value(--translate-*,[percentage],[length]); }}@utility slide-out-to-end{&:dir(ltr){ --tw-exit-translate-x: 100%; }&:dir(rtl){ --tw-exit-translate-x: -100%; }}@utility slide-out-to-end-*{&:where(:dir(ltr),[dir="ltr"],[dir="ltr"]*){ --tw-exit-translate-x: calc(--value(integer)*var(--spacing)); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*100%); --tw-exit-translate-x: calc(--value(ratio)*100%); --tw-exit-translate-x: --value(--translate-*,[percentage],[length]); }&:where(:dir(rtl),[dir="rtl"],[dir="rtl"]*){ --tw-exit-translate-x: calc(--value(integer)*var(--spacing)*-1); --tw-exit-translate-x: calc(--value(--percentage-*,--percentage-translate-*)*-100%); --tw-exit-translate-x: calc(--value(ratio)*-100%); --tw-exit-translate-x: calc(--value(--translate-*,[percentage],[length])*-1); }}`; -// packages/plugin-build/src/runtime-export-manifest.ts +// ../env_ag7ffajzdy/bb/packages/plugin-build/src/runtime-export-manifest.ts var RUNTIME_EXPORT_MANIFEST = { + "@bb/plugin-sdk/app": [ + "Markdown", + "ThreadChat", + "definePluginApp", + "useBbContext", + "useBbNavigate", + "useComposer", + "useComposerView", + "useRealtime", + "useRealtimeConnectionState", + "useRpc", + "useSettings" + ], "react": [ "Activity", "Children", @@ -17447,7 +19422,7 @@ var RUNTIME_EXPORT_MANIFEST = { ] }; -// packages/plugin-build/src/plugin-artifact-meta.ts +// ../env_ag7ffajzdy/bb/packages/plugin-build/src/plugin-artifact-meta.ts function createPluginArtifactMeta(args) { return { sdkMajor: PLUGIN_SDK_MAJOR, @@ -17462,9 +19437,56 @@ function createPluginArtifactMeta(args) { }; } -// packages/plugin-build/src/plugin-manifest.ts -import { realpath, stat } from "node:fs/promises"; +// ../env_ag7ffajzdy/bb/packages/plugin-build/src/plugin-manifest.ts +import { readFile, realpath, stat } from "node:fs/promises"; import { isAbsolute, resolve } from "node:path"; + +// ../env_ag7ffajzdy/bb/packages/plugin-build/src/svg-asset.ts +var import_saxes = __toESM(require_saxes(), 1); +var SVG_NAMESPACE = "http://www.w3.org/2000/svg"; +function assertValidPluginCompactIconSvg(bytes, label = "bb.branding.icon") { + let source; + try { + source = new TextDecoder("utf-8", { fatal: true }).decode(bytes); + } catch { + throw new Error(`manifest ${label} must contain valid UTF-8 SVG bytes`); + } + const roots = []; + let parseError = null; + let hasDoctype = false; + let hasProcessingInstruction = false; + const parser = new import_saxes.SaxesParser({ xmlns: true }); + parser.on("opentag", (tag) => { + if (roots.length === 0) roots.push({ local: tag.local, uri: tag.uri }); + }); + parser.on("doctype", () => { + hasDoctype = true; + }); + parser.on("processinginstruction", () => { + hasProcessingInstruction = true; + }); + parser.on("error", (error48) => { + parseError ??= error48.message; + }); + parser.write(source).close(); + if (hasDoctype) { + throw new Error(`manifest ${label} must not contain a doctype declaration`); + } + if (hasProcessingInstruction) { + throw new Error( + `manifest ${label} must not contain processing instructions` + ); + } + if (parseError !== null) { + throw new Error(`manifest ${label} is not valid SVG XML: ${parseError}`); + } + const root = roots[0]; + if (root === void 0 || root.local !== "svg" || root.uri !== "" && root.uri !== SVG_NAMESPACE) { + throw new Error(`manifest ${label} must have an root element`); + } +} + +// ../env_ag7ffajzdy/bb/packages/plugin-build/src/plugin-manifest.ts function resolveManifestPath(rootDir, entry, label) { if (isAbsolute(entry)) { throw new Error(`manifest ${label} must be relative, got "${entry}"`); @@ -17487,7 +19509,9 @@ async function validatePluginBuildManifest(value, rootDir, packageJsonPath) { ); } const logo = parsed.data.bb.branding.logo; + const compactIcon = parsed.data.bb.branding.icon !== void 0 && isPluginOwnedIconPath(parsed.data.bb.branding.icon) ? parsed.data.bb.branding.icon : void 0; for (const [label, entry] of [ + ["bb.branding.icon", compactIcon], ["bb.branding.logo.light", logo?.light], ["bb.branding.logo.dark", logo?.dark] ]) { @@ -17516,11 +19540,14 @@ async function validatePluginBuildManifest(value, rootDir, packageJsonPath) { `manifest ${label} escapes the plugin directory through a symlink` ); } + if (label === "bb.branding.icon") { + assertValidPluginCompactIconSvg(await readFile(realAsset), label); + } } return parsed.data; } -// packages/plugin-build/src/build-plugin-app.ts +// ../env_ag7ffajzdy/bb/packages/plugin-build/src/build-plugin-app.ts var RUNTIME_SLOT_BY_SPECIFIER = { react: "react", "react-dom": "reactDom", @@ -17562,7 +19589,11 @@ async function shimExportsOf(specifier, pluginSdkAppModuleUrl) { try { resolvedModuleUrl = import.meta.resolve("@bb/plugin-sdk/app"); } catch { - return Object.keys(bundledPluginSdkAppFacade).sort(); + const names2 = RUNTIME_EXPORT_MANIFEST[specifier]; + if (!names2) { + throw new Error(`no runtime export manifest entry for "${specifier}"`); + } + return names2; } return freshModuleExports(resolvedModuleUrl); } @@ -17632,7 +19663,7 @@ function readDependencyNames(pkg) { async function readPackageJson(filePath) { let raw; try { - raw = await readFile(filePath, "utf8"); + raw = await readFile2(filePath, "utf8"); } catch { throw new Error(`no readable package.json at ${filePath}`); } @@ -17746,7 +19777,7 @@ async function buildTailwindCss(rootDir, pluginId) { TW_ANIMATE_CSS, PLUGIN_THEME_CSS, `@layer utilities {`, - ` @scope ([data-bb-plugin="${pluginId}"], [data-bb-plugin-root]:not([data-bb-plugin]), [data-bb-plugin-decoration="${pluginId}"]) {`, + ` @scope ([data-bb-plugin="${pluginId}"], [data-bb-plugin-root]:not([data-bb-plugin])) {`, ` @tailwind utilities;`, ` }`, `}`, @@ -17822,21 +19853,13 @@ async function buildPluginApp(rootDir, bbVersion) { }); let authoredCss = ""; try { - authoredCss = await readFile(stagedCssPath, "utf8"); + authoredCss = await readFile2(stagedCssPath, "utf8"); } catch (error48) { - if (error48.code !== "ENOENT") throw error48; + if (!isRecord(error48) || error48.code !== "ENOENT") throw error48; } - const authoredCssScope = `@scope ([data-bb-plugin="${pluginId}"], [data-bb-plugin-root]:not([data-bb-plugin]), [data-bb-plugin-decoration="${pluginId}"])`; - const scopedAuthoredCss = authoredCss.length === 0 ? "" : `${authoredCssScope} { -${authoredCss} -} -`; const tailwindCss = (await buildTailwindCss(rootDir, pluginId)).trimEnd(); - await writeFile( - stagedCssPath, - `${tailwindCss} -${scopedAuthoredCss}` - ); + await writeFile(stagedCssPath, `${tailwindCss} +${authoredCss}`); await writeFile( stagedMetaPath, JSON.stringify( @@ -17854,11 +19877,11 @@ ${scopedAuthoredCss}` return { jsPath, cssPath, metaPath }; } -// packages/plugin-build/src/build-plugin-server.ts +// ../env_ag7ffajzdy/bb/packages/plugin-build/src/build-plugin-server.ts import { mkdir as mkdir2, mkdtemp as mkdtemp2, - readFile as readFile2, + readFile as readFile3, rename as rename2, rm as rm2, stat as stat3, @@ -17880,7 +19903,7 @@ async function readPluginServerConfig(rootDir) { const packageJsonPath = join2(rootDir, "package.json"); let raw; try { - raw = await readFile2(packageJsonPath, "utf8"); + raw = await readFile3(packageJsonPath, "utf8"); } catch { throw new Error(`no readable package.json at ${packageJsonPath}`); } @@ -17965,7 +19988,7 @@ async function buildPluginServer(rootDir, bbVersion) { return { jsPath, mapPath, metaPath }; } -// packages/plugin-build/src/plugin-dev-loop.ts +// ../env_ag7ffajzdy/bb/packages/plugin-build/src/plugin-dev-loop.ts var DEFAULT_DEBOUNCE_MS = 300; var IGNORED_SEGMENTS = /* @__PURE__ */ new Set(["dist", "node_modules", ".git"]); function isIgnoredPluginDevPath(relativePath) { @@ -18031,6 +20054,7 @@ function createPluginDevLoop(deps) { }; } export { + assertValidPluginCompactIconSvg, buildPluginApp, buildPluginServer, createPluginDevLoop, diff --git a/tooling/vendor/bb-plugin-sdk-0.4.0.tgz b/tooling/vendor/bb-plugin-sdk-0.4.0.tgz deleted file mode 100644 index d7349ed6a7d8d1f8e754a07e02f2d6956046d136..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100346 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%0D-N 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 z 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 z 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 Date: Thu, 30 Jul 2026 17:06:31 -0700 Subject: [PATCH 2/5] Integrate reviewed plugin fixes --- README.md | 12 +- package-lock.json | 31 + plugins/moss-notes/README.md | 43 + plugins/moss-notes/app.test.tsx | 84 + plugins/moss-notes/app.tsx | 126 + plugins/moss-notes/docs/screenshot.png | Bin 0 -> 102535 bytes plugins/moss-notes/package.json | 50 + plugins/moss-notes/server.test.ts | 489 + plugins/moss-notes/server.ts | 418 + plugins/moss-notes/tsconfig.json | 33 + .../moss-notes/types/bb-plugin-sdk-app.d.ts | 806 + plugins/moss-notes/types/bb-plugin-sdk.d.ts | 12111 ++++++++++++++++ plugins/thread-organizer/app.test.ts | 41 + plugins/thread-organizer/app.ts | 19 +- plugins/thread-organizer/dist/app.js | 6 +- plugins/thread-organizer/dist/server.js | 6 +- plugins/thread-organizer/dist/server.js.map | 4 +- plugins/thread-organizer/server.test.ts | 52 +- plugins/thread-organizer/server.ts | 6 +- plugins/ui-patterns/tests/contract.test.mjs | 6 +- tooling/scaffold-smoke.mjs | 56 +- 21 files changed, 14342 insertions(+), 57 deletions(-) create mode 100644 plugins/moss-notes/README.md create mode 100644 plugins/moss-notes/app.test.tsx create mode 100644 plugins/moss-notes/app.tsx create mode 100644 plugins/moss-notes/docs/screenshot.png create mode 100644 plugins/moss-notes/package.json create mode 100644 plugins/moss-notes/server.test.ts create mode 100644 plugins/moss-notes/server.ts create mode 100644 plugins/moss-notes/tsconfig.json create mode 100644 plugins/moss-notes/types/bb-plugin-sdk-app.d.ts create mode 100644 plugins/moss-notes/types/bb-plugin-sdk.d.ts create mode 100644 plugins/thread-organizer/app.test.ts diff --git a/README.md b/README.md index 14ae110..0dd79f4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # bb plugins -Five bb plugins I use for product design work, kept together with the few build and repository tools they share. [![CI](https://github.com/brsbl/bb-plugins/actions/workflows/ci.yml/badge.svg)](https://github.com/brsbl/bb-plugins/actions/workflows/ci.yml) +Seven bb plugins I use for product design work, kept together with the few build and repository tools they share. [![CI](https://github.com/brsbl/bb-plugins/actions/workflows/ci.yml/badge.svg)](https://github.com/brsbl/bb-plugins/actions/workflows/ci.yml) [bb](https://getbb.app) is an agentic IDE for running coding agents across projects, threads, and environments. Its plugins can add UI, commands, skills, and server capabilities; this repository is where I build and maintain mine. @@ -28,6 +28,16 @@ Turns a rough composer draft into a clearer, context-complete prompt before you Install: `bb plugin install git:https://github.com/brsbl/bb-plugins.git@plugin/improve-prompt --yes` +### Moss Notes + +Keeps each bb thread synchronized with its corresponding workspace folder in Moss. + +![Moss Notes in bb](plugins/moss-notes/docs/screenshot.png) + +[Source](plugins/moss-notes) · [README](plugins/moss-notes/README.md) + +Install: `bb plugin install git:https://github.com/brsbl/bb-plugins.git@plugin/moss-notes --yes` + ### Thread Hover Cards Lets you peek at a thread's status and repository context without leaving the sidebar. diff --git a/package-lock.json b/package-lock.json index ab8bb69..ce88b80 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3997,6 +3997,10 @@ "resolved": "plugins/design-doctrine", "link": true }, + "node_modules/bb-plugin-moss-notes": { + "resolved": "plugins/moss-notes", + "link": true + }, "node_modules/bb-plugin-prompt-shaper": { "resolved": "plugins/improve-prompt", "link": true @@ -6727,6 +6731,33 @@ "bbPluginSdk": "^0.4.1" } }, + "plugins/moss-notes": { + "name": "bb-plugin-moss-notes", + "version": "0.1.0", + "license": "UNLICENSED", + "dependencies": { + "zod": "^4.3.6" + }, + "devDependencies": { + "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.1.tgz", + "@testing-library/react": "^16.3.2", + "@types/better-sqlite3": "^7.6.12", + "@types/node": "^22.0.0", + "@types/react": "^19.0.0", + "better-sqlite3": "^12.10.0", + "cron-parser": "^5.5.0", + "hono": "^4.11.9", + "jsdom": "^29.0.1", + "react": "^19.2.7", + "react-dom": "^19.2.7", + "typescript": "^5.7.0", + "vitest": "^4.1.8" + }, + "engines": { + "bb": ">=0.0.34", + "bbPluginSdk": "^0.4.1" + } + }, "plugins/thread-hover-cards": { "name": "bb-plugin-thread-hover-cards", "version": "0.1.0", diff --git a/plugins/moss-notes/README.md b/plugins/moss-notes/README.md new file mode 100644 index 0000000..7d0be85 --- /dev/null +++ b/plugins/moss-notes/README.md @@ -0,0 +1,43 @@ +# Moss Notes + +Moss Notes keeps bb thread notes as ordinary folders in the user’s default Moss workspace. There is no bb storage layer or embedded editor. + +![Moss Notes in bb](docs/screenshot.png) + +Each thread gets: + +```text +~/Moss/Notes/bb Threads/Active// +``` + +Opening **Moss Notes** in a thread creates that thread’s folder. Nothing is created at plugin startup, and there is no existing-thread scan or backfill. + +The same folder follows the thread through its lifecycle: + +| Thread state | Folder | +| --- | --- | +| Active | `bb Threads/Active//` | +| Archived | `bb Threads/Archived//` | +| Deleted | `bb Threads/Deleted//` | + +Archive and deletion move the entire folder, including every note inside it. Lifecycle events never create folders for threads whose Moss Notes page has not been opened. + +## Install + +```bash +bb plugin install git:https://github.com/brsbl/bb-plugins.git@plugin/moss-notes --yes +``` + +## Use + +Open **Moss Notes** from a thread’s panel actions. Create and edit notes with Moss or directly on the filesystem; bb agents receive the current thread folder path in their instructions. + +## Develop + +From the monorepo root: + +```bash +npm ci +npm run check --workspace=bb-plugin-moss-notes +bb plugin install "path:$PWD/plugins/moss-notes" --yes +``` diff --git a/plugins/moss-notes/app.test.tsx b/plugins/moss-notes/app.test.tsx new file mode 100644 index 0000000..deb5e56 --- /dev/null +++ b/plugins/moss-notes/app.test.tsx @@ -0,0 +1,84 @@ +// @vitest-environment jsdom + +import { cleanup, fireEvent, screen, waitFor } from "@testing-library/react"; +import { afterEach, describe, expect, it } from "vitest"; +import { loadPluginApp, renderSlot } from "@bb/plugin-sdk/testing/app"; + +afterEach(cleanup); + +describe("Moss Notes page", () => { + it("initializes the open thread and shows folders grouped by lifecycle", async () => { + const app = await loadPluginApp(() => import("./app")); + const panel = app.threadPanelActions[0]!; + const slot = renderSlot( + panel, + { params: null, threadId: "thr_alpha" }, + { + rpc: { + openThread: () => ({ + path: "/Users/example/Moss/Notes/bb Threads/Active/thr_alpha", + state: "active", + }), + listFolders: () => ({ + root: "/Users/example/Moss/Notes/bb Threads", + folders: { + active: ["thr_alpha"], + archived: ["thr_retained"], + deleted: [], + }, + }), + }, + }, + ); + + expect(await screen.findByText("thr_alpha")).not.toBeNull(); + expect(screen.getByText("thr_retained")).not.toBeNull(); + expect(screen.getByText("active")).not.toBeNull(); + expect(screen.getByText("archived")).not.toBeNull(); + fireEvent.click(screen.getByRole("button", { name: "Refresh" })); + await waitFor(() => expect(slot.inspection.rpcCalls).toHaveLength(4)); + expect(slot.inspection.rpcCalls[0]).toEqual({ + input: { threadId: "thr_alpha" }, + method: "openThread", + }); + + slot.lifecycle.unmount(); + }); + + it("reconciles folder state after the realtime connection recovers", async () => { + let activeFolders = ["thr_alpha"]; + const app = await loadPluginApp(() => import("./app")); + const panel = app.threadPanelActions[0]!; + const slot = renderSlot( + panel, + { params: null, threadId: "thr_alpha" }, + { + rpc: { + openThread: () => ({ + path: "/Users/example/Moss/Notes/bb Threads/Active/thr_alpha", + state: "active", + }), + listFolders: () => ({ + root: "/Users/example/Moss/Notes/bb Threads", + folders: { + active: activeFolders, + archived: [], + deleted: [], + }, + }), + }, + }, + ); + + expect(await screen.findByText("thr_alpha")).not.toBeNull(); + activeFolders = ["thr_alpha", "thr_missed"]; + await slot.behavior.setRealtimeConnectionState("reconnecting"); + expect(screen.queryByText("thr_missed")).toBeNull(); + await slot.behavior.setRealtimeConnectionState("connected"); + + expect(await screen.findByText("thr_missed")).not.toBeNull(); + await waitFor(() => expect(slot.inspection.rpcCalls).toHaveLength(4)); + + slot.lifecycle.unmount(); + }); +}); diff --git a/plugins/moss-notes/app.tsx b/plugins/moss-notes/app.tsx new file mode 100644 index 0000000..8ec8d66 --- /dev/null +++ b/plugins/moss-notes/app.tsx @@ -0,0 +1,126 @@ +import { useCallback, useEffect, useRef, useState } from "react"; + +import { + definePluginApp, + useRealtime, + useRealtimeConnectionState, + useRpc, +} from "@bb/plugin-sdk/app"; + +import type { ListFoldersResult, rpcContract } from "./server"; + +function MossThreadFolders({ threadId }: { threadId: string }) { + const rpc = useRpc(); + const connectionState = useRealtimeConnectionState(); + const previousConnectionState = useRef(connectionState); + const hasConnected = useRef(connectionState !== "connecting"); + const [data, setData] = useState(null); + const [error, setError] = useState(null); + const [isLoading, setIsLoading] = useState(true); + const load = useCallback(async () => { + setIsLoading(true); + setError(null); + try { + await rpc.call("openThread", { threadId }); + setData(await rpc.call("listFolders")); + } catch (cause) { + setError(cause instanceof Error ? cause.message : "Unable to read Moss folders."); + } finally { + setIsLoading(false); + } + }, [rpc, threadId]); + + useEffect(() => { + void load(); + }, [load]); + + useRealtime("folders-changed", () => { + void load(); + }); + + useEffect(() => { + const previous = previousConnectionState.current; + previousConnectionState.current = connectionState; + if (connectionState !== "connected" || previous === "connected") return; + if (hasConnected.current) void load(); + hasConnected.current = true; + }, [connectionState, load]); + + return ( +
+
+
+
+
+

+ Default Moss workspace +

+

+ {data?.root ?? "~/Moss/Notes/bb Threads"} +

+
+ +
+
+ + {error ? ( +

+ {error} +

+ ) : isLoading && data === null ? ( +

+ Reading Moss folders… +

+ ) : data && + data.folders.active.length === 0 && + data.folders.archived.length === 0 && + data.folders.deleted.length === 0 ? ( +

+ No bb thread folders yet. +

+ ) : ( +
+ {data && + Object.entries(data.folders).map(([state, folders]) => + folders.length > 0 ? ( +
+

+ {state} +

+
    + {folders.map((folder) => ( +
  • +
    + + {folder} + +
    +
  • + ))} +
+
+ ) : null, + )} +
+ )} +
+
+ ); +} + +export default definePluginApp((app) => { + app.slots.threadPanelAction({ + id: "moss-notes", + title: "Moss Notes", + icon: "Folder", + layout: "padded", + component: MossThreadFolders, + }); +}); diff --git a/plugins/moss-notes/docs/screenshot.png b/plugins/moss-notes/docs/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..e37a3228eee865674a92eb96d27463c497554cac GIT binary patch literal 102535 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.0.34", + "bbPluginSdk": "^0.4.1" + }, + "bb": { + "name": "Moss Notes", + "description": "Keep one Moss workspace folder for every local bb thread.", + "branding": { + "icon": "Folder" + }, + "server": "./server.ts", + "app": "./app.tsx", + "skills": [] + }, + "dependencies": { + "zod": "^4.3.6" + }, + "devDependencies": { + "@bb/plugin-sdk": "file:../../tooling/vendor/bb-plugin-sdk-0.4.1.tgz", + "@testing-library/react": "^16.3.2", + "@types/better-sqlite3": "^7.6.12", + "@types/node": "^22.0.0", + "@types/react": "^19.0.0", + "better-sqlite3": "^12.10.0", + "cron-parser": "^5.5.0", + "hono": "^4.11.9", + "jsdom": "^29.0.1", + "react": "^19.2.7", + "react-dom": "^19.2.7", + "typescript": "^5.7.0", + "vitest": "^4.1.8" + } +} diff --git a/plugins/moss-notes/server.test.ts b/plugins/moss-notes/server.test.ts new file mode 100644 index 0000000..ff9ba33 --- /dev/null +++ b/plugins/moss-notes/server.test.ts @@ -0,0 +1,489 @@ +import { + access, + mkdtemp, + mkdir, + readFile, + rm, + symlink, + writeFile, +} from "node:fs/promises"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; + +import { createFakePluginHost, makeThreadResponse } from "@bb/plugin-sdk/testing"; +import { afterEach, describe, expect, it } from "vitest"; + +import { + bbThreadsRoot, + registerMossNotesPlugin, + threadFolderPath, + type ListFoldersResult, + type OpenThreadResult, +} from "./server"; + +const temporaryRoots: string[] = []; +type PluginOptions = Parameters[1]; + +async function registerTestPlugin( + bb: Parameters[0], + options: PluginOptions = {}, +): Promise { + await registerMossNotesPlugin(bb, { + subscribeArchiveStateChanges: () => () => undefined, + ...options, + }); +} + +async function temporaryWorkspace(): Promise { + const root = await mkdtemp(join(tmpdir(), "moss-notes-plugin-")); + temporaryRoots.push(root); + return root; +} + +afterEach(async () => { + await Promise.all( + temporaryRoots.splice(0).map((root) => rm(root, { recursive: true, force: true })), + ); +}); + +describe("Moss Notes plugin", () => { + it("creates a thread folder only when that thread opens the plugin page", async () => { + const workspaceRoot = await temporaryWorkspace(); + const { bb, harness } = createFakePluginHost({ pluginId: "moss-notes" }); + await registerTestPlugin(bb, { + getThread: async (threadId) => ({ + archivedAt: null, + deletedAt: null, + id: threadId, + }), + workspaceRoot, + }); + + const root = bbThreadsRoot(workspaceRoot); + await expect(access(root)).rejects.toMatchObject({ code: "ENOENT" }); + + const result = await harness.behavior.callRpc("openThread", { + threadId: "thr_opened", + }) as OpenThreadResult; + expect(result).toEqual({ + path: threadFolderPath(root, "active", "thr_opened"), + state: "active", + }); + await expect(access(result.path)).resolves.toBeUndefined(); + expect(harness.inspection.realtimeSignals).toContainEqual({ + channel: "folders-changed", + payload: { state: "active", threadId: "thr_opened" }, + }); + + await harness.lifecycle.dispose(); + }); + + it("publishes a folder change only when opening changes the folder placement", async () => { + const workspaceRoot = await temporaryWorkspace(); + const { bb, harness } = createFakePluginHost({ pluginId: "moss-notes" }); + await registerTestPlugin(bb, { + getThread: async (threadId) => ({ + archivedAt: null, + deletedAt: null, + id: threadId, + }), + workspaceRoot, + }); + + await harness.behavior.callRpc("openThread", { threadId: "thr_opened" }); + await harness.behavior.callRpc("openThread", { threadId: "thr_opened" }); + + expect(harness.inspection.realtimeSignals).toEqual([ + { + channel: "folders-changed", + payload: { state: "active", threadId: "thr_opened" }, + }, + ]); + + await harness.lifecycle.dispose(); + }); + + it("opens distinct threads concurrently against an absent workspace", async () => { + const workspaceRoot = await temporaryWorkspace(); + const root = bbThreadsRoot(workspaceRoot); + const threadIds = [ + "thr_concurrent1", + "thr_concurrent2", + "thr_concurrent3", + "thr_concurrent4", + ]; + const { bb, harness } = createFakePluginHost({ pluginId: "moss-notes" }); + await registerTestPlugin(bb, { + getThread: async (threadId) => ({ + archivedAt: null, + deletedAt: null, + id: threadId, + }), + workspaceRoot, + }); + + await Promise.all( + threadIds.map((threadId) => + harness.behavior.callRpc("openThread", { threadId }), + ), + ); + + await Promise.all( + threadIds.map((threadId) => + expect( + access(threadFolderPath(root, "active", threadId)), + ).resolves.toBeUndefined(), + ), + ); + expect(harness.inspection.realtimeSignals).toHaveLength(threadIds.length); + expect(harness.inspection.realtimeSignals).toEqual( + expect.arrayContaining( + threadIds.map((threadId) => ({ + channel: "folders-changed", + payload: { state: "active", threadId }, + })), + ), + ); + + await harness.lifecycle.dispose(); + }); + + it("does not create folders from lifecycle events for unopened threads", async () => { + const workspaceRoot = await temporaryWorkspace(); + const { bb, harness } = createFakePluginHost({ pluginId: "moss-notes" }); + await registerTestPlugin(bb, { + getThread: async (threadId) => ({ + archivedAt: Date.now(), + deletedAt: null, + id: threadId, + }), + workspaceRoot, + }); + + await harness.behavior.emitThreadEvent("thread.archived", { + thread: makeThreadResponse({ archivedAt: Date.now(), id: "thr_unopened" }), + }); + + await expect(access(bbThreadsRoot(workspaceRoot))).rejects.toMatchObject({ + code: "ENOENT", + }); + expect(harness.inspection.realtimeSignals).toEqual([]); + + await harness.lifecycle.dispose(); + }); + + it("reconciles an archived folder when the thread is unarchived", async () => { + const workspaceRoot = await temporaryWorkspace(); + const root = bbThreadsRoot(workspaceRoot); + const { bb, harness } = createFakePluginHost({ pluginId: "moss-notes" }); + let lifecycle = { + archivedAt: null as number | null, + deletedAt: null as number | null, + }; + let archiveStateChanged: + | ((threadId: string) => Promise) + | undefined; + await registerTestPlugin(bb, { + getThread: async (threadId) => ({ ...lifecycle, id: threadId }), + subscribeArchiveStateChanges(handler) { + archiveStateChanged = handler; + return () => undefined; + }, + workspaceRoot, + }); + + await harness.behavior.callRpc("openThread", { threadId: "thr_restored" }); + lifecycle = { archivedAt: Date.now(), deletedAt: null }; + await harness.behavior.emitThreadEvent("thread.archived", { + thread: makeThreadResponse({ + archivedAt: lifecycle.archivedAt, + id: "thr_restored", + }), + }); + const archivedPath = threadFolderPath(root, "archived", "thr_restored"); + await writeFile(join(archivedPath, "note.md"), "# Restored"); + + lifecycle = { archivedAt: null, deletedAt: null }; + const reconcileArchiveState = archiveStateChanged; + if (!reconcileArchiveState) { + throw new Error("Archive-state subscription was not registered"); + } + await reconcileArchiveState("thr_restored"); + + const activePath = threadFolderPath(root, "active", "thr_restored"); + expect(await readFile(join(activePath, "note.md"), "utf8")).toBe( + "# Restored", + ); + await expect(access(archivedPath)).rejects.toMatchObject({ code: "ENOENT" }); + expect(harness.inspection.realtimeSignals).toHaveLength(3); + + await harness.lifecycle.dispose(); + }); + + it("moves an opened thread folder with archive and deletion lifecycle changes", async () => { + const workspaceRoot = await temporaryWorkspace(); + const root = bbThreadsRoot(workspaceRoot); + const { bb, harness } = createFakePluginHost({ pluginId: "moss-notes" }); + let lifecycle = { + archivedAt: null as number | null, + deletedAt: null as number | null, + }; + await registerTestPlugin(bb, { + getThread: async (threadId) => ({ ...lifecycle, id: threadId }), + workspaceRoot, + }); + + await harness.behavior.callRpc("openThread", { threadId: "thr_moving" }); + const activePath = threadFolderPath(root, "active", "thr_moving"); + await writeFile(join(activePath, "note.md"), "# Kept"); + + lifecycle = { archivedAt: Date.now(), deletedAt: null }; + await harness.behavior.emitThreadEvent("thread.archived", { + thread: makeThreadResponse({ + archivedAt: Date.now(), + id: "thr_moving", + }), + }); + const archivedPath = threadFolderPath(root, "archived", "thr_moving"); + expect(await readFile(join(archivedPath, "note.md"), "utf8")).toBe("# Kept"); + await expect(access(activePath)).rejects.toMatchObject({ code: "ENOENT" }); + + await harness.behavior.emitThreadEvent("thread.deleted", { + thread: makeThreadResponse({ + archivedAt: Date.now(), + deletedAt: Date.now(), + id: "thr_moving", + }), + }); + const deletedPath = threadFolderPath(root, "deleted", "thr_moving"); + expect(await readFile(join(deletedPath, "note.md"), "utf8")).toBe("# Kept"); + await expect(access(archivedPath)).rejects.toMatchObject({ code: "ENOENT" }); + + await harness.lifecycle.dispose(); + }); + + it("serializes concurrent lifecycle moves so the latest state wins", async () => { + const workspaceRoot = await temporaryWorkspace(); + const root = bbThreadsRoot(workspaceRoot); + const { bb, harness } = createFakePluginHost({ pluginId: "moss-notes" }); + let lifecycle = { + archivedAt: null as number | null, + deletedAt: null as number | null, + }; + await registerTestPlugin(bb, { + getThread: async (threadId) => ({ ...lifecycle, id: threadId }), + workspaceRoot, + }); + await harness.behavior.callRpc("openThread", { threadId: "thr_racing" }); + const activePath = threadFolderPath(root, "active", "thr_racing"); + await writeFile(join(activePath, "note.md"), "# Kept"); + + const now = Date.now(); + lifecycle = { archivedAt: now, deletedAt: now }; + await Promise.all([ + harness.behavior.emitThreadEvent("thread.archived", { + thread: makeThreadResponse({ + archivedAt: Date.now(), + id: "thr_racing", + }), + }), + harness.behavior.emitThreadEvent("thread.deleted", { + thread: makeThreadResponse({ + archivedAt: Date.now(), + deletedAt: Date.now(), + id: "thr_racing", + }), + }), + ]); + + const deletedPath = threadFolderPath(root, "deleted", "thr_racing"); + expect(await readFile(join(deletedPath, "note.md"), "utf8")).toBe("# Kept"); + await expect(access(activePath)).rejects.toMatchObject({ code: "ENOENT" }); + await expect( + access(threadFolderPath(root, "archived", "thr_racing")), + ).rejects.toMatchObject({ code: "ENOENT" }); + + await harness.lifecycle.dispose(); + }); + + it("rejects duplicate lifecycle folders even when one is already the target", async () => { + const workspaceRoot = await temporaryWorkspace(); + const root = bbThreadsRoot(workspaceRoot); + await Promise.all([ + mkdir(threadFolderPath(root, "active", "thr_duplicate"), { + recursive: true, + }), + mkdir(threadFolderPath(root, "archived", "thr_duplicate"), { + recursive: true, + }), + ]); + const { bb, harness } = createFakePluginHost({ pluginId: "moss-notes" }); + await registerTestPlugin(bb, { + getThread: async (threadId) => ({ + archivedAt: Date.now(), + deletedAt: null, + id: threadId, + }), + workspaceRoot, + }); + + await expect( + harness.behavior.callRpc("openThread", { + threadId: "thr_duplicate", + }), + ).rejects.toThrow("Multiple Moss folders exist for thr_duplicate"); + + await harness.lifecycle.dispose(); + }); + + it("rejects lifecycle-parent symlinks without creating outside them", async () => { + const workspaceRoot = await temporaryWorkspace(); + const root = bbThreadsRoot(workspaceRoot); + const outside = join(workspaceRoot, "outside-active"); + await Promise.all([mkdir(root, { recursive: true }), mkdir(outside)]); + await symlink(outside, join(root, "Active")); + const { bb, harness } = createFakePluginHost({ pluginId: "moss-notes" }); + await registerTestPlugin(bb, { + getThread: async (threadId) => ({ + archivedAt: null, + deletedAt: null, + id: threadId, + }), + workspaceRoot, + }); + + await expect( + harness.behavior.callRpc("openThread", { threadId: "thr_escape" }), + ).rejects.toThrow("must not be a symbolic link"); + await expect(access(join(outside, "thr_escape"))).rejects.toMatchObject({ + code: "ENOENT", + }); + + await harness.lifecycle.dispose(); + }); + + it("rejects an unsafe leaf alongside an existing target folder", async () => { + const workspaceRoot = await temporaryWorkspace(); + const root = bbThreadsRoot(workspaceRoot); + const outside = join(workspaceRoot, "outside-leaf"); + await Promise.all([ + mkdir(threadFolderPath(root, "archived", "thr_unsafe"), { + recursive: true, + }), + mkdir(join(root, "Active"), { recursive: true }), + mkdir(outside), + ]); + await symlink( + outside, + threadFolderPath(root, "active", "thr_unsafe"), + ); + const { bb, harness } = createFakePluginHost({ pluginId: "moss-notes" }); + await registerTestPlugin(bb, { + getThread: async (threadId) => ({ + archivedAt: Date.now(), + deletedAt: null, + id: threadId, + }), + workspaceRoot, + }); + + await expect( + harness.behavior.callRpc("openThread", { threadId: "thr_unsafe" }), + ).rejects.toThrow("must not be a symbolic link"); + await expect(access(join(outside, "note.md"))).rejects.toMatchObject({ + code: "ENOENT", + }); + + await harness.lifecycle.dispose(); + }); + + it("rejects legacy symlink collisions without moving their targets", async () => { + const workspaceRoot = await temporaryWorkspace(); + const root = bbThreadsRoot(workspaceRoot); + const outside = join(workspaceRoot, "outside-legacy"); + await Promise.all([mkdir(root, { recursive: true }), mkdir(outside)]); + await writeFile(join(outside, "note.md"), "# Outside"); + await symlink(outside, join(root, "thr_legacy")); + const { bb, harness } = createFakePluginHost({ pluginId: "moss-notes" }); + await registerTestPlugin(bb, { + getThread: async (threadId) => ({ + archivedAt: null, + deletedAt: null, + id: threadId, + }), + workspaceRoot, + }); + + await expect( + harness.behavior.callRpc("openThread", { threadId: "thr_legacy" }), + ).rejects.toThrow("must not be a symbolic link"); + expect(await readFile(join(outside, "note.md"), "utf8")).toBe("# Outside"); + await expect( + access(threadFolderPath(root, "active", "thr_legacy")), + ).rejects.toMatchObject({ code: "ENOENT" }); + + await harness.lifecycle.dispose(); + }); + + it("rejects regular-file collisions in lifecycle parents and thread leaves", async () => { + const workspaceRoot = await temporaryWorkspace(); + const root = bbThreadsRoot(workspaceRoot); + await mkdir(threadFolderPath(root, "active", "thr_file"), { + recursive: true, + }); + await writeFile(join(root, "Deleted"), "collision"); + await writeFile( + threadFolderPath(root, "active", "thr_leaffile"), + "collision", + ); + const { bb, harness } = createFakePluginHost({ pluginId: "moss-notes" }); + await registerTestPlugin(bb, { + getThread: async (threadId) => ({ + archivedAt: null, + deletedAt: null, + id: threadId, + }), + workspaceRoot, + }); + + await expect( + harness.behavior.callRpc("openThread", { threadId: "thr_file" }), + ).rejects.toThrow("must be a directory"); + await rm(join(root, "Deleted")); + await expect( + harness.behavior.callRpc("openThread", { threadId: "thr_leaffile" }), + ).rejects.toThrow("must be a directory"); + + await harness.lifecycle.dispose(); + }); + + it("lists folders under their current lifecycle state", async () => { + const workspaceRoot = await temporaryWorkspace(); + const root = bbThreadsRoot(workspaceRoot); + await Promise.all([ + mkdir(threadFolderPath(root, "active", "thr_alpha"), { recursive: true }), + mkdir(threadFolderPath(root, "archived", "thr_old"), { recursive: true }), + mkdir(threadFolderPath(root, "deleted", "thr_deleted"), { recursive: true }), + ]); + const { bb, harness } = createFakePluginHost({ pluginId: "moss-notes" }); + await registerTestPlugin(bb, { workspaceRoot }); + + const result = await harness.behavior.callRpc("listFolders", null) as ListFoldersResult; + expect(result).toEqual({ + folders: { + active: ["thr_alpha"], + archived: ["thr_old"], + deleted: ["thr_deleted"], + }, + root, + }); + + await harness.lifecycle.dispose(); + }); + + it("refuses thread ids that could escape the Moss folder", () => { + expect(() => + threadFolderPath("/tmp/Moss/Notes/bb Threads", "active", "../escape"), + ).toThrow("Invalid bb thread id"); + }); +}); diff --git a/plugins/moss-notes/server.ts b/plugins/moss-notes/server.ts new file mode 100644 index 0000000..d8cf7a6 --- /dev/null +++ b/plugins/moss-notes/server.ts @@ -0,0 +1,418 @@ +import { lstat, mkdir, readdir, rename, stat } from "node:fs/promises"; +import { homedir } from "node:os"; +import { join } from "node:path"; + +import { defineRpcContract, type BbPluginApi } from "@bb/plugin-sdk"; +import { z } from "zod"; + +const THREAD_FOLDER_PATTERN = /^thr_[a-zA-Z0-9]+$/; + +interface PluginOptions { + getThread?: (threadId: string) => Promise; + subscribeArchiveStateChanges?: ( + handler: (threadId: string) => Promise, + ) => () => void; + workspaceRoot?: string; +} + +const threadStateSchema = z.enum(["active", "archived", "deleted"]); +type ThreadState = z.infer; + +interface ThreadLifecycle { + archivedAt: number | null; + deletedAt: number | null; + id: string; +} + +interface ThreadFolderPlacement { + changed: boolean; + path: string; +} + +const listFoldersOutputSchema = z + .object({ + folders: z + .object({ + active: z.array(z.string()), + archived: z.array(z.string()), + deleted: z.array(z.string()), + }) + .strict(), + root: z.string(), + }) + .strict(); + +export type ListFoldersResult = z.infer; +export type OpenThreadResult = { + path: string; + state: ThreadState; +}; + +export const rpcContract = defineRpcContract({ + openThread: { + input: z.object({ threadId: z.string() }).strict(), + output: z + .object({ + path: z.string(), + state: threadStateSchema, + }) + .strict(), + }, + listFolders: { + input: z.null(), + output: listFoldersOutputSchema, + }, +}); + +export function defaultMossWorkspaceRoot(): string { + return join(homedir(), "Moss"); +} + +export function bbThreadsRoot(workspaceRoot: string): string { + return join(workspaceRoot, "Notes", "bb Threads"); +} + +function stateDirectoryName(state: ThreadState): string { + if (state === "active") return "Active"; + if (state === "archived") return "Archived"; + return "Deleted"; +} + +export function threadFolderPath( + root: string, + state: ThreadState, + threadId: string, +): string { + if (!THREAD_FOLDER_PATTERN.test(threadId)) { + throw new Error(`Invalid bb thread id: ${threadId}`); + } + return join(root, stateDirectoryName(state), threadId); +} + +function stateForThread(thread: ThreadLifecycle): ThreadState { + if (thread.deletedAt !== null) return "deleted"; + if (thread.archivedAt !== null) return "archived"; + return "active"; +} + +type DirectoryStatus = "directory" | "missing"; + +function hasErrorCode(cause: unknown, code: string): boolean { + return cause instanceof Error && "code" in cause && cause.code === code; +} + +async function directoryStatus( + path: string, + description: string, +): Promise { + try { + const entry = await lstat(path); + if (entry.isSymbolicLink()) { + throw new Error(`${description} must not be a symbolic link: ${path}`); + } + if (!entry.isDirectory()) { + throw new Error(`${description} must be a directory: ${path}`); + } + return "directory"; + } catch (cause) { + if (hasErrorCode(cause, "ENOENT")) return "missing"; + throw cause; + } +} + +async function rootDirectoryStatus(root: string): Promise { + let entry; + try { + entry = await lstat(root); + } catch (cause) { + if (hasErrorCode(cause, "ENOENT")) return "missing"; + throw cause; + } + if (entry.isSymbolicLink()) { + const target = await stat(root).catch(() => null); + if (!target?.isDirectory()) { + throw new Error(`Moss bb Threads root must resolve to a directory: ${root}`); + } + return "directory"; + } + if (!entry.isDirectory()) { + throw new Error(`Moss bb Threads root must be a directory: ${root}`); + } + return "directory"; +} + +interface FolderLayout { + existing: string[]; +} + +async function inspectFolderLayout( + root: string, + threadId: string, +): Promise { + await rootDirectoryStatus(root); + const statePaths = (["active", "archived", "deleted"] as const).map((state) => { + const directory = join(root, stateDirectoryName(state)); + return { + directory, + path: threadFolderPath(root, state, threadId), + state, + }; + }); + + const parentStatuses = new Map(); + for (const { directory, state } of statePaths) { + parentStatuses.set( + directory, + await directoryStatus( + directory, + `Moss ${stateDirectoryName(state)} lifecycle folder`, + ), + ); + } + + const existing: string[] = []; + for (const { directory, path } of statePaths) { + if (parentStatuses.get(directory) === "missing") continue; + if ( + (await directoryStatus(path, `Moss thread folder for ${threadId}`)) === + "directory" + ) { + existing.push(path); + } + } + + const legacyPath = join(root, threadId); + if ( + (await directoryStatus( + legacyPath, + `Legacy Moss thread folder for ${threadId}`, + )) === "directory" + ) { + existing.push(legacyPath); + } + + return { existing }; +} + +async function placeThreadFolder( + root: string, + threadId: string, + targetState: ThreadState, + createIfMissing: boolean, +): Promise { + const targetPath = threadFolderPath(root, targetState, threadId); + let layout = await inspectFolderLayout(root, threadId); + + if (layout.existing.length > 1) { + throw new Error(`Multiple Moss folders exist for ${threadId}`); + } + if (layout.existing.includes(targetPath)) { + return { changed: false, path: targetPath }; + } + if (layout.existing.length === 0 && !createIfMissing) return null; + + if ((await rootDirectoryStatus(root)) === "missing") { + await mkdir(root, { recursive: true }); + } + await rootDirectoryStatus(root); + const targetDirectory = join(root, stateDirectoryName(targetState)); + if ( + (await directoryStatus( + targetDirectory, + `Moss ${stateDirectoryName(targetState)} lifecycle folder`, + )) === "missing" + ) { + try { + await mkdir(targetDirectory); + } catch (cause) { + if (!hasErrorCode(cause, "EEXIST")) throw cause; + } + } + await directoryStatus( + targetDirectory, + `Moss ${stateDirectoryName(targetState)} lifecycle folder`, + ); + + layout = await inspectFolderLayout(root, threadId); + if (layout.existing.length > 1) { + throw new Error(`Multiple Moss folders exist for ${threadId}`); + } + if (layout.existing.includes(targetPath)) { + return { changed: false, path: targetPath }; + } + if (layout.existing.length === 1) { + await rename(layout.existing[0], targetPath); + return { changed: true, path: targetPath }; + } + + await mkdir(targetPath); + await directoryStatus(targetPath, `Moss thread folder for ${threadId}`); + return { changed: true, path: targetPath }; +} + +async function readStateFolders(root: string, state: ThreadState): Promise { + const directory = join(root, stateDirectoryName(state)); + if ((await rootDirectoryStatus(root)) === "missing") return []; + if ( + (await directoryStatus( + directory, + `Moss ${stateDirectoryName(state)} lifecycle folder`, + )) === "missing" + ) { + return []; + } + const entries = await readdir(directory, { withFileTypes: true }).catch( + (cause: NodeJS.ErrnoException) => { + if (cause.code === "ENOENT") return []; + throw cause; + }, + ); + return entries + .filter((entry) => entry.isDirectory()) + .map((entry) => entry.name) + .sort((left, right) => left.localeCompare(right)); +} + +async function readFolders(root: string): Promise { + const [active, archived, deleted] = await Promise.all([ + readStateFolders(root, "active"), + readStateFolders(root, "archived"), + readStateFolders(root, "deleted"), + ]); + return { active, archived, deleted }; +} + +export async function registerMossNotesPlugin( + bb: BbPluginApi, + options: PluginOptions = {}, +): Promise { + const workspaceRoot = options.workspaceRoot ?? defaultMossWorkspaceRoot(); + const root = bbThreadsRoot(workspaceRoot); + const getThread = + options.getThread ?? + (async (threadId: string) => { + const thread = await bb.sdk.threads.get({ threadId }); + return { + archivedAt: thread.archivedAt, + deletedAt: thread.deletedAt, + id: thread.id, + }; + }); + const folderQueues = new Map>(); + + async function withThreadFolderLock( + threadId: string, + operation: () => Promise, + ): Promise { + const previous = folderQueues.get(threadId) ?? Promise.resolve(); + let release: () => void = () => undefined; + const current = new Promise((resolve) => { + release = resolve; + }); + folderQueues.set(threadId, current); + await previous; + try { + return await operation(); + } finally { + release(); + if (folderQueues.get(threadId) === current) folderQueues.delete(threadId); + } + } + + async function placeAndPublish( + threadId: string, + state: ThreadState, + createIfMissing: boolean, + ): Promise { + const placement = await placeThreadFolder( + root, + threadId, + state, + createIfMissing, + ); + if (placement?.changed) { + bb.realtime.publish("folders-changed", { state, threadId }); + } + return placement; + } + + async function reconcileThreadFolder(threadId: string): Promise { + await withThreadFolderLock(threadId, async () => { + const thread = await getThread(threadId); + await placeAndPublish(thread.id, stateForThread(thread), false); + }); + } + + bb.rpc.register(rpcContract, { + async openThread({ threadId }) { + return withThreadFolderLock(threadId, async () => { + const thread = await getThread(threadId); + const state = stateForThread(thread); + const placement = await placeAndPublish(thread.id, state, true); + if (placement === null) { + throw new Error(`Unable to initialize ${thread.id}`); + } + return { path: placement.path, state }; + }); + }, + async listFolders() { + return { + folders: await readFolders(root), + root, + }; + }, + }); + + bb.events.on("thread.active", async ({ thread }) => { + await reconcileThreadFolder(thread.id); + }); + bb.events.on("thread.archived", async ({ thread }) => { + await reconcileThreadFolder(thread.id); + }); + bb.events.on("thread.deleted", async ({ thread }) => { + await withThreadFolderLock(thread.id, async () => { + await placeAndPublish(thread.id, "deleted", false); + }); + }); + + const subscribeArchiveStateChanges = + options.subscribeArchiveStateChanges ?? + ((handler: (threadId: string) => Promise) => + bb.sdk.subscribe({ + event: "thread:changed", + callback(event) { + if ( + event.id === undefined || + !event.changes.includes("archived-changed") + ) { + return; + } + void handler(event.id).catch((cause) => { + bb.log.error( + `Unable to reconcile Moss folder for ${event.id}: ${ + cause instanceof Error ? cause.message : String(cause) + }`, + ); + }); + }, + })); + const unsubscribeArchiveStateChanges = subscribeArchiveStateChanges( + reconcileThreadFolder, + ); + bb.onDispose(unsubscribeArchiveStateChanges); + + bb.agents.configure(({ thread }) => ({ + instructions: + `Store Moss notes for this bb thread under ${threadFolderPath(root, "active", thread.id)}. ` + + "Use ordinary Moss note folders and Markdown files; " + + "do not write Moss app-owned sidecars.", + skills: [], + tools: [], + })); + + bb.log.info(`Moss Notes uses ${root}`); +} + +export default async function plugin(bb: BbPluginApi): Promise { + await registerMossNotesPlugin(bb); +} diff --git a/plugins/moss-notes/tsconfig.json b/plugins/moss-notes/tsconfig.json new file mode 100644 index 0000000..9ce9ba9 --- /dev/null +++ b/plugins/moss-notes/tsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": [ + "ES2022", + "DOM" + ], + "jsx": "react-jsx", + "module": "ESNext", + "moduleResolution": "Bundler", + "baseUrl": ".", + "paths": { + "@bb/plugin-sdk": [ + "./types/bb-plugin-sdk.d.ts" + ], + "@bb/plugin-sdk/app": [ + "./types/bb-plugin-sdk-app.d.ts" + ] + }, + "strict": true, + "noEmit": true, + "skipLibCheck": true, + "types": [ + "node", + "vitest/globals" + ] + }, + "include": [ + "*.ts", + "*.tsx", + "types" + ] +} diff --git a/plugins/moss-notes/types/bb-plugin-sdk-app.d.ts b/plugins/moss-notes/types/bb-plugin-sdk-app.d.ts new file mode 100644 index 0000000..763f78f --- /dev/null +++ b/plugins/moss-notes/types/bb-plugin-sdk-app.d.ts @@ -0,0 +1,806 @@ +// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB +// workspace contracts are flattened; public subpaths may reuse the +// package root without requiring any other @bb/* package. +// +// Confused by the API, or need a symbol that isn't here? Clone the BB repo +// and read the real source: https://github.com/ymichael/bb + +import * as react from 'react'; +import { ComponentType, ReactNode } from 'react'; + +/** A JSON-safe path segment reported by a Standard Schema validation issue. */ +type PluginRpcIssuePathSegment = string | number; +/** Validator-neutral validation detail carried by an RPC error envelope. */ +interface PluginRpcValidationIssue { + message: string; + path?: PluginRpcIssuePathSegment[]; +} +/** Stable wire error categories for plugin RPC. */ +type PluginRpcErrorCode = "invalid_json" | "invalid_input" | "handler_error" | "invalid_output" | "non_json_result" | "unknown_method"; +/** Structured RPC failure returned as `{ ok: false, error }`. */ +interface PluginRpcError { + code: PluginRpcErrorCode; + message: string; + issues?: PluginRpcValidationIssue[]; +} +/** + * The validator-neutral subset of Standard Schema v1 used by plugin RPC. + * Zod 4 schemas implement this interface directly; other validators can do + * the same without becoming part of BB's public protocol. + */ +interface StandardSchemaV1 { + readonly "~standard": { + readonly version: 1; + readonly vendor: string; + readonly validate: (value: unknown) => StandardSchemaV1Result | Promise>; + readonly types?: { + readonly input: Input; + readonly output: Output; + }; + }; +} +type StandardSchemaV1Result = { + readonly value: Output; + readonly issues?: undefined; +} | { + readonly issues: readonly StandardSchemaV1Issue[]; +}; +interface StandardSchemaV1Issue { + readonly message: string; + readonly path?: PropertyKey | readonly (PropertyKey | { + readonly key: PropertyKey; + })[]; +} +type StandardSchemaV1InferInput = NonNullable["input"]; +type StandardSchemaV1InferOutput = NonNullable["output"]; +interface PluginRpcMethodContract { + readonly input: InputSchema; + readonly output: OutputSchema; +} +type PluginRpcContract = Readonly>; +type PluginRpcHandlers = { + [Method in keyof Contract]: (input: StandardSchemaV1InferOutput) => StandardSchemaV1InferInput | Promise>; +}; +type PluginRpcCallInput = StandardSchemaV1InferInput; +type PluginRpcCallArgs = null extends PluginRpcCallInput ? [input?: PluginRpcCallInput] : [input: PluginRpcCallInput]; +type PluginRpcResult = StandardSchemaV1InferOutput; + +/** + * A value that survives a JSON round trip without coercion or data loss. + * + * Host boundaries still validate values at runtime because TypeScript cannot + * exclude non-finite numbers and plugin bundles can bypass static types. + */ +type JsonValue = string | number | boolean | null | JsonValue[] | { + [key: string]: JsonValue; +}; + +/** + * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no + * side effects. The BB app imports these to keep its real implementation in + * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through + * `@bb/plugin-sdk/app`. + * + * Per-slot props are versioned contracts: additive-only within an SDK major. + */ +/** Props passed to a `homepageSection` component. */ +interface PluginHomepageSectionProps { + /** Project in view on the compose surface; null when none is selected. */ + projectId: string | null; +} +/** + * Props passed to a `settingsSection` component. + * + * Deliberately empty in V1; versioned additive like the other slot props. + */ +interface PluginSettingsSectionProps { +} +/** Props passed to a `navPanel` component (it owns its whole route). */ +interface PluginNavPanelProps { + /** + * The route remainder after the panel root, "" at the root. The panel's + * route is `/plugins///*`, so a deep link like + * `/plugins/notes/notes/work/ideas.md` renders the panel with + * `subPath: "work/ideas.md"`. Navigate within the panel via + * `useBbNavigate().toPluginPanel(path, { subPath })` — browser + * back/forward then walks panel-internal history. + */ + subPath: string; +} +/** Props passed to a panel tab opened by a `threadPanelAction`. */ +interface PluginThreadPanelProps { + threadId: string; + /** + * The JSON value the action's `openPanel` call passed (round-tripped + * through persistence, so the tab restores across reloads); null when the + * action opened the panel without params. + */ + params: JsonValue | null; +} +interface PluginPendingInteractionView { + id: string; + threadId: string; + title: string; + payload: JsonValue; + createdAt: number; + expiresAt: number | null; +} +interface PluginPendingInteractionProps { + interaction: PluginPendingInteractionView; + submit(value: JsonValue): Promise; + cancel(): Promise; +} +/** + * Props for a `sidebarFooterAction` — host-rendered (no plugin component). + * Deliberately empty; the registration's `run` carries the behavior. + */ +interface PluginSidebarFooterActionProps { +} +/** + * Where a file being opened by a `fileOpener` lives. `path` semantics follow + * the source: workspace paths are relative to the environment's worktree, + * thread-storage paths are relative to the thread's storage root, host paths + * are absolute on the thread's host. + */ +interface PluginFileOpenerSource { + kind: "workspace" | "host" | "thread-storage"; + threadId: string | null; + environmentId: string | null; + projectId: string | null; +} +/** Props passed to a `fileOpener` component (rendered as a panel file tab). */ +interface PluginFileOpenerProps { + path: string; + source: PluginFileOpenerSource; +} +/** + * Message context passed to a `messageDirective` component — the assistant + * (or nested agent) message that contained the directive. + */ +interface PluginMessageDirectiveMessage { + id: string; + threadId: string; + turnId: string | null; + projectId: string | null; +} +/** + * Open a worktree-relative file in the host's workspace file viewer. Returns + * true when the host accepted the path; false when the path is invalid or the + * viewer declined it. + */ +type PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean; +/** + * Props passed to a `messageDirective` component. Attributes are untrusted + * strings parsed from the directive; the plugin validates its own fields. + */ +interface PluginMessageDirectiveProps { + /** Parsed, untrusted directive attributes (e.g. `{ file: "demo.html" }`). */ + attributes: Readonly>; + /** Original directive source text (useful for diagnostics / crash fallback). */ + source: string; + message: PluginMessageDirectiveMessage; + /** + * Opens a worktree-relative file in the host's workspace file viewer. Null + * when the message surface has no workspace viewer available. + */ + openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null; +} +interface PluginHomepageSectionRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + title: string; + component: ComponentType; +} +interface PluginSettingsSectionRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + /** Optional host-rendered section heading. */ + title?: string; + /** + * Optional one-line host-rendered subheading under `title`, in the built-in + * SettingsSection idiom (ignored when `title` is absent). + */ + description?: string; + component: ComponentType; +} +interface PluginNavPanelRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + title: string; + /** Icon hint (BB icon name); unknown names fall back to a generic icon. */ + icon: string; + /** URL segment under `/plugins//`; letters, digits, `-`, `_`. */ + path: string; + component: ComponentType; + /** + * Optional component rendered on the right side of the shared title bar + * (e.g. a sync button or a count). Contained separately from the body: a + * throwing headerContent is hidden without breaking the title bar. + */ + headerContent?: ComponentType; +} +/** Context handed to a `threadPanelAction`'s `run`. */ +interface PluginThreadPanelActionContext { + /** The thread whose panel launcher invoked the action. */ + threadId: string; + /** + * Open a tab in the thread's side panel rendering this action's + * `component`. `title` labels the tab (default: the action's `title`); + * `params` must be JSON-serializable — it is persisted with the tab and + * reaches the component as its `params` prop. Opening with params + * identical to an already-open tab of this action focuses that tab + * (updating its title) instead of duplicating it. May be called more than + * once (different params ⇒ multiple tabs) or not at all. + */ + openPanel(options?: { + title?: string; + params?: JsonValue; + }): void; +} +interface PluginThreadPanelActionRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + /** Label of the action row in the panel's new-tab launcher. */ + title: string; + /** + * Icon hint (BB icon name) used when the plugin ships no logo; the + * launcher row and opened tabs prefer the plugin's logo. + */ + icon?: string; + /** Rendered inside every panel tab this action opens. */ + component: ComponentType; + /** + * How the host frames the tab content. "padded" (default) wraps the + * component in the panel's scroll container with standard padding — + * right for document-like content. "flush" gives the component the full + * tab area (no padding, definite height, no host scrolling) — right for + * app-like content that manages its own layout, such as + * `ThreadChat`. + */ + layout?: "padded" | "flush"; + /** + * Runs when the user activates the action: call your RPC methods, show a + * toast, and/or open panel tabs via `context.openPanel`. Omitted = + * immediately open a panel tab with defaults. Errors (sync or async) are + * contained and logged; they never break the launcher. + */ + run?(context: PluginThreadPanelActionContext): void | Promise; +} +interface PluginPendingInteractionRegistration { + /** Matches `rendererId` passed to `bb.ui.requestInput`. */ + id: string; + component: ComponentType; +} +/** Context handed to a `sidebarFooterAction`'s `run`. */ +interface PluginSidebarFooterActionContext { + /** + * Navigate to this plugin's detail page in Tools, where declarative settings + * and `settingsSection` slots render. + */ + openSettings(): void; +} +/** + * An icon button in the app sidebar footer (next to Settings / bug report). + * Host-rendered for consistent chrome — plugins supply icon, label, and + * `run` behavior only. + */ +interface PluginSidebarFooterActionRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + /** Tooltip and accessible label for the icon button. */ + title: string; + /** Icon hint (BB icon name); unknown names fall back to a generic icon. */ + icon: string; + /** + * Runs when the user activates the action (e.g. call `openSettings()`, + * open a panel via other surfaces, toast). Errors (sync or async) are + * contained and logged; they never break the sidebar. + */ + run(context: PluginSidebarFooterActionContext): void | Promise; +} +/** + * Register this plugin as a viewer/editor for file extensions. The user + * picks (and can set as default) an opener per extension via the file tab's + * "Open with" menu; matching files opened in the panel then render + * `component` in a plugin tab instead of the built-in preview. Applies to + * working-tree, host, and thread-storage files — never to git-ref snapshots + * (diff views always use the built-in preview). The built-in preview stays + * one menu click away, and a missing/disabled opener falls back to it. + */ +interface PluginFileOpenerRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + /** Label in the "Open with" menu (e.g. "Notes editor"). */ + title: string; + /** Lowercase extensions without the dot (e.g. ["md", "mdx"]). */ + extensions: readonly string[]; + component: ComponentType; +} +/** + * Register a leaf message directive rendered inside assistant (and nested + * agent) message Markdown. `id` is the directive name: `inline-vis` matches + * `::inline-vis{file="demo.html"}`. + */ +interface PluginMessageDirectiveRegistration { + /** + * The directive name. Lowercase kebab-case beginning with a letter. + */ + id: string; + component: ComponentType; +} +/** + * A narrow, stable reference to one rendered chat message — NOT an internal + * timeline row. `sourceSeqEnd` is the last source event sequence the message + * covers, the anchor the server accepts for provider-history forks. + */ +interface ThreadChatMessageReference { + id: string; + threadId: string; + role: "user" | "assistant"; + /** Visible text of the message. */ + text: string; + sourceSeqEnd: number; +} +interface PluginMessageActionThreadPanelOptions { + /** A `threadPanelAction` id registered by this same plugin. */ + actionId: string; + title?: string; + params?: JsonValue; +} +/** Context handed to a `messageAction`'s `run`. */ +interface PluginMessageActionContext { + /** The thread whose timeline surfaced the action. */ + threadId: string; + message: ThreadChatMessageReference; + /** + * Present only when the action was invoked from the text-selection menu; + * the exact text the user highlighted inside `message`. + */ + selectedText?: string; + /** + * Open one of this plugin's `threadPanelAction` components in the current + * thread's side panel — the registration-callback equivalent of + * `useBbNavigate().openThreadPanel`. Returns true when the host + * accepted (the action id exists and the surface has a panel); false + * otherwise. + */ + openPanel(options: PluginMessageActionThreadPanelOptions): boolean; +} +/** + * An action on chat messages: an icon button in the per-message action bar + * (user and assistant messages) and an entry in the assistant-message + * text-selection menu. Host-rendered chrome — the plugin supplies title, + * icon hint, and `run` behavior only. + */ +interface PluginMessageActionRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + /** Tooltip / menu label for the action. */ + title: string; + /** Icon hint (BB icon name); unknown names fall back to a generic icon. */ + icon?: string; + /** + * Runs when the user activates the action. Errors (sync or async) are + * contained and logged; they never break the timeline. + */ + run(context: PluginMessageActionContext): void | Promise; +} +interface PluginAppSlots { + homepageSection(registration: PluginHomepageSectionRegistration): void; + settingsSection(registration: PluginSettingsSectionRegistration): void; + navPanel(registration: PluginNavPanelRegistration): void; + threadPanelAction(registration: PluginThreadPanelActionRegistration): void; + pendingInteraction(registration: PluginPendingInteractionRegistration): void; + sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void; + fileOpener(registration: PluginFileOpenerRegistration): void; + messageDirective(registration: PluginMessageDirectiveRegistration): void; + messageAction(registration: PluginMessageActionRegistration): void; +} +interface PluginAppComposer { + customize(registration: ComposerCustomization): void; +} +/** Stable lifecycle values for one content-script instance in one bb client. */ +interface PluginContentScriptContext { + /** The id of the plugin that owns this script. */ + readonly pluginId: string; + /** Monotonic per-client generation, starting at 1. */ + readonly generation: number; + /** Aborted before cleanup begins on replacement, deactivation, or teardown. */ + readonly signal: AbortSignal; +} +/** Cleanup returned by a frontend content script. */ +type PluginContentScriptDisposer = () => void | Promise; +/** + * Trusted same-origin JavaScript/TypeScript mounted once per active frontend + * generation in each bb app window or browser tab. + */ +interface PluginContentScriptRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + /** + * Install behavior into the bb app shell. The host awaits a returned + * promise, contains failures, and calls the returned disposer exactly once. + */ + mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise; +} +/** Lifecycle surface for trusted frontend content scripts. */ +interface PluginAppContentScripts { + register(registration: PluginContentScriptRegistration): void; +} +interface PluginAppBuilder { + slots: PluginAppSlots; + composer: PluginAppComposer; + contentScripts: PluginAppContentScripts; +} +type PluginAppSetup = (app: PluginAppBuilder) => void; +/** + * The opaque product of `definePluginApp` — a plugin's `app.tsx` default + * export. The host re-runs `setup` against a fresh collector on every + * (re)interpretation, replacing that plugin's registrations wholesale. + */ +interface PluginAppDefinition { + /** Brand the host checks before interpreting a bundle's default export. */ + readonly __bbPluginApp: true; + readonly setup: PluginAppSetup; +} +interface PluginRpcClient { + /** + * Invoke one of the plugin's `bb.rpc` methods (POST + * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's + * inferred output; rejects with an `Error` carrying the server's message, + * stable `code`, and validation `issues` when present. + */ + call>(method: Method, ...args: PluginRpcCallArgs): Promise>; +} +interface PluginSettingsState { + /** + * Effective non-secret setting values (secret settings are excluded — + * read them server-side). Undefined while loading or unavailable. + */ + values: Record | undefined; + isLoading: boolean; +} +/** State of the app's shared realtime connection to the bb server. */ +type PluginRealtimeConnectionState = "connecting" | "connected" | "reconnecting"; +/** Where `useComposer()` writes. */ +type PluginComposerScope = { + kind: "thread"; + threadId: string; +} | { + kind: "queued-message"; + threadId: string; + queuedMessageId: string; +} | { + kind: "side-chat"; + projectId: string; + parentThreadId: string; + tabId: string; + childThreadId: string | null; +} | { + kind: "new-thread"; + /** Root compose's effective selected project; null only while unresolved. */ + projectId: string | null; +}; +/** One plugin-owned composer customization registration. */ +interface ComposerCustomization { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + /** Composer kinds where this customization is active; omit for all kinds. */ + scopes?: readonly PluginComposerScope["kind"][]; + actions?: readonly { + id: string; + component: ComponentType; + }[]; + banners?: readonly { + id: string; + /** Host chrome around the banner. Defaults to `"card"`. */ + chrome?: "card" | "bare"; + component: ComponentType; + }[]; + plusMenu?: readonly ComposerPlusMenuItem[]; + richText?: ComposerRichTextSpec; +} +/** Host-rendered menu row in the composer's `+` menu. */ +interface ComposerPlusMenuItem { + id: string; + label: string; + /** BB icon name; unknown names fall back to the generic plugin icon. */ + icon?: string; + /** Accessible description for the host-rendered row. */ + description?: string; + disabled?: boolean | ((view: ComposerView) => boolean); + run(context: { + composer: PluginComposerApi; + view: ComposerView; + }): void | Promise; +} +/** Reactive read-side of the composer a plugin surface is mounted in. */ +interface ComposerView { + scope: PluginComposerScope; + layout: "expanded" | "compact" | "zen"; + draft: { + text: string; + isEmpty: boolean; + attachmentCount: number; + }; + run: { + isRunning: boolean; + isSubmitting: boolean; + }; +} +interface ComposerRichTextSpec { + /** Content-derived paint: match ranges receive `className`; text is never mutated. */ + effects?: readonly { + id: string; + /** Plain-text offsets into the current structured draft. */ + match(text: string): readonly { + from: number; + to: number; + }[]; + className: string; + }[]; + /** Debounced, read-only observation of the structured draft. */ + onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void; +} +interface ComposerStructuredDraft { + text: string; + mentions: readonly { + from: number; + to: number; + provider: string; + id: string; + label: string; + }[]; +} +/** Host-rendered paint applied to the editable composer text. */ +interface PluginComposerTextEffect { + className: string; +} +/** Host-rendered status that temporarily replaces a thread's draft glyph. */ +interface PluginComposerThreadRowStatus { + /** BB icon-name hint; unknown names fall back to the generic plugin icon. */ + icon: string; + /** Accessible label for the status glyph. */ + label: string; + /** + * Semantic host treatment for the status glyph. `running` automatically + * shimmers; terminal `success` and `error` tones are static. Defaults to the + * neutral tone. + */ + tone?: "default" | "running" | "success" | "error"; +} +/** An @-mention pill bound to one of the calling plugin's mention providers. */ +interface PluginComposerMention { + /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */ + provider: string; + /** Item id your provider's `resolve` will receive at send time. */ + id: string; + /** Pill text shown in the composer. */ + label: string; +} +/** + * Programmatic access to the chat composer draft — the same shared draft the + * built-in "Add to chat" affordances (file preview, diff, terminal selections) + * write to. While a queued message is being edited, writes land in that + * message's inline editor. In a side chat, writes land in the visible side-chat + * draft. Otherwise, inside a thread context writes land in that thread's draft; + * anywhere else (nav panel, homepage section) they seed the new-thread composer + * draft, which persists until the user sends or clears it. + */ +interface PluginComposerApi { + scope: PluginComposerScope; + /** Current plain text for this composer scope. */ + readonly text: string; + /** + * Replace the draft's plain text. Attachments are preserved. Inline mentions + * outside the changed range are preserved and rebased; mentions overlapped + * by the replacement are removed because their text representation changed. + */ + setText(next: string): void; + /** + * Replace the draft's plain text from the latest committed value. Uses the + * same structured-state reconciliation as `setText`. + */ + updateText(updater: (current: string) => string): void; + /** Clear plain text without clearing independently attached files. */ + clear(): void; + /** + * Apply a host-rendered effect to this composer's editable text, or clear it. + * Effects are scoped to the calling plugin and automatically clear when the + * slot unmounts or its composer scope changes. + */ + setTextEffect(effect: PluginComposerTextEffect | null): void; + /** + * Lock or unlock editing for this composer. Locks are scoped to the calling + * plugin and automatically release when the slot unmounts or its composer + * scope changes. + */ + setInputLock(locked: boolean): void; + /** + * Replace this composer's thread-row draft glyph with a host-rendered status, + * or clear it. New-thread composers have no row, so calls are a no-op. + * Side-chat and queued side-chat scopes decorate the visible parent-thread + * row. Status is scoped to the calling plugin and automatically clears when + * the slot unmounts or its composer scope changes. + */ + setThreadRowStatus(status: PluginComposerThreadRowStatus | null): void; + /** + * Append text to the draft as a `> ` blockquote block and focus the + * composer. Blank text is a no-op. This is the "reference this selection + * in chat" primitive. + */ + addQuote(text: string): void; + /** + * Insert an @-mention pill that resolves through this plugin's mention + * provider at send time — the durable way to reference an entity whose + * content should be fetched fresh when the message is sent. + */ + insertMention(mention: PluginComposerMention): void; + /** Focus the composer caret at the end of the draft. */ + focus(): void; +} +/** + * A consumer-supplied action on the messages of one `ThreadChat` instance, + * rendered in the embedded timeline's per-message action bar alongside the + * native and slot-registered actions. Unlike the `messageAction` slot this is + * scoped to the rendering component, not registered globally. + */ +interface ThreadChatMessageAction { + /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */ + id: string; + /** Tooltip / menu label for the action. */ + title: string; + /** Icon hint (BB icon name); unknown names fall back to a generic icon. */ + icon?: string; + /** + * Message roles the action applies to. Omitted = both user and assistant + * messages. + */ + roles?: readonly ("user" | "assistant")[]; + /** + * Runs when the user activates the action. Errors (sync or async) are + * contained and logged; they never break the timeline. + */ + run(message: ThreadChatMessageReference): void | Promise; +} +/** + * Props of the host-owned `ThreadChat` component — one thread's chat + * (timeline, and for the composer variants the full send/queue/draft + * engine), rendered by the BB app inside a plugin slot. This is the + * deliberate exception to the no-host-components rule (§5.5): a stable + * product capability, not a UI kit. Versioned additive like slot props; + * internal timeline rows, query hooks, and prompt-box configuration are + * deliberately not exposed. + */ +interface ThreadChatProps { + threadId: string; + /** + * "full" (default) is the page presentation (centered reading width); + * "compact" is the side-panel presentation; "timeline" renders the + * transcript without a composer. + */ + variant?: "full" | "compact" | "timeline"; + /** + * "contained" (default) fills and scrolls inside a bounded parent; + * "document" grows with its content and defers scrolling to the page. + */ + layout?: "contained" | "document"; + /** Bump to focus the composer (ignored by `variant: "timeline"`). */ + focusRequest?: number; + /** + * Who controls the permission mode sends run with. "inherit" (default) + * pins every send to the thread's own resolved default and renders the + * picker as a dimmed label — a plugin surface can never widen it. + * "editable" gives this chat its own picker, so the user can raise or + * lower permissions for this thread independently of the thread it was + * forked from. Ignored by `variant: "timeline"` (no composer). + */ + permissionPolicy?: "inherit" | "editable"; + className?: string; + /** Rendered above the conversation, scrolling with it. */ + leadingContent?: ReactNode; + /** + * Actions rendered in this instance's per-message action bar (see + * {@link ThreadChatMessageAction}). + */ + messageActions?: readonly ThreadChatMessageAction[]; +} +/** + * Props of the host-owned `Markdown` component — bb's chat message renderer + * (the same typography, spacing, and code styling as timeline messages). + * Use it wherever plugin UI quotes or previews message content so it reads + * like the rest of the chat. Like `ThreadChat`, this is a stable product + * capability, not a UI kit; renderer internals stay private. + */ +interface MarkdownProps { + /** Markdown source, rendered exactly like a chat message body. */ + content: string; + className?: string; +} +/** Current app selection, derived from the route. */ +interface BbContext { + projectId: string | null; + threadId: string | null; +} +interface BbNavigate { + toThread(threadId: string): void; + toProject(projectId: string): void; + /** + * Navigate to one of this plugin's own nav panels by its `path`. + * `subPath` targets a location inside the panel (the component's + * `subPath` prop); `replace` swaps the current history entry instead of + * pushing — use it for redirects so back does not bounce. + */ + toPluginPanel(path: string, options?: { + subPath?: string; + replace?: boolean; + }): void; + /** + * Navigate to the root compose surface (the new-thread screen). Pass + * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the + * composer on arrival — the pairing behind "Create via chat" style entry + * points that drop the user into chat with a prefilled prompt. + */ + toCompose(options?: { + initialPrompt?: string; + focusPrompt?: boolean; + }): void; + /** + * Open one of this plugin's registered thread-panel actions in the current + * thread surface. Returns false when the surface has no thread side panel or + * the action is unavailable. + */ + openThreadPanel(options: { + actionId: string; + title?: string; + params?: JsonValue; + }): boolean; +} +/** + * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds + * the real implementation and `satisfies` this interface; `bb plugin build` + * shims the specifier to that object on `globalThis.__bbPluginRuntime`. + */ +interface PluginSdkApp { + definePluginApp(setup: PluginAppSetup): PluginAppDefinition; + useRpc(): PluginRpcClient; + useRealtime(channel: string, handler: (payload: unknown) => void): void; + /** + * Observe the same shared connection that delivers `useRealtime` signals. + * Use a subsequent transition to `connected` to reconcile server state that + * may have changed while ephemeral signals could not be delivered. The first + * connection can transition from `connecting` and is not a reconnection. + */ + useRealtimeConnectionState(): PluginRealtimeConnectionState; + useSettings(): PluginSettingsState; + useBbContext(): BbContext; + useBbNavigate(): BbNavigate; + useComposer(): PluginComposerApi; + /** + * The host-owned chat component (see {@link ThreadChatProps}). Together + * with `Markdown`, the only components the SDK ships — everything else + * stays vendored per §5.5. + */ + ThreadChat: ComponentType; + /** + * The host-owned chat-message markdown renderer (see + * {@link MarkdownProps}). + */ + Markdown: ComponentType; + useComposerView(): ComposerView; +} + +declare const definePluginApp: (setup: PluginAppSetup) => PluginAppDefinition; +declare const ThreadChat: react.ComponentType; +declare const Markdown: react.ComponentType; +declare const useRpc: , StandardSchemaV1>>>>() => PluginRpcClient; +declare const useRealtime: (channel: string, handler: (payload: unknown) => void) => void; +declare const useRealtimeConnectionState: () => PluginRealtimeConnectionState; +declare const useSettings: () => PluginSettingsState; +declare const useBbContext: () => BbContext; +declare const useBbNavigate: () => BbNavigate; +declare const useComposer: () => PluginComposerApi; +declare const useComposerView: () => ComposerView; + +export { Markdown, ThreadChat, definePluginApp, useBbContext, useBbNavigate, useComposer, useComposerView, useRealtime, useRealtimeConnectionState, useRpc, useSettings }; +export type { BbContext, BbNavigate, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue, MarkdownProps, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtimeConnectionState, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps }; diff --git a/plugins/moss-notes/types/bb-plugin-sdk.d.ts b/plugins/moss-notes/types/bb-plugin-sdk.d.ts new file mode 100644 index 0000000..aa4ea0e --- /dev/null +++ b/plugins/moss-notes/types/bb-plugin-sdk.d.ts @@ -0,0 +1,12111 @@ +// Portable type declarations for `@bb/plugin-sdk`. Unpublished BB +// workspace contracts are flattened; public subpaths may reuse the +// package root without requiring any other @bb/* package. +// +// Confused by the API, or need a symbol that isn't here? Clone the BB repo +// and read the real source: https://github.com/ymichael/bb + +import { ComponentType, ReactNode } from 'react'; +import Database from 'better-sqlite3'; +import { Context } from 'hono'; +import * as z from 'zod'; +import { z as z$1 } from 'zod'; + +/** + * A value that survives a JSON round trip without coercion or data loss. + * + * Host boundaries still validate values at runtime because TypeScript cannot + * exclude non-finite numbers and plugin bundles can bypass static types. + */ +type JsonValue$1 = string | number | boolean | null | JsonValue$1[] | { + [key: string]: JsonValue$1; +}; + +/** A JSON-safe path segment reported by a Standard Schema validation issue. */ +type PluginRpcIssuePathSegment = string | number; +/** Validator-neutral validation detail carried by an RPC error envelope. */ +interface PluginRpcValidationIssue { + message: string; + path?: PluginRpcIssuePathSegment[]; +} +/** Stable wire error categories for plugin RPC. */ +type PluginRpcErrorCode = "invalid_json" | "invalid_input" | "handler_error" | "invalid_output" | "non_json_result" | "unknown_method"; +/** Structured RPC failure returned as `{ ok: false, error }`. */ +interface PluginRpcError { + code: PluginRpcErrorCode; + message: string; + issues?: PluginRpcValidationIssue[]; +} +/** + * The validator-neutral subset of Standard Schema v1 used by plugin RPC. + * Zod 4 schemas implement this interface directly; other validators can do + * the same without becoming part of BB's public protocol. + */ +interface StandardSchemaV1 { + readonly "~standard": { + readonly version: 1; + readonly vendor: string; + readonly validate: (value: unknown) => StandardSchemaV1Result | Promise>; + readonly types?: { + readonly input: Input; + readonly output: Output; + }; + }; +} +type StandardSchemaV1Result = { + readonly value: Output; + readonly issues?: undefined; +} | { + readonly issues: readonly StandardSchemaV1Issue[]; +}; +interface StandardSchemaV1Issue { + readonly message: string; + readonly path?: PropertyKey | readonly (PropertyKey | { + readonly key: PropertyKey; + })[]; +} +type StandardSchemaV1InferInput = NonNullable["input"]; +type StandardSchemaV1InferOutput = NonNullable["output"]; +interface PluginRpcMethodContract { + readonly input: InputSchema; + readonly output: OutputSchema; +} +type PluginRpcContract = Readonly>; +/** Define a shared RPC contract while preserving exact method/schema types. */ +declare function defineRpcContract(contract: Contract): Contract; +type PluginRpcHandlers = { + [Method in keyof Contract]: (input: StandardSchemaV1InferOutput) => StandardSchemaV1InferInput | Promise>; +}; +type PluginRpcCallInput = StandardSchemaV1InferInput; +type PluginRpcCallArgs = null extends PluginRpcCallInput ? [input?: PluginRpcCallInput] : [input: PluginRpcCallInput]; +type PluginRpcResult = StandardSchemaV1InferOutput; + +/** + * The `@bb/plugin-sdk/app` contract (plugin design §5.2) — pure types with no + * side effects. The BB app imports these to keep its real implementation in + * sync (`satisfies PluginSdkApp`). Plugin authors import the same shapes through + * `@bb/plugin-sdk/app`. + * + * Per-slot props are versioned contracts: additive-only within an SDK major. + */ +/** Props passed to a `homepageSection` component. */ +interface PluginHomepageSectionProps { + /** Project in view on the compose surface; null when none is selected. */ + projectId: string | null; +} +/** + * Props passed to a `settingsSection` component. + * + * Deliberately empty in V1; versioned additive like the other slot props. + */ +interface PluginSettingsSectionProps { +} +/** Props passed to a `navPanel` component (it owns its whole route). */ +interface PluginNavPanelProps { + /** + * The route remainder after the panel root, "" at the root. The panel's + * route is `/plugins///*`, so a deep link like + * `/plugins/notes/notes/work/ideas.md` renders the panel with + * `subPath: "work/ideas.md"`. Navigate within the panel via + * `useBbNavigate().toPluginPanel(path, { subPath })` — browser + * back/forward then walks panel-internal history. + */ + subPath: string; +} +/** Props passed to a panel tab opened by a `threadPanelAction`. */ +interface PluginThreadPanelProps { + threadId: string; + /** + * The JSON value the action's `openPanel` call passed (round-tripped + * through persistence, so the tab restores across reloads); null when the + * action opened the panel without params. + */ + params: JsonValue$1 | null; +} +interface PluginPendingInteractionView { + id: string; + threadId: string; + title: string; + payload: JsonValue$1; + createdAt: number; + expiresAt: number | null; +} +interface PluginPendingInteractionProps { + interaction: PluginPendingInteractionView; + submit(value: JsonValue$1): Promise; + cancel(): Promise; +} +/** + * Props for a `sidebarFooterAction` — host-rendered (no plugin component). + * Deliberately empty; the registration's `run` carries the behavior. + */ +interface PluginSidebarFooterActionProps { +} +/** + * Where a file being opened by a `fileOpener` lives. `path` semantics follow + * the source: workspace paths are relative to the environment's worktree, + * thread-storage paths are relative to the thread's storage root, host paths + * are absolute on the thread's host. + */ +interface PluginFileOpenerSource { + kind: "workspace" | "host" | "thread-storage"; + threadId: string | null; + environmentId: string | null; + projectId: string | null; +} +/** Props passed to a `fileOpener` component (rendered as a panel file tab). */ +interface PluginFileOpenerProps { + path: string; + source: PluginFileOpenerSource; +} +/** + * Message context passed to a `messageDirective` component — the assistant + * (or nested agent) message that contained the directive. + */ +interface PluginMessageDirectiveMessage { + id: string; + threadId: string; + turnId: string | null; + projectId: string | null; +} +/** + * Open a worktree-relative file in the host's workspace file viewer. Returns + * true when the host accepted the path; false when the path is invalid or the + * viewer declined it. + */ +type PluginMessageDirectiveOpenWorkspaceFile = (path: string) => boolean; +/** + * Props passed to a `messageDirective` component. Attributes are untrusted + * strings parsed from the directive; the plugin validates its own fields. + */ +interface PluginMessageDirectiveProps { + /** Parsed, untrusted directive attributes (e.g. `{ file: "demo.html" }`). */ + attributes: Readonly>; + /** Original directive source text (useful for diagnostics / crash fallback). */ + source: string; + message: PluginMessageDirectiveMessage; + /** + * Opens a worktree-relative file in the host's workspace file viewer. Null + * when the message surface has no workspace viewer available. + */ + openWorkspaceFile: PluginMessageDirectiveOpenWorkspaceFile | null; +} +interface PluginHomepageSectionRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + title: string; + component: ComponentType; +} +interface PluginSettingsSectionRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + /** Optional host-rendered section heading. */ + title?: string; + /** + * Optional one-line host-rendered subheading under `title`, in the built-in + * SettingsSection idiom (ignored when `title` is absent). + */ + description?: string; + component: ComponentType; +} +interface PluginNavPanelRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + title: string; + /** Icon hint (BB icon name); unknown names fall back to a generic icon. */ + icon: string; + /** URL segment under `/plugins//`; letters, digits, `-`, `_`. */ + path: string; + component: ComponentType; + /** + * Optional component rendered on the right side of the shared title bar + * (e.g. a sync button or a count). Contained separately from the body: a + * throwing headerContent is hidden without breaking the title bar. + */ + headerContent?: ComponentType; +} +/** Context handed to a `threadPanelAction`'s `run`. */ +interface PluginThreadPanelActionContext { + /** The thread whose panel launcher invoked the action. */ + threadId: string; + /** + * Open a tab in the thread's side panel rendering this action's + * `component`. `title` labels the tab (default: the action's `title`); + * `params` must be JSON-serializable — it is persisted with the tab and + * reaches the component as its `params` prop. Opening with params + * identical to an already-open tab of this action focuses that tab + * (updating its title) instead of duplicating it. May be called more than + * once (different params ⇒ multiple tabs) or not at all. + */ + openPanel(options?: { + title?: string; + params?: JsonValue$1; + }): void; +} +interface PluginThreadPanelActionRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + /** Label of the action row in the panel's new-tab launcher. */ + title: string; + /** + * Icon hint (BB icon name) used when the plugin ships no logo; the + * launcher row and opened tabs prefer the plugin's logo. + */ + icon?: string; + /** Rendered inside every panel tab this action opens. */ + component: ComponentType; + /** + * How the host frames the tab content. "padded" (default) wraps the + * component in the panel's scroll container with standard padding — + * right for document-like content. "flush" gives the component the full + * tab area (no padding, definite height, no host scrolling) — right for + * app-like content that manages its own layout, such as + * `ThreadChat`. + */ + layout?: "padded" | "flush"; + /** + * Runs when the user activates the action: call your RPC methods, show a + * toast, and/or open panel tabs via `context.openPanel`. Omitted = + * immediately open a panel tab with defaults. Errors (sync or async) are + * contained and logged; they never break the launcher. + */ + run?(context: PluginThreadPanelActionContext): void | Promise; +} +interface PluginPendingInteractionRegistration { + /** Matches `rendererId` passed to `bb.ui.requestInput`. */ + id: string; + component: ComponentType; +} +/** Context handed to a `sidebarFooterAction`'s `run`. */ +interface PluginSidebarFooterActionContext { + /** + * Navigate to this plugin's detail page in Tools, where declarative settings + * and `settingsSection` slots render. + */ + openSettings(): void; +} +/** + * An icon button in the app sidebar footer (next to Settings / bug report). + * Host-rendered for consistent chrome — plugins supply icon, label, and + * `run` behavior only. + */ +interface PluginSidebarFooterActionRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + /** Tooltip and accessible label for the icon button. */ + title: string; + /** Icon hint (BB icon name); unknown names fall back to a generic icon. */ + icon: string; + /** + * Runs when the user activates the action (e.g. call `openSettings()`, + * open a panel via other surfaces, toast). Errors (sync or async) are + * contained and logged; they never break the sidebar. + */ + run(context: PluginSidebarFooterActionContext): void | Promise; +} +/** + * Register this plugin as a viewer/editor for file extensions. The user + * picks (and can set as default) an opener per extension via the file tab's + * "Open with" menu; matching files opened in the panel then render + * `component` in a plugin tab instead of the built-in preview. Applies to + * working-tree, host, and thread-storage files — never to git-ref snapshots + * (diff views always use the built-in preview). The built-in preview stays + * one menu click away, and a missing/disabled opener falls back to it. + */ +interface PluginFileOpenerRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + /** Label in the "Open with" menu (e.g. "Notes editor"). */ + title: string; + /** Lowercase extensions without the dot (e.g. ["md", "mdx"]). */ + extensions: readonly string[]; + component: ComponentType; +} +/** + * Register a leaf message directive rendered inside assistant (and nested + * agent) message Markdown. `id` is the directive name: `inline-vis` matches + * `::inline-vis{file="demo.html"}`. + */ +interface PluginMessageDirectiveRegistration { + /** + * The directive name. Lowercase kebab-case beginning with a letter. + */ + id: string; + component: ComponentType; +} +/** + * A narrow, stable reference to one rendered chat message — NOT an internal + * timeline row. `sourceSeqEnd` is the last source event sequence the message + * covers, the anchor the server accepts for provider-history forks. + */ +interface ThreadChatMessageReference { + id: string; + threadId: string; + role: "user" | "assistant"; + /** Visible text of the message. */ + text: string; + sourceSeqEnd: number; +} +interface PluginMessageActionThreadPanelOptions { + /** A `threadPanelAction` id registered by this same plugin. */ + actionId: string; + title?: string; + params?: JsonValue$1; +} +/** Context handed to a `messageAction`'s `run`. */ +interface PluginMessageActionContext { + /** The thread whose timeline surfaced the action. */ + threadId: string; + message: ThreadChatMessageReference; + /** + * Present only when the action was invoked from the text-selection menu; + * the exact text the user highlighted inside `message`. + */ + selectedText?: string; + /** + * Open one of this plugin's `threadPanelAction` components in the current + * thread's side panel — the registration-callback equivalent of + * `useBbNavigate().openThreadPanel`. Returns true when the host + * accepted (the action id exists and the surface has a panel); false + * otherwise. + */ + openPanel(options: PluginMessageActionThreadPanelOptions): boolean; +} +/** + * An action on chat messages: an icon button in the per-message action bar + * (user and assistant messages) and an entry in the assistant-message + * text-selection menu. Host-rendered chrome — the plugin supplies title, + * icon hint, and `run` behavior only. + */ +interface PluginMessageActionRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + /** Tooltip / menu label for the action. */ + title: string; + /** Icon hint (BB icon name); unknown names fall back to a generic icon. */ + icon?: string; + /** + * Runs when the user activates the action. Errors (sync or async) are + * contained and logged; they never break the timeline. + */ + run(context: PluginMessageActionContext): void | Promise; +} +interface PluginAppSlots { + homepageSection(registration: PluginHomepageSectionRegistration): void; + settingsSection(registration: PluginSettingsSectionRegistration): void; + navPanel(registration: PluginNavPanelRegistration): void; + threadPanelAction(registration: PluginThreadPanelActionRegistration): void; + pendingInteraction(registration: PluginPendingInteractionRegistration): void; + sidebarFooterAction(registration: PluginSidebarFooterActionRegistration): void; + fileOpener(registration: PluginFileOpenerRegistration): void; + messageDirective(registration: PluginMessageDirectiveRegistration): void; + messageAction(registration: PluginMessageActionRegistration): void; +} +interface PluginAppComposer { + customize(registration: ComposerCustomization): void; +} +/** Stable lifecycle values for one content-script instance in one bb client. */ +interface PluginContentScriptContext { + /** The id of the plugin that owns this script. */ + readonly pluginId: string; + /** Monotonic per-client generation, starting at 1. */ + readonly generation: number; + /** Aborted before cleanup begins on replacement, deactivation, or teardown. */ + readonly signal: AbortSignal; +} +/** Cleanup returned by a frontend content script. */ +type PluginContentScriptDisposer = () => void | Promise; +/** + * Trusted same-origin JavaScript/TypeScript mounted once per active frontend + * generation in each bb app window or browser tab. + */ +interface PluginContentScriptRegistration { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + /** + * Install behavior into the bb app shell. The host awaits a returned + * promise, contains failures, and calls the returned disposer exactly once. + */ + mount(context: PluginContentScriptContext): void | PluginContentScriptDisposer | Promise; +} +/** Lifecycle surface for trusted frontend content scripts. */ +interface PluginAppContentScripts { + register(registration: PluginContentScriptRegistration): void; +} +interface PluginAppBuilder { + slots: PluginAppSlots; + composer: PluginAppComposer; + contentScripts: PluginAppContentScripts; +} +type PluginAppSetup = (app: PluginAppBuilder) => void; +/** + * The opaque product of `definePluginApp` — a plugin's `app.tsx` default + * export. The host re-runs `setup` against a fresh collector on every + * (re)interpretation, replacing that plugin's registrations wholesale. + */ +interface PluginAppDefinition { + /** Brand the host checks before interpreting a bundle's default export. */ + readonly __bbPluginApp: true; + readonly setup: PluginAppSetup; +} +interface PluginRpcClient { + /** + * Invoke one of the plugin's `bb.rpc` methods (POST + * /api/v1/plugins/<id>/rpc/<method>). Resolves with the method's + * inferred output; rejects with an `Error` carrying the server's message, + * stable `code`, and validation `issues` when present. + */ + call>(method: Method, ...args: PluginRpcCallArgs): Promise>; +} +interface PluginSettingsState { + /** + * Effective non-secret setting values (secret settings are excluded — + * read them server-side). Undefined while loading or unavailable. + */ + values: Record | undefined; + isLoading: boolean; +} +/** State of the app's shared realtime connection to the bb server. */ +type PluginRealtimeConnectionState = "connecting" | "connected" | "reconnecting"; +/** Where `useComposer()` writes. */ +type PluginComposerScope = { + kind: "thread"; + threadId: string; +} | { + kind: "queued-message"; + threadId: string; + queuedMessageId: string; +} | { + kind: "side-chat"; + projectId: string; + parentThreadId: string; + tabId: string; + childThreadId: string | null; +} | { + kind: "new-thread"; + /** Root compose's effective selected project; null only while unresolved. */ + projectId: string | null; +}; +/** One plugin-owned composer customization registration. */ +interface ComposerCustomization { + /** Unique within the plugin; letters, digits, `-`, `_`. */ + id: string; + /** Composer kinds where this customization is active; omit for all kinds. */ + scopes?: readonly PluginComposerScope["kind"][]; + actions?: readonly { + id: string; + component: ComponentType; + }[]; + banners?: readonly { + id: string; + /** Host chrome around the banner. Defaults to `"card"`. */ + chrome?: "card" | "bare"; + component: ComponentType; + }[]; + plusMenu?: readonly ComposerPlusMenuItem[]; + richText?: ComposerRichTextSpec; +} +/** Host-rendered menu row in the composer's `+` menu. */ +interface ComposerPlusMenuItem { + id: string; + label: string; + /** BB icon name; unknown names fall back to the generic plugin icon. */ + icon?: string; + /** Accessible description for the host-rendered row. */ + description?: string; + disabled?: boolean | ((view: ComposerView) => boolean); + run(context: { + composer: PluginComposerApi; + view: ComposerView; + }): void | Promise; +} +/** Reactive read-side of the composer a plugin surface is mounted in. */ +interface ComposerView { + scope: PluginComposerScope; + layout: "expanded" | "compact" | "zen"; + draft: { + text: string; + isEmpty: boolean; + attachmentCount: number; + }; + run: { + isRunning: boolean; + isSubmitting: boolean; + }; +} +interface ComposerRichTextSpec { + /** Content-derived paint: match ranges receive `className`; text is never mutated. */ + effects?: readonly { + id: string; + /** Plain-text offsets into the current structured draft. */ + match(text: string): readonly { + from: number; + to: number; + }[]; + className: string; + }[]; + /** Debounced, read-only observation of the structured draft. */ + onDraftChange?(draft: ComposerStructuredDraft, view: ComposerView): void; +} +interface ComposerStructuredDraft { + text: string; + mentions: readonly { + from: number; + to: number; + provider: string; + id: string; + label: string; + }[]; +} +/** Host-rendered paint applied to the editable composer text. */ +interface PluginComposerTextEffect { + className: string; +} +/** Host-rendered status that temporarily replaces a thread's draft glyph. */ +interface PluginComposerThreadRowStatus { + /** BB icon-name hint; unknown names fall back to the generic plugin icon. */ + icon: string; + /** Accessible label for the status glyph. */ + label: string; + /** + * Semantic host treatment for the status glyph. `running` automatically + * shimmers; terminal `success` and `error` tones are static. Defaults to the + * neutral tone. + */ + tone?: "default" | "running" | "success" | "error"; +} +/** An @-mention pill bound to one of the calling plugin's mention providers. */ +interface PluginComposerMention { + /** Mention provider id registered by THIS plugin via `bb.ui.registerMentionProvider`. */ + provider: string; + /** Item id your provider's `resolve` will receive at send time. */ + id: string; + /** Pill text shown in the composer. */ + label: string; +} +/** + * Programmatic access to the chat composer draft — the same shared draft the + * built-in "Add to chat" affordances (file preview, diff, terminal selections) + * write to. While a queued message is being edited, writes land in that + * message's inline editor. In a side chat, writes land in the visible side-chat + * draft. Otherwise, inside a thread context writes land in that thread's draft; + * anywhere else (nav panel, homepage section) they seed the new-thread composer + * draft, which persists until the user sends or clears it. + */ +interface PluginComposerApi { + scope: PluginComposerScope; + /** Current plain text for this composer scope. */ + readonly text: string; + /** + * Replace the draft's plain text. Attachments are preserved. Inline mentions + * outside the changed range are preserved and rebased; mentions overlapped + * by the replacement are removed because their text representation changed. + */ + setText(next: string): void; + /** + * Replace the draft's plain text from the latest committed value. Uses the + * same structured-state reconciliation as `setText`. + */ + updateText(updater: (current: string) => string): void; + /** Clear plain text without clearing independently attached files. */ + clear(): void; + /** + * Apply a host-rendered effect to this composer's editable text, or clear it. + * Effects are scoped to the calling plugin and automatically clear when the + * slot unmounts or its composer scope changes. + */ + setTextEffect(effect: PluginComposerTextEffect | null): void; + /** + * Lock or unlock editing for this composer. Locks are scoped to the calling + * plugin and automatically release when the slot unmounts or its composer + * scope changes. + */ + setInputLock(locked: boolean): void; + /** + * Replace this composer's thread-row draft glyph with a host-rendered status, + * or clear it. New-thread composers have no row, so calls are a no-op. + * Side-chat and queued side-chat scopes decorate the visible parent-thread + * row. Status is scoped to the calling plugin and automatically clears when + * the slot unmounts or its composer scope changes. + */ + setThreadRowStatus(status: PluginComposerThreadRowStatus | null): void; + /** + * Append text to the draft as a `> ` blockquote block and focus the + * composer. Blank text is a no-op. This is the "reference this selection + * in chat" primitive. + */ + addQuote(text: string): void; + /** + * Insert an @-mention pill that resolves through this plugin's mention + * provider at send time — the durable way to reference an entity whose + * content should be fetched fresh when the message is sent. + */ + insertMention(mention: PluginComposerMention): void; + /** Focus the composer caret at the end of the draft. */ + focus(): void; +} +/** + * A consumer-supplied action on the messages of one `ThreadChat` instance, + * rendered in the embedded timeline's per-message action bar alongside the + * native and slot-registered actions. Unlike the `messageAction` slot this is + * scoped to the rendering component, not registered globally. + */ +interface ThreadChatMessageAction { + /** Unique within this ThreadChat instance; letters, digits, `-`, `_`. */ + id: string; + /** Tooltip / menu label for the action. */ + title: string; + /** Icon hint (BB icon name); unknown names fall back to a generic icon. */ + icon?: string; + /** + * Message roles the action applies to. Omitted = both user and assistant + * messages. + */ + roles?: readonly ("user" | "assistant")[]; + /** + * Runs when the user activates the action. Errors (sync or async) are + * contained and logged; they never break the timeline. + */ + run(message: ThreadChatMessageReference): void | Promise; +} +/** + * Props of the host-owned `ThreadChat` component — one thread's chat + * (timeline, and for the composer variants the full send/queue/draft + * engine), rendered by the BB app inside a plugin slot. This is the + * deliberate exception to the no-host-components rule (§5.5): a stable + * product capability, not a UI kit. Versioned additive like slot props; + * internal timeline rows, query hooks, and prompt-box configuration are + * deliberately not exposed. + */ +interface ThreadChatProps { + threadId: string; + /** + * "full" (default) is the page presentation (centered reading width); + * "compact" is the side-panel presentation; "timeline" renders the + * transcript without a composer. + */ + variant?: "full" | "compact" | "timeline"; + /** + * "contained" (default) fills and scrolls inside a bounded parent; + * "document" grows with its content and defers scrolling to the page. + */ + layout?: "contained" | "document"; + /** Bump to focus the composer (ignored by `variant: "timeline"`). */ + focusRequest?: number; + /** + * Who controls the permission mode sends run with. "inherit" (default) + * pins every send to the thread's own resolved default and renders the + * picker as a dimmed label — a plugin surface can never widen it. + * "editable" gives this chat its own picker, so the user can raise or + * lower permissions for this thread independently of the thread it was + * forked from. Ignored by `variant: "timeline"` (no composer). + */ + permissionPolicy?: "inherit" | "editable"; + className?: string; + /** Rendered above the conversation, scrolling with it. */ + leadingContent?: ReactNode; + /** + * Actions rendered in this instance's per-message action bar (see + * {@link ThreadChatMessageAction}). + */ + messageActions?: readonly ThreadChatMessageAction[]; +} +/** + * Props of the host-owned `Markdown` component — bb's chat message renderer + * (the same typography, spacing, and code styling as timeline messages). + * Use it wherever plugin UI quotes or previews message content so it reads + * like the rest of the chat. Like `ThreadChat`, this is a stable product + * capability, not a UI kit; renderer internals stay private. + */ +interface MarkdownProps { + /** Markdown source, rendered exactly like a chat message body. */ + content: string; + className?: string; +} +/** Current app selection, derived from the route. */ +interface BbContext { + projectId: string | null; + threadId: string | null; +} +interface BbNavigate { + toThread(threadId: string): void; + toProject(projectId: string): void; + /** + * Navigate to one of this plugin's own nav panels by its `path`. + * `subPath` targets a location inside the panel (the component's + * `subPath` prop); `replace` swaps the current history entry instead of + * pushing — use it for redirects so back does not bounce. + */ + toPluginPanel(path: string, options?: { + subPath?: string; + replace?: boolean; + }): void; + /** + * Navigate to the root compose surface (the new-thread screen). Pass + * `initialPrompt` to seed the composer draft and `focusPrompt` to focus the + * composer on arrival — the pairing behind "Create via chat" style entry + * points that drop the user into chat with a prefilled prompt. + */ + toCompose(options?: { + initialPrompt?: string; + focusPrompt?: boolean; + }): void; + /** + * Open one of this plugin's registered thread-panel actions in the current + * thread surface. Returns false when the surface has no thread side panel or + * the action is unavailable. + */ + openThreadPanel(options: { + actionId: string; + title?: string; + params?: JsonValue$1; + }): boolean; +} +/** + * Everything `@bb/plugin-sdk/app` resolves to at runtime. The BB app builds + * the real implementation and `satisfies` this interface; `bb plugin build` + * shims the specifier to that object on `globalThis.__bbPluginRuntime`. + */ +interface PluginSdkApp { + definePluginApp(setup: PluginAppSetup): PluginAppDefinition; + useRpc(): PluginRpcClient; + useRealtime(channel: string, handler: (payload: unknown) => void): void; + /** + * Observe the same shared connection that delivers `useRealtime` signals. + * Use a subsequent transition to `connected` to reconcile server state that + * may have changed while ephemeral signals could not be delivered. The first + * connection can transition from `connecting` and is not a reconnection. + */ + useRealtimeConnectionState(): PluginRealtimeConnectionState; + useSettings(): PluginSettingsState; + useBbContext(): BbContext; + useBbNavigate(): BbNavigate; + useComposer(): PluginComposerApi; + /** + * The host-owned chat component (see {@link ThreadChatProps}). Together + * with `Markdown`, the only components the SDK ships — everything else + * stays vendored per §5.5. + */ + ThreadChat: ComponentType; + /** + * The host-owned chat-message markdown renderer (see + * {@link MarkdownProps}). + */ + Markdown: ComponentType; + useComposerView(): ComposerView; +} + +/** + * App-wide server-backed preferences. + * Client-local settings stay in the frontend localStorage helpers instead. + */ +declare const appSettingsSchema: z$1.ZodObject<{ + caffeinate: z$1.ZodBoolean; + showKeyboardHints: z$1.ZodBoolean; + steerActiveThreadOnEnter: z$1.ZodBoolean; + showUnhandledProviderEvents: z$1.ZodBoolean; + codexMemoryEnabled: z$1.ZodBoolean; + claudeCodeMemoryEnabled: z$1.ZodBoolean; + codexSubagentsDisabled: z$1.ZodBoolean; + claudeCodeSubagentsDisabled: z$1.ZodBoolean; + claudeCodeWorkflowsDisabled: z$1.ZodBoolean; +}, z$1.core.$strict>; +type AppSettings = z$1.infer; + +declare const appKeybindingOverridesSchema: z$1.ZodArray; + shortcut: z$1.ZodNullable>; +}, z$1.core.$strict>>; +type AppKeybindingOverrides = z$1.infer; + +declare const appThemeSchema: z$1.ZodObject<{ + themeId: z$1.ZodString; + customCss: z$1.ZodNullable; + faviconColor: z$1.ZodEnum<{ + default: "default"; + red: "red"; + orange: "orange"; + yellow: "yellow"; + green: "green"; + teal: "teal"; + blue: "blue"; + purple: "purple"; + pink: "pink"; + }>; +}, z$1.core.$strip>; +type AppTheme = z$1.infer; +/** + * The complete appearance selection a client sends when changing the palette + * and/or favicon tint. The server validates `themeId` (built-in id or an + * existing custom theme) and resolves the CSS from disk for custom themes. + * Callers changing only one facet must carry the other facet forward explicitly. + */ +declare const appThemeSelectionSchema: z$1.ZodObject<{ + themeId: z$1.ZodString; + faviconColor: z$1.ZodEnum<{ + default: "default"; + red: "red"; + orange: "orange"; + yellow: "yellow"; + green: "green"; + teal: "teal"; + blue: "blue"; + purple: "purple"; + pink: "pink"; + }>; +}, z$1.core.$strip>; +type AppThemeSelection = z$1.infer; + +declare const changedMessageSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + type: z$1.ZodLiteral<"changed">; + entity: z$1.ZodLiteral<"thread">; + id: z$1.ZodOptional; + metadata: z$1.ZodOptional; + eventTypes: z$1.ZodOptional>>>>; + hasPendingInteraction: z$1.ZodOptional; + projectId: z$1.ZodOptional; + }, z$1.core.$strict>>; + changes: z$1.ZodReadonly>>; +}, z$1.core.$strict>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"changed">; + entity: z$1.ZodLiteral<"project">; + id: z$1.ZodOptional; + changes: z$1.ZodReadonly>>; +}, z$1.core.$strict>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"changed">; + entity: z$1.ZodLiteral<"environment">; + id: z$1.ZodOptional; + changes: z$1.ZodReadonly>>; +}, z$1.core.$strict>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"changed">; + entity: z$1.ZodLiteral<"host">; + id: z$1.ZodOptional; + changes: z$1.ZodReadonly>>; +}, z$1.core.$strict>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"changed">; + entity: z$1.ZodLiteral<"system">; + changes: z$1.ZodReadonly>>; +}, z$1.core.$strict>], "entity">; +type ChangedMessage = z$1.infer; + +declare const environmentSchema: z$1.ZodObject<{ + id: z$1.ZodString; + name: z$1.ZodNullable; + projectId: z$1.ZodString; + hostId: z$1.ZodString; + path: z$1.ZodNullable; + managed: z$1.ZodBoolean; + isGitRepo: z$1.ZodBoolean; + isWorktree: z$1.ZodBoolean; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + branchName: z$1.ZodNullable; + baseBranch: z$1.ZodNullable; + defaultBranch: z$1.ZodNullable; + mergeBaseBranch: z$1.ZodNullable; + status: z$1.ZodEnum<{ + error: "error"; + provisioning: "provisioning"; + ready: "ready"; + retiring: "retiring"; + destroying: "destroying"; + destroyed: "destroyed"; + }>; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; +}, z$1.core.$strip>; +type Environment = z$1.infer; + +/** + * User-opt-in experiments (the Settings → Experiments toggles). Distinct from + * `FeatureFlags`: flags are operator-set via env at server start, experiments + * are user-toggled at runtime and persisted server-side so server-owned + * policy (e.g. skill injection) can honor them. + * + * Every experiment defaults to off — opting in is the point. + */ +declare const experimentsSchema: z$1.ZodObject<{ + claudeCodeMockCliTraffic: z$1.ZodBoolean; + toolsHub: z$1.ZodBoolean; + sideChatPlugin: z$1.ZodBoolean; +}, z$1.core.$strip>; +type Experiments = z$1.infer; + +declare const hostSchema: z$1.ZodObject<{ + id: z$1.ZodString; + name: z$1.ZodString; + type: z$1.ZodEnum<{ + persistent: "persistent"; + }>; + status: z$1.ZodEnum<{ + connected: "connected"; + disconnected: "disconnected"; + }>; + lastSeenAt: z$1.ZodNullable; + lastRejectedProtocolVersion: z$1.ZodNullable; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; +}, z$1.core.$strip>; +type Host = z$1.infer; + +interface JsonObject { + [key: string]: JsonValue; +} +type JsonValue = string | number | boolean | null | JsonValue[] | JsonObject; + +declare const pendingInteractionResolutionSchema: z$1.ZodUnion; + grantedPermissions: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>>; +}, z$1.core.$strip>, z$1.ZodObject<{ + decision: z$1.ZodLiteral<"allow_for_session">; + grantedPermissions: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>>; +}, z$1.core.$strip>, z$1.ZodObject<{ + decision: z$1.ZodLiteral<"deny">; +}, z$1.core.$strip>], "decision">, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"user_answer">; + answers: z$1.ZodRecord; + freeText: z$1.ZodOptional; + }, z$1.core.$strip>>; +}, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin_submitted">; +}, z$1.core.$strip>]>; +type PendingInteractionResolution = z$1.infer; +declare const providerPendingInteractionSchema: z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + status: z$1.ZodEnum<{ + pending: "pending"; + interrupted: "interrupted"; + resolving: "resolving"; + resolved: "resolved"; + }>; + statusReason: z$1.ZodNullable; + createdAt: z$1.ZodNumber; + expiresAt: z$1.ZodOptional>; + resolvedAt: z$1.ZodNullable; + turnId: z$1.ZodString; + providerId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerRequestId: z$1.ZodString; + origin: z$1.ZodOptional; + providerId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerRequestId: z$1.ZodString; + }, z$1.core.$strip>>; + payload: z$1.ZodUnion; + subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + itemId: z$1.ZodString; + command: z$1.ZodString; + cwd: z$1.ZodNullable; + actions: z$1.ZodArray; + command: z$1.ZodString; + name: z$1.ZodString; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"listFiles">; + command: z$1.ZodString; + path: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"search">; + command: z$1.ZodString; + query: z$1.ZodNullable; + path: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"unknown">; + command: z$1.ZodString; + }, z$1.core.$strip>], "type">>; + sessionGrant: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"file_change">; + itemId: z$1.ZodString; + writeScope: z$1.ZodNullable; + sessionGrant: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"permission_grant">; + itemId: z$1.ZodString; + toolName: z$1.ZodNullable; + permissions: z$1.ZodObject<{ + network: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>; + }, z$1.core.$strip>], "kind">; + reason: z$1.ZodNullable; + availableDecisions: z$1.ZodArray>; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"user_question">; + questions: z$1.ZodArray; + multiSelect: z$1.ZodBoolean; + options: z$1.ZodOptional; + }, z$1.core.$strip>>>; + allowFreeText: z$1.ZodBoolean; + }, z$1.core.$strip>>; + }, z$1.core.$strip>]>; + resolution: z$1.ZodNullable; + grantedPermissions: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + decision: z$1.ZodLiteral<"allow_for_session">; + grantedPermissions: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + decision: z$1.ZodLiteral<"deny">; + }, z$1.core.$strip>], "decision">, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"user_answer">; + answers: z$1.ZodRecord; + freeText: z$1.ZodOptional; + }, z$1.core.$strip>>; + }, z$1.core.$strip>]>>; +}, z$1.core.$strip>; +type ProviderPendingInteraction = z$1.infer; +declare const pluginPendingInteractionSchema: z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + status: z$1.ZodEnum<{ + pending: "pending"; + interrupted: "interrupted"; + resolving: "resolving"; + resolved: "resolved"; + }>; + statusReason: z$1.ZodNullable; + createdAt: z$1.ZodNumber; + expiresAt: z$1.ZodOptional>; + resolvedAt: z$1.ZodNullable; + turnId: z$1.ZodNullable; + origin: z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + rendererId: z$1.ZodString; + }, z$1.core.$strip>; + payload: z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + title: z$1.ZodString; + data: z$1.ZodType>; + }, z$1.core.$strip>; + resolution: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type PluginPendingInteraction = z$1.infer; +type PendingInteraction = ProviderPendingInteraction | PluginPendingInteraction; + +declare const projectSourceSchema: z$1.ZodObject<{ + id: z$1.ZodString; + projectId: z$1.ZodString; + isDefault: z$1.ZodBoolean; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + type: z$1.ZodLiteral<"local_path">; + hostId: z$1.ZodString; + path: z$1.ZodString; +}, z$1.core.$strip>; +type ProjectSource = z$1.infer; + +declare const resolvedThreadExecutionOptionsSchema: z$1.ZodObject<{ + seq: z$1.ZodOptional; + model: z$1.ZodString; + serviceTier: z$1.ZodEnum<{ + default: "default"; + fast: "fast"; + }>; + reasoningLevel: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + permissionMode: z$1.ZodEnum<{ + full: "full"; + auto: "auto"; + "accept-edits": "accept-edits"; + }>; + source: z$1.ZodEnum<{ + "client/thread/start": "client/thread/start"; + "client/turn/requested": "client/turn/requested"; + "client/turn/start": "client/turn/start"; + }>; +}, z$1.core.$strip>; +type ResolvedThreadExecutionOptions = z$1.infer; +declare const projectExecutionDefaultsSchema: z$1.ZodObject<{ + providerId: z$1.ZodString; + model: z$1.ZodString; + serviceTier: z$1.ZodEnum<{ + default: "default"; + fast: "fast"; + }>; + reasoningLevel: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + permissionMode: z$1.ZodEnum<{ + full: "full"; + auto: "auto"; + "accept-edits": "accept-edits"; + }>; +}, z$1.core.$strip>; +type ProjectExecutionDefaults = z$1.infer; + +/** All thread events — provider-originated or system-originated. */ +declare const threadEventSchema: z$1.ZodPipe; + threadId: z$1.ZodString; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"thread/identity">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"turn/started">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + parentToolCallId: z$1.ZodOptional; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"turn/completed">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodNullable; + status: z$1.ZodEnum<{ + completed: "completed"; + failed: "failed"; + interrupted: "interrupted"; + }>; + error: z$1.ZodOptional>; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"turn/input/accepted">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + clientRequestId: z$1.ZodString; + scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"turn">; + turnId: z$1.ZodString; + }, z$1.core.$strip>], "kind">; +}, z$1.core.$strict>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"thread/name/updated">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + threadName: z$1.ZodString; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"thread/compacted">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"thread/goal/updated">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + objective: z$1.ZodString; + status: z$1.ZodEnum<{ + paused: "paused"; + active: "active"; + budgetLimited: "budgetLimited"; + complete: "complete"; + }>; + tokenBudget: z$1.ZodNullable; + tokensUsed: z$1.ZodNumber; + timeUsedSeconds: z$1.ZodNumber; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"thread/goal/cleared">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"item/started">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + type: z$1.ZodLiteral<"userMessage">; + id: z$1.ZodString; + content: z$1.ZodArray; + text: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + }, z$1.core.$strip>], "type">>; + clientRequestId: z$1.ZodOptional; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strict>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"agentMessage">; + id: z$1.ZodString; + text: z$1.ZodString; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"commandExecution">; + id: z$1.ZodString; + command: z$1.ZodString; + cwd: z$1.ZodString; + status: z$1.ZodEnum<{ + pending: "pending"; + completed: "completed"; + failed: "failed"; + interrupted: "interrupted"; + }>; + approvalStatus: z$1.ZodNullable>; + aggregatedOutput: z$1.ZodOptional; + exitCode: z$1.ZodOptional; + durationMs: z$1.ZodOptional; + truncation: z$1.ZodOptional>; + result: z$1.ZodOptional>; + resultText: z$1.ZodOptional>; + }, z$1.core.$strip>>; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"fileChange">; + id: z$1.ZodString; + changes: z$1.ZodArray; + movePath: z$1.ZodOptional; + diff: z$1.ZodOptional; + }, z$1.core.$strip>>; + status: z$1.ZodEnum<{ + pending: "pending"; + completed: "completed"; + failed: "failed"; + interrupted: "interrupted"; + }>; + approvalStatus: z$1.ZodNullable>; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"webSearch">; + id: z$1.ZodString; + queries: z$1.ZodArray; + resultText: z$1.ZodNullable; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"webFetch">; + id: z$1.ZodString; + url: z$1.ZodString; + prompt: z$1.ZodNullable; + pattern: z$1.ZodNullable; + resultText: z$1.ZodNullable; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"imageView">; + id: z$1.ZodString; + path: z$1.ZodString; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"toolCall">; + id: z$1.ZodString; + server: z$1.ZodOptional; + tool: z$1.ZodString; + arguments: z$1.ZodOptional>; + status: z$1.ZodEnum<{ + pending: "pending"; + completed: "completed"; + failed: "failed"; + interrupted: "interrupted"; + }>; + result: z$1.ZodOptional; + error: z$1.ZodOptional; + durationMs: z$1.ZodOptional; + truncation: z$1.ZodOptional>; + result: z$1.ZodOptional>; + resultText: z$1.ZodOptional>; + }, z$1.core.$strip>>; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"reasoning">; + id: z$1.ZodString; + summary: z$1.ZodArray; + content: z$1.ZodArray; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"plan">; + id: z$1.ZodString; + text: z$1.ZodString; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"contextCompaction">; + id: z$1.ZodString; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"backgroundTask">; + id: z$1.ZodString; + taskType: z$1.ZodString; + description: z$1.ZodString; + status: z$1.ZodEnum<{ + pending: "pending"; + completed: "completed"; + failed: "failed"; + interrupted: "interrupted"; + }>; + taskStatus: z$1.ZodEnum<{ + pending: "pending"; + running: "running"; + paused: "paused"; + completed: "completed"; + failed: "failed"; + killed: "killed"; + stopped: "stopped"; + }>; + skipTranscript: z$1.ZodBoolean; + workflowName: z$1.ZodOptional; + workflow: z$1.ZodOptional; + }, z$1.core.$strip>>; + agents: z$1.ZodArray; + model: z$1.ZodString; + attempt: z$1.ZodNumber; + cached: z$1.ZodBoolean; + lastProgressAt: z$1.ZodNumber; + phaseIndex: z$1.ZodOptional; + phaseTitle: z$1.ZodOptional; + agentType: z$1.ZodOptional; + isolation: z$1.ZodOptional; + queuedAt: z$1.ZodOptional; + startedAt: z$1.ZodOptional; + lastToolName: z$1.ZodOptional; + lastToolSummary: z$1.ZodOptional; + promptPreview: z$1.ZodOptional; + resultPreview: z$1.ZodOptional; + error: z$1.ZodOptional; + tokens: z$1.ZodOptional; + toolCalls: z$1.ZodOptional; + durationMs: z$1.ZodOptional; + }, z$1.core.$strip>>; + }, z$1.core.$strip>>; + usage: z$1.ZodOptional>; + summary: z$1.ZodOptional; + error: z$1.ZodOptional; + outputFile: z$1.ZodOptional; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>], "type">; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"item/completed">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + item: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + type: z$1.ZodLiteral<"userMessage">; + id: z$1.ZodString; + content: z$1.ZodArray; + text: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + }, z$1.core.$strip>], "type">>; + clientRequestId: z$1.ZodOptional; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strict>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"agentMessage">; + id: z$1.ZodString; + text: z$1.ZodString; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"commandExecution">; + id: z$1.ZodString; + command: z$1.ZodString; + cwd: z$1.ZodString; + status: z$1.ZodEnum<{ + pending: "pending"; + completed: "completed"; + failed: "failed"; + interrupted: "interrupted"; + }>; + approvalStatus: z$1.ZodNullable>; + aggregatedOutput: z$1.ZodOptional; + exitCode: z$1.ZodOptional; + durationMs: z$1.ZodOptional; + truncation: z$1.ZodOptional>; + result: z$1.ZodOptional>; + resultText: z$1.ZodOptional>; + }, z$1.core.$strip>>; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"fileChange">; + id: z$1.ZodString; + changes: z$1.ZodArray; + movePath: z$1.ZodOptional; + diff: z$1.ZodOptional; + }, z$1.core.$strip>>; + status: z$1.ZodEnum<{ + pending: "pending"; + completed: "completed"; + failed: "failed"; + interrupted: "interrupted"; + }>; + approvalStatus: z$1.ZodNullable>; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"webSearch">; + id: z$1.ZodString; + queries: z$1.ZodArray; + resultText: z$1.ZodNullable; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"webFetch">; + id: z$1.ZodString; + url: z$1.ZodString; + prompt: z$1.ZodNullable; + pattern: z$1.ZodNullable; + resultText: z$1.ZodNullable; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"imageView">; + id: z$1.ZodString; + path: z$1.ZodString; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"toolCall">; + id: z$1.ZodString; + server: z$1.ZodOptional; + tool: z$1.ZodString; + arguments: z$1.ZodOptional>; + status: z$1.ZodEnum<{ + pending: "pending"; + completed: "completed"; + failed: "failed"; + interrupted: "interrupted"; + }>; + result: z$1.ZodOptional; + error: z$1.ZodOptional; + durationMs: z$1.ZodOptional; + truncation: z$1.ZodOptional>; + result: z$1.ZodOptional>; + resultText: z$1.ZodOptional>; + }, z$1.core.$strip>>; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"reasoning">; + id: z$1.ZodString; + summary: z$1.ZodArray; + content: z$1.ZodArray; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"plan">; + id: z$1.ZodString; + text: z$1.ZodString; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"contextCompaction">; + id: z$1.ZodString; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"backgroundTask">; + id: z$1.ZodString; + taskType: z$1.ZodString; + description: z$1.ZodString; + status: z$1.ZodEnum<{ + pending: "pending"; + completed: "completed"; + failed: "failed"; + interrupted: "interrupted"; + }>; + taskStatus: z$1.ZodEnum<{ + pending: "pending"; + running: "running"; + paused: "paused"; + completed: "completed"; + failed: "failed"; + killed: "killed"; + stopped: "stopped"; + }>; + skipTranscript: z$1.ZodBoolean; + workflowName: z$1.ZodOptional; + workflow: z$1.ZodOptional; + }, z$1.core.$strip>>; + agents: z$1.ZodArray; + model: z$1.ZodString; + attempt: z$1.ZodNumber; + cached: z$1.ZodBoolean; + lastProgressAt: z$1.ZodNumber; + phaseIndex: z$1.ZodOptional; + phaseTitle: z$1.ZodOptional; + agentType: z$1.ZodOptional; + isolation: z$1.ZodOptional; + queuedAt: z$1.ZodOptional; + startedAt: z$1.ZodOptional; + lastToolName: z$1.ZodOptional; + lastToolSummary: z$1.ZodOptional; + promptPreview: z$1.ZodOptional; + resultPreview: z$1.ZodOptional; + error: z$1.ZodOptional; + tokens: z$1.ZodOptional; + toolCalls: z$1.ZodOptional; + durationMs: z$1.ZodOptional; + }, z$1.core.$strip>>; + }, z$1.core.$strip>>; + usage: z$1.ZodOptional>; + summary: z$1.ZodOptional; + error: z$1.ZodOptional; + outputFile: z$1.ZodOptional; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>], "type">; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"item/agentMessage/delta">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + itemId: z$1.ZodString; + delta: z$1.ZodString; + parentToolCallId: z$1.ZodOptional; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"item/commandExecution/outputDelta">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + itemId: z$1.ZodString; + delta: z$1.ZodString; + reset: z$1.ZodOptional; + parentToolCallId: z$1.ZodOptional; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"item/fileChange/outputDelta">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + itemId: z$1.ZodString; + delta: z$1.ZodString; + parentToolCallId: z$1.ZodOptional; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"item/reasoning/summaryTextDelta">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + itemId: z$1.ZodString; + delta: z$1.ZodString; + parentToolCallId: z$1.ZodOptional; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"item/reasoning/textDelta">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + itemId: z$1.ZodString; + delta: z$1.ZodString; + parentToolCallId: z$1.ZodOptional; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"item/plan/delta">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + itemId: z$1.ZodString; + delta: z$1.ZodString; + parentToolCallId: z$1.ZodOptional; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"item/mcpToolCall/progress">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + itemId: z$1.ZodString; + message: z$1.ZodOptional; + parentToolCallId: z$1.ZodOptional; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"item/toolCall/progress">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + itemId: z$1.ZodString; + message: z$1.ZodOptional; + parentToolCallId: z$1.ZodOptional; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"item/backgroundTask/progress">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + item: z$1.ZodObject<{ + type: z$1.ZodLiteral<"backgroundTask">; + id: z$1.ZodString; + taskType: z$1.ZodString; + description: z$1.ZodString; + status: z$1.ZodEnum<{ + pending: "pending"; + completed: "completed"; + failed: "failed"; + interrupted: "interrupted"; + }>; + taskStatus: z$1.ZodEnum<{ + pending: "pending"; + running: "running"; + paused: "paused"; + completed: "completed"; + failed: "failed"; + killed: "killed"; + stopped: "stopped"; + }>; + skipTranscript: z$1.ZodBoolean; + workflowName: z$1.ZodOptional; + workflow: z$1.ZodOptional; + }, z$1.core.$strip>>; + agents: z$1.ZodArray; + model: z$1.ZodString; + attempt: z$1.ZodNumber; + cached: z$1.ZodBoolean; + lastProgressAt: z$1.ZodNumber; + phaseIndex: z$1.ZodOptional; + phaseTitle: z$1.ZodOptional; + agentType: z$1.ZodOptional; + isolation: z$1.ZodOptional; + queuedAt: z$1.ZodOptional; + startedAt: z$1.ZodOptional; + lastToolName: z$1.ZodOptional; + lastToolSummary: z$1.ZodOptional; + promptPreview: z$1.ZodOptional; + resultPreview: z$1.ZodOptional; + error: z$1.ZodOptional; + tokens: z$1.ZodOptional; + toolCalls: z$1.ZodOptional; + durationMs: z$1.ZodOptional; + }, z$1.core.$strip>>; + }, z$1.core.$strip>>; + usage: z$1.ZodOptional>; + summary: z$1.ZodOptional; + error: z$1.ZodOptional; + outputFile: z$1.ZodOptional; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"item/backgroundTask/completed">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + item: z$1.ZodObject<{ + type: z$1.ZodLiteral<"backgroundTask">; + id: z$1.ZodString; + taskType: z$1.ZodString; + description: z$1.ZodString; + status: z$1.ZodEnum<{ + pending: "pending"; + completed: "completed"; + failed: "failed"; + interrupted: "interrupted"; + }>; + taskStatus: z$1.ZodEnum<{ + pending: "pending"; + running: "running"; + paused: "paused"; + completed: "completed"; + failed: "failed"; + killed: "killed"; + stopped: "stopped"; + }>; + skipTranscript: z$1.ZodBoolean; + workflowName: z$1.ZodOptional; + workflow: z$1.ZodOptional; + }, z$1.core.$strip>>; + agents: z$1.ZodArray; + model: z$1.ZodString; + attempt: z$1.ZodNumber; + cached: z$1.ZodBoolean; + lastProgressAt: z$1.ZodNumber; + phaseIndex: z$1.ZodOptional; + phaseTitle: z$1.ZodOptional; + agentType: z$1.ZodOptional; + isolation: z$1.ZodOptional; + queuedAt: z$1.ZodOptional; + startedAt: z$1.ZodOptional; + lastToolName: z$1.ZodOptional; + lastToolSummary: z$1.ZodOptional; + promptPreview: z$1.ZodOptional; + resultPreview: z$1.ZodOptional; + error: z$1.ZodOptional; + tokens: z$1.ZodOptional; + toolCalls: z$1.ZodOptional; + durationMs: z$1.ZodOptional; + }, z$1.core.$strip>>; + }, z$1.core.$strip>>; + usage: z$1.ZodOptional>; + summary: z$1.ZodOptional; + error: z$1.ZodOptional; + outputFile: z$1.ZodOptional; + parentToolCallId: z$1.ZodOptional; + }, z$1.core.$strip>; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"thread/tokenUsage/updated">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + tokenUsage: z$1.ZodObject<{ + total: z$1.ZodObject<{ + totalTokens: z$1.ZodNumber; + inputTokens: z$1.ZodNumber; + cachedInputTokens: z$1.ZodNumber; + outputTokens: z$1.ZodNumber; + reasoningOutputTokens: z$1.ZodNumber; + }, z$1.core.$strip>; + last: z$1.ZodObject<{ + totalTokens: z$1.ZodNumber; + inputTokens: z$1.ZodNumber; + cachedInputTokens: z$1.ZodNumber; + outputTokens: z$1.ZodNumber; + reasoningOutputTokens: z$1.ZodNumber; + }, z$1.core.$strip>; + modelContextWindow: z$1.ZodNullable; + }, z$1.core.$strip>; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"thread/contextWindowUsage/updated">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + contextWindowUsage: z$1.ZodObject<{ + usedTokens: z$1.ZodNullable; + modelContextWindow: z$1.ZodNullable; + estimated: z$1.ZodBoolean; + }, z$1.core.$strip>; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"turn/plan/updated">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + plan: z$1.ZodArray>; + }, z$1.core.$strip>>; + explanation: z$1.ZodOptional; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"turn/diff/updated">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + diff: z$1.ZodOptional; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"provider/error">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + message: z$1.ZodString; + detail: z$1.ZodOptional; + willRetry: z$1.ZodOptional; + errorInfo: z$1.ZodOptional; + providerCode: z$1.ZodNullable; + httpStatusCode: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"provider/warning">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + category: z$1.ZodEnum<{ + deprecation: "deprecation"; + config: "config"; + general: "general"; + }>; + summary: z$1.ZodOptional; + details: z$1.ZodOptional; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"provider/modelFallback">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + originalModel: z$1.ZodString; + fallbackModel: z$1.ZodString; + reason: z$1.ZodEnum<{ + refusal: "refusal"; + provider: "provider"; + }>; + message: z$1.ZodString; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"provider/unhandled">; + threadId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; + rawType: z$1.ZodString; + rawEvent: z$1.ZodObject<{ + jsonrpc: z$1.ZodLiteral<"2.0">; + id: z$1.ZodOptional>; + method: z$1.ZodString; + params: z$1.ZodOptional>>; + }, z$1.core.$strip>; + parentToolCallId: z$1.ZodOptional; +}, z$1.core.$strip>], "type">, z$1.ZodObject<{ + scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"turn">; + turnId: z$1.ZodString; + }, z$1.core.$strip>], "kind">; +}, z$1.core.$strip>>, z$1.ZodIntersection; + threadId: z$1.ZodString; + direction: z$1.ZodLiteral<"outbound">; + source: z$1.ZodEnum<{ + spawn: "spawn"; + tell: "tell"; + }>; + initiator: z$1.ZodEnum<{ + system: "system"; + user: "user"; + agent: "agent"; + }>; + request: z$1.ZodObject<{ + method: z$1.ZodEnum<{ + "thread/start": "thread/start"; + "turn/start": "turn/start"; + }>; + params: z$1.ZodRecord; + }, z$1.core.$strip>; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"client/turn/requested">; + threadId: z$1.ZodString; + direction: z$1.ZodLiteral<"outbound">; + requestId: z$1.ZodString; + source: z$1.ZodEnum<{ + spawn: "spawn"; + tell: "tell"; + }>; + initiator: z$1.ZodEnum<{ + system: "system"; + user: "user"; + agent: "agent"; + }>; + senderThreadId: z$1.ZodNullable; + systemMessageKind: z$1.ZodOptional>; + systemMessageSubject: z$1.ZodOptional; + threadId: z$1.ZodString; + threadName: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread-batch">; + count: z$1.ZodNumber; + }, z$1.core.$strip>], "kind">>>; + input: z$1.ZodArray>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>; + inputGroups: z$1.ZodOptional>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>>>; + target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread-start">; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"new-turn">; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"auto">; + expectedTurnId: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"steer">; + expectedTurnId: z$1.ZodNullable; + }, z$1.core.$strip>], "kind">; + request: z$1.ZodObject<{ + method: z$1.ZodEnum<{ + "thread/start": "thread/start"; + "turn/start": "turn/start"; + }>; + params: z$1.ZodRecord; + }, z$1.core.$strip>; + execution: z$1.ZodObject<{ + seq: z$1.ZodOptional; + model: z$1.ZodString; + serviceTier: z$1.ZodEnum<{ + default: "default"; + fast: "fast"; + }>; + reasoningLevel: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + source: z$1.ZodEnum<{ + "client/thread/start": "client/thread/start"; + "client/turn/requested": "client/turn/requested"; + "client/turn/start": "client/turn/start"; + }>; + permissionMode: z$1.ZodEnum<{ + readonly: "readonly"; + full: "full"; + auto: "auto"; + "accept-edits": "accept-edits"; + "workspace-write": "workspace-write"; + }>; + }, z$1.core.$strip>; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"client/turn/start">; + threadId: z$1.ZodString; + direction: z$1.ZodLiteral<"outbound">; + source: z$1.ZodEnum<{ + spawn: "spawn"; + tell: "tell"; + }>; + initiator: z$1.ZodEnum<{ + system: "system"; + user: "user"; + agent: "agent"; + }>; + request: z$1.ZodObject<{ + method: z$1.ZodEnum<{ + "thread/start": "thread/start"; + "turn/start": "turn/start"; + }>; + params: z$1.ZodRecord; + }, z$1.core.$strip>; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"system/error">; + threadId: z$1.ZodString; + code: z$1.ZodOptional; + message: z$1.ZodString; + detail: z$1.ZodOptional; + reconnectAttempt: z$1.ZodOptional; + reconnectTotal: z$1.ZodOptional; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"system/manager/user_message">; + threadId: z$1.ZodString; + text: z$1.ZodString; + toolCallId: z$1.ZodOptional; + turnId: z$1.ZodOptional; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"system/thread/interrupted">; + threadId: z$1.ZodString; + reason: z$1.ZodEnum<{ + "manual-stop": "manual-stop"; + "host-daemon-restarted": "host-daemon-restarted"; + "provider-turn-idle": "provider-turn-idle"; + }>; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"system/operation">; + threadId: z$1.ZodString; + operation: z$1.ZodString; + status: z$1.ZodString; + message: z$1.ZodString; + operationId: z$1.ZodString; + metadata: z$1.ZodOptional>>>; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"system/permissionGrant/lifecycle">; + threadId: z$1.ZodString; + interactionId: z$1.ZodString; + providerId: z$1.ZodString; + providerRequestId: z$1.ZodString; + status: z$1.ZodEnum<{ + pending: "pending"; + interrupted: "interrupted"; + resolving: "resolving"; + resolved: "resolved"; + }>; + resolution: z$1.ZodDefault; + grantedPermissions: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + decision: z$1.ZodLiteral<"allow_for_session">; + grantedPermissions: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + decision: z$1.ZodLiteral<"deny">; + }, z$1.core.$strip>], "decision">>>; + statusReason: z$1.ZodDefault>; + subject: z$1.ZodObject<{ + kind: z$1.ZodLiteral<"permission_grant">; + itemId: z$1.ZodString; + toolName: z$1.ZodNullable; + permissions: z$1.ZodObject<{ + network: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>; + }, z$1.core.$strip>; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"system/userQuestion/lifecycle">; + threadId: z$1.ZodString; + interactionId: z$1.ZodString; + providerId: z$1.ZodString; + providerRequestId: z$1.ZodString; + status: z$1.ZodEnum<{ + pending: "pending"; + interrupted: "interrupted"; + resolving: "resolving"; + resolved: "resolved"; + }>; + resolution: z$1.ZodDefault; + answers: z$1.ZodRecord; + freeText: z$1.ZodOptional; + }, z$1.core.$strip>>; + }, z$1.core.$strip>>>; + statusReason: z$1.ZodDefault>; + payload: z$1.ZodObject<{ + kind: z$1.ZodLiteral<"user_question">; + questions: z$1.ZodArray; + multiSelect: z$1.ZodBoolean; + options: z$1.ZodOptional; + }, z$1.core.$strip>>>; + allowFreeText: z$1.ZodBoolean; + }, z$1.core.$strip>>; + }, z$1.core.$strip>; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"system/thread-provisioning">; + threadId: z$1.ZodString; + provisioningId: z$1.ZodString; + status: z$1.ZodEnum<{ + completed: "completed"; + failed: "failed"; + active: "active"; + cancelled: "cancelled"; + }>; + environmentId: z$1.ZodString; + entries: z$1.ZodArray; + key: z$1.ZodString; + text: z$1.ZodString; + startedAt: z$1.ZodOptional; + status: z$1.ZodOptional>; + metadata: z$1.ZodOptional>; + }, z$1.core.$strip>>; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"system/provider-turn-watchdog">; + threadId: z$1.ZodString; + reason: z$1.ZodLiteral<"provider-turn-idle">; + thresholdMs: z$1.ZodNumber; + elapsedMs: z$1.ZodNumber; + activeTurnId: z$1.ZodString; + activeTurnStartedAt: z$1.ZodNumber; + lastActivityEventSequence: z$1.ZodNumber; + lastActivityEventType: z$1.ZodString; + lastActivityEventAt: z$1.ZodNumber; + providerId: z$1.ZodString; + providerThreadId: z$1.ZodNullable; + firedAt: z$1.ZodNumber; +}, z$1.core.$strip>]>, z$1.ZodObject<{ + scope: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"turn">; + turnId: z$1.ZodString; + }, z$1.core.$strip>], "kind">; +}, z$1.core.$strip>>]>>; +type ThreadEvent = z$1.infer; +type ThreadEventType = ThreadEvent["type"]; + +declare const providerInfoSchema: z$1.ZodObject<{ + id: z$1.ZodString; + displayName: z$1.ZodString; + logoUrl: z$1.ZodNullable; + capabilities: z$1.ZodObject<{ + supportsArchive: z$1.ZodBoolean; + supportsRename: z$1.ZodBoolean; + supportsServiceTier: z$1.ZodBoolean; + supportsUserQuestion: z$1.ZodBoolean; + supportsFork: z$1.ZodBoolean; + supportedPermissionModes: z$1.ZodArray>; + }, z$1.core.$strip>; + composerActions: z$1.ZodArray; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plan">; + command: z$1.ZodObject<{ + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + trailingText: z$1.ZodString; + }, z$1.core.$strip>; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"goal">; + command: z$1.ZodObject<{ + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + trailingText: z$1.ZodString; + }, z$1.core.$strip>; + }, z$1.core.$strip>], "kind">>; + available: z$1.ZodBoolean; +}, z$1.core.$strip>; +type ProviderInfo = z$1.infer; + +declare const threadEventScopeSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; +}, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"turn">; + turnId: z$1.ZodString; +}, z$1.core.$strip>], "kind">; +type ThreadEventScope = z$1.infer; + +type ThreadEventByType = { + [TType in ThreadEventType]: Extract; +}; +type ThreadEventForType = ThreadEventByType[TType]; +type StoredThreadEventDataFromEvent = Omit; +interface ThreadEventRowBase { + id: string; + scope: ThreadEventScope; + threadId: string; + seq: number; + createdAt: number; +} +type ThreadEventRowFromEvent = ThreadEventRowBase & { + type: TEvent["type"]; + data: StoredThreadEventDataFromEvent; +}; +type ThreadEventRowOfType = ThreadEventRowFromEvent>; +type ThreadEventRow = { + [TType in ThreadEventType]: ThreadEventRowOfType; +}[ThreadEventType]; + +declare const threadStatusSchema: z$1.ZodEnum<{ + error: "error"; + active: "active"; + starting: "starting"; + idle: "idle"; + stopping: "stopping"; +}>; +type ThreadStatus = z$1.infer; + +declare const threadTimelinePendingTodosSchema: z$1.ZodObject<{ + sourceSeq: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + items: z$1.ZodArray; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type ThreadTimelinePendingTodos = z$1.infer; + +declare const threadQueuedMessageSchema: z$1.ZodObject<{ + id: z$1.ZodString; + content: z$1.ZodArray>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>; + model: z$1.ZodString; + reasoningLevel: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + permissionMode: z$1.ZodEnum<{ + full: "full"; + auto: "auto"; + "accept-edits": "accept-edits"; + }>; + serviceTier: z$1.ZodEnum<{ + default: "default"; + fast: "fast"; + }>; + groupWithNext: z$1.ZodBoolean; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; +}, z$1.core.$strip>; +type ThreadQueuedMessage = z$1.infer; + +declare const workspaceFileListResponseSchema: z$1.ZodObject<{ + files: z$1.ZodArray>; + truncated: z$1.ZodBoolean; +}, z$1.core.$strip>; +type WorkspaceFileListResponse = z$1.infer; +declare const workspacePathListResponseSchema: z$1.ZodObject<{ + paths: z$1.ZodArray; + path: z$1.ZodString; + name: z$1.ZodString; + score: z$1.ZodNumber; + positions: z$1.ZodArray; + }, z$1.core.$strip>>; + truncated: z$1.ZodBoolean; +}, z$1.core.$strip>; +type WorkspacePathListResponse = z$1.infer; + +declare const createProjectSourceRequestSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + hostId: z$1.ZodString; + type: z$1.ZodLiteral<"local_path">; + path: z$1.ZodPipe>; +}, z$1.core.$strict>, z$1.ZodObject<{ + hostId: z$1.ZodString; + type: z$1.ZodLiteral<"clone">; + targetPath: z$1.ZodOptional>>; + remoteUrl: z$1.ZodOptional; +}, z$1.core.$strict>], "type">; +type CreateProjectSourceRequest = z$1.infer; +declare const createProjectRequestSchema: z$1.ZodObject<{ + name: z$1.ZodString; + source: z$1.ZodObject<{ + hostId: z$1.ZodString; + type: z$1.ZodLiteral<"local_path">; + path: z$1.ZodPipe>; + }, z$1.core.$strict>; +}, z$1.core.$strip>; +type CreateProjectRequest = z$1.infer; +declare const threadSectionSchema: z$1.ZodObject<{ + id: z$1.ZodString; + name: z$1.ZodString; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; +}, z$1.core.$strict>; +type ThreadSectionResponse = z$1.infer; +declare const createThreadSectionRequestSchema: z$1.ZodObject<{ + name: z$1.ZodString; +}, z$1.core.$strict>; +type CreateThreadSectionRequest = z$1.infer; +declare const updateThreadSectionRequestSchema: z$1.ZodObject<{ + id: z$1.ZodString; + name: z$1.ZodString; +}, z$1.core.$strict>; +type UpdateThreadSectionRequest = z$1.infer; +declare const deleteThreadSectionRequestSchema: z$1.ZodObject<{ + id: z$1.ZodString; +}, z$1.core.$strict>; +type DeleteThreadSectionRequest = z$1.infer; +declare const threadSectionMutationResponseSchema: z$1.ZodObject<{ + id: z$1.ZodString; + name: z$1.ZodString; + updatedThreadCount: z$1.ZodNumber; +}, z$1.core.$strict>; +type ThreadSectionMutationResponse = z$1.infer; +declare const reorderProjectRequestSchema: z$1.ZodObject<{ + previousProjectId: z$1.ZodNullable; + nextProjectId: z$1.ZodNullable; +}, z$1.core.$strip>; +type ReorderProjectRequest = z$1.infer; +declare const projectListQuerySchema: z$1.ZodObject<{ + include: z$1.ZodOptional; + includePersonal: z$1.ZodOptional>; +}, z$1.core.$strip>; +type ProjectListQuery = z$1.infer; +declare const projectFilesQuerySchema: z$1.ZodObject<{ + query: z$1.ZodOptional>; + limit: z$1.ZodOptional>; + hostId: z$1.ZodOptional; + environmentId: z$1.ZodOptional, z$1.ZodOptional>>; +}, z$1.core.$strip>; +type ProjectFilesQuery = z$1.infer; +declare const projectPathsQuerySchema: z$1.ZodObject<{ + query: z$1.ZodOptional>; + limit: z$1.ZodOptional>; + includeFiles: z$1.ZodEnum<{ + true: "true"; + false: "false"; + }>; + includeDirectories: z$1.ZodEnum<{ + true: "true"; + false: "false"; + }>; + hostId: z$1.ZodOptional; + environmentId: z$1.ZodOptional, z$1.ZodOptional>>; +}, z$1.core.$strip>; +type ProjectPathsQuery = z$1.infer; +declare const projectFileContentQuerySchema: z$1.ZodObject<{ + path: z$1.ZodString; + hostId: z$1.ZodOptional; + environmentId: z$1.ZodOptional, z$1.ZodOptional>>; +}, z$1.core.$strip>; +type ProjectFileContentQuery = z$1.infer; +declare const projectBranchesQuerySchema: z$1.ZodObject<{ + query: z$1.ZodOptional; + limit: z$1.ZodOptional; + hostId: z$1.ZodString; + selectedBranch: z$1.ZodOptional; +}, z$1.core.$strip>; +type ProjectBranchesQuery = z$1.infer; +declare const projectBranchesResponseSchema: z$1.ZodObject<{ + branches: z$1.ZodArray; + branchesTruncated: z$1.ZodBoolean; + checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"branch">; + branchName: z$1.ZodString; + headSha: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"detached">; + headSha: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"unborn">; + branchName: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"unknown">; + reason: z$1.ZodString; + }, z$1.core.$strip>], "kind">; + defaultBranch: z$1.ZodNullable; + defaultBranchRelation: z$1.ZodNullable>; + hasUncommittedChanges: z$1.ZodBoolean; + operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"none">; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"merge">; + hasConflicts: z$1.ZodBoolean; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"rebase">; + hasConflicts: z$1.ZodBoolean; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"cherry-pick">; + hasConflicts: z$1.ZodBoolean; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"revert">; + hasConflicts: z$1.ZodBoolean; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"unknown">; + reason: z$1.ZodString; + hasConflicts: z$1.ZodBoolean; + }, z$1.core.$strip>], "kind">; + originDefaultBranch: z$1.ZodNullable; + remoteBranches: z$1.ZodArray; + remoteBranchesTruncated: z$1.ZodBoolean; + selectedBranch: z$1.ZodNullable; + }, z$1.core.$strip>>; + defaultWorktreeBaseBranch: z$1.ZodNullable; +}, z$1.core.$strip>; +type ProjectBranchesResponse = z$1.infer; +declare const promptHistoryQuerySchema: z$1.ZodObject<{ + limit: z$1.ZodOptional; +}, z$1.core.$strip>; +type PromptHistoryQuery = z$1.infer; +declare const promptHistoryResponseSchema: z$1.ZodArray>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>; +}, z$1.core.$strip>>; +type PromptHistoryResponse = z$1.infer; +declare const updateProjectRequestSchema: z$1.ZodObject<{ + name: z$1.ZodOptional; +}, z$1.core.$strip>; +type UpdateProjectRequest = z$1.infer; +declare const updateProjectSourceRequestSchema: z$1.ZodObject<{ + type: z$1.ZodLiteral<"local_path">; + path: z$1.ZodOptional>>; + isDefault: z$1.ZodOptional>; +}, z$1.core.$strict>; +type UpdateProjectSourceRequest = z$1.infer; +declare const commandListResponseSchema: z$1.ZodObject<{ + commands: z$1.ZodArray; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + description: z$1.ZodNullable; + argumentHint: z$1.ZodNullable; + pluginId: z$1.ZodOptional; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type CommandListResponse = z$1.infer; +/** Query for the complete command catalog available to a project and provider. */ +declare const projectCommandsQuerySchema: z$1.ZodObject<{ + provider: z$1.ZodString; + hostId: z$1.ZodOptional; + environmentId: z$1.ZodOptional, z$1.ZodOptional>>; +}, z$1.core.$strict>; +type ProjectCommandsQuery = z$1.infer; +declare const skillListResponseSchema: z$1.ZodObject<{ + skills: z$1.ZodArray; + provider: z$1.ZodNullable>; + scope: z$1.ZodEnum<{ + plugin: "plugin"; + "bb-builtin": "bb-builtin"; + "bb-user": "bb-user"; + "bb-project": "bb-project"; + "claude-user": "claude-user"; + "claude-project": "claude-project"; + "codex-user": "codex-user"; + "codex-project": "codex-project"; + }>; + pluginId: z$1.ZodNullable; + filePath: z$1.ZodString; + manageable: z$1.ZodBoolean; + registrySkillId: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SkillListResponse = z$1.infer; +declare const skillContentResponseSchema: z$1.ZodObject<{ + content: z$1.ZodString; + revision: z$1.ZodString; +}, z$1.core.$strip>; +type SkillContentResponse = z$1.infer; +declare const skillFilesResponseSchema: z$1.ZodObject<{ + files: z$1.ZodArray; + truncated: z$1.ZodBoolean; +}, z$1.core.$strip>; +type SkillFilesResponse = z$1.infer; +declare const projectResponseSchema: z$1.ZodObject<{ + id: z$1.ZodString; + kind: z$1.ZodEnum<{ + personal: "personal"; + standard: "standard"; + }>; + name: z$1.ZodString; + gitRemoteUrl: z$1.ZodNullable; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + sources: z$1.ZodArray; + hostId: z$1.ZodString; + path: z$1.ZodString; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type ProjectResponse = z$1.infer; +declare const projectWithThreadsResponseSchema: z$1.ZodObject<{ + id: z$1.ZodString; + kind: z$1.ZodEnum<{ + personal: "personal"; + standard: "standard"; + }>; + name: z$1.ZodString; + gitRemoteUrl: z$1.ZodNullable; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + sources: z$1.ZodArray; + hostId: z$1.ZodString; + path: z$1.ZodString; + }, z$1.core.$strip>>; + threads: z$1.ZodArray; + providerId: z$1.ZodString; + title: z$1.ZodNullable; + titleFallback: z$1.ZodNullable; + sectionId: z$1.ZodNullable; + status: z$1.ZodEnum<{ + error: "error"; + stopping: "stopping"; + idle: "idle"; + starting: "starting"; + active: "active"; + }>; + parentThreadId: z$1.ZodNullable; + sourceThreadId: z$1.ZodNullable; + originKind: z$1.ZodNullable>; + childOrigin: z$1.ZodNullable>; + originPluginId: z$1.ZodNullable; + visibility: z$1.ZodEnum<{ + visible: "visible"; + hidden: "hidden"; + }>; + archivedAt: z$1.ZodNullable; + pinnedAt: z$1.ZodNullable; + deletedAt: z$1.ZodNullable; + lastReadAt: z$1.ZodNullable; + latestAttentionAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + runtime: z$1.ZodObject<{ + displayStatus: z$1.ZodEnum<{ + error: "error"; + provisioning: "provisioning"; + stopping: "stopping"; + idle: "idle"; + starting: "starting"; + active: "active"; + "host-reconnecting": "host-reconnecting"; + "waiting-for-host": "waiting-for-host"; + }>; + hostReconnectGraceExpiresAt: z$1.ZodNullable; + }, z$1.core.$strip>; + activity: z$1.ZodObject<{ + activeWorkflowCount: z$1.ZodNumber; + activeBackgroundAgentCount: z$1.ZodNumber; + activeBackgroundCommandCount: z$1.ZodNumber; + activePlanModeCount: z$1.ZodNumber; + activeGoalCount: z$1.ZodNumber; + }, z$1.core.$strip>; + pinSortKey: z$1.ZodNullable; + hasPendingInteraction: z$1.ZodBoolean; + environmentHostId: z$1.ZodNullable; + environmentName: z$1.ZodNullable; + environmentBranchName: z$1.ZodNullable; + environmentWorkspaceDisplayKind: z$1.ZodEnum<{ + "managed-worktree": "managed-worktree"; + "unmanaged-worktree": "unmanaged-worktree"; + other: "other"; + }>; + }, z$1.core.$strip>>; + defaultExecutionOptions: z$1.ZodNullable; + reasoningLevel: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + permissionMode: z$1.ZodEnum<{ + auto: "auto"; + "accept-edits": "accept-edits"; + full: "full"; + }>; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type ProjectWithThreadsResponse = z$1.infer; +declare const uploadedPromptAttachmentSchema: z$1.ZodObject<{ + type: z$1.ZodEnum<{ + localImage: "localImage"; + localFile: "localFile"; + }>; + path: z$1.ZodString; + name: z$1.ZodString; + mimeType: z$1.ZodOptional; + sizeBytes: z$1.ZodNumber; +}, z$1.core.$strip>; +type UploadedPromptAttachment = z$1.infer; +declare const copyProjectAttachmentsRequestSchema: z$1.ZodObject<{ + sourceProjectId: z$1.ZodString; + paths: z$1.ZodArray; +}, z$1.core.$strict>; +type CopyProjectAttachmentsRequest = z$1.infer; + +declare const registrySkillSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + skillId: z$1.ZodString; + name: z$1.ZodString; + installs: z$1.ZodNumber; + stars: z$1.ZodNullable; + installUrl: z$1.ZodNullable; + url: z$1.ZodString; + topic: z$1.ZodNullable; + summary: z$1.ZodNullable; +}, z$1.core.$strip>; +type RegistrySkill = z$1.infer; +declare const registrySkillsPageSchema: z$1.ZodObject<{ + skills: z$1.ZodArray; + installUrl: z$1.ZodNullable; + url: z$1.ZodString; + topic: z$1.ZodNullable; + summary: z$1.ZodNullable; + }, z$1.core.$strip>>; + pagination: z$1.ZodObject<{ + page: z$1.ZodNumber; + perPage: z$1.ZodNumber; + total: z$1.ZodNumber; + hasMore: z$1.ZodBoolean; + }, z$1.core.$strip>; +}, z$1.core.$strip>; +type RegistrySkillsPage = z$1.infer; +declare const registryRepositoryStarsSchema: z$1.ZodObject<{ + stars: z$1.ZodNumber; +}, z$1.core.$strip>; +type RegistryRepositoryStars = z$1.infer; +declare const registrySkillDetailSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + skillId: z$1.ZodString; + hash: z$1.ZodNullable; + files: z$1.ZodNullable>>; +}, z$1.core.$strip>; +type RegistrySkillDetail = z$1.infer; +declare const registrySkillInstallResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + filePath: z$1.ZodString; +}, z$1.core.$strip>; +type RegistrySkillInstallResponse = z$1.infer; + +declare const updateEnvironmentRequestSchema: z$1.ZodObject<{ + mergeBaseBranch: z$1.ZodOptional>; + name: z$1.ZodOptional>; +}, z$1.core.$strip>; +type UpdateEnvironmentRequest = z$1.infer; +/** + * Query for searching paths in an environment's workspace. Unlike the + * project-scoped variant this needs no `environmentId` — the environment is + * the route param — and is project-agnostic, so it works for projectless + * (personal) environments too. + */ +declare const environmentPathsQuerySchema: z$1.ZodObject<{ + query: z$1.ZodOptional; + limit: z$1.ZodOptional; + includeFiles: z$1.ZodEnum<{ + true: "true"; + false: "false"; + }>; + includeDirectories: z$1.ZodEnum<{ + true: "true"; + false: "false"; + }>; +}, z$1.core.$strip>; +type EnvironmentPathsQuery = z$1.infer; +declare const environmentDiffBranchesQuerySchema: z$1.ZodObject<{ + query: z$1.ZodOptional; + limit: z$1.ZodOptional; + selectedBranch: z$1.ZodOptional; +}, z$1.core.$strip>; +type EnvironmentDiffBranchesQuery = z$1.infer; +declare const environmentDiffBranchesResponseSchema: z$1.ZodObject<{ + branches: z$1.ZodArray; + branchesTruncated: z$1.ZodBoolean; + remoteBranches: z$1.ZodArray; + remoteBranchesTruncated: z$1.ZodBoolean; + selectedBranch: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type EnvironmentDiffBranchesResponse = z$1.infer; +declare const environmentStatusQuerySchema: z$1.ZodObject<{ + mergeBaseBranch: z$1.ZodOptional>; +}, z$1.core.$strip>; +type EnvironmentStatusQuery = z$1.infer; +declare const environmentDiffQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + target: z$1.ZodLiteral<"uncommitted">; +}, z$1.core.$strip>, z$1.ZodObject<{ + target: z$1.ZodLiteral<"branch_committed">; + mergeBaseBranch: z$1.ZodPipe; +}, z$1.core.$strip>, z$1.ZodObject<{ + target: z$1.ZodLiteral<"all">; + mergeBaseBranch: z$1.ZodPipe; +}, z$1.core.$strip>, z$1.ZodObject<{ + target: z$1.ZodLiteral<"commit">; + sha: z$1.ZodString; +}, z$1.core.$strip>], "target">; +type EnvironmentDiffQuery = z$1.infer; +/** + * Query for fetching a single file's contents at one side of a diff target. + * Used by the diff card to reparse the card's patch with full old/new contents + * so `@pierre/diffs` can render expand-context buttons between hunks. + * + * For `branch_committed` / `all`, callers pass the resolved merge-base SHA + * (`mergeBaseRef`, surfaced by `workspace.diff`) rather than the branch name + * — the diff itself was computed against that SHA, so reading the old side + * from the same SHA keeps the file content aligned with the hunk line + * numbers. Reading from the branch tip is wrong whenever the branch has + * moved past the merge-base since the file existed there. + */ +declare const environmentDiffFileQuerySchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + target: z$1.ZodLiteral<"uncommitted">; + path: z$1.ZodString; + side: z$1.ZodEnum<{ + new: "new"; + old: "old"; + }>; +}, z$1.core.$strip>, z$1.ZodObject<{ + target: z$1.ZodLiteral<"branch_committed">; + mergeBaseRef: z$1.ZodString; + path: z$1.ZodString; + side: z$1.ZodEnum<{ + new: "new"; + old: "old"; + }>; +}, z$1.core.$strip>, z$1.ZodObject<{ + target: z$1.ZodLiteral<"all">; + mergeBaseRef: z$1.ZodString; + path: z$1.ZodString; + side: z$1.ZodEnum<{ + new: "new"; + old: "old"; + }>; +}, z$1.core.$strip>, z$1.ZodObject<{ + target: z$1.ZodLiteral<"commit">; + sha: z$1.ZodString; + path: z$1.ZodString; + side: z$1.ZodEnum<{ + new: "new"; + old: "old"; + }>; +}, z$1.core.$strip>], "target">; +type EnvironmentDiffFileQuery = z$1.infer; +declare const environmentDiffFileResponseSchema: z$1.ZodObject<{ + path: z$1.ZodString; + content: z$1.ZodString; + contentEncoding: z$1.ZodEnum<{ + base64: "base64"; + utf8: "utf8"; + }>; + mimeType: z$1.ZodOptional; + sizeBytes: z$1.ZodNumber; +}, z$1.core.$strip>; +type EnvironmentDiffFileResponse = z$1.infer; +declare const environmentArchiveThreadsResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + archivedThreadIds: z$1.ZodArray; +}, z$1.core.$strip>; +type EnvironmentArchiveThreadsResponse = z$1.infer; +declare const pullRequestMergeMethodSchema: z$1.ZodEnum<{ + merge: "merge"; + rebase: "rebase"; + squash: "squash"; +}>; +type PullRequestMergeMethod = z$1.infer; +declare const commitActionResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + action: z$1.ZodLiteral<"commit">; + message: z$1.ZodString; + commitSha: z$1.ZodString; + commitSubject: z$1.ZodString; +}, z$1.core.$strip>; +type CommitActionResponse = z$1.infer; +declare const squashMergeActionResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + action: z$1.ZodLiteral<"squash_merge">; + merged: z$1.ZodBoolean; + message: z$1.ZodString; + commitSha: z$1.ZodString; + commitSubject: z$1.ZodString; +}, z$1.core.$strip>; +type SquashMergeActionResponse = z$1.infer; +declare const pullRequestReadyActionResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + action: z$1.ZodLiteral<"pull_request_ready">; + message: z$1.ZodString; +}, z$1.core.$strip>; +type PullRequestReadyActionResponse = z$1.infer; +declare const pullRequestMergeActionResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + action: z$1.ZodLiteral<"pull_request_merge">; + method: z$1.ZodEnum<{ + merge: "merge"; + rebase: "rebase"; + squash: "squash"; + }>; + message: z$1.ZodString; +}, z$1.core.$strip>; +type PullRequestMergeActionResponse = z$1.infer; +declare const pullRequestDraftActionResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + action: z$1.ZodLiteral<"pull_request_draft">; + message: z$1.ZodString; +}, z$1.core.$strip>; +type PullRequestDraftActionResponse = z$1.infer; +declare const environmentStatusResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"available">; + workspace: z$1.ZodObject<{ + workingTree: z$1.ZodObject<{ + insertions: z$1.ZodNumber; + deletions: z$1.ZodNumber; + files: z$1.ZodArray; + insertions: z$1.ZodNullable; + deletions: z$1.ZodNullable; + }, z$1.core.$strip>>; + hasUncommittedChanges: z$1.ZodBoolean; + state: z$1.ZodEnum<{ + clean: "clean"; + untracked: "untracked"; + dirty_uncommitted: "dirty_uncommitted"; + committed_unmerged: "committed_unmerged"; + dirty_and_committed_unmerged: "dirty_and_committed_unmerged"; + }>; + }, z$1.core.$strip>; + checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"branch">; + branchName: z$1.ZodString; + headSha: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"detached">; + headSha: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"unborn">; + branchName: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"unknown">; + reason: z$1.ZodString; + }, z$1.core.$strip>], "kind">; + branch: z$1.ZodObject<{ + currentBranch: z$1.ZodNullable; + defaultBranch: z$1.ZodString; + }, z$1.core.$strip>; + mergeBase: z$1.ZodNullable; + insertions: z$1.ZodNullable; + deletions: z$1.ZodNullable; + }, z$1.core.$strip>>; + mergeBaseBranch: z$1.ZodString; + baseRef: z$1.ZodNullable; + aheadCount: z$1.ZodNumber; + behindCount: z$1.ZodNumber; + hasCommittedUnmergedChanges: z$1.ZodBoolean; + commits: z$1.ZodArray>; + }, z$1.core.$strip>>; + }, z$1.core.$strip>; +}, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"not_applicable">; + reason: z$1.ZodEnum<{ + non_git_environment: "non_git_environment"; + }>; + message: z$1.ZodString; +}, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"unavailable">; + failure: z$1.ZodObject<{ + code: z$1.ZodEnum<{ + unknown: "unknown"; + path_not_found: "path_not_found"; + not_git_repo: "not_git_repo"; + not_worktree: "not_worktree"; + workspace_type_mismatch: "workspace_type_mismatch"; + permission_denied: "permission_denied"; + unknown_environment: "unknown_environment"; + }>; + workspacePath: z$1.ZodString; + message: z$1.ZodString; + }, z$1.core.$strict>; +}, z$1.core.$strict>], "outcome">; +/** + * Structured pull-request lookup outcome. "absent" is a real answer — the + * host checked and the branch has no PR (non-git environments resolve to + * "absent" without a daemon call). "unavailable" means the lookup itself + * failed (gh missing, not authenticated, timeout, unreachable workspace), so + * callers must not render it as "no PR exists". + */ +declare const environmentPullRequestResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"available">; + pullRequest: z$1.ZodObject<{ + number: z$1.ZodNumber; + title: z$1.ZodString; + state: z$1.ZodEnum<{ + merged: "merged"; + draft: "draft"; + open: "open"; + closed: "closed"; + }>; + url: z$1.ZodString; + baseRefName: z$1.ZodString; + headRefName: z$1.ZodString; + updatedAt: z$1.ZodString; + checks: z$1.ZodObject<{ + state: z$1.ZodEnum<{ + unknown: "unknown"; + pending: "pending"; + passing: "passing"; + failing: "failing"; + no_checks: "no_checks"; + }>; + totalCount: z$1.ZodNumber; + passedCount: z$1.ZodNumber; + failedCount: z$1.ZodNumber; + pendingCount: z$1.ZodNumber; + }, z$1.core.$strict>; + review: z$1.ZodObject<{ + state: z$1.ZodEnum<{ + none: "none"; + approved: "approved"; + changes_requested: "changes_requested"; + review_required: "review_required"; + review_requested: "review_requested"; + }>; + reviewRequestCount: z$1.ZodNumber; + }, z$1.core.$strict>; + mergeability: z$1.ZodObject<{ + state: z$1.ZodEnum<{ + unknown: "unknown"; + draft: "draft"; + mergeable: "mergeable"; + conflicts: "conflicts"; + blocked: "blocked"; + }>; + mergeStateStatus: z$1.ZodNullable>; + mergeable: z$1.ZodNullable>; + }, z$1.core.$strict>; + attention: z$1.ZodEnum<{ + none: "none"; + merged: "merged"; + draft: "draft"; + closed: "closed"; + changes_requested: "changes_requested"; + review_requested: "review_requested"; + conflicts: "conflicts"; + blocked: "blocked"; + checks_failed: "checks_failed"; + checks_pending: "checks_pending"; + ready_to_merge: "ready_to_merge"; + }>; + }, z$1.core.$strict>; +}, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"absent">; +}, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"unavailable">; + message: z$1.ZodString; +}, z$1.core.$strict>], "outcome">; +type EnvironmentPullRequestResponse = z$1.infer; +declare const environmentDiffResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"available">; + diff: z$1.ZodObject<{ + diff: z$1.ZodString; + truncated: z$1.ZodBoolean; + shortstat: z$1.ZodString; + files: z$1.ZodString; + mergeBaseRef: z$1.ZodNullable; + }, z$1.core.$strip>; +}, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"not_applicable">; + reason: z$1.ZodEnum<{ + non_git_environment: "non_git_environment"; + }>; + message: z$1.ZodString; +}, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"unavailable">; + failure: z$1.ZodObject<{ + code: z$1.ZodEnum<{ + unknown: "unknown"; + path_not_found: "path_not_found"; + not_git_repo: "not_git_repo"; + not_worktree: "not_worktree"; + workspace_type_mismatch: "workspace_type_mismatch"; + permission_denied: "permission_denied"; + unknown_environment: "unknown_environment"; + }>; + workspacePath: z$1.ZodString; + message: z$1.ZodString; + }, z$1.core.$strict>; +}, z$1.core.$strict>], "outcome">; +type EnvironmentDiffResponse = z$1.infer; +declare const environmentDiffFilesResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"available">; + files: z$1.ZodArray; + changeKind: z$1.ZodEnum<{ + deleted: "deleted"; + added: "added"; + modified: "modified"; + renamed: "renamed"; + copied: "copied"; + type_changed: "type_changed"; + }>; + additions: z$1.ZodNumber; + deletions: z$1.ZodNumber; + binary: z$1.ZodBoolean; + origin: z$1.ZodEnum<{ + untracked: "untracked"; + tracked: "tracked"; + }>; + loadMode: z$1.ZodEnum<{ + auto: "auto"; + on_demand: "on_demand"; + too_large: "too_large"; + }>; + }, z$1.core.$strip>>; + shortstat: z$1.ZodString; + mergeBaseRef: z$1.ZodNullable; + initialPatches: z$1.ZodArray>; +}, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"not_applicable">; + reason: z$1.ZodEnum<{ + non_git_environment: "non_git_environment"; + too_many_files: "too_many_files"; + }>; + message: z$1.ZodString; +}, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"unavailable">; + failure: z$1.ZodObject<{ + code: z$1.ZodEnum<{ + unknown: "unknown"; + path_not_found: "path_not_found"; + not_git_repo: "not_git_repo"; + not_worktree: "not_worktree"; + workspace_type_mismatch: "workspace_type_mismatch"; + permission_denied: "permission_denied"; + unknown_environment: "unknown_environment"; + }>; + workspacePath: z$1.ZodString; + message: z$1.ZodString; + }, z$1.core.$strict>; +}, z$1.core.$strict>], "outcome">; +type EnvironmentDiffFilesResponse = z$1.infer; +declare const environmentDiffPatchResponseSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"available">; + patches: z$1.ZodArray>; +}, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"not_applicable">; + reason: z$1.ZodEnum<{ + non_git_environment: "non_git_environment"; + }>; + message: z$1.ZodString; +}, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"unavailable">; + failure: z$1.ZodObject<{ + code: z$1.ZodEnum<{ + unknown: "unknown"; + path_not_found: "path_not_found"; + not_git_repo: "not_git_repo"; + not_worktree: "not_worktree"; + workspace_type_mismatch: "workspace_type_mismatch"; + permission_denied: "permission_denied"; + unknown_environment: "unknown_environment"; + }>; + workspacePath: z$1.ZodString; + message: z$1.ZodString; + }, z$1.core.$strict>; +}, z$1.core.$strict>], "outcome">; +type EnvironmentDiffPatchResponse = z$1.infer; +/** + * Body for `POST /diff/patch`: the diff target plus the list of new paths whose + * patches the client wants. A POST (not GET) because the repeated `paths` array + * cannot survive flat query parsing. The client supplies only new paths; the + * server re-derives each file's rename/copy pairing (`previousPath`) from its + * own TOC. + */ +declare const environmentDiffPatchRequestSchema: z$1.ZodObject<{ + target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + type: z$1.ZodLiteral<"uncommitted">; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"branch_committed">; + mergeBaseBranch: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"all">; + mergeBaseBranch: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"commit">; + sha: z$1.ZodString; + }, z$1.core.$strip>], "type">; + paths: z$1.ZodArray; +}, z$1.core.$strict>; +type EnvironmentDiffPatchRequest = z$1.infer; +type EnvironmentStatusResponse = z$1.infer; + +declare const providerUsageResponseSchema: z$1.ZodObject<{ + codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + status: z$1.ZodLiteral<"ok">; + accountEmail: z$1.ZodNullable; + planLabel: z$1.ZodNullable; + windows: z$1.ZodArray; + cost: z$1.ZodOptional>; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"not_installed">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"unauthenticated">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"expired">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"error">; + message: z$1.ZodString; + }, z$1.core.$strip>], "status">; + claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + status: z$1.ZodLiteral<"ok">; + accountEmail: z$1.ZodNullable; + planLabel: z$1.ZodNullable; + windows: z$1.ZodArray; + cost: z$1.ZodOptional>; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"not_installed">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"unauthenticated">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"expired">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"error">; + message: z$1.ZodString; + }, z$1.core.$strip>], "status">; + cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + status: z$1.ZodLiteral<"ok">; + accountEmail: z$1.ZodNullable; + planLabel: z$1.ZodNullable; + windows: z$1.ZodArray; + cost: z$1.ZodOptional>; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"not_installed">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"unauthenticated">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"expired">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"error">; + message: z$1.ZodString; + }, z$1.core.$strip>], "status">; +}, z$1.core.$strip>; +type ProviderUsageResponse = z$1.infer; +type HostDaemonCommandTransport = "settled" | "onlineRpc"; +type HostDaemonCommandEnvironmentLane = "read" | "write"; +type HostDaemonFlushEventsBeforeResult = boolean | "when-initiated"; +interface HostDaemonCommandDescriptor { + type: Type; + schema: Schema; + resultSchema: ResultSchema; + transport: Transport; + retryable: Retryable; + flushEventsBeforeResult: HostDaemonFlushEventsBeforeResult; + envLane: HostDaemonCommandEnvironmentLane | null; +} +declare const hostDaemonCommandRegistry: { + "thread.start": HostDaemonCommandDescriptor<"thread.start", z$1.ZodObject<{ + environmentId: z$1.ZodString; + threadId: z$1.ZodString; + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerId: z$1.ZodString; + acpLaunchSpec: z$1.ZodOptional; + env: z$1.ZodRecord; + cwd: z$1.ZodOptional; + modelCli: z$1.ZodOptional; + selectFlag: z$1.ZodOptional; + primaryModels: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodTransform<{ + listArgs: string[]; + primaryModels: string[]; + selectFlag?: string | undefined; + } | undefined, { + listArgs: string[]; + primaryModels: string[]; + selectFlag?: string | undefined; + }>>>; + reasoningCli: z$1.ZodOptional>; + levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>; + defaultLevel: z$1.ZodOptional>; + }, z$1.core.$strict>>; + nativeReasoning: z$1.ZodOptional>; + levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>; + defaultLevel: z$1.ZodOptional>; + }, z$1.core.$strict>>; + permissionCli: z$1.ZodOptional>; + workspaceWrite: z$1.ZodOptional>; + readonly: z$1.ZodOptional>; + insertAfterArgs: z$1.ZodOptional; + }, z$1.core.$strict>>; + }, z$1.core.$strict>>; + options: z$1.ZodIntersection; + reasoningLevel: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + claudeCodePermissionMode: z$1.ZodOptional>; + claudeCodeMockCliTraffic: z$1.ZodOptional>; + workflowsEnabled: z$1.ZodBoolean; + memoryEnabled: z$1.ZodOptional; + providerSubagentsEnabled: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + permissionMode: z$1.ZodLiteral<"accept-edits">; + permissionScope: z$1.ZodLiteral<"workspace">; + approvalReviewer: z$1.ZodLiteral<"user">; + permissionEscalation: z$1.ZodEnum<{ + deny: "deny"; + ask: "ask"; + }>; + }, z$1.core.$strip>, z$1.ZodObject<{ + permissionMode: z$1.ZodLiteral<"auto">; + permissionScope: z$1.ZodLiteral<"workspace">; + approvalReviewer: z$1.ZodLiteral<"automatic">; + permissionEscalation: z$1.ZodEnum<{ + deny: "deny"; + ask: "ask"; + }>; + }, z$1.core.$strip>, z$1.ZodObject<{ + permissionMode: z$1.ZodLiteral<"full">; + permissionScope: z$1.ZodLiteral<"full">; + approvalReviewer: z$1.ZodNull; + permissionEscalation: z$1.ZodNull; + }, z$1.core.$strip>], "permissionMode">>; + instructions: z$1.ZodString; + dynamicTools: z$1.ZodArray>; + injectedSkillSources: z$1.ZodArray; + treeHash: z$1.ZodString; + entryPath: z$1.ZodString; + sourceType: z$1.ZodEnum<{ + builtin: "builtin"; + "data-dir": "data-dir"; + }>; + }, z$1.core.$strict>, z$1.ZodObject<{ + name: z$1.ZodString; + description: z$1.ZodString; + kind: z$1.ZodLiteral<"workspace-path">; + sourceType: z$1.ZodLiteral<"project">; + sourceRootPath: z$1.ZodString; + skillFilePath: z$1.ZodString; + }, z$1.core.$strict>], "kind">>; + disallowedTools: z$1.ZodOptional>; + instructionMode: z$1.ZodEnum<{ + append: "append"; + replace: "replace"; + }>; + type: z$1.ZodLiteral<"thread.start">; + requestId: z$1.ZodString; + input: z$1.ZodArray>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>; + inputGroups: z$1.ZodOptional>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>>>; + threadStoragePath: z$1.ZodOptional; + fork: z$1.ZodOptional>; + }, z$1.core.$strict>, z$1.ZodObject<{ + providerThreadId: z$1.ZodString; + }, z$1.core.$strip>, "settled", false>; + "turn.submit": HostDaemonCommandDescriptor<"turn.submit", z$1.ZodObject<{ + environmentId: z$1.ZodString; + threadId: z$1.ZodString; + type: z$1.ZodLiteral<"turn.submit">; + requestId: z$1.ZodString; + input: z$1.ZodArray>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>; + inputGroups: z$1.ZodOptional>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>>>; + options: z$1.ZodIntersection; + reasoningLevel: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + claudeCodePermissionMode: z$1.ZodOptional>; + claudeCodeMockCliTraffic: z$1.ZodOptional>; + workflowsEnabled: z$1.ZodBoolean; + memoryEnabled: z$1.ZodOptional; + providerSubagentsEnabled: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + permissionMode: z$1.ZodLiteral<"accept-edits">; + permissionScope: z$1.ZodLiteral<"workspace">; + approvalReviewer: z$1.ZodLiteral<"user">; + permissionEscalation: z$1.ZodEnum<{ + deny: "deny"; + ask: "ask"; + }>; + }, z$1.core.$strip>, z$1.ZodObject<{ + permissionMode: z$1.ZodLiteral<"auto">; + permissionScope: z$1.ZodLiteral<"workspace">; + approvalReviewer: z$1.ZodLiteral<"automatic">; + permissionEscalation: z$1.ZodEnum<{ + deny: "deny"; + ask: "ask"; + }>; + }, z$1.core.$strip>, z$1.ZodObject<{ + permissionMode: z$1.ZodLiteral<"full">; + permissionScope: z$1.ZodLiteral<"full">; + approvalReviewer: z$1.ZodNull; + permissionEscalation: z$1.ZodNull; + }, z$1.core.$strip>], "permissionMode">>; + acpLaunchSpec: z$1.ZodOptional; + env: z$1.ZodRecord; + cwd: z$1.ZodOptional; + modelCli: z$1.ZodOptional; + selectFlag: z$1.ZodOptional; + primaryModels: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodTransform<{ + listArgs: string[]; + primaryModels: string[]; + selectFlag?: string | undefined; + } | undefined, { + listArgs: string[]; + primaryModels: string[]; + selectFlag?: string | undefined; + }>>>; + reasoningCli: z$1.ZodOptional>; + levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>; + defaultLevel: z$1.ZodOptional>; + }, z$1.core.$strict>>; + nativeReasoning: z$1.ZodOptional>; + levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>; + defaultLevel: z$1.ZodOptional>; + }, z$1.core.$strict>>; + permissionCli: z$1.ZodOptional>; + workspaceWrite: z$1.ZodOptional>; + readonly: z$1.ZodOptional>; + insertAfterArgs: z$1.ZodOptional; + }, z$1.core.$strict>>; + }, z$1.core.$strict>>; + resumeContext: z$1.ZodObject<{ + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; + instructionMode: z$1.ZodEnum<{ + append: "append"; + replace: "replace"; + }>; + acpLaunchSpec: z$1.ZodOptional; + env: z$1.ZodRecord; + cwd: z$1.ZodOptional; + modelCli: z$1.ZodOptional; + selectFlag: z$1.ZodOptional; + primaryModels: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodTransform<{ + listArgs: string[]; + primaryModels: string[]; + selectFlag?: string | undefined; + } | undefined, { + listArgs: string[]; + primaryModels: string[]; + selectFlag?: string | undefined; + }>>>; + reasoningCli: z$1.ZodOptional>; + levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>; + defaultLevel: z$1.ZodOptional>; + }, z$1.core.$strict>>; + nativeReasoning: z$1.ZodOptional>; + levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>; + defaultLevel: z$1.ZodOptional>; + }, z$1.core.$strict>>; + permissionCli: z$1.ZodOptional>; + workspaceWrite: z$1.ZodOptional>; + readonly: z$1.ZodOptional>; + insertAfterArgs: z$1.ZodOptional; + }, z$1.core.$strict>>; + }, z$1.core.$strict>>; + instructions: z$1.ZodString; + dynamicTools: z$1.ZodArray>; + injectedSkillSources: z$1.ZodArray; + treeHash: z$1.ZodString; + entryPath: z$1.ZodString; + sourceType: z$1.ZodEnum<{ + builtin: "builtin"; + "data-dir": "data-dir"; + }>; + }, z$1.core.$strict>, z$1.ZodObject<{ + name: z$1.ZodString; + description: z$1.ZodString; + kind: z$1.ZodLiteral<"workspace-path">; + sourceType: z$1.ZodLiteral<"project">; + sourceRootPath: z$1.ZodString; + skillFilePath: z$1.ZodString; + }, z$1.core.$strict>], "kind">>; + disallowedTools: z$1.ZodOptional>; + }, z$1.core.$strict>; + target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + mode: z$1.ZodLiteral<"start">; + }, z$1.core.$strip>, z$1.ZodObject<{ + mode: z$1.ZodLiteral<"auto">; + expectedTurnId: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + mode: z$1.ZodLiteral<"steer">; + expectedTurnId: z$1.ZodNullable; + }, z$1.core.$strip>], "mode">; + }, z$1.core.$strict>, z$1.ZodObject<{ + appliedAs: z$1.ZodEnum<{ + "new-turn": "new-turn"; + steer: "steer"; + }>; + }, z$1.core.$strip>, "settled", false>; + "thread.stop": HostDaemonCommandDescriptor<"thread.stop", z$1.ZodObject<{ + environmentId: z$1.ZodString; + threadId: z$1.ZodString; + type: z$1.ZodLiteral<"thread.stop">; + }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, "settled", false>; + "thread.goal.clear": HostDaemonCommandDescriptor<"thread.goal.clear", z$1.ZodObject<{ + environmentId: z$1.ZodString; + threadId: z$1.ZodString; + type: z$1.ZodLiteral<"thread.goal.clear">; + options: z$1.ZodIntersection; + reasoningLevel: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + claudeCodePermissionMode: z$1.ZodOptional>; + claudeCodeMockCliTraffic: z$1.ZodOptional>; + workflowsEnabled: z$1.ZodBoolean; + memoryEnabled: z$1.ZodOptional; + providerSubagentsEnabled: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + permissionMode: z$1.ZodLiteral<"accept-edits">; + permissionScope: z$1.ZodLiteral<"workspace">; + approvalReviewer: z$1.ZodLiteral<"user">; + permissionEscalation: z$1.ZodEnum<{ + deny: "deny"; + ask: "ask"; + }>; + }, z$1.core.$strip>, z$1.ZodObject<{ + permissionMode: z$1.ZodLiteral<"auto">; + permissionScope: z$1.ZodLiteral<"workspace">; + approvalReviewer: z$1.ZodLiteral<"automatic">; + permissionEscalation: z$1.ZodEnum<{ + deny: "deny"; + ask: "ask"; + }>; + }, z$1.core.$strip>, z$1.ZodObject<{ + permissionMode: z$1.ZodLiteral<"full">; + permissionScope: z$1.ZodLiteral<"full">; + approvalReviewer: z$1.ZodNull; + permissionEscalation: z$1.ZodNull; + }, z$1.core.$strip>], "permissionMode">>; + acpLaunchSpec: z$1.ZodOptional; + env: z$1.ZodRecord; + cwd: z$1.ZodOptional; + modelCli: z$1.ZodOptional; + selectFlag: z$1.ZodOptional; + primaryModels: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodTransform<{ + listArgs: string[]; + primaryModels: string[]; + selectFlag?: string | undefined; + } | undefined, { + listArgs: string[]; + primaryModels: string[]; + selectFlag?: string | undefined; + }>>>; + reasoningCli: z$1.ZodOptional>; + levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>; + defaultLevel: z$1.ZodOptional>; + }, z$1.core.$strict>>; + nativeReasoning: z$1.ZodOptional>; + levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>; + defaultLevel: z$1.ZodOptional>; + }, z$1.core.$strict>>; + permissionCli: z$1.ZodOptional>; + workspaceWrite: z$1.ZodOptional>; + readonly: z$1.ZodOptional>; + insertAfterArgs: z$1.ZodOptional; + }, z$1.core.$strict>>; + }, z$1.core.$strict>>; + resumeContext: z$1.ZodObject<{ + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; + instructionMode: z$1.ZodEnum<{ + append: "append"; + replace: "replace"; + }>; + acpLaunchSpec: z$1.ZodOptional; + env: z$1.ZodRecord; + cwd: z$1.ZodOptional; + modelCli: z$1.ZodOptional; + selectFlag: z$1.ZodOptional; + primaryModels: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodTransform<{ + listArgs: string[]; + primaryModels: string[]; + selectFlag?: string | undefined; + } | undefined, { + listArgs: string[]; + primaryModels: string[]; + selectFlag?: string | undefined; + }>>>; + reasoningCli: z$1.ZodOptional>; + levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>; + defaultLevel: z$1.ZodOptional>; + }, z$1.core.$strict>>; + nativeReasoning: z$1.ZodOptional>; + levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>; + defaultLevel: z$1.ZodOptional>; + }, z$1.core.$strict>>; + permissionCli: z$1.ZodOptional>; + workspaceWrite: z$1.ZodOptional>; + readonly: z$1.ZodOptional>; + insertAfterArgs: z$1.ZodOptional; + }, z$1.core.$strict>>; + }, z$1.core.$strict>>; + instructions: z$1.ZodString; + dynamicTools: z$1.ZodArray>; + injectedSkillSources: z$1.ZodArray; + treeHash: z$1.ZodString; + entryPath: z$1.ZodString; + sourceType: z$1.ZodEnum<{ + builtin: "builtin"; + "data-dir": "data-dir"; + }>; + }, z$1.core.$strict>, z$1.ZodObject<{ + name: z$1.ZodString; + description: z$1.ZodString; + kind: z$1.ZodLiteral<"workspace-path">; + sourceType: z$1.ZodLiteral<"project">; + sourceRootPath: z$1.ZodString; + skillFilePath: z$1.ZodString; + }, z$1.core.$strict>], "kind">>; + disallowedTools: z$1.ZodOptional>; + }, z$1.core.$strict>; + }, z$1.core.$strict>, z$1.ZodObject<{ + cleared: z$1.ZodBoolean; + }, z$1.core.$strict>, "settled", false>; + "thread.plan.cancel": HostDaemonCommandDescriptor<"thread.plan.cancel", z$1.ZodObject<{ + environmentId: z$1.ZodString; + threadId: z$1.ZodString; + type: z$1.ZodLiteral<"thread.plan.cancel">; + expectedTurnId: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + cancelled: z$1.ZodBoolean; + }, z$1.core.$strict>, "settled", false>; + "thread.rename": HostDaemonCommandDescriptor<"thread.rename", z$1.ZodObject<{ + environmentId: z$1.ZodString; + threadId: z$1.ZodString; + type: z$1.ZodLiteral<"thread.rename">; + title: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, "settled", false>; + "thread.archive": HostDaemonCommandDescriptor<"thread.archive", z$1.ZodObject<{ + environmentId: z$1.ZodString; + threadId: z$1.ZodString; + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + type: z$1.ZodLiteral<"thread.archive">; + providerId: z$1.ZodString; + providerThreadId: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, "settled", false>; + "thread.unarchive": HostDaemonCommandDescriptor<"thread.unarchive", z$1.ZodObject<{ + environmentId: z$1.ZodString; + threadId: z$1.ZodString; + type: z$1.ZodLiteral<"thread.unarchive">; + providerId: z$1.ZodString; + providerThreadId: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, "settled", false>; + "interactive.resolve": HostDaemonCommandDescriptor<"interactive.resolve", z$1.ZodObject<{ + environmentId: z$1.ZodString; + threadId: z$1.ZodString; + type: z$1.ZodLiteral<"interactive.resolve">; + interactionId: z$1.ZodString; + providerId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerRequestId: z$1.ZodString; + resolution: z$1.ZodUnion; + grantedPermissions: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + decision: z$1.ZodLiteral<"allow_for_session">; + grantedPermissions: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + decision: z$1.ZodLiteral<"deny">; + }, z$1.core.$strip>], "decision">, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"user_answer">; + answers: z$1.ZodRecord; + freeText: z$1.ZodOptional; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin_submitted">; + }, z$1.core.$strip>]>; + }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, "settled", false>; + "codex.inference.complete": HostDaemonCommandDescriptor<"codex.inference.complete", z$1.ZodObject<{ + type: z$1.ZodLiteral<"codex.inference.complete">; + model: z$1.ZodString; + prompt: z$1.ZodString; + outputSchema: z$1.ZodType>; + timeoutMs: z$1.ZodNumber; + }, z$1.core.$strict>, z$1.ZodObject<{ + model: z$1.ZodString; + value: z$1.ZodType>; + }, z$1.core.$strip>, "settled", false>; + "codex.voice.transcribe": HostDaemonCommandDescriptor<"codex.voice.transcribe", z$1.ZodObject<{ + type: z$1.ZodLiteral<"codex.voice.transcribe">; + model: z$1.ZodString; + audioBase64: z$1.ZodString; + mimeType: z$1.ZodString; + filename: z$1.ZodString; + prompt: z$1.ZodNullable; + timeoutMs: z$1.ZodNumber; + }, z$1.core.$strict>, z$1.ZodObject<{ + model: z$1.ZodString; + text: z$1.ZodString; + }, z$1.core.$strip>, "settled", false>; + "environment.provision": HostDaemonCommandDescriptor<"environment.provision", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + environmentId: z$1.ZodString; + type: z$1.ZodLiteral<"environment.provision">; + initiator: z$1.ZodNullable>; + workspaceProvisionType: z$1.ZodLiteral<"unmanaged">; + path: z$1.ZodString; + checkout: z$1.ZodOptional; + name: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"new">; + name: z$1.ZodString; + baseBranch: z$1.ZodString; + }, z$1.core.$strict>], "kind">>; + }, z$1.core.$strict>, z$1.ZodObject<{ + environmentId: z$1.ZodString; + type: z$1.ZodLiteral<"environment.provision">; + initiator: z$1.ZodNullable>; + sourcePath: z$1.ZodString; + targetPath: z$1.ZodString; + branchName: z$1.ZodString; + baseBranch: z$1.ZodNullable; + setupTimeoutMs: z$1.ZodNumber; + workspaceProvisionType: z$1.ZodLiteral<"managed-worktree">; + }, z$1.core.$strict>, z$1.ZodObject<{ + environmentId: z$1.ZodString; + type: z$1.ZodLiteral<"environment.provision">; + initiator: z$1.ZodNullable>; + workspaceProvisionType: z$1.ZodLiteral<"personal">; + targetPath: z$1.ZodString; + }, z$1.core.$strict>], "workspaceProvisionType">, z$1.ZodObject<{ + path: z$1.ZodString; + isGitRepo: z$1.ZodBoolean; + isWorktree: z$1.ZodBoolean; + branchName: z$1.ZodNullable; + defaultBranch: z$1.ZodNullable; + transcript: z$1.ZodArray; + key: z$1.ZodString; + text: z$1.ZodString; + startedAt: z$1.ZodOptional; + status: z$1.ZodOptional>; + metadata: z$1.ZodOptional>; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, "settled", false>; + "project.clone": HostDaemonCommandDescriptor<"project.clone", z$1.ZodObject<{ + type: z$1.ZodLiteral<"project.clone">; + remoteUrl: z$1.ZodString; + projectSlug: z$1.ZodString; + targetPath: z$1.ZodOptional; + }, z$1.core.$strict>, z$1.ZodObject<{ + path: z$1.ZodString; + gitRemoteUrl: z$1.ZodNullable; + }, z$1.core.$strict>, "settled", false>; + "environment.provision.cancel": HostDaemonCommandDescriptor<"environment.provision.cancel", z$1.ZodObject<{ + environmentId: z$1.ZodString; + type: z$1.ZodLiteral<"environment.provision.cancel">; + }, z$1.core.$strict>, z$1.ZodObject<{ + aborted: z$1.ZodBoolean; + }, z$1.core.$strip>, "settled", false>; + "environment.destroy": HostDaemonCommandDescriptor<"environment.destroy", z$1.ZodObject<{ + environmentId: z$1.ZodString; + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + type: z$1.ZodLiteral<"environment.destroy">; + }, z$1.core.$strict>, z$1.ZodObject<{}, z$1.core.$strip>, "settled", false>; + "workspace.commit": HostDaemonCommandDescriptor<"workspace.commit", z$1.ZodObject<{ + environmentId: z$1.ZodString; + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + type: z$1.ZodLiteral<"workspace.commit">; + message: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + commitSha: z$1.ZodString; + commitSubject: z$1.ZodString; + }, z$1.core.$strip>, "settled", false>; + "workspace.squash_merge": HostDaemonCommandDescriptor<"workspace.squash_merge", z$1.ZodObject<{ + environmentId: z$1.ZodString; + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + type: z$1.ZodLiteral<"workspace.squash_merge">; + targetBranch: z$1.ZodString; + commitMessage: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + commitSha: z$1.ZodString; + commitSubject: z$1.ZodString; + merged: z$1.ZodBoolean; + }, z$1.core.$strip>, "settled", false>; + "workspace.pull_request_action": HostDaemonCommandDescriptor<"workspace.pull_request_action", z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + environmentId: z$1.ZodString; + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + type: z$1.ZodLiteral<"workspace.pull_request_action">; + operation: z$1.ZodLiteral<"ready">; + }, z$1.core.$strict>, z$1.ZodObject<{ + environmentId: z$1.ZodString; + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + type: z$1.ZodLiteral<"workspace.pull_request_action">; + operation: z$1.ZodLiteral<"draft">; + }, z$1.core.$strict>, z$1.ZodObject<{ + environmentId: z$1.ZodString; + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + type: z$1.ZodLiteral<"workspace.pull_request_action">; + operation: z$1.ZodLiteral<"merge">; + method: z$1.ZodEnum<{ + merge: "merge"; + squash: "squash"; + rebase: "rebase"; + }>; + }, z$1.core.$strict>], "operation">, z$1.ZodObject<{}, z$1.core.$strict>, "settled", false>; + "host.list_files": HostDaemonCommandDescriptor<"host.list_files", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.list_files">; + path: z$1.ZodString; + query: z$1.ZodOptional; + limit: z$1.ZodNumber; + }, z$1.core.$strip>, z$1.ZodObject<{ + files: z$1.ZodArray>; + truncated: z$1.ZodBoolean; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.list_paths": HostDaemonCommandDescriptor<"host.list_paths", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.list_paths">; + path: z$1.ZodString; + query: z$1.ZodOptional; + limit: z$1.ZodNumber; + includeFiles: z$1.ZodBoolean; + includeDirectories: z$1.ZodBoolean; + }, z$1.core.$strip>, z$1.ZodObject<{ + paths: z$1.ZodArray; + path: z$1.ZodString; + name: z$1.ZodString; + score: z$1.ZodNumber; + positions: z$1.ZodArray; + }, z$1.core.$strip>>; + truncated: z$1.ZodBoolean; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.mkdir": HostDaemonCommandDescriptor<"host.mkdir", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.mkdir">; + path: z$1.ZodString; + rootPath: z$1.ZodOptional; + recursive: z$1.ZodBoolean; + }, z$1.core.$strict>, z$1.ZodObject<{ + ok: z$1.ZodLiteral; + }, z$1.core.$strict>, "onlineRpc", false>; + "host.move_path": HostDaemonCommandDescriptor<"host.move_path", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.move_path">; + sourcePath: z$1.ZodString; + destinationPath: z$1.ZodString; + rootPath: z$1.ZodOptional; + }, z$1.core.$strict>, z$1.ZodObject<{ + ok: z$1.ZodLiteral; + }, z$1.core.$strict>, "onlineRpc", false>; + "host.remove_path": HostDaemonCommandDescriptor<"host.remove_path", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.remove_path">; + path: z$1.ZodString; + rootPath: z$1.ZodOptional; + recursive: z$1.ZodBoolean; + }, z$1.core.$strict>, z$1.ZodObject<{ + ok: z$1.ZodLiteral; + }, z$1.core.$strict>, "onlineRpc", false>; + "host.browse_directory": HostDaemonCommandDescriptor<"host.browse_directory", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.browse_directory">; + path: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + directory: z$1.ZodString; + parent: z$1.ZodNullable; + entries: z$1.ZodArray; + name: z$1.ZodString; + path: z$1.ZodString; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.paths_exist": HostDaemonCommandDescriptor<"host.paths_exist", z$1.ZodObject<{ + paths: z$1.ZodPipe, z$1.ZodTransform>; + type: z$1.ZodLiteral<"host.paths_exist">; + }, z$1.core.$strict>, z$1.ZodObject<{ + existence: z$1.ZodRecord; + }, z$1.core.$strip>, "onlineRpc", true>; + "project.inspect": HostDaemonCommandDescriptor<"project.inspect", z$1.ZodObject<{ + type: z$1.ZodLiteral<"project.inspect">; + path: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + path: z$1.ZodString; + gitRemoteUrl: z$1.ZodNullable; + }, z$1.core.$strict>, "onlineRpc", true>; + "project.clone_default_path": HostDaemonCommandDescriptor<"project.clone_default_path", z$1.ZodObject<{ + type: z$1.ZodLiteral<"project.clone_default_path">; + projectSlug: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + path: z$1.ZodString; + }, z$1.core.$strict>, "onlineRpc", true>; + "host.pick_folder": HostDaemonCommandDescriptor<"host.pick_folder", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.pick_folder">; + }, z$1.core.$strict>, z$1.ZodObject<{ + path: z$1.ZodNullable; + }, z$1.core.$strip>, "onlineRpc", false>; + "host.caffeinate": HostDaemonCommandDescriptor<"host.caffeinate", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.caffeinate">; + enabled: z$1.ZodBoolean; + }, z$1.core.$strict>, z$1.ZodObject<{ + enabled: z$1.ZodBoolean; + supported: z$1.ZodBoolean; + }, z$1.core.$strict>, "onlineRpc", false>; + "connect-tunnel.ensure-identity": HostDaemonCommandDescriptor<"connect-tunnel.ensure-identity", z$1.ZodObject<{ + type: z$1.ZodLiteral<"connect-tunnel.ensure-identity">; + }, z$1.core.$strict>, z$1.ZodObject<{ + label: z$1.ZodString; + baseDomain: z$1.ZodString; + }, z$1.core.$strict>, "onlineRpc", true>; + "host.list_commands": HostDaemonCommandDescriptor<"host.list_commands", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.list_commands">; + providerId: z$1.ZodString; + cwd: z$1.ZodNullable; + }, z$1.core.$strict>, z$1.ZodObject<{ + commands: z$1.ZodArray; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + }>; + description: z$1.ZodNullable; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.list_skills": HostDaemonCommandDescriptor<"host.list_skills", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.list_skills">; + providerId: z$1.ZodString; + cwd: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + skills: z$1.ZodArray; + filePath: z$1.ZodString; + rootKind: z$1.ZodEnum<{ + plugin: "plugin"; + "bb-project": "bb-project"; + "bb-data-dir": "bb-data-dir"; + "bb-builtin": "bb-builtin"; + "provider-project": "provider-project"; + "provider-user": "provider-user"; + }>; + linked: z$1.ZodBoolean; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.delete_skill": HostDaemonCommandDescriptor<"host.delete_skill", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.delete_skill">; + scope: z$1.ZodEnum<{ + "bb-project": "bb-project"; + "bb-user": "bb-user"; + "claude-user": "claude-user"; + "claude-project": "claude-project"; + "codex-user": "codex-user"; + "codex-project": "codex-project"; + }>; + name: z$1.ZodString; + cwd: z$1.ZodNullable; + rootPath: z$1.ZodNullable; + }, z$1.core.$strict>, z$1.ZodObject<{ + deletedPath: z$1.ZodString; + }, z$1.core.$strip>, "onlineRpc", false>; + "host.write_skill": HostDaemonCommandDescriptor<"host.write_skill", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.write_skill">; + scope: z$1.ZodEnum<{ + "bb-project": "bb-project"; + "bb-user": "bb-user"; + }>; + name: z$1.ZodString; + cwd: z$1.ZodNullable; + content: z$1.ZodString; + expectedSha256: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"written">; + filePath: z$1.ZodString; + sha256: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"conflict">; + currentSha256: z$1.ZodNullable; + }, z$1.core.$strip>], "outcome">, "onlineRpc", false>; + "host.install_global_skills": HostDaemonCommandDescriptor<"host.install_global_skills", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.install_global_skills">; + skills: z$1.ZodArray>; + }, z$1.core.$strict>, z$1.ZodObject<{ + installations: z$1.ZodArray>; + }, z$1.core.$strict>, "onlineRpc", false>; + "host.global_skills_status": HostDaemonCommandDescriptor<"host.global_skills_status", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.global_skills_status">; + names: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodObject<{ + entries: z$1.ZodArray; + }, z$1.core.$strict>>; + }, z$1.core.$strict>, "onlineRpc", true>; + "host.list_branches": HostDaemonCommandDescriptor<"host.list_branches", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.list_branches">; + path: z$1.ZodString; + query: z$1.ZodOptional; + selectedBranch: z$1.ZodOptional; + limit: z$1.ZodNumber; + }, z$1.core.$strip>, z$1.ZodObject<{ + branches: z$1.ZodArray; + branchesTruncated: z$1.ZodBoolean; + checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"branch">; + branchName: z$1.ZodString; + headSha: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"detached">; + headSha: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"unborn">; + branchName: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"unknown">; + reason: z$1.ZodString; + }, z$1.core.$strip>], "kind">; + defaultBranch: z$1.ZodNullable; + defaultBranchRelation: z$1.ZodNullable>; + hasUncommittedChanges: z$1.ZodBoolean; + operation: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"none">; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"merge">; + hasConflicts: z$1.ZodBoolean; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"rebase">; + hasConflicts: z$1.ZodBoolean; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"cherry-pick">; + hasConflicts: z$1.ZodBoolean; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"revert">; + hasConflicts: z$1.ZodBoolean; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"unknown">; + reason: z$1.ZodString; + hasConflicts: z$1.ZodBoolean; + }, z$1.core.$strip>], "kind">; + originDefaultBranch: z$1.ZodNullable; + remoteBranches: z$1.ZodArray; + remoteBranchesTruncated: z$1.ZodBoolean; + selectedBranch: z$1.ZodNullable; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.file_metadata": HostDaemonCommandDescriptor<"host.file_metadata", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.file_metadata">; + path: z$1.ZodString; + rootPath: z$1.ZodOptional; + }, z$1.core.$strict>, z$1.ZodObject<{ + path: z$1.ZodString; + modifiedAtMs: z$1.ZodNumber; + sizeBytes: z$1.ZodNumber; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.read_file": HostDaemonCommandDescriptor<"host.read_file", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.read_file">; + path: z$1.ZodString; + rootPath: z$1.ZodOptional; + ref: z$1.ZodOptional; + }, z$1.core.$strip>, z$1.ZodObject<{ + path: z$1.ZodString; + content: z$1.ZodString; + contentEncoding: z$1.ZodEnum<{ + base64: "base64"; + utf8: "utf8"; + }>; + mimeType: z$1.ZodOptional; + sizeBytes: z$1.ZodNumber; + modifiedAtMs: z$1.ZodOptional; + sha256: z$1.ZodString; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.read_file_relative": HostDaemonCommandDescriptor<"host.read_file_relative", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.read_file_relative">; + rootPath: z$1.ZodString; + path: z$1.ZodString; + dotfiles: z$1.ZodEnum<{ + deny: "deny"; + allow: "allow"; + }>; + }, z$1.core.$strict>, z$1.ZodObject<{ + path: z$1.ZodString; + content: z$1.ZodString; + contentEncoding: z$1.ZodEnum<{ + base64: "base64"; + utf8: "utf8"; + }>; + mimeType: z$1.ZodOptional; + sizeBytes: z$1.ZodNumber; + modifiedAtMs: z$1.ZodOptional; + sha256: z$1.ZodString; + }, z$1.core.$strip>, "onlineRpc", true>; + "host.write_file": HostDaemonCommandDescriptor<"host.write_file", z$1.ZodObject<{ + type: z$1.ZodLiteral<"host.write_file">; + path: z$1.ZodString; + rootPath: z$1.ZodOptional; + content: z$1.ZodString; + contentEncoding: z$1.ZodEnum<{ + base64: "base64"; + utf8: "utf8"; + }>; + createParents: z$1.ZodBoolean; + expectedSha256: z$1.ZodOptional>; + mode: z$1.ZodOptional; + }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"written">; + sha256: z$1.ZodString; + sizeBytes: z$1.ZodNumber; + }, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"conflict">; + currentSha256: z$1.ZodNullable; + }, z$1.core.$strict>], "outcome">, "onlineRpc", false>; + "provider.list_models": HostDaemonCommandDescriptor<"provider.list_models", z$1.ZodObject<{ + type: z$1.ZodLiteral<"provider.list_models">; + providerId: z$1.ZodString; + acpLaunchSpec: z$1.ZodOptional; + env: z$1.ZodRecord; + cwd: z$1.ZodOptional; + modelCli: z$1.ZodOptional; + selectFlag: z$1.ZodOptional; + primaryModels: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodTransform<{ + listArgs: string[]; + primaryModels: string[]; + selectFlag?: string | undefined; + } | undefined, { + listArgs: string[]; + primaryModels: string[]; + selectFlag?: string | undefined; + }>>>; + reasoningCli: z$1.ZodOptional>; + levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>; + defaultLevel: z$1.ZodOptional>; + }, z$1.core.$strict>>; + nativeReasoning: z$1.ZodOptional>; + levelValues: z$1.ZodOptional & z$1.core.$partial, z$1.ZodString>>; + defaultLevel: z$1.ZodOptional>; + }, z$1.core.$strict>>; + permissionCli: z$1.ZodOptional>; + workspaceWrite: z$1.ZodOptional>; + readonly: z$1.ZodOptional>; + insertAfterArgs: z$1.ZodOptional; + }, z$1.core.$strict>>; + }, z$1.core.$strict>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + models: z$1.ZodArray; + description: z$1.ZodString; + }, z$1.core.$strip>>; + defaultReasoningEffort: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + isDefault: z$1.ZodBoolean; + }, z$1.core.$strip>>; + selectedOnlyModels: z$1.ZodArray; + description: z$1.ZodString; + }, z$1.core.$strip>>; + defaultReasoningEffort: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + isDefault: z$1.ZodBoolean; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, "onlineRpc", true>; + "known_acp_agents.status": HostDaemonCommandDescriptor<"known_acp_agents.status", z$1.ZodObject<{ + type: z$1.ZodLiteral<"known_acp_agents.status">; + agents: z$1.ZodArray>; + }, z$1.core.$strict>, z$1.ZodObject<{ + agents: z$1.ZodArray; + }, z$1.core.$strict>>; + }, z$1.core.$strict>, "onlineRpc", true>; + "provider.usage": HostDaemonCommandDescriptor<"provider.usage", z$1.ZodObject<{ + type: z$1.ZodLiteral<"provider.usage">; + }, z$1.core.$strict>, z$1.ZodObject<{ + codex: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + status: z$1.ZodLiteral<"ok">; + accountEmail: z$1.ZodNullable; + planLabel: z$1.ZodNullable; + windows: z$1.ZodArray; + cost: z$1.ZodOptional>; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"not_installed">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"unauthenticated">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"expired">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"error">; + message: z$1.ZodString; + }, z$1.core.$strip>], "status">; + claudeCode: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + status: z$1.ZodLiteral<"ok">; + accountEmail: z$1.ZodNullable; + planLabel: z$1.ZodNullable; + windows: z$1.ZodArray; + cost: z$1.ZodOptional>; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"not_installed">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"unauthenticated">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"expired">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"error">; + message: z$1.ZodString; + }, z$1.core.$strip>], "status">; + cursor: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + status: z$1.ZodLiteral<"ok">; + accountEmail: z$1.ZodNullable; + planLabel: z$1.ZodNullable; + windows: z$1.ZodArray; + cost: z$1.ZodOptional>; + }, z$1.core.$strip>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"not_installed">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"unauthenticated">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"expired">; + }, z$1.core.$strip>, z$1.ZodObject<{ + status: z$1.ZodLiteral<"error">; + message: z$1.ZodString; + }, z$1.core.$strip>], "status">; + }, z$1.core.$strip>, "onlineRpc", true>; + "provider_cli.status": HostDaemonCommandDescriptor<"provider_cli.status", z$1.ZodObject<{ + type: z$1.ZodLiteral<"provider_cli.status">; + }, z$1.core.$strict>, z$1.ZodRecord, z$1.ZodObject<{ + displayName: z$1.ZodString; + executableName: z$1.ZodString; + executablePath: z$1.ZodNullable; + installed: z$1.ZodBoolean; + installSource: z$1.ZodEnum<{ + external: "external"; + notInstalled: "notInstalled"; + npmGlobal: "npmGlobal"; + }>; + currentVersion: z$1.ZodNullable; + latestVersion: z$1.ZodNullable; + minimumSupportedVersion: z$1.ZodNullable; + npmPackageName: z$1.ZodNullable; + npmGlobalPackageVersion: z$1.ZodNullable; + installAction: z$1.ZodNullable; + label: z$1.ZodEnum<{ + Install: "Install"; + Update: "Update"; + }>; + commandKind: z$1.ZodEnum<{ + exec: "exec"; + shell: "shell"; + }>; + command: z$1.ZodString; + }, z$1.core.$strip>>; + needsUpdate: z$1.ZodBoolean; + versionUnsupported: z$1.ZodBoolean; + }, z$1.core.$strip>>, "onlineRpc", true>; + "provider_cli.install": HostDaemonCommandDescriptor<"provider_cli.install", z$1.ZodObject<{ + provider: z$1.ZodEnum<{ + codex: "codex"; + claudeCode: "claudeCode"; + cursor: "cursor"; + }>; + actionKind: z$1.ZodEnum<{ + update: "update"; + install: "install"; + }>; + type: z$1.ZodLiteral<"provider_cli.install">; + }, z$1.core.$strict>, z$1.ZodObject<{ + events: z$1.ZodArray; + provider: z$1.ZodEnum<{ + codex: "codex"; + claudeCode: "claudeCode"; + cursor: "cursor"; + }>; + command: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"output">; + provider: z$1.ZodEnum<{ + codex: "codex"; + claudeCode: "claudeCode"; + cursor: "cursor"; + }>; + stream: z$1.ZodEnum<{ + stdout: "stdout"; + stderr: "stderr"; + }>; + text: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"completed">; + provider: z$1.ZodEnum<{ + codex: "codex"; + claudeCode: "claudeCode"; + cursor: "cursor"; + }>; + exitCode: z$1.ZodNullable; + signal: z$1.ZodNullable; + success: z$1.ZodBoolean; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"error">; + provider: z$1.ZodEnum<{ + codex: "codex"; + claudeCode: "claudeCode"; + cursor: "cursor"; + }>; + message: z$1.ZodString; + }, z$1.core.$strip>], "type">>; + }, z$1.core.$strict>, "onlineRpc", false>; + "workspace.status": HostDaemonCommandDescriptor<"workspace.status", z$1.ZodObject<{ + environmentId: z$1.ZodString; + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + type: z$1.ZodLiteral<"workspace.status">; + mergeBaseBranch: z$1.ZodOptional; + }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"available">; + workspaceStatus: z$1.ZodObject<{ + workingTree: z$1.ZodObject<{ + insertions: z$1.ZodNumber; + deletions: z$1.ZodNumber; + files: z$1.ZodArray; + insertions: z$1.ZodNullable; + deletions: z$1.ZodNullable; + }, z$1.core.$strip>>; + hasUncommittedChanges: z$1.ZodBoolean; + state: z$1.ZodEnum<{ + clean: "clean"; + untracked: "untracked"; + dirty_uncommitted: "dirty_uncommitted"; + committed_unmerged: "committed_unmerged"; + dirty_and_committed_unmerged: "dirty_and_committed_unmerged"; + }>; + }, z$1.core.$strip>; + checkout: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"branch">; + branchName: z$1.ZodString; + headSha: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"detached">; + headSha: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"unborn">; + branchName: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"unknown">; + reason: z$1.ZodString; + }, z$1.core.$strip>], "kind">; + branch: z$1.ZodObject<{ + currentBranch: z$1.ZodNullable; + defaultBranch: z$1.ZodString; + }, z$1.core.$strip>; + mergeBase: z$1.ZodNullable; + insertions: z$1.ZodNullable; + deletions: z$1.ZodNullable; + }, z$1.core.$strip>>; + mergeBaseBranch: z$1.ZodString; + baseRef: z$1.ZodNullable; + aheadCount: z$1.ZodNumber; + behindCount: z$1.ZodNumber; + hasCommittedUnmergedChanges: z$1.ZodBoolean; + commits: z$1.ZodArray>; + }, z$1.core.$strip>>; + }, z$1.core.$strip>; + }, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"unavailable">; + failure: z$1.ZodObject<{ + code: z$1.ZodEnum<{ + unknown: "unknown"; + path_not_found: "path_not_found"; + not_git_repo: "not_git_repo"; + not_worktree: "not_worktree"; + workspace_type_mismatch: "workspace_type_mismatch"; + permission_denied: "permission_denied"; + unknown_environment: "unknown_environment"; + }>; + workspacePath: z$1.ZodString; + message: z$1.ZodString; + }, z$1.core.$strict>; + }, z$1.core.$strict>], "outcome">, "onlineRpc", true>; + "workspace.diff": HostDaemonCommandDescriptor<"workspace.diff", z$1.ZodObject<{ + environmentId: z$1.ZodString; + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + type: z$1.ZodLiteral<"workspace.diff">; + target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + type: z$1.ZodLiteral<"uncommitted">; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"branch_committed">; + mergeBaseBranch: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"all">; + mergeBaseBranch: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"commit">; + sha: z$1.ZodString; + }, z$1.core.$strip>], "type">; + maxDiffBytes: z$1.ZodNumber; + maxFileListBytes: z$1.ZodNumber; + }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"available">; + diff: z$1.ZodObject<{ + diff: z$1.ZodString; + truncated: z$1.ZodBoolean; + shortstat: z$1.ZodString; + files: z$1.ZodString; + mergeBaseRef: z$1.ZodNullable; + }, z$1.core.$strip>; + }, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"unavailable">; + failure: z$1.ZodObject<{ + code: z$1.ZodEnum<{ + unknown: "unknown"; + path_not_found: "path_not_found"; + not_git_repo: "not_git_repo"; + not_worktree: "not_worktree"; + workspace_type_mismatch: "workspace_type_mismatch"; + permission_denied: "permission_denied"; + unknown_environment: "unknown_environment"; + }>; + workspacePath: z$1.ZodString; + message: z$1.ZodString; + }, z$1.core.$strict>; + }, z$1.core.$strict>], "outcome">, "onlineRpc", true>; + "workspace.diffFiles": HostDaemonCommandDescriptor<"workspace.diffFiles", z$1.ZodObject<{ + environmentId: z$1.ZodString; + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + type: z$1.ZodLiteral<"workspace.diffFiles">; + target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + type: z$1.ZodLiteral<"uncommitted">; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"branch_committed">; + mergeBaseBranch: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"all">; + mergeBaseBranch: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"commit">; + sha: z$1.ZodString; + }, z$1.core.$strip>], "type">; + }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"available">; + files: z$1.ZodArray; + statusLetter: z$1.ZodEnum<{ + M: "M"; + A: "A"; + D: "D"; + R: "R"; + C: "C"; + T: "T"; + }>; + additions: z$1.ZodNumber; + deletions: z$1.ZodNumber; + binary: z$1.ZodBoolean; + origin: z$1.ZodEnum<{ + untracked: "untracked"; + tracked: "tracked"; + }>; + }, z$1.core.$strip>>; + shortstat: z$1.ZodString; + mergeBaseRef: z$1.ZodNullable; + }, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"unavailable">; + failure: z$1.ZodObject<{ + code: z$1.ZodEnum<{ + unknown: "unknown"; + path_not_found: "path_not_found"; + not_git_repo: "not_git_repo"; + not_worktree: "not_worktree"; + workspace_type_mismatch: "workspace_type_mismatch"; + permission_denied: "permission_denied"; + unknown_environment: "unknown_environment"; + }>; + workspacePath: z$1.ZodString; + message: z$1.ZodString; + }, z$1.core.$strict>; + }, z$1.core.$strict>], "outcome">, "onlineRpc", true>; + "workspace.diffPatch": HostDaemonCommandDescriptor<"workspace.diffPatch", z$1.ZodObject<{ + environmentId: z$1.ZodString; + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + type: z$1.ZodLiteral<"workspace.diffPatch">; + target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + type: z$1.ZodLiteral<"uncommitted">; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"branch_committed">; + mergeBaseBranch: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"all">; + mergeBaseBranch: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"commit">; + sha: z$1.ZodString; + }, z$1.core.$strip>], "type">; + paths: z$1.ZodArray; + maxBytesPerFile: z$1.ZodNumber; + }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"available">; + patches: z$1.ZodArray>; + }, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"unavailable">; + failure: z$1.ZodObject<{ + code: z$1.ZodEnum<{ + unknown: "unknown"; + path_not_found: "path_not_found"; + not_git_repo: "not_git_repo"; + not_worktree: "not_worktree"; + workspace_type_mismatch: "workspace_type_mismatch"; + permission_denied: "permission_denied"; + unknown_environment: "unknown_environment"; + }>; + workspacePath: z$1.ZodString; + message: z$1.ZodString; + }, z$1.core.$strict>; + }, z$1.core.$strict>], "outcome">, "onlineRpc", true>; + "workspace.pull_request": HostDaemonCommandDescriptor<"workspace.pull_request", z$1.ZodObject<{ + environmentId: z$1.ZodString; + workspaceContext: z$1.ZodObject<{ + workspacePath: z$1.ZodString; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + }, z$1.core.$strip>; + type: z$1.ZodLiteral<"workspace.pull_request">; + }, z$1.core.$strict>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"available">; + pullRequest: z$1.ZodObject<{ + number: z$1.ZodNumber; + title: z$1.ZodString; + state: z$1.ZodEnum<{ + OPEN: "OPEN"; + CLOSED: "CLOSED"; + MERGED: "MERGED"; + }>; + url: z$1.ZodString; + isDraft: z$1.ZodBoolean; + baseRefName: z$1.ZodString; + headRefName: z$1.ZodString; + updatedAt: z$1.ZodString; + checks: z$1.ZodArray; + conclusion: z$1.ZodNullable>; + url: z$1.ZodNullable; + }, z$1.core.$strict>>; + reviewDecision: z$1.ZodNullable>; + reviewRequestCount: z$1.ZodNumber; + mergeStateStatus: z$1.ZodNullable>; + mergeable: z$1.ZodNullable>; + }, z$1.core.$strict>; + }, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"absent">; + }, z$1.core.$strict>, z$1.ZodObject<{ + outcome: z$1.ZodLiteral<"unavailable">; + message: z$1.ZodString; + }, z$1.core.$strict>], "outcome">, "onlineRpc", true>; +}; +type HostDaemonCommandRegistry = typeof hostDaemonCommandRegistry; +type AnyHostDaemonCommandDescriptor = HostDaemonCommandRegistry[keyof HostDaemonCommandRegistry]; +type HostDaemonCommandDescriptorForTransport = Extract; +type HostDaemonResultSchemaMapForTransport = { + [Descriptor in HostDaemonCommandDescriptorForTransport as Descriptor["type"]]: Descriptor["resultSchema"]; +}; +type HostDaemonOnlineRpcResultSchemaMap = HostDaemonResultSchemaMapForTransport<"onlineRpc">; +type HostDaemonOnlineRpcResultByType = { + [K in keyof HostDaemonOnlineRpcResultSchemaMap]: z$1.infer; +}; + +declare const pickFolderResponseSchema: z$1.ZodObject<{ + path: z$1.ZodNullable; +}, z$1.core.$strip>; +type PickFolderResponse = z$1.infer; +declare const pathsExistRequestSchema: z$1.ZodObject<{ + paths: z$1.ZodPipe, z$1.ZodTransform>; +}, z$1.core.$strip>; +type PathsExistRequest = z$1.infer; +declare const pathsExistResponseSchema: z$1.ZodObject<{ + existence: z$1.ZodRecord; +}, z$1.core.$strip>; +type PathsExistResponse = z$1.infer; +declare const providerCliStatusResponseSchema: z$1.ZodRecord, z$1.ZodObject<{ + displayName: z$1.ZodString; + executableName: z$1.ZodString; + executablePath: z$1.ZodNullable; + installed: z$1.ZodBoolean; + installSource: z$1.ZodEnum<{ + external: "external"; + notInstalled: "notInstalled"; + npmGlobal: "npmGlobal"; + }>; + currentVersion: z$1.ZodNullable; + latestVersion: z$1.ZodNullable; + minimumSupportedVersion: z$1.ZodNullable; + npmPackageName: z$1.ZodNullable; + npmGlobalPackageVersion: z$1.ZodNullable; + installAction: z$1.ZodNullable; + label: z$1.ZodEnum<{ + Install: "Install"; + Update: "Update"; + }>; + commandKind: z$1.ZodEnum<{ + exec: "exec"; + shell: "shell"; + }>; + command: z$1.ZodString; + }, z$1.core.$strip>>; + needsUpdate: z$1.ZodBoolean; + versionUnsupported: z$1.ZodBoolean; +}, z$1.core.$strip>>; +type ProviderCliStatusResponse = z$1.infer; +declare const providerCliInstallRequestSchema: z$1.ZodObject<{ + provider: z$1.ZodEnum<{ + codex: "codex"; + claudeCode: "claudeCode"; + cursor: "cursor"; + }>; + actionKind: z$1.ZodEnum<{ + update: "update"; + install: "install"; + }>; +}, z$1.core.$strip>; +type ProviderCliInstallRequest = z$1.infer; +declare const providerCliInstallEventSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + type: z$1.ZodLiteral<"started">; + provider: z$1.ZodEnum<{ + codex: "codex"; + claudeCode: "claudeCode"; + cursor: "cursor"; + }>; + command: z$1.ZodString; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"output">; + provider: z$1.ZodEnum<{ + codex: "codex"; + claudeCode: "claudeCode"; + cursor: "cursor"; + }>; + stream: z$1.ZodEnum<{ + stdout: "stdout"; + stderr: "stderr"; + }>; + text: z$1.ZodString; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"completed">; + provider: z$1.ZodEnum<{ + codex: "codex"; + claudeCode: "claudeCode"; + cursor: "cursor"; + }>; + exitCode: z$1.ZodNullable; + signal: z$1.ZodNullable; + success: z$1.ZodBoolean; +}, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"error">; + provider: z$1.ZodEnum<{ + codex: "codex"; + claudeCode: "claudeCode"; + cursor: "cursor"; + }>; + message: z$1.ZodString; +}, z$1.core.$strip>], "type">; +type ProviderCliInstallEvent = z$1.infer; + +interface CreateFilePreviewResponse { + baseUrl: string; + expiresAtMs: number; +} +type HostFileReadResponse = HostDaemonOnlineRpcResultByType["host.read_file"]; +type HostFileWriteResponse = HostDaemonOnlineRpcResultByType["host.write_file"]; +type HostFileListResponse = HostDaemonOnlineRpcResultByType["host.list_files"]; +type HostPathListResponse = HostDaemonOnlineRpcResultByType["host.list_paths"]; +type HostMkdirResponse = HostDaemonOnlineRpcResultByType["host.mkdir"]; +type HostMovePathResponse = HostDaemonOnlineRpcResultByType["host.move_path"]; +type HostRemovePathResponse = HostDaemonOnlineRpcResultByType["host.remove_path"]; + +/** + * Query for `GET /hosts/:id/directory`, the interactive path browser's + * single-level directory read. `path` is an absolute directory on the host; + * omitting it lists the host's home directory (the daemon resolves it, since a + * remote caller cannot know the host's home). + */ +declare const hostDirectoryQuerySchema: z$1.ZodObject<{ + path: z$1.ZodOptional; +}, z$1.core.$strip>; +type HostDirectoryQuery = z$1.infer; +declare const hostDirectoryListingSchema: z$1.ZodObject<{ + directory: z$1.ZodString; + parent: z$1.ZodNullable; + entries: z$1.ZodArray; + name: z$1.ZodString; + path: z$1.ZodString; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type HostDirectoryListing = z$1.infer; +/** Project name is sent so the daemon can derive its host-local checkout path. */ +declare const hostCloneDefaultPathQuerySchema: z$1.ZodObject<{ + projectId: z$1.ZodString; +}, z$1.core.$strip>; +type HostCloneDefaultPathQuery = z$1.infer; +declare const hostCloneDefaultPathResponseSchema: z$1.ZodObject<{ + path: z$1.ZodString; +}, z$1.core.$strict>; +type HostCloneDefaultPathResponse = z$1.infer; +declare const createHostJoinCodeResponseSchema: z$1.ZodObject<{ + joinCode: z$1.ZodString; + hostId: z$1.ZodString; + expiresAt: z$1.ZodNumber; +}, z$1.core.$strip>; +type CreateHostJoinCodeResponse = z$1.infer; +declare const updateHostRequestSchema: z$1.ZodObject<{ + name: z$1.ZodString; +}, z$1.core.$strict>; +type UpdateHostRequest = z$1.infer; +declare const hostRetryUpdateResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; +}, z$1.core.$strict>; +type HostRetryUpdateResponse = z$1.infer; +type HostPathsExistRequest = PathsExistRequest; +type HostPathsExistResponse = PathsExistResponse; +declare const hostPickFolderRequestSchema: z$1.ZodObject<{ + clientHostId: z$1.ZodString; +}, z$1.core.$strict>; +type HostPickFolderRequest = z$1.infer; +type HostPickFolderResponse = PickFolderResponse; +type HostProviderCliStatusResponse = ProviderCliStatusResponse; +type HostProviderCliInstallRequest = ProviderCliInstallRequest; +type HostProviderCliInstallEvent = ProviderCliInstallEvent; + +declare const pluginUpdateCheckEntrySchema: z$1.ZodObject<{ + id: z$1.ZodString; + outcome: z$1.ZodEnum<{ + unavailable: "unavailable"; + incompatible: "incompatible"; + current: "current"; + "update-available": "update-available"; + pinned: "pinned"; + }>; + devMode: z$1.ZodOptional>; + installed: z$1.ZodObject<{ + version: z$1.ZodString; + display: z$1.ZodString; + }, z$1.core.$strip>; + candidate: z$1.ZodOptional>; + blocked: z$1.ZodOptional; + }, z$1.core.$strip>>; + detail: z$1.ZodOptional; +}, z$1.core.$strip>; +type PluginUpdateCheckEntry = z$1.infer; +declare const pluginApplyUpdateResultSchema: z$1.ZodObject<{ + applied: z$1.ZodBoolean; + from: z$1.ZodObject<{ + version: z$1.ZodString; + display: z$1.ZodString; + }, z$1.core.$strip>; + to: z$1.ZodOptional>; + outcome: z$1.ZodEnum<{ + current: "current"; + updated: "updated"; + "rolled-back": "rolled-back"; + }>; + detail: z$1.ZodOptional; +}, z$1.core.$strip>; +type PluginApplyUpdateResult$1 = z$1.infer; +declare const pluginSourceDetailSchema: z$1.ZodObject<{ + requested: z$1.ZodString; + resolved: z$1.ZodString; + integrity: z$1.ZodOptional; + registry: z$1.ZodOptional; + engines: z$1.ZodObject<{ + bb: z$1.ZodOptional; + bbPluginSdk: z$1.ZodOptional; + }, z$1.core.$strip>; + installedAt: z$1.ZodOptional; + history: z$1.ZodArray>; +}, z$1.core.$strip>; +type PluginSourceDetail = z$1.infer; +declare const installedPluginSchema: z$1.ZodObject<{ + id: z$1.ZodString; + source: z$1.ZodString; + rootDir: z$1.ZodString; + version: z$1.ZodString; + provenance: z$1.ZodEnum<{ + builtin: "builtin"; + direct: "direct"; + catalog: "catalog"; + }>; + isOrphanedBuiltin: z$1.ZodBoolean; + catalogEntryId: z$1.ZodOptional; + sourceDisplay: z$1.ZodString; + updateState: z$1.ZodObject<{ + outcome: z$1.ZodOptional>; + availableVersion: z$1.ZodOptional; + blockedVersion: z$1.ZodOptional; + blockedReasons: z$1.ZodOptional>; + lastCheckAt: z$1.ZodOptional; + lastFailure: z$1.ZodOptional>; + }, z$1.core.$strip>; + enabled: z$1.ZodBoolean; + description: z$1.ZodNullable; + name: z$1.ZodNullable; + icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; + status: z$1.ZodEnum<{ + error: "error"; + running: "running"; + missing: "missing"; + incompatible: "incompatible"; + disabled: "disabled"; + degraded: "degraded"; + "needs-configuration": "needs-configuration"; + }>; + statusDetail: z$1.ZodNullable; + handlerStats: z$1.ZodObject<{ + count: z$1.ZodNumber; + totalMs: z$1.ZodNumber; + maxMs: z$1.ZodNumber; + errorCount: z$1.ZodNumber; + }, z$1.core.$strip>; + services: z$1.ZodArray; + }, z$1.core.$strip>>; + schedules: z$1.ZodArray; + lastStatus: z$1.ZodNullable>; + lastError: z$1.ZodNullable; + }, z$1.core.$strip>>; + cliCommand: z$1.ZodNullable>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; + hasSettings: z$1.ZodBoolean; + app: z$1.ZodObject<{ + hasApp: z$1.ZodBoolean; + bundle: z$1.ZodNullable; + hash: z$1.ZodString; + sdkMajor: z$1.ZodNumber; + sdkVersion: z$1.ZodString; + compatible: z$1.ZodBoolean; + }, z$1.core.$strip>>; + }, z$1.core.$strip>; + logoUrl: z$1.ZodNullable; + logoDarkUrl: z$1.ZodNullable; +}, z$1.core.$strip>; +type InstalledPlugin = z$1.infer; +declare const pluginListResponseSchema: z$1.ZodObject<{ + plugins: z$1.ZodArray; + isOrphanedBuiltin: z$1.ZodBoolean; + catalogEntryId: z$1.ZodOptional; + sourceDisplay: z$1.ZodString; + updateState: z$1.ZodObject<{ + outcome: z$1.ZodOptional>; + availableVersion: z$1.ZodOptional; + blockedVersion: z$1.ZodOptional; + blockedReasons: z$1.ZodOptional>; + lastCheckAt: z$1.ZodOptional; + lastFailure: z$1.ZodOptional>; + }, z$1.core.$strip>; + enabled: z$1.ZodBoolean; + description: z$1.ZodNullable; + name: z$1.ZodNullable; + icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; + status: z$1.ZodEnum<{ + error: "error"; + running: "running"; + missing: "missing"; + incompatible: "incompatible"; + disabled: "disabled"; + degraded: "degraded"; + "needs-configuration": "needs-configuration"; + }>; + statusDetail: z$1.ZodNullable; + handlerStats: z$1.ZodObject<{ + count: z$1.ZodNumber; + totalMs: z$1.ZodNumber; + maxMs: z$1.ZodNumber; + errorCount: z$1.ZodNumber; + }, z$1.core.$strip>; + services: z$1.ZodArray; + }, z$1.core.$strip>>; + schedules: z$1.ZodArray; + lastStatus: z$1.ZodNullable>; + lastError: z$1.ZodNullable; + }, z$1.core.$strip>>; + cliCommand: z$1.ZodNullable>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; + hasSettings: z$1.ZodBoolean; + app: z$1.ZodObject<{ + hasApp: z$1.ZodBoolean; + bundle: z$1.ZodNullable; + hash: z$1.ZodString; + sdkMajor: z$1.ZodNumber; + sdkVersion: z$1.ZodString; + compatible: z$1.ZodBoolean; + }, z$1.core.$strip>>; + }, z$1.core.$strip>; + logoUrl: z$1.ZodNullable; + logoDarkUrl: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type PluginListResponse = z$1.infer; +declare const pluginReloadResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + plugins: z$1.ZodArray; + isOrphanedBuiltin: z$1.ZodBoolean; + catalogEntryId: z$1.ZodOptional; + sourceDisplay: z$1.ZodString; + updateState: z$1.ZodObject<{ + outcome: z$1.ZodOptional>; + availableVersion: z$1.ZodOptional; + blockedVersion: z$1.ZodOptional; + blockedReasons: z$1.ZodOptional>; + lastCheckAt: z$1.ZodOptional; + lastFailure: z$1.ZodOptional>; + }, z$1.core.$strip>; + enabled: z$1.ZodBoolean; + description: z$1.ZodNullable; + name: z$1.ZodNullable; + icon: z$1.ZodNullable; + iconUrl: z$1.ZodNullable; + status: z$1.ZodEnum<{ + error: "error"; + running: "running"; + missing: "missing"; + incompatible: "incompatible"; + disabled: "disabled"; + degraded: "degraded"; + "needs-configuration": "needs-configuration"; + }>; + statusDetail: z$1.ZodNullable; + handlerStats: z$1.ZodObject<{ + count: z$1.ZodNumber; + totalMs: z$1.ZodNumber; + maxMs: z$1.ZodNumber; + errorCount: z$1.ZodNumber; + }, z$1.core.$strip>; + services: z$1.ZodArray; + }, z$1.core.$strip>>; + schedules: z$1.ZodArray; + lastStatus: z$1.ZodNullable>; + lastError: z$1.ZodNullable; + }, z$1.core.$strip>>; + cliCommand: z$1.ZodNullable>; + capabilities: z$1.ZodDefault; + id: z$1.ZodString; + label: z$1.ZodString; + detail: z$1.ZodNullable; + }, z$1.core.$strip>>>; + hasSettings: z$1.ZodBoolean; + app: z$1.ZodObject<{ + hasApp: z$1.ZodBoolean; + bundle: z$1.ZodNullable; + hash: z$1.ZodString; + sdkMajor: z$1.ZodNumber; + sdkVersion: z$1.ZodString; + compatible: z$1.ZodBoolean; + }, z$1.core.$strip>>; + }, z$1.core.$strip>; + logoUrl: z$1.ZodNullable; + logoDarkUrl: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type PluginReloadResponse = z$1.infer; +declare const pluginRemoveResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; +}, z$1.core.$strip>; +type PluginRemoveResponse = z$1.infer; +declare const pluginSettingsResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + schema: z$1.ZodRecord; + secret: z$1.ZodOptional>; + default: z$1.ZodOptional; + label: z$1.ZodString; + description: z$1.ZodOptional; + }, z$1.core.$strict>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"boolean">; + default: z$1.ZodOptional; + label: z$1.ZodString; + description: z$1.ZodOptional; + }, z$1.core.$strict>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"select">; + options: z$1.ZodArray; + default: z$1.ZodOptional; + label: z$1.ZodString; + description: z$1.ZodOptional; + }, z$1.core.$strict>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"project">; + default: z$1.ZodOptional; + label: z$1.ZodString; + description: z$1.ZodOptional; + }, z$1.core.$strict>], "type">>; + values: z$1.ZodRecord>>; +}, z$1.core.$strip>; +type PluginSettingsResponse = z$1.infer; +declare const pluginTokenResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + token: z$1.ZodString; +}, z$1.core.$strip>; +type PluginTokenResponse = z$1.infer; +declare const pluginCatalogStatusSchema: z$1.ZodObject<{ + pluginCount: z$1.ZodNumber; +}, z$1.core.$strip>; +type PluginCatalogStatus = z$1.infer; +declare const pluginCatalogSearchResultSchema: z$1.ZodObject<{ + entryId: z$1.ZodString; + pluginId: z$1.ZodString; + displayName: z$1.ZodString; + description: z$1.ZodString; + icon: z$1.ZodNullable; + category: z$1.ZodString; + source: z$1.ZodString; + installed: z$1.ZodBoolean; + compatible: z$1.ZodBoolean; + incompatibleReason: z$1.ZodNullable; +}, z$1.core.$strip>; +type PluginCatalogSearchResult$1 = z$1.infer; + +declare const systemExecutionOptionsResponseSchema: z$1.ZodObject<{ + providers: z$1.ZodArray; + capabilities: z$1.ZodObject<{ + supportsArchive: z$1.ZodBoolean; + supportsRename: z$1.ZodBoolean; + supportsServiceTier: z$1.ZodBoolean; + supportsUserQuestion: z$1.ZodBoolean; + supportsFork: z$1.ZodBoolean; + supportedPermissionModes: z$1.ZodArray>; + }, z$1.core.$strip>; + composerActions: z$1.ZodArray; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plan">; + command: z$1.ZodObject<{ + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + trailingText: z$1.ZodString; + }, z$1.core.$strip>; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"goal">; + command: z$1.ZodObject<{ + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + trailingText: z$1.ZodString; + }, z$1.core.$strip>; + }, z$1.core.$strip>], "kind">>; + available: z$1.ZodBoolean; + }, z$1.core.$strip>>; + models: z$1.ZodArray; + description: z$1.ZodString; + }, z$1.core.$strip>>; + defaultReasoningEffort: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + isDefault: z$1.ZodBoolean; + }, z$1.core.$strip>>; + selectedOnlyModels: z$1.ZodArray; + description: z$1.ZodString; + }, z$1.core.$strip>>; + defaultReasoningEffort: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + isDefault: z$1.ZodBoolean; + }, z$1.core.$strip>>; + modelLoadError: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SystemExecutionOptionsResponse = z$1.infer; +declare const systemExecutionOptionsQuerySchema: z$1.ZodObject<{ + providerId: z$1.ZodOptional; + hostId: z$1.ZodOptional; + environmentId: z$1.ZodOptional; +}, z$1.core.$strip>; +type SystemExecutionOptionsQuery = z$1.infer; +/** Omission preserves the existing behavior of reading the primary machine. */ +declare const systemUsageLimitsQuerySchema: z$1.ZodObject<{ + hostId: z$1.ZodOptional; +}, z$1.core.$strip>; +type SystemUsageLimitsQuery = z$1.infer; +declare const systemVoiceTranscriptionResponseSchema: z$1.ZodObject<{ + text: z$1.ZodString; +}, z$1.core.$strip>; +type SystemVoiceTranscriptionResponse = z$1.infer; +declare const systemConfigResponseSchema: z$1.ZodObject<{ + generalSettings: z$1.ZodObject<{ + caffeinate: z$1.ZodBoolean; + showKeyboardHints: z$1.ZodBoolean; + steerActiveThreadOnEnter: z$1.ZodBoolean; + showUnhandledProviderEvents: z$1.ZodBoolean; + codexMemoryEnabled: z$1.ZodBoolean; + claudeCodeMemoryEnabled: z$1.ZodBoolean; + codexSubagentsDisabled: z$1.ZodBoolean; + claudeCodeSubagentsDisabled: z$1.ZodBoolean; + claudeCodeWorkflowsDisabled: z$1.ZodBoolean; + }, z$1.core.$strict>; + keybindings: z$1.ZodArray; + desktopOnly: z$1.ZodBoolean; + shortcut: z$1.ZodObject<{ + key: z$1.ZodString; + mod: z$1.ZodBoolean; + meta: z$1.ZodBoolean; + control: z$1.ZodBoolean; + alt: z$1.ZodBoolean; + shift: z$1.ZodBoolean; + }, z$1.core.$strict>; + when: z$1.ZodObject<{ + all: z$1.ZodArray>; + none: z$1.ZodArray>; + }, z$1.core.$strict>; + }, z$1.core.$strict>>; + defaultKeybindings: z$1.ZodArray; + desktopOnly: z$1.ZodBoolean; + shortcut: z$1.ZodObject<{ + key: z$1.ZodString; + mod: z$1.ZodBoolean; + meta: z$1.ZodBoolean; + control: z$1.ZodBoolean; + alt: z$1.ZodBoolean; + shift: z$1.ZodBoolean; + }, z$1.core.$strict>; + when: z$1.ZodObject<{ + all: z$1.ZodArray>; + none: z$1.ZodArray>; + }, z$1.core.$strict>; + }, z$1.core.$strict>>; + keybindingOverrides: z$1.ZodArray; + shortcut: z$1.ZodNullable>; + }, z$1.core.$strict>>; + experiments: z$1.ZodObject<{ + claudeCodeMockCliTraffic: z$1.ZodBoolean; + toolsHub: z$1.ZodBoolean; + sideChatPlugin: z$1.ZodBoolean; + }, z$1.core.$strip>; + appearance: z$1.ZodObject<{ + themeId: z$1.ZodString; + customCss: z$1.ZodNullable; + faviconColor: z$1.ZodEnum<{ + default: "default"; + red: "red"; + orange: "orange"; + yellow: "yellow"; + green: "green"; + teal: "teal"; + blue: "blue"; + purple: "purple"; + pink: "pink"; + }>; + }, z$1.core.$strip>; + customThemes: z$1.ZodArray; + pluginThemes: z$1.ZodArray; + }, z$1.core.$strip>>; + featureFlags: z$1.ZodObject<{ + placeholder: z$1.ZodBoolean; + timelineWindowEventBudget: z$1.ZodNumber; + }, z$1.core.$strip>; + hostDaemonPort: z$1.ZodNullable; + primaryHostId: z$1.ZodNullable; + primaryHostPlatform: z$1.ZodNullable>; + voiceTranscriptionEnabled: z$1.ZodBoolean; + dataDir: z$1.ZodString; +}, z$1.core.$strip>; +type SystemConfigResponse = z$1.infer; +declare const systemAttentionResponseSchema: z$1.ZodObject<{ + hasAttention: z$1.ZodBoolean; +}, z$1.core.$strip>; +type SystemAttentionResponse = z$1.infer; +/** + * Theme catalog: the on-disk custom-theme directory plus the discovered custom + * themes and the active palette. Drives `bb theme list` / `bb theme dir`. + */ +declare const themeCatalogResponseSchema: z$1.ZodObject<{ + dir: z$1.ZodString; + custom: z$1.ZodArray; + plugins: z$1.ZodArray; + }, z$1.core.$strip>>; + active: z$1.ZodObject<{ + themeId: z$1.ZodString; + customCss: z$1.ZodNullable; + faviconColor: z$1.ZodEnum<{ + default: "default"; + red: "red"; + orange: "orange"; + yellow: "yellow"; + green: "green"; + teal: "teal"; + blue: "blue"; + purple: "purple"; + pink: "pink"; + }>; + }, z$1.core.$strip>; +}, z$1.core.$strip>; +type ThemeCatalogResponse = z$1.infer; +declare const systemVersionResponseSchema: z$1.ZodObject<{ + currentVersion: z$1.ZodString; + latestVersion: z$1.ZodNullable; + source: z$1.ZodLiteral<"npm">; + updateAvailable: z$1.ZodBoolean; + isDevelopment: z$1.ZodBoolean; + upgradeCommand: z$1.ZodString; +}, z$1.core.$strip>; +type SystemVersionResponse = z$1.infer; +declare const systemConfigReloadResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; +}, z$1.core.$strip>; +declare const systemCliSkillsStatusResponseSchema: z$1.ZodObject<{ + machines: z$1.ZodArray; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type SystemCliSkillsStatusResponse = z$1.infer; +/** The machines to copy the built-in bb CLI skills onto. */ +declare const systemInstallCliSkillsRequestSchema: z$1.ZodObject<{ + hostIds: z$1.ZodArray; +}, z$1.core.$strip>; +type SystemInstallCliSkillsRequest = z$1.infer; +/** + * One entry per requested machine. A machine that is offline or otherwise + * refuses the install fails on its own without taking the others down, so the + * caller can report exactly which machines got the skills. + */ +declare const systemInstallCliSkillsResponseSchema: z$1.ZodObject<{ + results: z$1.ZodArray; + hostId: z$1.ZodString; + hostName: z$1.ZodString; + installations: z$1.ZodArray>; + }, z$1.core.$strip>, z$1.ZodObject<{ + ok: z$1.ZodLiteral; + hostId: z$1.ZodString; + hostName: z$1.ZodString; + errorMessage: z$1.ZodString; + }, z$1.core.$strip>], "ok">>; +}, z$1.core.$strip>; +type SystemInstallCliSkillsResponse = z$1.infer; +type SystemConfigReloadResponse = z$1.infer; + +declare const terminalSessionSchema: z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodNullable; + environmentId: z$1.ZodNullable; + hostId: z$1.ZodString; + title: z$1.ZodString; + initialCwd: z$1.ZodString; + cols: z$1.ZodNumber; + rows: z$1.ZodNumber; + status: z$1.ZodEnum<{ + starting: "starting"; + disconnected: "disconnected"; + running: "running"; + exited: "exited"; + }>; + exitCode: z$1.ZodNullable; + closeReason: z$1.ZodNullable>; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + lastUserInputAt: z$1.ZodNullable; +}, z$1.core.$strip>; +type TerminalSession = z$1.infer; +declare const terminalListResponseSchema: z$1.ZodObject<{ + sessions: z$1.ZodArray; + environmentId: z$1.ZodNullable; + hostId: z$1.ZodString; + title: z$1.ZodString; + initialCwd: z$1.ZodString; + cols: z$1.ZodNumber; + rows: z$1.ZodNumber; + status: z$1.ZodEnum<{ + starting: "starting"; + disconnected: "disconnected"; + running: "running"; + exited: "exited"; + }>; + exitCode: z$1.ZodNullable; + closeReason: z$1.ZodNullable>; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + lastUserInputAt: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type TerminalListResponse = z$1.infer; +declare const createTerminalRequestSchema: z$1.ZodObject<{ + cols: z$1.ZodNumber; + rows: z$1.ZodNumber; + start: z$1.ZodOptional; + }, z$1.core.$strict>, z$1.ZodObject<{ + mode: z$1.ZodLiteral<"command">; + command: z$1.ZodString; + }, z$1.core.$strict>], "mode">>; + target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"environment">; + environmentId: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"host_path">; + hostId: z$1.ZodString; + cwd: z$1.ZodNullable; + }, z$1.core.$strict>], "kind">; + title: z$1.ZodOptional; +}, z$1.core.$strict>; +type CreateTerminalRequest = z$1.infer; +declare const updateTerminalRequestSchema: z$1.ZodObject<{ + title: z$1.ZodString; +}, z$1.core.$strict>; +type UpdateTerminalRequest = z$1.infer; +declare const terminalInputRequestSchema: z$1.ZodObject<{ + dataBase64: z$1.ZodString; +}, z$1.core.$strict>; +type TerminalInputRequest = z$1.infer; +declare const terminalResizeRequestSchema: z$1.ZodObject<{ + cols: z$1.ZodNumber; + rows: z$1.ZodNumber; +}, z$1.core.$strict>; +type TerminalResizeRequest = z$1.infer; +declare const terminalOutputQuerySchema: z$1.ZodObject<{ + sinceSeq: z$1.ZodOptional>; + tailBytes: z$1.ZodOptional>; + limitChunks: z$1.ZodOptional>; +}, z$1.core.$strict>; +type TerminalOutputQuery = z$1.infer; +declare const terminalOutputResponseSchema: z$1.ZodObject<{ + chunks: z$1.ZodArray>; + nextSeq: z$1.ZodNumber; + truncated: z$1.ZodBoolean; +}, z$1.core.$strict>; +type TerminalOutputResponse = z$1.infer; + +declare const timelineRowStatusSchema: z$1.ZodEnum<{ + error: "error"; + pending: "pending"; + completed: "completed"; + interrupted: "interrupted"; +}>; +type TimelineRowStatus = z$1.infer; +declare const timelineRowBaseSchema: z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; +}, z$1.core.$strip>; +type TimelineRowBase = z$1.infer; +declare const timelineConversationRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"conversation">; + text: z$1.ZodString; + attachments: z$1.ZodNullable; + localImagePaths: z$1.ZodArray; + localFilePaths: z$1.ZodArray; + }, z$1.core.$strip>>; + role: z$1.ZodLiteral<"user">; + initiator: z$1.ZodEnum<{ + user: "user"; + agent: "agent"; + system: "system"; + }>; + senderThreadId: z$1.ZodNullable; + systemMessageKind: z$1.ZodEnum<{ + "ownership-assigned": "ownership-assigned"; + "ownership-removed": "ownership-removed"; + "child-needs-attention": "child-needs-attention"; + "child-completed": "child-completed"; + "child-failed": "child-failed"; + "child-interrupted": "child-interrupted"; + "child-outcome-batch": "child-outcome-batch"; + unlabeled: "unlabeled"; + }>; + systemMessageSubject: z$1.ZodNullable; + threadId: z$1.ZodString; + threadName: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread-batch">; + count: z$1.ZodNumber; + }, z$1.core.$strip>], "kind">>; + turnRequest: z$1.ZodObject<{ + kind: z$1.ZodEnum<{ + message: "message"; + steer: "steer"; + }>; + status: z$1.ZodEnum<{ + pending: "pending"; + accepted: "accepted"; + }>; + }, z$1.core.$strip>; + mentions: z$1.ZodArray, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>; +}, z$1.core.$strip>, z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"conversation">; + text: z$1.ZodString; + attachments: z$1.ZodNullable; + localImagePaths: z$1.ZodArray; + localFilePaths: z$1.ZodArray; + }, z$1.core.$strip>>; + role: z$1.ZodLiteral<"assistant">; + turnRequest: z$1.ZodNull; +}, z$1.core.$strip>], "role">; +type TimelineConversationRow = z$1.infer; +declare const timelineSystemRowSchema: z$1.ZodUnion; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"system">; + title: z$1.ZodString; + detail: z$1.ZodNullable; + status: z$1.ZodNullable>; + systemKind: z$1.ZodEnum<{ + error: "error"; + debug: "debug"; + reconnect: "reconnect"; + }>; +}, z$1.core.$strip>, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"system">; + title: z$1.ZodString; + detail: z$1.ZodNullable; + status: z$1.ZodNullable>; + systemKind: z$1.ZodLiteral<"operation">; + operationKind: z$1.ZodEnum<{ + generic: "generic"; + compaction: "compaction"; + "thread-provisioning": "thread-provisioning"; + "thread-interrupted": "thread-interrupted"; + "provider-unhandled": "provider-unhandled"; + warning: "warning"; + deprecation: "deprecation"; + }>; + completedAt: z$1.ZodNullable; +}, z$1.core.$strip>, z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"system">; + title: z$1.ZodString; + detail: z$1.ZodNullable; + systemKind: z$1.ZodLiteral<"operation">; + operationKind: z$1.ZodLiteral<"parent-change">; + status: z$1.ZodEnum<{ + error: "error"; + pending: "pending"; + completed: "completed"; + interrupted: "interrupted"; + }>; + parentChange: z$1.ZodObject<{ + action: z$1.ZodEnum<{ + assign: "assign"; + release: "release"; + transfer: "transfer"; + }>; + previousParentThreadId: z$1.ZodNullable; + previousParentThreadTitle: z$1.ZodNullable; + nextParentThreadId: z$1.ZodNullable; + nextParentThreadTitle: z$1.ZodNullable; + }, z$1.core.$strip>; + completedAt: z$1.ZodNullable; +}, z$1.core.$strip>], "operationKind">]>; +type TimelineSystemRow = z$1.infer; +interface TimelineWorkRowBase extends TimelineRowBase { + kind: "work"; + status: TimelineRowStatus; +} +declare const timelineCommandWorkRowSchema: z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"work">; + status: z$1.ZodEnum<{ + error: "error"; + pending: "pending"; + completed: "completed"; + interrupted: "interrupted"; + }>; + workKind: z$1.ZodLiteral<"command">; + callId: z$1.ZodString; + command: z$1.ZodString; + cwd: z$1.ZodNullable; + source: z$1.ZodNullable; + output: z$1.ZodString; + exitCode: z$1.ZodNullable; + completedAt: z$1.ZodNullable; + approvalStatus: z$1.ZodNullable>; + activityIntents: z$1.ZodArray; + command: z$1.ZodString; + name: z$1.ZodString; + path: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"list_files">; + command: z$1.ZodString; + path: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"search">; + command: z$1.ZodString; + query: z$1.ZodNullable; + path: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"unknown">; + command: z$1.ZodString; + }, z$1.core.$strip>], "type">>; +}, z$1.core.$strip>; +type TimelineCommandWorkRow = z$1.infer; +declare const timelineToolWorkRowSchema: z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"work">; + status: z$1.ZodEnum<{ + error: "error"; + pending: "pending"; + completed: "completed"; + interrupted: "interrupted"; + }>; + workKind: z$1.ZodLiteral<"tool">; + callId: z$1.ZodString; + toolName: z$1.ZodString; + toolArgs: z$1.ZodNullable>>>; + output: z$1.ZodString; + completedAt: z$1.ZodNullable; + approvalStatus: z$1.ZodNullable>; + activityIntents: z$1.ZodArray; + command: z$1.ZodString; + name: z$1.ZodString; + path: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"list_files">; + command: z$1.ZodString; + path: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"search">; + command: z$1.ZodString; + query: z$1.ZodNullable; + path: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"unknown">; + command: z$1.ZodString; + }, z$1.core.$strip>], "type">>; +}, z$1.core.$strip>; +type TimelineToolWorkRow = z$1.infer; +declare const timelineFileChangeWorkRowSchema: z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"work">; + status: z$1.ZodEnum<{ + error: "error"; + pending: "pending"; + completed: "completed"; + interrupted: "interrupted"; + }>; + workKind: z$1.ZodLiteral<"file-change">; + callId: z$1.ZodString; + change: z$1.ZodObject<{ + path: z$1.ZodString; + kind: z$1.ZodNullable; + movePath: z$1.ZodNullable; + diff: z$1.ZodNullable; + diffStats: z$1.ZodObject<{ + added: z$1.ZodNumber; + removed: z$1.ZodNumber; + }, z$1.core.$strip>; + }, z$1.core.$strip>; + stdout: z$1.ZodNullable; + stderr: z$1.ZodNullable; + approvalStatus: z$1.ZodNullable>; +}, z$1.core.$strip>; +type TimelineFileChangeWorkRow = z$1.infer; +declare const timelineWebSearchWorkRowSchema: z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"work">; + status: z$1.ZodEnum<{ + error: "error"; + pending: "pending"; + completed: "completed"; + interrupted: "interrupted"; + }>; + workKind: z$1.ZodLiteral<"web-search">; + callId: z$1.ZodString; + queries: z$1.ZodArray; + completedAt: z$1.ZodNullable; +}, z$1.core.$strip>; +type TimelineWebSearchWorkRow = z$1.infer; +declare const timelineWebFetchWorkRowSchema: z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"work">; + status: z$1.ZodEnum<{ + error: "error"; + pending: "pending"; + completed: "completed"; + interrupted: "interrupted"; + }>; + workKind: z$1.ZodLiteral<"web-fetch">; + callId: z$1.ZodString; + url: z$1.ZodString; + prompt: z$1.ZodNullable; + pattern: z$1.ZodNullable; + completedAt: z$1.ZodNullable; +}, z$1.core.$strip>; +type TimelineWebFetchWorkRow = z$1.infer; +declare const timelineImageViewWorkRowSchema: z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"work">; + status: z$1.ZodEnum<{ + error: "error"; + pending: "pending"; + completed: "completed"; + interrupted: "interrupted"; + }>; + workKind: z$1.ZodLiteral<"image-view">; + callId: z$1.ZodString; + path: z$1.ZodString; + completedAt: z$1.ZodNullable; +}, z$1.core.$strip>; +type TimelineImageViewWorkRow = z$1.infer; +declare const timelineApprovalWorkRowSchema: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"work">; + status: z$1.ZodEnum<{ + error: "error"; + pending: "pending"; + completed: "completed"; + interrupted: "interrupted"; + }>; + workKind: z$1.ZodLiteral<"approval">; + interactionId: z$1.ZodString; + target: z$1.ZodObject<{ + itemId: z$1.ZodString; + toolName: z$1.ZodNullable; + }, z$1.core.$strip>; + approvalKind: z$1.ZodLiteral<"file-edit">; + lifecycle: z$1.ZodEnum<{ + denied: "denied"; + waiting: "waiting"; + }>; +}, z$1.core.$strip>, z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"work">; + status: z$1.ZodEnum<{ + error: "error"; + pending: "pending"; + completed: "completed"; + interrupted: "interrupted"; + }>; + workKind: z$1.ZodLiteral<"approval">; + interactionId: z$1.ZodString; + target: z$1.ZodObject<{ + itemId: z$1.ZodString; + toolName: z$1.ZodNullable; + }, z$1.core.$strip>; + approvalKind: z$1.ZodLiteral<"permission-grant">; + lifecycle: z$1.ZodEnum<{ + pending: "pending"; + interrupted: "interrupted"; + denied: "denied"; + resolving: "resolving"; + granted: "granted"; + }>; + grantScope: z$1.ZodNullable>; + statusReason: z$1.ZodNullable; +}, z$1.core.$strip>], "approvalKind">; +type TimelineApprovalWorkRow = z$1.infer; +declare const timelineQuestionWorkRowSchema: z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"work">; + status: z$1.ZodEnum<{ + error: "error"; + pending: "pending"; + completed: "completed"; + interrupted: "interrupted"; + }>; + workKind: z$1.ZodLiteral<"question">; + interactionId: z$1.ZodString; + lifecycle: z$1.ZodEnum<{ + pending: "pending"; + interrupted: "interrupted"; + resolving: "resolving"; + answered: "answered"; + }>; + questions: z$1.ZodArray; + multiSelect: z$1.ZodBoolean; + options: z$1.ZodOptional; + }, z$1.core.$strip>>>; + allowFreeText: z$1.ZodBoolean; + }, z$1.core.$strip>>; + answers: z$1.ZodNullable; + freeText: z$1.ZodOptional; + }, z$1.core.$strip>>>; + statusReason: z$1.ZodNullable; +}, z$1.core.$strip>; +type TimelineQuestionWorkRow = z$1.infer; +interface TimelineDelegationWorkRow extends TimelineWorkRowBase { + workKind: "delegation"; + callId: string; + toolName: string; + subagentType: string | null; + description: string | null; + output: string; + completedAt: number | null; + childRows: TimelineRow[]; +} +/** + * A provider background task — a dynamic workflow (Claude Code Workflow tool) + * or a backgrounded shell command (Bash run_in_background), discriminated by + * `taskType`. The row outlives its spawning turn: progress and terminal state + * arrive via thread-scoped events folded into this single row. `workflow` is + * the merged phase/agent tree, present only for workflows; null for shell + * commands and for workflows the provider reported no progress records for + * (degraded rendering falls back to description + summary). + */ +declare const timelineWorkflowWorkRowSchema: z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + turnId: z$1.ZodNullable; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"work">; + status: z$1.ZodEnum<{ + error: "error"; + pending: "pending"; + completed: "completed"; + interrupted: "interrupted"; + }>; + workKind: z$1.ZodLiteral<"workflow">; + itemId: z$1.ZodString; + taskType: z$1.ZodString; + workflowName: z$1.ZodNullable; + description: z$1.ZodString; + taskStatus: z$1.ZodEnum<{ + pending: "pending"; + completed: "completed"; + running: "running"; + paused: "paused"; + failed: "failed"; + killed: "killed"; + stopped: "stopped"; + }>; + workflow: z$1.ZodNullable; + }, z$1.core.$strip>>; + agents: z$1.ZodArray; + model: z$1.ZodString; + attempt: z$1.ZodNumber; + cached: z$1.ZodBoolean; + lastProgressAt: z$1.ZodNumber; + phaseIndex: z$1.ZodOptional; + phaseTitle: z$1.ZodOptional; + agentType: z$1.ZodOptional; + isolation: z$1.ZodOptional; + queuedAt: z$1.ZodOptional; + startedAt: z$1.ZodOptional; + lastToolName: z$1.ZodOptional; + lastToolSummary: z$1.ZodOptional; + promptPreview: z$1.ZodOptional; + resultPreview: z$1.ZodOptional; + error: z$1.ZodOptional; + tokens: z$1.ZodOptional; + toolCalls: z$1.ZodOptional; + durationMs: z$1.ZodOptional; + }, z$1.core.$strip>>; + }, z$1.core.$strip>>; + usage: z$1.ZodNullable>; + summary: z$1.ZodNullable; + error: z$1.ZodNullable; + completedAt: z$1.ZodNullable; +}, z$1.core.$strip>; +type TimelineWorkflowWorkRow = z$1.infer; +type TimelineWorkRow = TimelineCommandWorkRow | TimelineToolWorkRow | TimelineFileChangeWorkRow | TimelineWebSearchWorkRow | TimelineWebFetchWorkRow | TimelineImageViewWorkRow | TimelineApprovalWorkRow | TimelineQuestionWorkRow | TimelineDelegationWorkRow | TimelineWorkflowWorkRow; +interface TimelineTurnRow extends TimelineRowBase { + kind: "turn"; + turnId: string; + status: TimelineRowStatus; + summaryCount: number; + completedAt: number | null; + children: TimelineRow[] | null; +} +type TimelineSourceRow = TimelineConversationRow | TimelineWorkRow | TimelineSystemRow; +type TimelineRow = TimelineSourceRow | TimelineTurnRow; + +declare const createThreadRequestSchema: z$1.ZodObject<{ + projectId: z$1.ZodString; + providerId: z$1.ZodOptional; + origin: z$1.ZodEnum<{ + plugin: "plugin"; + app: "app"; + cli: "cli"; + sdk: "sdk"; + }>; + originPluginId: z$1.ZodOptional; + visibility: z$1.ZodOptional>; + title: z$1.ZodOptional; + input: z$1.ZodArray>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>; + model: z$1.ZodOptional; + serviceTier: z$1.ZodOptional>; + reasoningLevel: z$1.ZodOptional>; + permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; + executionInputSources: z$1.ZodOptional>; + model: z$1.ZodOptional>; + serviceTier: z$1.ZodOptional>; + reasoningLevel: z$1.ZodOptional>; + permissionMode: z$1.ZodOptional>; + }, z$1.core.$strict>>; + environment: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + type: z$1.ZodLiteral<"reuse">; + environmentId: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"host">; + hostId: z$1.ZodOptional; + workspace: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + type: z$1.ZodLiteral<"unmanaged">; + path: z$1.ZodNullable; + branch: z$1.ZodOptional; + name: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"new">; + baseBranch: z$1.ZodString; + }, z$1.core.$strict>], "kind">>; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"managed-worktree">; + baseBranch: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"named">; + name: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"default">; + }, z$1.core.$strip>], "kind">; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"personal">; + }, z$1.core.$strip>], "type">; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"project-default">; + }, z$1.core.$strip>], "type">; + parentThreadId: z$1.ZodOptional; + sectionId: z$1.ZodOptional>; + sourceThreadId: z$1.ZodOptional; + sourceSeqEnd: z$1.ZodOptional; + startedOnBehalfOf: z$1.ZodDefault; + senderThreadId: z$1.ZodString; + }, z$1.core.$strip>>>; + originKind: z$1.ZodDefault>>; + childOrigin: z$1.ZodDefault>>; +}, z$1.core.$strip>; +type CreateThreadRequest = z$1.infer; +declare const forkThreadRequestSchema: z$1.ZodObject<{ + sourceThreadId: z$1.ZodString; + sourceSeqEnd: z$1.ZodOptional; + input: z$1.ZodOptional>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>>; + agentContextSeed: z$1.ZodOptional>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">, z$1.ZodObject<{ + visibility: z$1.ZodLiteral<"agent-only">; + }, z$1.core.$strip>>>>; + title: z$1.ZodOptional; + permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; + visibility: z$1.ZodDefault>; + workspace: z$1.ZodDefault>; + origin: z$1.ZodDefault>; + originPluginId: z$1.ZodOptional; +}, z$1.core.$strip>; +type ForkThreadRequest = z$1.infer; +declare const sendMessageRequestSchema: z$1.ZodObject<{ + input: z$1.ZodArray>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>; + model: z$1.ZodOptional; + serviceTier: z$1.ZodOptional>; + reasoningLevel: z$1.ZodOptional>; + permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; + executionInputSources: z$1.ZodOptional>; + serviceTier: z$1.ZodOptional>; + reasoningLevel: z$1.ZodOptional>; + permissionMode: z$1.ZodOptional>; + }, z$1.core.$strict>>; + mode: z$1.ZodEnum<{ + steer: "steer"; + start: "start"; + auto: "auto"; + "queue-if-active": "queue-if-active"; + "steer-if-active": "steer-if-active"; + }>; + senderThreadId: z$1.ZodOptional; +}, z$1.core.$strip>; +type SendMessageRequest = z$1.infer; +declare const createQueuedMessageRequestSchema: z$1.ZodObject<{ + input: z$1.ZodArray>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>; + model: z$1.ZodOptional; + serviceTier: z$1.ZodOptional>; + reasoningLevel: z$1.ZodOptional>; + permissionMode: z$1.ZodOptional, z$1.ZodLiteral<"workspace-write">]>, z$1.ZodTransform<"auto" | "accept-edits" | "full", "auto" | "accept-edits" | "full" | "workspace-write">>>; + executionInputSources: z$1.ZodOptional>; + serviceTier: z$1.ZodOptional>; + reasoningLevel: z$1.ZodOptional>; + permissionMode: z$1.ZodOptional>; + }, z$1.core.$strict>>; + senderThreadId: z$1.ZodOptional; +}, z$1.core.$strip>; +type CreateQueuedMessageRequest = z$1.infer; +declare const updateQueuedMessageRequestSchema: z$1.ZodObject<{ + expectedUpdatedAt: z$1.ZodNumber; + input: z$1.ZodArray>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>; +}, z$1.core.$strip>; +type UpdateQueuedMessageRequest = z$1.infer; +declare const sendQueuedMessageRequestSchema: z$1.ZodObject<{ + mode: z$1.ZodEnum<{ + steer: "steer"; + auto: "auto"; + }>; +}, z$1.core.$strip>; +type SendQueuedMessageRequest = z$1.infer; +declare const reorderQueuedMessageRequestSchema: z$1.ZodObject<{ + previousQueuedMessageId: z$1.ZodNullable; + nextQueuedMessageId: z$1.ZodNullable; + groupBoundaryQueuedMessageId: z$1.ZodOptional; +}, z$1.core.$strip>; +type ReorderQueuedMessageRequest = z$1.infer; +declare const setQueuedMessageGroupBoundaryRequestSchema: z$1.ZodObject<{ + expectedGroupedPrefixQueuedMessageIds: z$1.ZodArray; + groupBoundaryQueuedMessageId: z$1.ZodString; +}, z$1.core.$strip>; +type SetQueuedMessageGroupBoundaryRequest = z$1.infer; +declare const sendQueuedMessageResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + queuedMessage: z$1.ZodObject<{ + id: z$1.ZodString; + content: z$1.ZodArray>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>; + model: z$1.ZodString; + reasoningLevel: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + permissionMode: z$1.ZodEnum<{ + auto: "auto"; + "accept-edits": "accept-edits"; + full: "full"; + }>; + serviceTier: z$1.ZodEnum<{ + default: "default"; + fast: "fast"; + }>; + groupWithNext: z$1.ZodBoolean; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + }, z$1.core.$strip>; +}, z$1.core.$strip>; +type SendQueuedMessageResponse = z$1.infer; +declare const threadListResponseSchema: z$1.ZodArray; + providerId: z$1.ZodString; + title: z$1.ZodNullable; + titleFallback: z$1.ZodNullable; + sectionId: z$1.ZodNullable; + status: z$1.ZodEnum<{ + error: "error"; + stopping: "stopping"; + idle: "idle"; + starting: "starting"; + active: "active"; + }>; + parentThreadId: z$1.ZodNullable; + sourceThreadId: z$1.ZodNullable; + originKind: z$1.ZodNullable>; + childOrigin: z$1.ZodNullable>; + originPluginId: z$1.ZodNullable; + visibility: z$1.ZodEnum<{ + visible: "visible"; + hidden: "hidden"; + }>; + archivedAt: z$1.ZodNullable; + pinnedAt: z$1.ZodNullable; + deletedAt: z$1.ZodNullable; + lastReadAt: z$1.ZodNullable; + latestAttentionAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + runtime: z$1.ZodObject<{ + displayStatus: z$1.ZodEnum<{ + error: "error"; + provisioning: "provisioning"; + stopping: "stopping"; + idle: "idle"; + starting: "starting"; + active: "active"; + "host-reconnecting": "host-reconnecting"; + "waiting-for-host": "waiting-for-host"; + }>; + hostReconnectGraceExpiresAt: z$1.ZodNullable; + }, z$1.core.$strip>; + activity: z$1.ZodObject<{ + activeWorkflowCount: z$1.ZodNumber; + activeBackgroundAgentCount: z$1.ZodNumber; + activeBackgroundCommandCount: z$1.ZodNumber; + activePlanModeCount: z$1.ZodNumber; + activeGoalCount: z$1.ZodNumber; + }, z$1.core.$strip>; + pinSortKey: z$1.ZodNullable; + hasPendingInteraction: z$1.ZodBoolean; + environmentHostId: z$1.ZodNullable; + environmentName: z$1.ZodNullable; + environmentBranchName: z$1.ZodNullable; + environmentWorkspaceDisplayKind: z$1.ZodEnum<{ + "managed-worktree": "managed-worktree"; + "unmanaged-worktree": "unmanaged-worktree"; + other: "other"; + }>; +}, z$1.core.$strip>>; +type ThreadListResponse = z$1.infer; +declare const threadSearchResponseSchema: z$1.ZodObject<{ + active: z$1.ZodObject<{ + total: z$1.ZodNumber; + results: z$1.ZodArray; + providerId: z$1.ZodString; + title: z$1.ZodNullable; + titleFallback: z$1.ZodNullable; + sectionId: z$1.ZodNullable; + status: z$1.ZodEnum<{ + error: "error"; + stopping: "stopping"; + idle: "idle"; + starting: "starting"; + active: "active"; + }>; + parentThreadId: z$1.ZodNullable; + sourceThreadId: z$1.ZodNullable; + originKind: z$1.ZodNullable>; + childOrigin: z$1.ZodNullable>; + originPluginId: z$1.ZodNullable; + visibility: z$1.ZodEnum<{ + visible: "visible"; + hidden: "hidden"; + }>; + archivedAt: z$1.ZodNullable; + pinnedAt: z$1.ZodNullable; + deletedAt: z$1.ZodNullable; + lastReadAt: z$1.ZodNullable; + latestAttentionAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + runtime: z$1.ZodObject<{ + displayStatus: z$1.ZodEnum<{ + error: "error"; + provisioning: "provisioning"; + stopping: "stopping"; + idle: "idle"; + starting: "starting"; + active: "active"; + "host-reconnecting": "host-reconnecting"; + "waiting-for-host": "waiting-for-host"; + }>; + hostReconnectGraceExpiresAt: z$1.ZodNullable; + }, z$1.core.$strip>; + activity: z$1.ZodObject<{ + activeWorkflowCount: z$1.ZodNumber; + activeBackgroundAgentCount: z$1.ZodNumber; + activeBackgroundCommandCount: z$1.ZodNumber; + activePlanModeCount: z$1.ZodNumber; + activeGoalCount: z$1.ZodNumber; + }, z$1.core.$strip>; + pinSortKey: z$1.ZodNullable; + hasPendingInteraction: z$1.ZodBoolean; + environmentHostId: z$1.ZodNullable; + environmentName: z$1.ZodNullable; + environmentBranchName: z$1.ZodNullable; + environmentWorkspaceDisplayKind: z$1.ZodEnum<{ + "managed-worktree": "managed-worktree"; + "unmanaged-worktree": "unmanaged-worktree"; + other: "other"; + }>; + }, z$1.core.$strip>; + matches: z$1.ZodArray; + text: z$1.ZodString; + highlightRanges: z$1.ZodArray>; + sourceSeq: z$1.ZodNullable; + }, z$1.core.$strict>>; + }, z$1.core.$strict>>; + }, z$1.core.$strict>; + archived: z$1.ZodObject<{ + total: z$1.ZodNumber; + results: z$1.ZodArray; + providerId: z$1.ZodString; + title: z$1.ZodNullable; + titleFallback: z$1.ZodNullable; + sectionId: z$1.ZodNullable; + status: z$1.ZodEnum<{ + error: "error"; + stopping: "stopping"; + idle: "idle"; + starting: "starting"; + active: "active"; + }>; + parentThreadId: z$1.ZodNullable; + sourceThreadId: z$1.ZodNullable; + originKind: z$1.ZodNullable>; + childOrigin: z$1.ZodNullable>; + originPluginId: z$1.ZodNullable; + visibility: z$1.ZodEnum<{ + visible: "visible"; + hidden: "hidden"; + }>; + archivedAt: z$1.ZodNullable; + pinnedAt: z$1.ZodNullable; + deletedAt: z$1.ZodNullable; + lastReadAt: z$1.ZodNullable; + latestAttentionAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + runtime: z$1.ZodObject<{ + displayStatus: z$1.ZodEnum<{ + error: "error"; + provisioning: "provisioning"; + stopping: "stopping"; + idle: "idle"; + starting: "starting"; + active: "active"; + "host-reconnecting": "host-reconnecting"; + "waiting-for-host": "waiting-for-host"; + }>; + hostReconnectGraceExpiresAt: z$1.ZodNullable; + }, z$1.core.$strip>; + activity: z$1.ZodObject<{ + activeWorkflowCount: z$1.ZodNumber; + activeBackgroundAgentCount: z$1.ZodNumber; + activeBackgroundCommandCount: z$1.ZodNumber; + activePlanModeCount: z$1.ZodNumber; + activeGoalCount: z$1.ZodNumber; + }, z$1.core.$strip>; + pinSortKey: z$1.ZodNullable; + hasPendingInteraction: z$1.ZodBoolean; + environmentHostId: z$1.ZodNullable; + environmentName: z$1.ZodNullable; + environmentBranchName: z$1.ZodNullable; + environmentWorkspaceDisplayKind: z$1.ZodEnum<{ + "managed-worktree": "managed-worktree"; + "unmanaged-worktree": "unmanaged-worktree"; + other: "other"; + }>; + }, z$1.core.$strip>; + matches: z$1.ZodArray; + text: z$1.ZodString; + highlightRanges: z$1.ZodArray>; + sourceSeq: z$1.ZodNullable; + }, z$1.core.$strict>>; + }, z$1.core.$strict>>; + }, z$1.core.$strict>; +}, z$1.core.$strict>; +type ThreadSearchResponse = z$1.infer; +declare const threadResponseSchema: z$1.ZodObject<{ + id: z$1.ZodString; + projectId: z$1.ZodString; + environmentId: z$1.ZodNullable; + providerId: z$1.ZodString; + title: z$1.ZodNullable; + titleFallback: z$1.ZodNullable; + sectionId: z$1.ZodNullable; + status: z$1.ZodEnum<{ + error: "error"; + stopping: "stopping"; + idle: "idle"; + starting: "starting"; + active: "active"; + }>; + parentThreadId: z$1.ZodNullable; + sourceThreadId: z$1.ZodNullable; + originKind: z$1.ZodNullable>; + childOrigin: z$1.ZodNullable>; + originPluginId: z$1.ZodNullable; + visibility: z$1.ZodEnum<{ + visible: "visible"; + hidden: "hidden"; + }>; + archivedAt: z$1.ZodNullable; + pinnedAt: z$1.ZodNullable; + deletedAt: z$1.ZodNullable; + lastReadAt: z$1.ZodNullable; + latestAttentionAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + runtime: z$1.ZodObject<{ + displayStatus: z$1.ZodEnum<{ + error: "error"; + provisioning: "provisioning"; + stopping: "stopping"; + idle: "idle"; + starting: "starting"; + active: "active"; + "host-reconnecting": "host-reconnecting"; + "waiting-for-host": "waiting-for-host"; + }>; + hostReconnectGraceExpiresAt: z$1.ZodNullable; + }, z$1.core.$strip>; + canSpawnChild: z$1.ZodBoolean; +}, z$1.core.$strip>; +type ThreadResponse = z$1.infer; +declare const threadGetQuerySchema: z$1.ZodObject<{ + include: z$1.ZodOptional; +}, z$1.core.$strip>; +type ThreadGetQuery = z$1.infer; +declare const threadWithIncludesResponseSchema: z$1.ZodObject<{ + id: z$1.ZodString; + projectId: z$1.ZodString; + environmentId: z$1.ZodNullable; + providerId: z$1.ZodString; + title: z$1.ZodNullable; + titleFallback: z$1.ZodNullable; + sectionId: z$1.ZodNullable; + status: z$1.ZodEnum<{ + error: "error"; + stopping: "stopping"; + idle: "idle"; + starting: "starting"; + active: "active"; + }>; + parentThreadId: z$1.ZodNullable; + sourceThreadId: z$1.ZodNullable; + originKind: z$1.ZodNullable>; + childOrigin: z$1.ZodNullable>; + originPluginId: z$1.ZodNullable; + visibility: z$1.ZodEnum<{ + visible: "visible"; + hidden: "hidden"; + }>; + archivedAt: z$1.ZodNullable; + pinnedAt: z$1.ZodNullable; + deletedAt: z$1.ZodNullable; + lastReadAt: z$1.ZodNullable; + latestAttentionAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + runtime: z$1.ZodObject<{ + displayStatus: z$1.ZodEnum<{ + error: "error"; + provisioning: "provisioning"; + stopping: "stopping"; + idle: "idle"; + starting: "starting"; + active: "active"; + "host-reconnecting": "host-reconnecting"; + "waiting-for-host": "waiting-for-host"; + }>; + hostReconnectGraceExpiresAt: z$1.ZodNullable; + }, z$1.core.$strip>; + canSpawnChild: z$1.ZodBoolean; + environment: z$1.ZodOptional; + projectId: z$1.ZodString; + hostId: z$1.ZodString; + path: z$1.ZodNullable; + managed: z$1.ZodBoolean; + isGitRepo: z$1.ZodBoolean; + isWorktree: z$1.ZodBoolean; + workspaceProvisionType: z$1.ZodEnum<{ + unmanaged: "unmanaged"; + "managed-worktree": "managed-worktree"; + personal: "personal"; + }>; + branchName: z$1.ZodNullable; + baseBranch: z$1.ZodNullable; + defaultBranch: z$1.ZodNullable; + mergeBaseBranch: z$1.ZodNullable; + status: z$1.ZodEnum<{ + error: "error"; + provisioning: "provisioning"; + ready: "ready"; + retiring: "retiring"; + destroying: "destroying"; + destroyed: "destroyed"; + }>; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + }, z$1.core.$strip>>>; + host: z$1.ZodOptional; + status: z$1.ZodEnum<{ + disconnected: "disconnected"; + connected: "connected"; + }>; + lastSeenAt: z$1.ZodNullable; + lastRejectedProtocolVersion: z$1.ZodNullable; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; + }, z$1.core.$strip>>>; +}, z$1.core.$strip>; +type ThreadWithIncludesResponse = z$1.infer; +declare const threadPendingInteractionsResponseSchema: z$1.ZodArray; + statusReason: z$1.ZodNullable; + createdAt: z$1.ZodNumber; + expiresAt: z$1.ZodOptional>; + resolvedAt: z$1.ZodNullable; + turnId: z$1.ZodString; + providerId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerRequestId: z$1.ZodString; + origin: z$1.ZodOptional; + providerId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerRequestId: z$1.ZodString; + }, z$1.core.$strip>>; + payload: z$1.ZodUnion; + subject: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + itemId: z$1.ZodString; + command: z$1.ZodString; + cwd: z$1.ZodNullable; + actions: z$1.ZodArray; + command: z$1.ZodString; + name: z$1.ZodString; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"listFiles">; + command: z$1.ZodString; + path: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"search">; + command: z$1.ZodString; + query: z$1.ZodNullable; + path: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + type: z$1.ZodLiteral<"unknown">; + command: z$1.ZodString; + }, z$1.core.$strip>], "type">>; + sessionGrant: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"file_change">; + itemId: z$1.ZodString; + writeScope: z$1.ZodNullable; + sessionGrant: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"permission_grant">; + itemId: z$1.ZodString; + toolName: z$1.ZodNullable; + permissions: z$1.ZodObject<{ + network: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>; + }, z$1.core.$strip>], "kind">; + reason: z$1.ZodNullable; + availableDecisions: z$1.ZodArray>; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"user_question">; + questions: z$1.ZodArray; + multiSelect: z$1.ZodBoolean; + options: z$1.ZodOptional; + }, z$1.core.$strip>>>; + allowFreeText: z$1.ZodBoolean; + }, z$1.core.$strip>>; + }, z$1.core.$strip>]>; + resolution: z$1.ZodNullable; + grantedPermissions: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + decision: z$1.ZodLiteral<"allow_for_session">; + grantedPermissions: z$1.ZodNullable; + }, z$1.core.$strip>>; + fileSystem: z$1.ZodNullable; + write: z$1.ZodArray; + }, z$1.core.$strip>>; + }, z$1.core.$strict>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + decision: z$1.ZodLiteral<"deny">; + }, z$1.core.$strip>], "decision">, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"user_answer">; + answers: z$1.ZodRecord; + freeText: z$1.ZodOptional; + }, z$1.core.$strip>>; + }, z$1.core.$strip>]>>; +}, z$1.core.$strip>, z$1.ZodObject<{ + id: z$1.ZodString; + threadId: z$1.ZodString; + status: z$1.ZodEnum<{ + pending: "pending"; + interrupted: "interrupted"; + resolving: "resolving"; + resolved: "resolved"; + }>; + statusReason: z$1.ZodNullable; + createdAt: z$1.ZodNumber; + expiresAt: z$1.ZodOptional>; + resolvedAt: z$1.ZodNullable; + turnId: z$1.ZodNullable; + origin: z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + rendererId: z$1.ZodString; + }, z$1.core.$strip>; + payload: z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + title: z$1.ZodString; + data: z$1.ZodType>; + }, z$1.core.$strip>; + resolution: z$1.ZodNullable; + }, z$1.core.$strip>>; +}, z$1.core.$strip>]>>; +type ThreadPendingInteractionsResponse = z$1.infer; +declare const threadQueuedMessageListResponseSchema: z$1.ZodArray>; + type: z$1.ZodLiteral<"text">; + text: z$1.ZodString; + mentions: z$1.ZodDefault, z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"thread">; + threadId: z$1.ZodString; + projectId: z$1.ZodOptional; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"project">; + projectId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"section">; + sectionId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"path">; + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + entryKind: z$1.ZodEnum<{ + file: "file"; + directory: "directory"; + }>; + path: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"command">; + trigger: z$1.ZodEnum<{ + "/": "/"; + }>; + name: z$1.ZodString; + source: z$1.ZodEnum<{ + command: "command"; + skill: "skill"; + }>; + origin: z$1.ZodEnum<{ + user: "user"; + project: "project"; + builtin: "builtin"; + }>; + label: z$1.ZodString; + argumentHint: z$1.ZodNullable; + }, z$1.core.$strip>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"plugin">; + pluginId: z$1.ZodString; + icon: z$1.ZodOptional>; + itemId: z$1.ZodString; + label: z$1.ZodString; + }, z$1.core.$strip>], "kind">>; + }, z$1.core.$strip>>>; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"image">; + url: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localImage">; + path: z$1.ZodString; + }, z$1.core.$strip>, z$1.ZodObject<{ + visibility: z$1.ZodOptional>; + type: z$1.ZodLiteral<"localFile">; + path: z$1.ZodString; + name: z$1.ZodOptional; + sizeBytes: z$1.ZodOptional; + mimeType: z$1.ZodOptional; + }, z$1.core.$strip>], "type">>; + model: z$1.ZodString; + reasoningLevel: z$1.ZodEnum<{ + none: "none"; + low: "low"; + medium: "medium"; + high: "high"; + xhigh: "xhigh"; + ultracode: "ultracode"; + max: "max"; + ultra: "ultra"; + }>; + permissionMode: z$1.ZodEnum<{ + auto: "auto"; + "accept-edits": "accept-edits"; + full: "full"; + }>; + serviceTier: z$1.ZodEnum<{ + default: "default"; + fast: "fast"; + }>; + groupWithNext: z$1.ZodBoolean; + createdAt: z$1.ZodNumber; + updatedAt: z$1.ZodNumber; +}, z$1.core.$strip>>; +type ThreadQueuedMessageListResponse = z$1.infer; +declare const threadChildSummaryResponseSchema: z$1.ZodObject<{ + nonDeletedChildCount: z$1.ZodNumber; +}, z$1.core.$strip>; +type ThreadChildSummaryResponse = z$1.infer; +declare const deleteThreadRequestSchema: z$1.ZodObject<{ + childThreadsConfirmed: z$1.ZodBoolean; +}, z$1.core.$strip>; +type DeleteThreadRequest = z$1.infer; +declare const updateThreadRequestSchema: z$1.ZodObject<{ + title: z$1.ZodOptional>; + sectionId: z$1.ZodOptional>; + parentThreadId: z$1.ZodOptional>; + model: z$1.ZodOptional>; + reasoningLevel: z$1.ZodOptional>>; + visibility: z$1.ZodOptional>; +}, z$1.core.$strip>; +type UpdateThreadRequest = z$1.infer; +declare const reorderPinnedThreadRequestSchema: z$1.ZodObject<{ + previousThreadId: z$1.ZodNullable; + nextThreadId: z$1.ZodNullable; +}, z$1.core.$strip>; +type ReorderPinnedThreadRequest = z$1.infer; +/** + * Requested placement for a thread opened in the app's split layout. Edge + * placements add panes through the eighth pane; at the cap they replace the + * focused pane. `replace` always replaces the focused pane. + */ +declare const threadOpenSplitSchema: z$1.ZodEnum<{ + right: "right"; + down: "down"; + left: "left"; + top: "top"; + replace: "replace"; +}>; +type ThreadOpenSplit = z$1.infer; +/** Optional secondary-panel file to open with a thread. */ +declare const threadOpenFileSchema: z$1.ZodObject<{ + source: z$1.ZodEnum<{ + workspace: "workspace"; + "thread-storage": "thread-storage"; + }>; + path: z$1.ZodString; + lineNumber: z$1.ZodNullable; +}, z$1.core.$strict>; +type ThreadOpenFile = z$1.infer; +/** Response for POST /threads/:id/open: how many connected clients received it. */ +declare const threadOpenResponseSchema: z$1.ZodObject<{ + delivered: z$1.ZodNumber; +}, z$1.core.$strip>; +type ThreadOpenResponse = z$1.infer; +/** Presentation action for one thread pane in each connected app window. */ +declare const threadPaneActionSchema: z$1.ZodEnum<{ + maximize: "maximize"; + restore: "restore"; + toggle: "toggle"; +}>; +type ThreadPaneAction = z$1.infer; +/** Number of connected app clients that received the pane action. */ +declare const threadPaneActionResponseSchema: z$1.ZodObject<{ + delivered: z$1.ZodNumber; +}, z$1.core.$strip>; +type ThreadPaneActionResponse = z$1.infer; +declare const threadArchiveAllResponseSchema: z$1.ZodObject<{ + ok: z$1.ZodLiteral; + archivedThreadIds: z$1.ZodArray; +}, z$1.core.$strip>; +type ThreadArchiveAllResponse = z$1.infer; +declare const threadListQuerySchema: z$1.ZodObject<{ + projectId: z$1.ZodOptional; + parentThreadId: z$1.ZodOptional; + sourceThreadId: z$1.ZodOptional; + archived: z$1.ZodOptional>; + sectionId: z$1.ZodOptional; + unsectioned: z$1.ZodOptional>; + hasParent: z$1.ZodOptional>; + originKind: z$1.ZodOptional>; + excludeSideChats: z$1.ZodOptional>; + childOrigin: z$1.ZodOptional>; + includeHidden: z$1.ZodOptional>; + limit: z$1.ZodOptional; + offset: z$1.ZodOptional; +}, z$1.core.$strip>; +type ThreadListQuery = z$1.infer; +declare const threadSearchQuerySchema: z$1.ZodObject<{ + query: z$1.ZodString; + limitPerGroup: z$1.ZodOptional; +}, z$1.core.$strip>; +type ThreadSearchQuery = z$1.infer; +declare const threadTimelineQuerySchema: z$1.ZodObject<{ + includeNestedRows: z$1.ZodOptional>; + segmentLimit: z$1.ZodOptional; + beforeAnchorSeq: z$1.ZodOptional; + beforeAnchorId: z$1.ZodOptional; + summaryOnly: z$1.ZodOptional>; + afterSequence: z$1.ZodOptional; +}, z$1.core.$strip>; +type ThreadTimelineQuery = z$1.infer; +declare const timelineTurnSummaryDetailsQuerySchema: z$1.ZodObject<{ + turnId: z$1.ZodString; + sourceSeqStart: z$1.ZodString; + sourceSeqEnd: z$1.ZodString; +}, z$1.core.$strip>; +type TimelineTurnSummaryDetailsQuery = z$1.infer; +declare const threadStorageFilesQuerySchema: z$1.ZodObject<{ + query: z$1.ZodOptional; + limit: z$1.ZodOptional; +}, z$1.core.$strip>; +type ThreadStorageFilesQuery = z$1.infer; +declare const threadStoragePathsQuerySchema: z$1.ZodObject<{ + query: z$1.ZodOptional; + limit: z$1.ZodOptional; + includeFiles: z$1.ZodEnum<{ + true: "true"; + false: "false"; + }>; + includeDirectories: z$1.ZodEnum<{ + true: "true"; + false: "false"; + }>; +}, z$1.core.$strip>; +type ThreadStoragePathsQuery = z$1.infer; +declare const timelineTurnSummaryDetailsResponseSchema: z$1.ZodObject<{ + rows: z$1.ZodArray>>; +}, z$1.core.$strip>; +type TimelineTurnSummaryDetailsResponse = z$1.infer; +declare const threadTimelineResponseSchema: z$1.ZodObject<{ + rows: z$1.ZodArray>>; + activePromptMode: z$1.ZodNullable; + providerId: z$1.ZodEnum<{ + "claude-code": "claude-code"; + codex: "codex"; + }>; + prompt: z$1.ZodString; + }, z$1.core.$strict>>; + activeThinking: z$1.ZodNullable>; + activeWorkflows: z$1.ZodArray; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"work">; + status: z$1.ZodEnum<{ + error: "error"; + pending: "pending"; + completed: "completed"; + interrupted: "interrupted"; + }>; + workKind: z$1.ZodLiteral<"workflow">; + itemId: z$1.ZodString; + taskType: z$1.ZodString; + workflowName: z$1.ZodNullable; + description: z$1.ZodString; + taskStatus: z$1.ZodEnum<{ + pending: "pending"; + completed: "completed"; + running: "running"; + paused: "paused"; + failed: "failed"; + killed: "killed"; + stopped: "stopped"; + }>; + workflow: z$1.ZodNullable; + }, z$1.core.$strip>>; + agents: z$1.ZodArray; + model: z$1.ZodString; + attempt: z$1.ZodNumber; + cached: z$1.ZodBoolean; + lastProgressAt: z$1.ZodNumber; + phaseIndex: z$1.ZodOptional; + phaseTitle: z$1.ZodOptional; + agentType: z$1.ZodOptional; + isolation: z$1.ZodOptional; + queuedAt: z$1.ZodOptional; + startedAt: z$1.ZodOptional; + lastToolName: z$1.ZodOptional; + lastToolSummary: z$1.ZodOptional; + promptPreview: z$1.ZodOptional; + resultPreview: z$1.ZodOptional; + error: z$1.ZodOptional; + tokens: z$1.ZodOptional; + toolCalls: z$1.ZodOptional; + durationMs: z$1.ZodOptional; + }, z$1.core.$strip>>; + }, z$1.core.$strip>>; + usage: z$1.ZodNullable>; + summary: z$1.ZodNullable; + error: z$1.ZodNullable; + completedAt: z$1.ZodNullable; + }, z$1.core.$strip>>; + activeBackgroundCommands: z$1.ZodArray; + sourceSeqStart: z$1.ZodNumber; + sourceSeqEnd: z$1.ZodNumber; + startedAt: z$1.ZodNumber; + createdAt: z$1.ZodNumber; + kind: z$1.ZodLiteral<"work">; + status: z$1.ZodEnum<{ + error: "error"; + pending: "pending"; + completed: "completed"; + interrupted: "interrupted"; + }>; + workKind: z$1.ZodLiteral<"workflow">; + itemId: z$1.ZodString; + taskType: z$1.ZodString; + workflowName: z$1.ZodNullable; + description: z$1.ZodString; + taskStatus: z$1.ZodEnum<{ + pending: "pending"; + completed: "completed"; + running: "running"; + paused: "paused"; + failed: "failed"; + killed: "killed"; + stopped: "stopped"; + }>; + workflow: z$1.ZodNullable; + }, z$1.core.$strip>>; + agents: z$1.ZodArray; + model: z$1.ZodString; + attempt: z$1.ZodNumber; + cached: z$1.ZodBoolean; + lastProgressAt: z$1.ZodNumber; + phaseIndex: z$1.ZodOptional; + phaseTitle: z$1.ZodOptional; + agentType: z$1.ZodOptional; + isolation: z$1.ZodOptional; + queuedAt: z$1.ZodOptional; + startedAt: z$1.ZodOptional; + lastToolName: z$1.ZodOptional; + lastToolSummary: z$1.ZodOptional; + promptPreview: z$1.ZodOptional; + resultPreview: z$1.ZodOptional; + error: z$1.ZodOptional; + tokens: z$1.ZodOptional; + toolCalls: z$1.ZodOptional; + durationMs: z$1.ZodOptional; + }, z$1.core.$strip>>; + }, z$1.core.$strip>>; + usage: z$1.ZodNullable>; + summary: z$1.ZodNullable; + error: z$1.ZodNullable; + completedAt: z$1.ZodNullable; + }, z$1.core.$strip>>; + pendingTodos: z$1.ZodNullable; + }, z$1.core.$strip>>; + }, z$1.core.$strip>>; + goal: z$1.ZodNullable; + tokenBudget: z$1.ZodNullable; + tokensUsed: z$1.ZodNumber; + timeUsedSeconds: z$1.ZodNumber; + }, z$1.core.$strip>>; + modelFallback: z$1.ZodNullable; + message: z$1.ZodString; + }, z$1.core.$strip>>; + contextWindowUsage: z$1.ZodOptional>; + timelinePage: z$1.ZodObject<{ + kind: z$1.ZodEnum<{ + latest: "latest"; + older: "older"; + }>; + segmentLimit: z$1.ZodNumber; + returnedSegmentCount: z$1.ZodNumber; + hasOlderRows: z$1.ZodBoolean; + olderCursor: z$1.ZodNullable>; + }, z$1.core.$strict>; + maxSeq: z$1.ZodNumber; + delta: z$1.ZodOptional>>; + rowOrder: z$1.ZodOptional>; + }, z$1.core.$strip>>; +}, z$1.core.$strip>; +type ThreadTimelineResponse = z$1.infer; +declare const threadConversationOutlineResponseSchema: z$1.ZodObject<{ + items: z$1.ZodArray; + preview: z$1.ZodString; + attachmentSummary: z$1.ZodNullable>; + }, z$1.core.$strict>>; + maxSeq: z$1.ZodNumber; +}, z$1.core.$strict>; +type ThreadConversationOutlineResponse = z$1.infer; +declare const threadStorageFileListResponseSchema: z$1.ZodObject<{ + files: z$1.ZodArray>; + truncated: z$1.ZodBoolean; + storageRootPath: z$1.ZodString; +}, z$1.core.$strip>; +type ThreadStorageFileListResponse = z$1.infer; +declare const threadStoragePathListResponseSchema: z$1.ZodObject<{ + paths: z$1.ZodArray; + path: z$1.ZodString; + name: z$1.ZodString; + score: z$1.ZodNumber; + positions: z$1.ZodArray; + }, z$1.core.$strip>>; + truncated: z$1.ZodBoolean; + storageRootPath: z$1.ZodString; +}, z$1.core.$strip>; +type ThreadStoragePathListResponse = z$1.infer; + +declare const threadTabsResponseSchema: z$1.ZodObject<{ + revision: z$1.ZodNumber; + tabs: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodObject<{ + id: z$1.ZodString; + kind: z$1.ZodLiteral<"git-diff">; + }, z$1.core.$strict>, z$1.ZodObject<{ + actionId: z$1.ZodString; + id: z$1.ZodString; + kind: z$1.ZodLiteral<"plugin-panel">; + paramsJson: z$1.ZodNullable; + pluginId: z$1.ZodString; + title: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + environmentId: z$1.ZodNullable; + id: z$1.ZodString; + kind: z$1.ZodLiteral<"workspace-file-preview">; + lineRange: z$1.ZodNullable>; + path: z$1.ZodString; + projectId: z$1.ZodNullable; + source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"working-tree">; + }, z$1.core.$strict>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"head">; + }, z$1.core.$strict>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"merge-base">; + ref: z$1.ZodString; + }, z$1.core.$strict>], "kind">; + statusLabel: z$1.ZodNullable>; + }, z$1.core.$strict>, z$1.ZodObject<{ + environmentId: z$1.ZodNullable; + id: z$1.ZodString; + kind: z$1.ZodLiteral<"host-file-preview">; + lineRange: z$1.ZodNullable>; + path: z$1.ZodString; + threadId: z$1.ZodNullable; + }, z$1.core.$strict>, z$1.ZodObject<{ + environmentId: z$1.ZodNullable; + id: z$1.ZodString; + isPinned: z$1.ZodBoolean; + kind: z$1.ZodLiteral<"thread-storage-file-preview">; + lineRange: z$1.ZodNullable>; + path: z$1.ZodString; + threadId: z$1.ZodNullable; + }, z$1.core.$strict>, z$1.ZodObject<{ + environmentId: z$1.ZodNullable; + id: z$1.ZodString; + kind: z$1.ZodLiteral<"browser">; + title: z$1.ZodNullable; + url: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + id: z$1.ZodString; + kind: z$1.ZodLiteral<"new-tab">; + }, z$1.core.$strict>, z$1.ZodObject<{ + id: z$1.ZodString; + kind: z$1.ZodLiteral<"side-chat">; + sourceMessageText: z$1.ZodString; + sourceSeqEnd: z$1.ZodNullable; + threadId: z$1.ZodNullable; + title: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + id: z$1.ZodString; + kind: z$1.ZodLiteral<"terminal">; + terminalId: z$1.ZodString; + }, z$1.core.$strict>], "kind">>; +}, z$1.core.$strict>; +type ThreadTabsResponse = z$1.infer; +declare const updateThreadTabsRequestSchema: z$1.ZodObject<{ + expectedRevision: z$1.ZodNumber; + tabs: z$1.ZodArray; + }, z$1.core.$strict>, z$1.ZodObject<{ + id: z$1.ZodString; + kind: z$1.ZodLiteral<"git-diff">; + }, z$1.core.$strict>, z$1.ZodObject<{ + actionId: z$1.ZodString; + id: z$1.ZodString; + kind: z$1.ZodLiteral<"plugin-panel">; + paramsJson: z$1.ZodNullable; + pluginId: z$1.ZodString; + title: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + environmentId: z$1.ZodNullable; + id: z$1.ZodString; + kind: z$1.ZodLiteral<"workspace-file-preview">; + lineRange: z$1.ZodNullable>; + path: z$1.ZodString; + projectId: z$1.ZodNullable; + source: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ + kind: z$1.ZodLiteral<"working-tree">; + }, z$1.core.$strict>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"head">; + }, z$1.core.$strict>, z$1.ZodObject<{ + kind: z$1.ZodLiteral<"merge-base">; + ref: z$1.ZodString; + }, z$1.core.$strict>], "kind">; + statusLabel: z$1.ZodNullable>; + }, z$1.core.$strict>, z$1.ZodObject<{ + environmentId: z$1.ZodNullable; + id: z$1.ZodString; + kind: z$1.ZodLiteral<"host-file-preview">; + lineRange: z$1.ZodNullable>; + path: z$1.ZodString; + threadId: z$1.ZodNullable; + }, z$1.core.$strict>, z$1.ZodObject<{ + environmentId: z$1.ZodNullable; + id: z$1.ZodString; + isPinned: z$1.ZodBoolean; + kind: z$1.ZodLiteral<"thread-storage-file-preview">; + lineRange: z$1.ZodNullable>; + path: z$1.ZodString; + threadId: z$1.ZodNullable; + }, z$1.core.$strict>, z$1.ZodObject<{ + environmentId: z$1.ZodNullable; + id: z$1.ZodString; + kind: z$1.ZodLiteral<"browser">; + title: z$1.ZodNullable; + url: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + id: z$1.ZodString; + kind: z$1.ZodLiteral<"new-tab">; + }, z$1.core.$strict>, z$1.ZodObject<{ + id: z$1.ZodString; + kind: z$1.ZodLiteral<"side-chat">; + sourceMessageText: z$1.ZodString; + sourceSeqEnd: z$1.ZodNullable; + threadId: z$1.ZodNullable; + title: z$1.ZodString; + }, z$1.core.$strict>, z$1.ZodObject<{ + id: z$1.ZodString; + kind: z$1.ZodLiteral<"terminal">; + terminalId: z$1.ZodString; + }, z$1.core.$strict>], "kind">>; +}, z$1.core.$strict>; +type UpdateThreadTabsRequest = z$1.infer; + +interface EnvironmentActionArgs { + environmentId: string; +} +interface EnvironmentGetArgs extends EnvironmentActionArgs { + signal?: AbortSignal; +} +type EnvironmentMergeBaseBranchUpdateValue = Exclude; +type EnvironmentNameUpdateValue = Exclude; +interface EnvironmentMergeBaseBranchUpdate { + mergeBaseBranch: EnvironmentMergeBaseBranchUpdateValue; + name?: EnvironmentNameUpdateValue; +} +interface EnvironmentNameUpdate { + mergeBaseBranch?: EnvironmentMergeBaseBranchUpdateValue; + name: EnvironmentNameUpdateValue; +} +type EnvironmentUpdateFields = EnvironmentMergeBaseBranchUpdate | EnvironmentNameUpdate; +type EnvironmentUpdateArgs = EnvironmentUpdateFields & { + environmentId: string; +}; +interface EnvironmentStatusArgs extends EnvironmentStatusQuery { + environmentId: string; + signal?: AbortSignal; +} +type EnvironmentDiffArgs = EnvironmentDiffQuery & { + environmentId: string; + signal?: AbortSignal; +}; +type EnvironmentDiffFileArgs = EnvironmentDiffFileQuery & { + environmentId: string; + signal?: AbortSignal; +}; +interface EnvironmentDiffBranchesArgs extends EnvironmentDiffBranchesQuery { + environmentId: string; + signal?: AbortSignal; +} +interface EnvironmentCommitArgs { + environmentId: string; +} +interface EnvironmentSquashMergeArgs { + environmentId: string; + mergeBaseBranch: string; +} +interface EnvironmentPullRequestMergeArgs { + environmentId: string; + method: PullRequestMergeMethod; +} +type EnvironmentDiffPatchArgs = EnvironmentDiffPatchRequest & { + environmentId: string; + signal?: AbortSignal; +}; +interface EnvironmentPathsArgs extends EnvironmentPathsQuery { + environmentId: string; + signal?: AbortSignal; +} +type EnvironmentArchiveThreadsResult = EnvironmentArchiveThreadsResponse; +type EnvironmentCommitResult = CommitActionResponse; +type EnvironmentDiffResult = EnvironmentDiffResponse; +type EnvironmentDiffBranchesResult = EnvironmentDiffBranchesResponse; +type EnvironmentDiffFileResult = EnvironmentDiffFileResponse; +type EnvironmentDiffFilesResult = EnvironmentDiffFilesResponse; +type EnvironmentDiffPatchResult = EnvironmentDiffPatchResponse; +type EnvironmentGetResult = Environment; +type EnvironmentMarkPullRequestDraftResult = PullRequestDraftActionResponse; +type EnvironmentMarkPullRequestReadyResult = PullRequestReadyActionResponse; +type EnvironmentMergePullRequestResult = PullRequestMergeActionResponse; +type EnvironmentPathsResult = WorkspacePathListResponse; +type EnvironmentPullRequestResult = EnvironmentPullRequestResponse; +type EnvironmentSquashMergeResult = SquashMergeActionResponse; +type EnvironmentStatusResult = EnvironmentStatusResponse; +type EnvironmentUpdateResult = Environment; +interface EnvironmentsArea { + archiveThreads(args: EnvironmentActionArgs): Promise; + commit(args: EnvironmentCommitArgs): Promise; + diff(args: EnvironmentDiffArgs): Promise; + diffBranches(args: EnvironmentDiffBranchesArgs): Promise; + diffFile(args: EnvironmentDiffFileArgs): Promise; + diffFiles(args: EnvironmentDiffArgs): Promise; + diffPatch(args: EnvironmentDiffPatchArgs): Promise; + get(args: EnvironmentGetArgs): Promise; + pullRequest(args: EnvironmentGetArgs): Promise; + markPullRequestDraft(args: EnvironmentActionArgs): Promise; + markPullRequestReady(args: EnvironmentActionArgs): Promise; + mergePullRequest(args: EnvironmentPullRequestMergeArgs): Promise; + paths(args: EnvironmentPathsArgs): Promise; + squashMerge(args: EnvironmentSquashMergeArgs): Promise; + status(args: EnvironmentStatusArgs): Promise; + update(args: EnvironmentUpdateArgs): Promise; +} + +/** + * Host file primitives. `hostId` may be omitted to target the server's + * primary (local) host. `rootPath`, when set, confines the target beneath + * that absolute root on the host (symlink-safe). + */ +interface FileReadArgs { + hostId?: string; + path: string; + rootPath?: string; + signal?: AbortSignal; +} +interface FileWriteArgs { + hostId?: string; + path: string; + rootPath?: string; + content: string; + /** Defaults to "utf8". */ + contentEncoding?: "utf8" | "base64"; + /** Defaults to false. */ + createParents?: boolean; + /** + * Optimistic-concurrency guard: omitted → unconditional write; a hash → + * write only when the current content hashes to it (use `read().sha256`); + * null → create-only. A failed guard resolves to the `conflict` outcome. + */ + expectedSha256?: string | null; + /** POSIX permission bits used when creating a file (for example 0o600). */ + mode?: number; +} +interface FileListArgs { + hostId?: string; + path: string; + query?: string; + limit?: number; + signal?: AbortSignal; +} +interface PathListArgs extends FileListArgs { + includeFiles: boolean; + includeDirectories: boolean; +} +interface FileMkdirArgs { + hostId?: string; + path: string; + rootPath?: string; + recursive?: boolean; +} +interface FileMoveArgs { + hostId?: string; + sourcePath: string; + destinationPath: string; + rootPath?: string; +} +interface FileRemoveArgs { + hostId?: string; + path: string; + rootPath?: string; + recursive?: boolean; +} +interface FilePreviewArgs { + hostId?: string; + rootPath: string; + signal?: AbortSignal; + ttlMs?: number; +} +type FileReadResult = HostFileReadResponse; +type FileWriteResult = HostFileWriteResponse; +type FileListResult = HostFileListResponse; +type PathListResult = HostPathListResponse; +type FileMkdirResult = HostMkdirResponse; +type FileMoveResult = HostMovePathResponse; +type FileRemoveResult = HostRemovePathResponse; +type FilePreviewResult = CreateFilePreviewResponse; +interface FilesArea { + read(args: FileReadArgs): Promise; + write(args: FileWriteArgs): Promise; + list(args: FileListArgs): Promise; + listPaths(args: PathListArgs): Promise; + mkdir(args: FileMkdirArgs): Promise; + move(args: FileMoveArgs): Promise; + remove(args: FileRemoveArgs): Promise; + createPreview(args: FilePreviewArgs): Promise; +} + +interface GuideRenderArgs { + chapter?: string; +} +interface GuideRenderResult { + chapter?: string; + content: string; +} +interface GuideArea { + render(args?: GuideRenderArgs): GuideRenderResult; +} + +interface HostGetArgs { + hostId: string; + signal?: AbortSignal; +} +interface HostDeleteArgs { + hostId: string; +} +interface HostUpdateArgs extends UpdateHostRequest { + hostId: string; +} +interface HostRetryUpdateArgs { + hostId: string; +} +interface HostDirectoryArgs extends HostDirectoryQuery { + hostId: string; + signal?: AbortSignal; +} +interface HostCloneDefaultPathArgs extends HostCloneDefaultPathQuery { + hostId: string; + signal?: AbortSignal; +} +interface HostPathsExistArgs extends HostPathsExistRequest { + hostId: string; + signal?: AbortSignal; +} +interface HostPickFolderArgs extends HostPickFolderRequest { + hostId: string; + signal?: AbortSignal; +} +interface HostProviderCliInstallArgs extends HostProviderCliInstallRequest { + hostId: string; +} +interface HostListArgs { + signal?: AbortSignal; +} +type HostCreateJoinCodeResult = CreateHostJoinCodeResponse; +type HostDeleteResult = { + ok: true; +}; +type HostDirectoryResult = HostDirectoryListing; +type HostGetResult = Host; +type HostCloneDefaultPathResult = HostCloneDefaultPathResponse; +type HostProviderCliInstallResult = HostProviderCliInstallEvent[]; +type HostListResult = Host[]; +type HostPathsExistResult = HostPathsExistResponse; +type HostPickFolderResult = HostPickFolderResponse; +type HostProviderCliStatusResult = HostProviderCliStatusResponse; +type HostRetryUpdateResult = HostRetryUpdateResponse; +type HostUpdateResult = Host; +interface HostsArea { + createJoinCode(): Promise; + delete(args: HostDeleteArgs): Promise; + directory(args: HostDirectoryArgs): Promise; + get(args: HostGetArgs): Promise; + cloneDefaultPath(args: HostCloneDefaultPathArgs): Promise; + installProviderCli(args: HostProviderCliInstallArgs): Promise; + list(args?: HostListArgs): Promise; + pathsExist(args: HostPathsExistArgs): Promise; + pickFolder(args: HostPickFolderArgs): Promise; + providerCliStatus(args: HostGetArgs): Promise; + retryUpdate(args: HostRetryUpdateArgs): Promise; + update(args: HostUpdateArgs): Promise; +} + +interface ProjectListArgs { + include?: ProjectListQuery["include"]; + /** Include the singleton personal project. Defaults to false for compatibility. */ + includePersonal?: boolean; + signal?: AbortSignal; +} +interface ProjectCreateArgs extends CreateProjectRequest { +} +interface ProjectGetArgs { + projectId: string; + signal?: AbortSignal; +} +interface ProjectUpdateArgs extends UpdateProjectRequest { + projectId: string; +} +interface ProjectDeleteArgs { + projectId: string; +} +interface ProjectReorderArgs extends ReorderProjectRequest { + projectId: string; +} +interface ProjectPromptHistoryArgs extends PromptHistoryQuery { + projectId: string; + signal?: AbortSignal; +} +/** Select one project workspace source, or omit both for the primary host. */ +type ProjectWorkspaceRoutingArgs = { + environmentId: string; + hostId?: never; +} | { + environmentId?: never; + hostId: string; +} | { + environmentId?: never; + hostId?: never; +}; +type ProjectFilesArgs = ProjectWorkspaceRoutingArgs & Omit & { + projectId: string; + signal?: AbortSignal; +}; +type ProjectPathsArgs = ProjectWorkspaceRoutingArgs & Omit & { + projectId: string; + signal?: AbortSignal; +}; +type ProjectCommandsArgs = ProjectWorkspaceRoutingArgs & Omit & { + projectId: string; + signal?: AbortSignal; +}; +type ProjectFileContentArgs = ProjectWorkspaceRoutingArgs & Omit & { + projectId: string; + signal?: AbortSignal; +}; +interface ProjectBranchesArgs extends ProjectBranchesQuery { + projectId: string; + signal?: AbortSignal; +} +interface ProjectDefaultExecutionOptionsArgs { + projectId: string; + signal?: AbortSignal; +} +interface ProjectAttachmentFileLike { + arrayBuffer(): Promise; + readonly name: string; + readonly type?: string; +} +interface ProjectAttachmentUploadArgsBase { + /** MIME override. Omit to use the File/Blob type, when available. */ + mimeType?: string; + projectId: string; +} +/** + * Upload bytes owned by this SDK client. A bare Blob/byte buffer needs an + * explicit filename; File-like values can supply their own name. + */ +type ProjectAttachmentUploadArgs = ProjectAttachmentUploadArgsBase & ({ + clientFile: ProjectAttachmentFileLike; + filename?: string; +} | { + clientFile: ArrayBuffer | Blob | Uint8Array; + filename: string; +}); +interface ProjectAttachmentReadArgs { + path: string; + projectId: string; + signal?: AbortSignal; +} +interface ProjectAttachmentCopyArgs extends CopyProjectAttachmentsRequest { + projectId: string; +} +type ProjectSourceAddArgs = CreateProjectSourceRequest & { + projectId: string; +}; +interface ProjectSourceUpdateArgs extends UpdateProjectSourceRequest { + projectId: string; + sourceId: string; +} +interface ProjectSourceDeleteArgs { + projectId: string; + sourceId: string; +} +type ProjectBranchesResult = ProjectBranchesResponse; +interface ProjectAttachmentReadResult { + bytes: Uint8Array; + mimeType: string; + sizeBytes: number; +} +type ProjectAttachmentUploadResult = UploadedPromptAttachment; +type ProjectCommandsResult = CommandListResponse; +type ProjectCreateResult = ProjectResponse; +type ProjectDefaultExecutionOptionsResult = ProjectExecutionDefaults | null; +type ProjectDeleteResult = { + ok: true; +}; +interface ProjectFileContentResult { + /** UTF-8 text or base64, as selected by `contentEncoding`. */ + content: string; + contentEncoding: "utf8" | "base64"; + mimeType: string; + sizeBytes: number; +} +type ProjectFilesResult = WorkspaceFileListResponse; +type ProjectGetResult = ProjectResponse; +type ProjectListResult = ProjectResponse[] | ProjectWithThreadsResponse[]; +type ProjectPathsResult = WorkspacePathListResponse; +type ProjectPromptHistoryResult = PromptHistoryResponse; +type ProjectReorderResult = ProjectResponse[]; +type ProjectSourceAddResult = ProjectSource; +type ProjectSourceDeleteResult = { + ok: true; +}; +type ProjectSourceUpdateResult = ProjectSource; +type ProjectUpdateResult = ProjectResponse; +interface ProjectSourcesArea { + add(args: ProjectSourceAddArgs): Promise; + delete(args: ProjectSourceDeleteArgs): Promise; + update(args: ProjectSourceUpdateArgs): Promise; +} +interface ProjectAttachmentsArea { + copy(args: ProjectAttachmentCopyArgs): Promise; + read(args: ProjectAttachmentReadArgs): Promise; + upload(args: ProjectAttachmentUploadArgs): Promise; +} +interface ProjectsArea { + attachments: ProjectAttachmentsArea; + branches(args: ProjectBranchesArgs): Promise; + commands(args: ProjectCommandsArgs): Promise; + create(args: ProjectCreateArgs): Promise; + defaultExecutionOptions(args: ProjectDefaultExecutionOptionsArgs): Promise; + delete(args: ProjectDeleteArgs): Promise; + fileContent(args: ProjectFileContentArgs): Promise; + files(args: ProjectFilesArgs): Promise; + get(args: ProjectGetArgs): Promise; + list(args?: ProjectListArgs): Promise; + paths(args: ProjectPathsArgs): Promise; + promptHistory(args: ProjectPromptHistoryArgs): Promise; + reorder(args: ProjectReorderArgs): Promise; + sources: ProjectSourcesArea; + update(args: ProjectUpdateArgs): Promise; +} + +/** Select exactly one provider-discovery host source, or omit both for primary. */ +type ProviderHostRoutingArgs = { + environmentId: string; + hostId?: never; +} | { + environmentId?: never; + hostId: string; +} | { + environmentId?: never; + hostId?: never; +}; +type ProviderListArgs = ProviderHostRoutingArgs & { + signal?: AbortSignal; +}; +type ProviderModelsArgs = ProviderHostRoutingArgs & { + providerId?: string; + signal?: AbortSignal; +}; +type ProviderListResult = ProviderInfo[]; +type ProviderModelsResult = SystemExecutionOptionsResponse; +interface ProvidersArea { + /** List providers on the environment host, explicit host, or primary host. */ + list(args?: ProviderListArgs): Promise; + /** List models on the environment host, explicit host, or primary host. */ + models(args?: ProviderModelsArgs): Promise; +} + +interface PluginIdArgs { + pluginId: string; +} +/** Install directly from a path:, git:, npm:, or builtin: source spec. */ +interface PluginInstallArgs { + source: string; +} +/** Install an entry from BB's official catalog. */ +interface PluginCatalogInstallArgs { + entryId: string; +} +interface PluginReloadArgs { + pluginId?: string; +} +interface PluginSettingsUpdateArgs extends PluginIdArgs { + values: Record; +} +interface PluginTokenArgs extends PluginIdArgs { + rotate?: boolean; +} +interface PluginCheckUpdatesArgs { + pluginId?: string; + signal?: AbortSignal; +} +interface PluginRpcArgs extends PluginIdArgs { + input?: JsonValue; + method: string; + outputSchema: z$1.ZodType; +} +interface PluginCatalogSearchArgs { + query: string; + signal?: AbortSignal; +} +interface PluginCatalogStatusArgs { + signal?: AbortSignal; +} +interface PluginGetSettingsArgs extends PluginIdArgs { + signal?: AbortSignal; +} +interface PluginGetSourceArgs extends PluginIdArgs { + signal?: AbortSignal; +} +interface PluginListArgs { + signal?: AbortSignal; +} +interface PluginListUpdateResultsArgs { + signal?: AbortSignal; +} +type PluginDisableResult = InstalledPlugin; +type PluginEnableResult = InstalledPlugin; +type PluginGetSettingsResult = PluginSettingsResponse; +type PluginInstallResult = InstalledPlugin; +type PluginListResult = PluginListResponse; +type PluginReloadResult = PluginReloadResponse; +type PluginRemoveResult = PluginRemoveResponse; +type PluginTokenResult = PluginTokenResponse; +type PluginUpdateSettingsResult = PluginSettingsResponse; +type PluginGetSourceResult = PluginSourceDetail; +type PluginCheckUpdatesResult = PluginUpdateCheckEntry[]; +type PluginApplyUpdateResult = PluginApplyUpdateResult$1; +type PluginCatalogStatusResult = PluginCatalogStatus; +type PluginCatalogSearchResult = PluginCatalogSearchResult$1[]; +interface PluginCatalogArea { + install(args: PluginCatalogInstallArgs): Promise; + search(args: PluginCatalogSearchArgs): Promise; + status(args?: PluginCatalogStatusArgs): Promise; +} +interface PluginsArea { + applyUpdate(args: PluginIdArgs): Promise; + callRpc(args: PluginRpcArgs): Promise; + checkUpdates(args?: PluginCheckUpdatesArgs): Promise; + catalog: PluginCatalogArea; + disable(args: PluginIdArgs): Promise; + enable(args: PluginIdArgs): Promise; + getSettings(args: PluginGetSettingsArgs): Promise; + getSource(args: PluginGetSourceArgs): Promise; + install(args: PluginInstallArgs): Promise; + list(args?: PluginListArgs): Promise; + listUpdateResults(args?: PluginListUpdateResultsArgs): Promise; + reload(args?: PluginReloadArgs): Promise; + remove(args: PluginIdArgs): Promise; + token(args: PluginTokenArgs): Promise; + updateSettings(args: PluginSettingsUpdateArgs): Promise; +} + +type BbRealtimeUnsubscribe = () => void; +type BbRealtimeEventName = "thread:changed" | "project:changed" | "environment:changed" | "host:changed" | "system:changed" | "system:config-changed" | "realtime:connection"; +type ThreadRealtimeEvent = Extract; +type ProjectRealtimeEvent = Extract; +type EnvironmentRealtimeEvent = Extract; +type HostRealtimeEvent = Extract; +type SystemRealtimeEvent = Extract; +type BbRealtimeConnectionState = "connecting" | "connected" | "disconnected"; +interface BbRealtimeConnectionEvent { + reconnectDelayMs: number | null; + reconnected: boolean; + state: BbRealtimeConnectionState; +} +/** + * Entity-changed events are delivered as one shared object to every matching + * listener; their payload types are readonly so a listener cannot mutate what + * the next listener receives. + */ +interface BbRealtimeEventMap { + "thread:changed": ThreadRealtimeEvent; + "project:changed": ProjectRealtimeEvent; + "environment:changed": EnvironmentRealtimeEvent; + "host:changed": HostRealtimeEvent; + "system:changed": SystemRealtimeEvent; + "system:config-changed": SystemRealtimeEvent; + "realtime:connection": BbRealtimeConnectionEvent; +} +type BbRealtimeCallback = (event: BbRealtimeEventMap[TEventName]) => void; +interface ThreadRealtimeSubscribeArgs { + callback: BbRealtimeCallback<"thread:changed">; + event: "thread:changed"; + threadId?: string; +} +interface ProjectRealtimeSubscribeArgs { + callback: BbRealtimeCallback<"project:changed">; + event: "project:changed"; + projectId?: string; +} +interface EnvironmentRealtimeSubscribeArgs { + callback: BbRealtimeCallback<"environment:changed">; + environmentId?: string; + event: "environment:changed"; +} +interface HostRealtimeSubscribeArgs { + callback: BbRealtimeCallback<"host:changed">; + event: "host:changed"; + hostId?: string; +} +interface SystemRealtimeSubscribeArgs { + callback: BbRealtimeCallback<"system:changed">; + event: "system:changed"; +} +interface SystemConfigRealtimeSubscribeArgs { + callback: BbRealtimeCallback<"system:config-changed">; + event: "system:config-changed"; +} +/** + * Connection listeners are pure observers — they never open or hold the + * socket. A listener registered while a socket already exists receives the + * latest connection event as a snapshot on the next microtask, so a status + * UI mounted after connect still learns the current state. + */ +interface RealtimeConnectionSubscribeArgs { + callback: BbRealtimeCallback<"realtime:connection">; + event: "realtime:connection"; +} +type BbRealtimeSubscribeArgsUnion = ThreadRealtimeSubscribeArgs | ProjectRealtimeSubscribeArgs | EnvironmentRealtimeSubscribeArgs | HostRealtimeSubscribeArgs | SystemRealtimeSubscribeArgs | SystemConfigRealtimeSubscribeArgs | RealtimeConnectionSubscribeArgs; +type BbRealtimeSubscribeArgs = Extract; +interface BbRealtime { + subscribe(args: BbRealtimeSubscribeArgs): BbRealtimeUnsubscribe; +} + +interface StatusGetArgs { + projectId?: string; + signal?: AbortSignal; + threadId?: string; +} +interface StatusThreadSummary { + environmentId: string | null; + id: string; + parentThreadId: string | null; + pinnedAt: number | null; + projectId: string; + status: ThreadStatus; + title: string | null; +} +type StatusProject = ProjectResponse; +type StatusChildThreads = ThreadListResponse; +interface StatusResult { + childThreads: StatusChildThreads | null; + pendingTodos: ThreadTimelinePendingTodos | null; + project: StatusProject | null; + thread: StatusThreadSummary | null; +} +interface StatusArea { + get(args?: StatusGetArgs): Promise; +} + +interface SkillWorkspaceArgs { + projectId: string; + environmentId: string | null; +} +interface SkillListArgs extends SkillWorkspaceArgs { + signal?: AbortSignal; +} +interface SkillIdentityArgs extends SkillListArgs { + skillId: string; +} +interface SkillContentArgs extends SkillIdentityArgs { + path: string; +} +interface SkillUpdateArgs extends SkillWorkspaceArgs { + skillId: string; + content: string; + revision: string; +} +interface SkillDeleteArgs extends SkillWorkspaceArgs { + skillId: string; +} +/** + * Registry calls proxy out to skills.sh and GitHub, and the browse grid fans + * out one per card. Callers pass their query's AbortSignal so abandoning a + * page cancels its requests instead of leaving them in flight. + */ +interface AbortableArgs { + signal?: AbortSignal; +} +interface RegistrySkillsSearchArgs extends AbortableArgs { + query?: string; + page?: number; + perPage?: number; +} +interface RegistrySkillIdArgs extends AbortableArgs { + registrySkillId: string; +} +interface RegistrySkillSourceArgs extends AbortableArgs { + source: string; + skillId: string; +} +interface RegistryRepositoryArgs extends AbortableArgs { + source: string; +} +/** + * Install is a mutation and deliberately takes no signal: its body is parsed + * with a strict schema, so an extra key would throw at runtime. + */ +interface RegistrySkillInstallArgs { + registrySkillId: string; +} +interface SkillsRegistryArea { + detail(args: RegistrySkillSourceArgs): Promise; + get(args: RegistrySkillIdArgs): Promise; + install(args: RegistrySkillInstallArgs): Promise; + repositoryStars(args: RegistryRepositoryArgs): Promise; + search(args?: RegistrySkillsSearchArgs): Promise; +} +interface SkillsArea { + getContent(args: SkillContentArgs): Promise; + list(args: SkillListArgs): Promise; + listFiles(args: SkillIdentityArgs): Promise; + registry: SkillsRegistryArea; + remove(args: SkillDeleteArgs): Promise<{ + deletedPath: string; + }>; + update(args: SkillUpdateArgs): Promise<{ + filePath: string; + revision: string; + }>; +} + +type ThemeGetResult = AppTheme; +type ThemeCatalogResult = ThemeCatalogResponse; +type ThemeSetInput = AppThemeSelection; +type ThemeSetResult = AppTheme; +interface ThemeCatalogArgs { + signal?: AbortSignal; +} +interface ThemeGetArgs { + signal?: AbortSignal; +} +interface ThemeArea { + /** The active app palette, resolved server-side (built-in id or custom CSS). */ + get(args?: ThemeGetArgs): Promise; + /** The custom-theme directory plus discovered themes and the active palette. */ + catalog(args?: ThemeCatalogArgs): Promise; + /** Set the complete app appearance selection in one request. */ + set(selection: ThemeSetInput): Promise; + /** + * Activate a palette by id while preserving the active favicon color. This + * compatibility shorthand reads the active appearance before writing the + * complete selection; prefer the object form when both values are known. + */ + set(themeId: string): Promise; +} + +interface SystemAttentionArgs { + signal?: AbortSignal; +} +interface SystemConfigArgs { + signal?: AbortSignal; +} +interface SystemExecutionOptionsArgs extends SystemExecutionOptionsQuery { + signal?: AbortSignal; +} +interface SystemUsageLimitsArgs extends SystemUsageLimitsQuery { + signal?: AbortSignal; +} +interface SystemVersionArgs { + force?: boolean; + signal?: AbortSignal; +} +interface SystemVoiceTranscriptionArgs { + file: Blob; + prompt?: string; + signal?: AbortSignal; +} +type SystemAttentionResult = SystemAttentionResponse; +type SystemConfigResult = SystemConfigResponse; +type SystemExecutionOptionsResult = SystemExecutionOptionsResponse; +type SystemReloadConfigResult = SystemConfigReloadResponse; +type SystemInstallCliSkillsArgs = SystemInstallCliSkillsRequest; +interface SystemCliSkillsStatusArgs { + /** Omit for every enrolled machine. */ + hostIds?: readonly string[]; + signal?: AbortSignal; +} +type SystemCliSkillsStatusResult = SystemCliSkillsStatusResponse; +type SystemInstallCliSkillsResult = SystemInstallCliSkillsResponse; +type SystemVoiceTranscriptionResult = SystemVoiceTranscriptionResponse; +type SystemUpdateExperimentsResult = Experiments; +type SystemUpdateGeneralSettingsResult = AppSettings; +type SystemUpdateKeyboardSettingsResult = AppKeybindingOverrides; +type SystemUsageLimitsResult = ProviderUsageResponse; +type SystemVersionResult = SystemVersionResponse; +interface SystemArea { + attention(args?: SystemAttentionArgs): Promise; + config(args?: SystemConfigArgs): Promise; + executionOptions(args?: SystemExecutionOptionsArgs): Promise; + /** + * Copy bb's built-in CLI skills into each named machine's global agent skill + * roots (`~/.agents/skills` and `~/.claude/skills`). Machines install + * independently; the result reports each machine's outcome. + */ + /** Per-machine install state of bb's built-in CLI skills. */ + cliSkillsStatus(args?: SystemCliSkillsStatusArgs): Promise; + installCliSkills(args: SystemInstallCliSkillsArgs): Promise; + reloadConfig(): Promise; + transcribeVoice(args: SystemVoiceTranscriptionArgs): Promise; + updateExperiments(args: Experiments): Promise; + updateGeneralSettings(args: AppSettings): Promise; + updateKeyboardSettings(args: AppKeybindingOverrides): Promise; + usageLimits(args?: SystemUsageLimitsArgs): Promise; + version(args?: SystemVersionArgs): Promise; +} + +interface TerminalThreadScope { + cwd?: never; + environmentId?: never; + hostId?: never; + kind: "thread"; + threadId: string; +} +interface TerminalEnvironmentScope { + environmentId: string; + cwd?: never; + hostId?: never; + kind: "environment"; + threadId?: never; +} +interface TerminalHostPathListScope { + /** Optional exact initial working-directory filter on the selected host. */ + cwd?: string; + environmentId?: never; + hostId: string; + kind: "host_path"; + threadId?: never; +} +interface TerminalHostPathCreateScope { + /** Null starts in the selected host's home directory. */ + cwd: string | null; + environmentId?: never; + hostId: string; + kind: "host_path"; + threadId?: never; +} +type TerminalListScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathListScope; +type TerminalCreateScope = TerminalThreadScope | TerminalEnvironmentScope | TerminalHostPathCreateScope; +interface TerminalListArgs { + signal?: AbortSignal; + scope: TerminalListScope; +} +interface TerminalCreateArgs { + cols: number; + rows: number; + scope: TerminalCreateScope; + start?: CreateTerminalRequest["start"]; + title?: string; +} +interface TerminalTargetArgs { + terminalId: string; +} +interface TerminalGetArgs extends TerminalTargetArgs { + signal?: AbortSignal; +} +interface TerminalRenameArgs extends TerminalTargetArgs { + title: UpdateTerminalRequest["title"]; +} +interface TerminalCloseArgs extends TerminalTargetArgs { + mode: "force" | "if-clean"; +} +interface TerminalInputArgs extends TerminalTargetArgs { + dataBase64: TerminalInputRequest["dataBase64"]; +} +interface TerminalResizeArgs extends TerminalTargetArgs { + cols: TerminalResizeRequest["cols"]; + rows: TerminalResizeRequest["rows"]; +} +interface TerminalOutputArgs extends TerminalTargetArgs { + limitChunks?: TerminalOutputQuery["limitChunks"]; + signal?: AbortSignal; + sinceSeq?: TerminalOutputQuery["sinceSeq"]; + tailBytes?: TerminalOutputQuery["tailBytes"]; +} +type TerminalRestartArgs = TerminalTargetArgs; +type TerminalListResult = TerminalListResponse; +type TerminalCreateResult = TerminalSession; +type TerminalGetResult = TerminalSession; +type TerminalRenameResult = TerminalSession; +type TerminalCloseResult = TerminalSession; +type TerminalInputResult = TerminalSession; +type TerminalResizeResult = TerminalSession; +type TerminalOutputResult = TerminalOutputResponse; +type TerminalRestartResult = TerminalSession; +interface TerminalsArea { + close(args: TerminalCloseArgs): Promise; + create(args: TerminalCreateArgs): Promise; + get(args: TerminalGetArgs): Promise; + input(args: TerminalInputArgs): Promise; + list(args: TerminalListArgs): Promise; + output(args: TerminalOutputArgs): Promise; + rename(args: TerminalRenameArgs): Promise; + /** + * Replace a terminal with a shell at the same scope, size, and title. + * The original command is not replayed because terminal sessions do not + * persist launch commands. The replacement has a new terminal ID. + */ + restart(args: TerminalRestartArgs): Promise; + resize(args: TerminalResizeArgs): Promise; +} + +interface ThreadListArgs { + archived?: boolean; + excludeSideChats?: boolean; + sectionId?: string; + hasParent?: boolean; + includeHidden?: boolean; + limit?: number; + offset?: number; + originKind?: ThreadListQuery["originKind"]; + parentThreadId?: string; + projectId?: string; + signal?: AbortSignal; + sourceThreadId?: string; + unsectioned?: boolean; +} +interface ThreadSearchArgs extends ThreadSearchQuery { + signal?: AbortSignal; +} +interface ThreadGetArgs { + include?: ThreadGetQuery["include"]; + signal?: AbortSignal; + threadId: string; +} +type ThreadGetResult = ThreadResponse | ThreadWithIncludesResponse; +type ThreadListResult = ThreadListResponse; +type ThreadSearchResult = ThreadSearchResponse; +interface ThreadOutputResponse { + output: string | null; +} +type ThreadMutationResult = ThreadResponse; +type ThreadSpawnResult = ThreadResponse; +type ThreadForkResult = ThreadResponse; +type ThreadInteractionGetResult = PendingInteraction; +type ThreadInteractionListResult = ThreadPendingInteractionsResponse; +type ThreadInteractionResolveResult = PendingInteraction; +type ThreadInteractionRespondResult = PendingInteraction; +type ThreadInteractionCancelResult = PendingInteraction; +type ThreadEventsListResult = ThreadEventRow[]; +type ThreadEventWaitResult = ThreadEventRow | null; +type ThreadTimelineResult = ThreadTimelineResponse; +type ThreadArchiveResult = ThreadArchiveAllResponse; +type ThreadOpenResult = ThreadOpenResponse; +type ThreadPaneActionResult = ThreadPaneActionResponse; +type ThreadDeleteResult = { + ok: true; +}; +type ThreadSendResult = { + ok: true; +}; +type ThreadStopResult = { + ok: true; +}; +type ThreadBannerActionResult = { + ok: true; +}; +type ThreadUnarchiveResult = { + ok: true; +}; +type ThreadArchiveAllResult = ThreadArchiveAllResponse; +type ThreadReadStateResult = ThreadResponse; +type ThreadPinOrderResult = ThreadListResponse; +type ThreadPromptHistoryResult = PromptHistoryResponse; +type ThreadQueuedMessagesResult = ThreadQueuedMessageListResponse; +type ThreadQueuedMessageCreateResult = ThreadQueuedMessage; +type ThreadQueuedMessageUpdateResult = ThreadQueuedMessage; +type ThreadQueuedMessageDeleteResult = { + ok: true; +}; +type ThreadQueuedMessageReorderResult = ThreadQueuedMessageListResponse; +type ThreadQueuedMessageSendResult = SendQueuedMessageResponse; +type ThreadQueuedMessageGroupBoundaryResult = ThreadQueuedMessageListResponse; +type ThreadTabsResult = ThreadTabsResponse; +type ThreadTabsUpdateResult = ThreadTabsResponse; +type ThreadStorageFilesResult = ThreadStorageFileListResponse; +type ThreadStoragePathsResult = ThreadStoragePathListResponse; +type ThreadChildSummaryResult = ThreadChildSummaryResponse; +type ThreadDefaultExecutionOptionsResult = ResolvedThreadExecutionOptions | null; +type ThreadConversationOutlineResult = ThreadConversationOutlineResponse; +type ThreadTimelineTurnSummaryDetailsResult = TimelineTurnSummaryDetailsResponse; +interface ThreadSpawnBaseArgs extends Omit { + childOrigin?: CreateThreadRequest["childOrigin"]; + origin?: CreateThreadRequest["origin"]; + originKind?: CreateThreadRequest["originKind"]; + startedOnBehalfOf?: CreateThreadRequest["startedOnBehalfOf"]; +} +type ThreadSpawnArgs = ThreadSpawnBaseArgs & ({ + input: CreateThreadRequest["input"]; + prompt?: never; +} | { + input?: never; + prompt: string; +}); +interface ThreadForkArgs extends Omit { + origin?: ForkThreadRequest["origin"]; + visibility?: ForkThreadRequest["visibility"]; + workspace?: ForkThreadRequest["workspace"]; +} +interface ThreadUpdateArgs extends UpdateThreadRequest { + threadId: string; +} +interface ThreadDeleteArgs extends DeleteThreadRequest { + threadId: string; +} +interface ThreadSendArgs extends SendMessageRequest { + threadId: string; +} +interface ThreadActionArgs { + threadId: string; +} +interface ThreadStatusArgs extends ThreadActionArgs { + signal?: AbortSignal; +} +interface ThreadPromptHistoryArgs extends PromptHistoryQuery { + signal?: AbortSignal; + threadId: string; +} +interface ThreadPinOrderArgs extends ReorderPinnedThreadRequest { + threadId: string; +} +interface ThreadQueuedMessageArgs { + signal?: AbortSignal; + threadId: string; +} +interface ThreadQueuedMessageCreateArgs extends CreateQueuedMessageRequest { + threadId: string; +} +interface ThreadQueuedMessageUpdateArgs extends ThreadQueuedMessageTargetArgs, UpdateQueuedMessageRequest { +} +interface ThreadQueuedMessageTargetArgs { + queuedMessageId: string; + threadId: string; +} +interface ThreadQueuedMessageSendArgs extends ThreadQueuedMessageTargetArgs, SendQueuedMessageRequest { +} +interface ThreadQueuedMessageReorderArgs extends ThreadQueuedMessageTargetArgs, ReorderQueuedMessageRequest { +} +interface ThreadQueuedMessageGroupBoundaryArgs extends SetQueuedMessageGroupBoundaryRequest { + threadId: string; +} +interface ThreadStorageFilesArgs extends ThreadStorageFilesQuery { + signal?: AbortSignal; + threadId: string; +} +interface ThreadStoragePathsArgs extends ThreadStoragePathsQuery { + signal?: AbortSignal; + threadId: string; +} +interface ThreadTimelineTurnSummaryDetailsArgs extends TimelineTurnSummaryDetailsQuery { + signal?: AbortSignal; + threadId: string; +} +interface ThreadTabsUpdateArgs extends UpdateThreadTabsRequest { + threadId: string; +} +interface ThreadOpenArgs { + threadId: string; + split?: ThreadOpenSplit; + file: ThreadOpenFile | null; +} +interface ThreadPaneActionArgs { + action: ThreadPaneAction; + threadId: string; +} +interface ThreadEventsListArgs { + afterSeq?: string; + limit?: string; + signal?: AbortSignal; + threadId: string; +} +interface ThreadEventWaitArgs { + afterSeq?: string; + signal?: AbortSignal; + threadId: string; + type: string; + waitMs: string; +} +interface ThreadTimelineArgs extends ThreadTimelineQuery { + signal?: AbortSignal; + threadId: string; +} +interface ThreadOutputArgs { + signal?: AbortSignal; + threadId: string; +} +interface ThreadInteractionListArgs { + signal?: AbortSignal; + threadId: string; +} +interface ThreadInteractionTargetArgs { + interactionId: string; + threadId: string; +} +interface ThreadInteractionGetArgs extends ThreadInteractionTargetArgs { + signal?: AbortSignal; +} +interface ThreadInteractionResolveArgs extends ThreadInteractionTargetArgs { + resolution: PendingInteractionResolution; +} +interface ThreadInteractionRespondArgs extends ThreadInteractionTargetArgs { + value: JsonValue; +} +type ThreadWaitTarget = { + kind: "status"; + status: ThreadStatus; +} | { + kind: "event"; + eventType: string; +}; +interface ThreadWaitArgs { + event?: string; + pollIntervalMs?: number; + signal?: AbortSignal; + status?: ThreadStatus; + threadId: string; + timeoutMs?: number; +} +type ThreadWaitResult = { + event: NonNullable; + matched: true; + target: Extract; + threadId: string; +} | { + matched: true; + target: Extract; + thread: ThreadGetResult; + threadId: string; +}; +interface ThreadInteractionsArea { + cancel(args: ThreadInteractionTargetArgs): Promise; + get(args: ThreadInteractionGetArgs): Promise; + list(args: ThreadInteractionListArgs): Promise; + resolve(args: ThreadInteractionResolveArgs): Promise; + respond(args: ThreadInteractionRespondArgs): Promise; +} +interface ThreadEventsArea { + list(args: ThreadEventsListArgs): Promise; + wait(args: ThreadEventWaitArgs): Promise; +} +interface ThreadQueuedMessagesArea { + create(args: ThreadQueuedMessageCreateArgs): Promise; + delete(args: ThreadQueuedMessageTargetArgs): Promise; + list(args: ThreadQueuedMessageArgs): Promise; + reorder(args: ThreadQueuedMessageReorderArgs): Promise; + send(args: ThreadQueuedMessageSendArgs): Promise; + setGroupBoundary(args: ThreadQueuedMessageGroupBoundaryArgs): Promise; + update(args: ThreadQueuedMessageUpdateArgs): Promise; +} +interface ThreadTabsArea { + get(args: ThreadStatusArgs): Promise; + update(args: ThreadTabsUpdateArgs): Promise; +} +interface ThreadsArea { + archive(args: ThreadActionArgs): Promise; + archiveAll(args: ThreadActionArgs): Promise; + childSummary(args: ThreadStatusArgs): Promise; + cancelPlan(args: ThreadActionArgs): Promise; + clearGoal(args: ThreadActionArgs): Promise; + conversationOutline(args: ThreadStatusArgs): Promise; + defaultExecutionOptions(args: ThreadStatusArgs): Promise; + delete(args: ThreadDeleteArgs): Promise; + events: ThreadEventsArea; + fork(args: ThreadForkArgs): Promise; + get(args: ThreadGetArgs): Promise; + interactions: ThreadInteractionsArea; + list(args?: ThreadListArgs): Promise; + markRead(args: ThreadActionArgs): Promise; + markUnread(args: ThreadActionArgs): Promise; + open(args: ThreadOpenArgs): Promise; + paneAction(args: ThreadPaneActionArgs): Promise; + output(args: ThreadOutputArgs): Promise; + pin(args: ThreadActionArgs): Promise; + promptHistory(args: ThreadPromptHistoryArgs): Promise; + queuedMessages: ThreadQueuedMessagesArea; + reorderPinned(args: ThreadPinOrderArgs): Promise; + search(args: ThreadSearchArgs): Promise; + send(args: ThreadSendArgs): Promise; + spawn(args: ThreadSpawnArgs): Promise; + stop(args: ThreadActionArgs): Promise; + tabs: ThreadTabsArea; + timeline(args: ThreadTimelineArgs): Promise; + timelineTurnSummaryDetails(args: ThreadTimelineTurnSummaryDetailsArgs): Promise; + storageFiles(args: ThreadStorageFilesArgs): Promise; + storagePaths(args: ThreadStoragePathsArgs): Promise; + unarchive(args: ThreadActionArgs): Promise; + unpin(args: ThreadActionArgs): Promise; + update(args: ThreadUpdateArgs): Promise; + wait(args: ThreadWaitArgs): Promise; +} + +type ThreadSectionCreateResult = ThreadSectionResponse; +type ThreadSectionUpdateResult = ThreadSectionMutationResponse; +type ThreadSectionDeleteResult = ThreadSectionMutationResponse; +type ThreadSectionListResult = ThreadSectionResponse[]; +interface ThreadSectionListArgs { + signal?: AbortSignal; +} +interface ThreadSectionsArea { + create(args: CreateThreadSectionRequest): Promise; + delete(args: DeleteThreadSectionRequest): Promise; + list(args?: ThreadSectionListArgs): Promise; + update(args: UpdateThreadSectionRequest): Promise; +} + +interface BbSdk extends BbRealtime { + environments: EnvironmentsArea; + files: FilesArea; + guide: GuideArea; + hosts: HostsArea; + projects: ProjectsArea; + plugins: PluginsArea; + providers: ProvidersArea; + skills: SkillsArea; + status: StatusArea; + system: SystemArea; + terminals: TerminalsArea; + theme: ThemeArea; + threadSections: ThreadSectionsArea; + threads: ThreadsArea; +} + +/** + * The backend plugin API contract — the `bb` object handed to a plugin's + * `server.ts` factory (`export default function plugin(bb: BbPluginApi)`). + * + * Types only: the implementation lives in the BB server + * (apps/server/src/services/plugins/plugin-api.ts), which imports these + * shapes so the contract and the implementation cannot drift. Plugin authors + * import them type-only (`import type { BbPluginApi } from + * "@bb/plugin-sdk"`); the import is erased when BB loads the file. + * + * Runtime classes stay host-side. NeedsConfigurationError in particular is + * matched by NAME, so plugin code needs no runtime import: + * `throw Object.assign(new Error(msg), { name: "NeedsConfigurationError" })`. + */ +interface PluginLogger { + debug(message: string): void; + info(message: string): void; + warn(message: string): void; + error(message: string): void; +} +/** + * Declarative settings descriptors (`bb.settings.define`). Deliberately plain + * data — not zod — so the host can render settings forms and the CLI can + * parse values without executing plugin code. + */ +type PluginSettingDescriptor = { + type: "string"; + label: string; + description?: string; + /** Stored in a 0600 file under /plugins//secrets/, never in the db or sent to the frontend. */ + secret?: true; + default?: string; +} | { + type: "boolean"; + label: string; + description?: string; + default?: boolean; +} | { + type: "select"; + label: string; + description?: string; + options: string[]; + default?: string; +} | { + type: "project"; + label: string; + description?: string; + default?: string; +}; +type PluginSettingDescriptors = Record; +type PluginSettingValue = string | boolean; +/** `default` present → non-optional value; absent → `T | undefined`. */ +type PluginSettingsValues> = { + [K in keyof Ds]: Ds[K] extends { + default: string | boolean; + } ? PluginSettingValueOf : PluginSettingValueOf | undefined; +}; +type PluginSettingValueOf = D extends { + type: "boolean"; +} ? boolean : string; +interface PluginSettingsHandle> { + /** Load-safe: callable inside the factory. */ + get(): Promise>; + /** Fires after values change through the settings route/CLI. */ + onChange(listener: (next: PluginSettingsValues, prev: PluginSettingsValues) => void): void; +} +interface PluginSettings { + define>(descriptors: Ds): PluginSettingsHandle; +} +interface PluginKvStorage { + get(key: string): Promise; + set(key: string, value: unknown): Promise; + delete(key: string): Promise; + list(prefix?: string): Promise; +} +interface PluginStorage { + /** Namespaced JSON key-value rows in bb.db; values ≤256KB each. */ + kv: PluginKvStorage; + /** + * Open (or reuse the path of) the plugin's own SQLite database at + * /plugins//data.db — the server's better-sqlite3, WAL mode, + * busy_timeout 5000. Handles are host-tracked and closed on + * dispose/reload; a closed handle throws on use. + */ + database(): Database.Database; + /** + * Ordered-statement migration helper: statement index = migration id in a + * `_bb_migrations` table; unapplied statements run in one transaction. + * Append-only — never reorder or edit shipped statements. + */ + migrate(db: Database.Database, statements: string[]): void; +} +/** + * Thread lifecycle events a plugin can observe (design §4.5). Observe-only: + * handlers run fire-and-forget after the transition is applied and can never + * block or veto it. `thread` is the same public DTO GET /threads/:id serves. + */ +interface PluginThreadEventPayloads { + /** Fired after a thread row is created. */ + "thread.created": { + thread: ThreadResponse; + }; + /** Fired when a thread transitions into `active`. */ + "thread.active": { + thread: ThreadResponse; + }; + /** Fired when a thread transitions into `idle`. `lastAssistantText` is + * assembled the same way GET /threads/:id/output is. */ + "thread.idle": { + thread: ThreadResponse; + lastAssistantText: string | null; + }; + /** Fired when a thread transitions into `error`. `error` is the latest + * system/error event message, when one exists. */ + "thread.failed": { + thread: ThreadResponse; + error: string | null; + }; + /** Fired after a thread is archived (including cascade archives). */ + "thread.archived": { + thread: ThreadResponse; + }; + /** Fired after a thread is soft-deleted. */ + "thread.deleted": { + thread: ThreadResponse; + }; +} +type PluginThreadEventName = keyof PluginThreadEventPayloads; +type PluginThreadEventHandler = (payload: PluginThreadEventPayloads[E]) => void | Promise; +type PluginHttpAuthMode = "local" | "token" | "none"; +type PluginHttpHandler = (context: Context) => Response | Promise; +interface PluginHttp { + /** + * Register an HTTP route, mounted at + * `/api/v1/plugins//http/`. Auth modes (default "local"): + * - "local": Origin/Host must be a local BB app origin; non-GET requires + * content-type application/json (forces a CORS preflight). + * - "token": requires the per-plugin token (`bb plugin token `) via + * the x-bb-plugin-token header or ?token=. + * - "none": no checks — only for signature-verified webhooks. + */ + route(method: string, path: string, handler: PluginHttpHandler, opts?: { + auth?: PluginHttpAuthMode; + }): void; +} +interface PluginRpc { + /** + * Register a Standard Schema-driven rpc contract and its inferred handlers, + * served at POST + * `/api/v1/plugins//rpc/` with "local" auth semantics. The + * host validates input before invocation and output before strict JSON + * serialization. The response is `{ ok: true, result }` or + * `{ ok: false, error: { code, message, issues? } }`. + */ + register(contract: Contract, handlers: PluginRpcHandlers): void; +} +interface PluginRealtime { + /** + * Broadcast an ephemeral `plugin-signal` WS message + * `{ pluginId, channel, payload }` to every connected client (V1 has no + * per-channel subscriptions). `payload` must be JSON-serializable; + * `undefined` is normalized to `null`. Nothing is persisted. + */ + publish(channel: string, payload: unknown): void; +} +interface PluginBackground { + /** + * Register a long-lived background service. `start` runs after the + * factory completes and should resolve when `signal` aborts + * (dispose/reload/disable/shutdown). A crash restarts it with capped + * exponential backoff; throwing NeedsConfigurationError marks the plugin + * `needs-configuration` and stops restarting until the next load. + */ + service(name: string, service: { + start(signal: AbortSignal): void | Promise; + }): void; + /** + * Register a cron schedule (5-field expression, server-local time). The + * durable row keyed (pluginId, name) is upserted at load; the periodic + * sweep claims due rows with a CAS on next_run_at, but only while this + * plugin is loaded. Failures land in last_status/last_error, visible in + * `bb plugin list`. + */ + schedule(name: string, cron: string, fn: () => void | Promise): void; +} +interface PluginCliCommandInfo { + name: string; + summary: string; + usage: string; +} +/** Context forwarded from the invoking CLI when known; all fields optional. */ +interface PluginCliContext { + cwd?: string; + threadId?: string; + projectId?: string; + /** Aborted when the invoking CLI HTTP request disconnects. */ + signal?: AbortSignal; +} +type PluginInteractionCancelReason = "user" | "request-aborted" | "thread-stopped" | "thread-deleted" | "plugin-disposed" | "server-restarted" | "timeout"; +type PluginInteractionResult = { + outcome: "submitted"; + value: JsonValue$1; +} | { + outcome: "cancelled"; + reason: PluginInteractionCancelReason; +}; +interface PluginInteractionRequest { + threadId: string; + rendererId: string; + title: string; + payload: JsonValue$1; + /** Defaults to ten minutes; capped at one hour. */ + timeoutMs?: number; +} +interface PluginCliResult { + exitCode: number; + stdout?: string; + stderr?: string; +} +/** + * Maximum combined UTF-8 bytes accepted from plugin CLI stdout and stderr. + * This is the shared source of truth for production and the testing harness. + */ +declare const PLUGIN_CLI_OUTPUT_MAX_BYTES: number; +interface PluginCliOutputLimitError { + code: "plugin_cli_output_too_large"; + message: string; + maxBytes: number; + stdoutBytes: number; + stderrBytes: number; + totalBytes: number; +} +/** Normalized host result returned by the plugin CLI HTTP/testing boundary. */ +interface PluginCliExecutionResult { + exitCode: number; + stdout: string; + stderr: string; + error?: PluginCliOutputLimitError; +} +interface PluginCliRegistration { + /** Top-level command name (`bb …`): lowercase [a-z0-9-]+, and not + * a core bb command (see RESERVED_BB_CLI_COMMANDS in the server). */ + name: string; + summary: string; + /** Subcommand metadata rendered in help and the plugin-commands skill + * without executing plugin code. Parsing argv is plugin-owned. */ + commands?: PluginCliCommandInfo[]; + run(argv: string[], ctx: PluginCliContext): PluginCliResult | Promise; +} +interface PluginCli { + /** + * Register this plugin's `bb` subcommand. One registration per factory + * execution; a repeated call is rejected. Core bb commands always win + * name collisions; reserved names are rejected at registration. + */ + register(registration: PluginCliRegistration): void; +} +/** Per-turn context handed to bb.agents context providers (design §4.4). */ +/** MCP-style content parts a native tool may return (design §4.4). */ +type PluginAgentToolContentPart = { + type: "text"; + text: string; +} | { + type: "image"; + data: string; + mimeType: string; +}; +type PluginAgentToolResult = string | { + content: PluginAgentToolContentPart[]; + isError?: boolean; +}; +/** Per-call context handed to a native tool's execute (design §4.4). */ +interface PluginAgentToolContext { + threadId: string; + projectId: string; + /** The tool-call request's abort signal (aborts if the daemon round-trip + * is torn down mid-call). */ + signal: AbortSignal; +} +interface PluginAgentToolRegistrationBase { + /** Tool name shown to the model: [a-zA-Z0-9_-]+, unique across plugins, + * and not a built-in dynamic tool (see RESERVED_AGENT_TOOL_NAMES in the + * server). */ + name: string; + description: string; + /** + * Optional usage snippet appended to the thread instructions whenever + * this tool is in the session's tool set (mirrors the built-in + * update_environment_directory guidance). Limited to 4096 characters. + */ + instructions?: string; +} +/** Stable, plain-data context resolved by the server for one agent session. */ +interface PluginAgentConfigurationContext { + thread: { + id: string; + title: string | null; + parentThreadId: string | null; + sourceThreadId: string | null; + }; + project: { + id: string; + kind: "standard" | "personal"; + name: string; + gitRemoteUrl: string | null; + }; + environment: { + id: string; + name: string | null; + path: string | null; + workspaceProvisionType: "unmanaged" | "managed-worktree" | "personal"; + branchName: string | null; + }; + host: { + id: string; + name: string; + }; + provider: { + id: string; + model: string; + }; + sideChat: boolean; + origin: { + kind: "fork" | "side-chat" | null; + pluginId: string | null; + }; +} +/** Object form of a {@link PluginAgentConfiguration} tools entry: selects a + * registered tool and overrides the parameter schema advertised to the + * provider for this resolution only. */ +interface PluginAgentToolSelection { + /** Name of a tool registered by this plugin via `registerTool`. */ + name: string; + /** JSON-schema object (root `type: "object"`, JSON-serializable, at most + * 128 KiB serialized) sent to the provider in place of the registered + * parameter schema. Execution-side validation still runs the registered + * parameters, so the override must only narrow what the registered schema + * already accepts. */ + parameters: Record; +} +/** Per-resolution selection returned by {@link PluginAgents.configure}. */ +interface PluginAgentConfiguration { + /** Tool names registered by this plugin, or {@link PluginAgentToolSelection} + * entries to also override a tool's advertised parameter schema for this + * resolution. Duplicate or unknown names, or an invalid override, reject + * this plugin's complete selection for the resolution. */ + tools: Array; + /** Skill frontmatter names from this plugin's manifest skill roots. + * Duplicate or unknown names reject this plugin's complete selection. */ + skills: string[]; + /** Optional dynamic instructions. Output is truncated to 4096 characters. */ + instructions?: string; +} +interface PluginAgents { + /** + * Select this plugin's statically registered tools and manifest skills for + * each thread/session resolution, with optional dynamic instructions. The + * callback is synchronous and runs at `thread.start` / `turn.submit`; it + * never rebuilds registrations. Exactly one callback may be registered per + * factory execution. A throw, malformed result, duplicate id, unknown id, + * or more than 256 tool/skill ids fails closed for this plugin only. + * + * Tools take effect when the provider session is next started or resumed; + * an already-running session is not hot-mutated. Instructions are resolved + * for the next turn. Skill changes follow BB's environment runtime policy: + * a busy runtime keeps its current catalog until a safe relaunch. Side-chat + * threads receive `sideChat: true`, and their returned tool, skill, and + * dynamic-instruction selections apply at the same boundaries. Independent + * side-chat safety policy (such as permission escalation) is unchanged. + */ + configure(provider: (context: PluginAgentConfigurationContext) => PluginAgentConfiguration): void; + /** + * Register a native dynamic tool (design §4.4). `parameters` is either a + * zod schema (validated per call; execute receives the parsed value) or a + * plain JSON-schema object (no validation; execute receives the raw + * arguments as `unknown`). Tool-set changes apply on the NEXT session + * start — a tool registered mid-session is not hot-added to running + * provider sessions. A second registration of the same name within this + * plugin is rejected; a name already registered by another plugin is + * rejected and surfaced as this plugin's status detail. + */ + registerTool(tool: PluginAgentToolRegistrationBase & { + parameters: Schema; + execute(params: z.output, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise; + }): void; + registerTool(tool: PluginAgentToolRegistrationBase & { + /** Raw JSON-schema escape hatch; params arrive unvalidated. */ + parameters: Record; + execute(params: unknown, ctx: PluginAgentToolContext): PluginAgentToolResult | Promise; + }): void; + /** + * Contribute a dynamic section appended to thread instructions. The + * provider runs when a thread's runtime command config is resolved + * (thread.start / turn.submit); return null to contribute nothing for + * that resolution. Must be synchronous and fast — it sits on the + * thread-start path. Output longer than 4096 characters is truncated; a + * throwing provider is logged against the plugin and contributes nothing. + * A repeated registration within one factory execution is rejected. + * This legacy contribution is not applied to side-chat threads; use + * configure() when sideChat-aware dynamic instructions are required. + */ + contributeInstructions(provider: (ctx: { + threadId: string; + projectId: string; + }) => string | null): void; +} +interface PluginThreadActionContext { + threadId: string; + projectId: string; +} +interface PluginThreadActionToast { + kind: "success" | "error" | "info"; + message: string; +} +type PluginThreadActionResult = void | { + toast?: PluginThreadActionToast; +}; +interface PluginThreadActionRegistration { + /** Unique within this plugin: [a-zA-Z0-9_-]+ (becomes a URL segment). */ + id: string; + /** Button label rendered in the thread header. */ + title: string; + /** Optional icon name; the host falls back to a generic icon. */ + icon?: string; + /** Optional confirmation prompt the host shows before running. */ + confirm?: string; + /** + * Runs server-side when the user clicks the action. The host shows a + * pending state while in flight, the returned toast on completion, and an + * automatic error toast when this throws. + */ + run(ctx: PluginThreadActionContext): PluginThreadActionResult | Promise; +} +type PluginMentionTrigger = "@" | "#" | "$" | "!" | "~"; +/** Search context handed to a mention provider (design §4.9). `projectId`/ + * `threadId` are null when the composer has not committed one yet. */ +interface PluginMentionSearchContext { + trigger: PluginMentionTrigger; + query: string; + projectId: string | null; + threadId: string | null; +} +/** One row a mention provider returns from `search`. `id` is the provider's + * own item id — the host namespaces it before it reaches the wire. */ +interface PluginMentionItem { + id: string; + title: string; + subtitle?: string; + icon?: string; +} +interface PluginMentionProviderRegistration { + /** Unique within this plugin: [a-zA-Z0-9_-]+ (no ":" — the host composes + * wire item ids as ":"). */ + id: string; + /** Section label shown above this provider's rows in the mention menu. */ + label: string; + /** + * Composer trigger characters this provider should answer. Omit to use the + * default `@` mention trigger. Valid triggers are `@`, `#`, `$`, `!`, and `~`. + */ + triggers?: readonly PluginMentionTrigger[]; + /** + * Runs server-side as the user types after one of this provider's triggers + * in the composer. Each call is time-boxed (2s) and failure-isolated: a slow + * or throwing provider contributes an empty list — it can never break the + * mention menu. + */ + search(ctx: PluginMentionSearchContext): PluginMentionItem[] | Promise; + /** + * Resolves one picked item into agent context, called once per unique + * item at message send time. The returned `context` is attached to the + * message as an agent-visible (user-hidden) prompt input. Throwing blocks + * the send with a visible error. + */ + resolve(itemId: string): { + context: string; + } | Promise<{ + context: string; + }>; +} +interface PluginUi { + /** Block until the app submits or cancels a plugin-owned composer form. */ + requestInput(request: PluginInteractionRequest, options?: { + signal?: AbortSignal; + }): Promise; + /** + * Register a thread action rendered in the shipped app's thread header + * (design §4.9). Multiple actions per plugin; ids must be unique within + * the plugin. Invoked via POST /plugins/:id/actions/:actionId. + */ + registerThreadAction(action: PluginThreadActionRegistration): void; + /** + * Register a mention provider for the shipped app's composer (design §4.9). + * Providers default to the `@` trigger and may opt into `#`, `$`, `!`, or + * `~` with `triggers`. Items group under `label` in the mention menu; a + * picked item becomes a `{ kind: "plugin" }` mention resource whose context + * is resolved once at send time. Multiple providers per plugin; ids must be + * unique within the plugin. + */ + registerMentionProvider(provider: PluginMentionProviderRegistration): void; +} +interface PluginEvents { + /** + * Add a thread lifecycle listener. Multiple listeners for the same event are + * additive and run independently in registration order. + */ + on(event: E, handler: PluginThreadEventHandler): void; +} +interface PluginServerApi { + /** + * This BB server's own loopback base URL (e.g. "http://127.0.0.1:38886"), + * which serves the SPA + /api + /ws. For plugins that proxy or relay + * traffic back to the server itself (e.g. a tunnel). Bind-gated like + * `bb.sdk`: reading it before the server is listening throws, so prefer + * reading it from handlers, services, and timers. + */ + readonly loopbackBaseUrl: string; +} +interface PluginSharedPortTunnelIdentity { + /** Gate routing label assigned to this machine. */ + label: string; + /** Gate apex without a scheme, e.g. "getbb.app". */ + baseDomain: string; +} +interface PluginHosts { + /** + * Ensure this enrolled host has a gate label and return its read-only public + * identity. The daemon chooses the trusted gate and desired label; plugins + * cannot influence either credential-bearing destination. + */ + ensureSharedPortTunnel(hostId: string): Promise; + /** + * Replace this plugin's desired shared-loopback ports for one host. The + * server aggregates declarations, owns generations, and delivers the + * resulting set to that host's daemon. Tunnel identity is deliberately not + * accepted here: it is owned by the daemon's trusted enrollment. + */ + declareSharedPorts(hostId: string, ports: readonly number[]): void; +} +interface PluginStatusApi { + /** + * Mark this plugin `needs-configuration` (with a message shown in + * `bb plugin list` and the UI) instead of failing — e.g. a factory or + * service that finds no API key configured. Cleared on the next load; + * saving settings does not auto-reload in V1, so ask the user to + * `bb plugin reload ` after configuring. + */ + needsConfiguration(message: string): void; +} +/** + * The API object handed to a plugin's factory (design §4). Implemented by + * the BB server; this contract is what plugin `server.ts` files compile + * against. + */ +interface BbPluginApi { + /** The plugin's own id (namespaces storage, routes, commands). */ + readonly pluginId: string; + /** Leveled, plugin-scoped logger. */ + readonly log: PluginLogger; + /** Declarative settings (design §4.2). */ + readonly settings: PluginSettings; + /** Namespaced KV + per-plugin database (design §4.3). */ + readonly storage: PluginStorage; + /** HTTP routes under /api/v1/plugins//http/* (design §4.6). */ + readonly http: PluginHttp; + /** RPC methods under /api/v1/plugins//rpc/ (design §4.6). */ + readonly rpc: PluginRpc; + /** Ephemeral push to connected frontends (design §4.7). */ + readonly realtime: PluginRealtime; + /** Long-lived services + cron schedules (design §4.8). */ + readonly background: PluginBackground; + /** Agent-facing `bb` CLI subcommand (design §4.4). */ + readonly cli: PluginCli; + /** Per-turn agent context contributions (design §4.4). */ + readonly agents: PluginAgents; + /** Host-rendered UI contributions (design §4.9). */ + readonly ui: PluginUi; + /** Additive plugin lifecycle listeners (design §4.5). */ + readonly events: PluginEvents; + /** Plugin-reported status (needs-configuration). */ + readonly status: PluginStatusApi; + /** Read-only facts about the running server (loopback base URL). */ + readonly server: PluginServerApi; + /** Server-to-daemon host control-plane declarations. */ + readonly hosts: PluginHosts; + /** + * The full BB SDK, bound to this server over loopback (design §4.1). + * Bind-gated: reading this before the host binds the SDK throws. The real + * server binds it before loading plugins, so it is available from the + * moment factories run there — but isolated harnesses may not, so prefer + * using it from handlers, services, and timers for portability. + * `threads.spawn` defaults `origin` to "plugin" and `originPluginId` to + * this plugin's id so spawned threads are attributed automatically. + */ + readonly sdk: BbSdk; + /** + * Register cleanup to run on reload/disable/shutdown. Hooks run LIFO. + * The sanctioned place to clear timers and close connections. + */ + onDispose(hook: () => void | Promise): void; +} + +export { PLUGIN_CLI_OUTPUT_MAX_BYTES, defineRpcContract }; +export type { BbContext, BbNavigate, BbPluginApi, ComposerCustomization, ComposerPlusMenuItem, ComposerRichTextSpec, ComposerStructuredDraft, ComposerView, JsonValue$1 as JsonValue, MarkdownProps, PluginAgentConfiguration, PluginAgentConfigurationContext, PluginAgentToolContentPart, PluginAgentToolContext, PluginAgentToolRegistrationBase, PluginAgentToolResult, PluginAgentToolSelection, PluginAgents, PluginAppBuilder, PluginAppComposer, PluginAppContentScripts, PluginAppDefinition, PluginAppSetup, PluginAppSlots, PluginBackground, PluginCli, PluginCliCommandInfo, PluginCliContext, PluginCliExecutionResult, PluginCliOutputLimitError, PluginCliRegistration, PluginCliResult, PluginComposerApi, PluginComposerMention, PluginComposerScope, PluginComposerTextEffect, PluginComposerThreadRowStatus, PluginContentScriptContext, PluginContentScriptDisposer, PluginContentScriptRegistration, PluginEvents, PluginFileOpenerProps, PluginFileOpenerRegistration, PluginFileOpenerSource, PluginHomepageSectionProps, PluginHomepageSectionRegistration, PluginHosts, PluginHttp, PluginHttpAuthMode, PluginHttpHandler, PluginInteractionCancelReason, PluginInteractionRequest, PluginInteractionResult, PluginKvStorage, PluginLogger, PluginMentionItem, PluginMentionProviderRegistration, PluginMentionSearchContext, PluginMentionTrigger, PluginMessageActionContext, PluginMessageActionRegistration, PluginMessageActionThreadPanelOptions, PluginMessageDirectiveMessage, PluginMessageDirectiveOpenWorkspaceFile, PluginMessageDirectiveProps, PluginMessageDirectiveRegistration, PluginNavPanelProps, PluginNavPanelRegistration, PluginPendingInteractionProps, PluginPendingInteractionRegistration, PluginPendingInteractionView, PluginRealtime, PluginRealtimeConnectionState, PluginRpc, PluginRpcCallArgs, PluginRpcClient, PluginRpcContract, PluginRpcError, PluginRpcErrorCode, PluginRpcHandlers, PluginRpcIssuePathSegment, PluginRpcMethodContract, PluginRpcResult, PluginRpcValidationIssue, PluginSdkApp, PluginServerApi, PluginSettingDescriptor, PluginSettingDescriptors, PluginSettingValue, PluginSettings, PluginSettingsHandle, PluginSettingsSectionProps, PluginSettingsSectionRegistration, PluginSettingsState, PluginSettingsValues, PluginSharedPortTunnelIdentity, PluginSidebarFooterActionContext, PluginSidebarFooterActionProps, PluginSidebarFooterActionRegistration, PluginStatusApi, PluginStorage, PluginThreadActionContext, PluginThreadActionRegistration, PluginThreadActionResult, PluginThreadActionToast, PluginThreadEventHandler, PluginThreadEventName, PluginThreadEventPayloads, PluginThreadPanelActionContext, PluginThreadPanelActionRegistration, PluginThreadPanelProps, PluginUi, StandardSchemaV1, StandardSchemaV1InferInput, StandardSchemaV1InferOutput, StandardSchemaV1Issue, StandardSchemaV1Result, ThreadChatMessageAction, ThreadChatMessageReference, ThreadChatProps }; diff --git a/plugins/thread-organizer/app.test.ts b/plugins/thread-organizer/app.test.ts new file mode 100644 index 0000000..cae87c7 --- /dev/null +++ b/plugins/thread-organizer/app.test.ts @@ -0,0 +1,41 @@ +import { installTestPluginRuntime } from "@bb/plugin-sdk/testing/app"; +import { describe, expect, it, vi } from "vitest"; + +async function loadApp() { + installTestPluginRuntime(); + return (await import("./app.js")).default; +} + +describe("Thread Organizer app registration", () => { + it.each(["contentScripts", "experimental_contentScripts"] as const)( + "registers through the %s builder", + async (builderKey) => { + const app = await loadApp(); + const register = vi.fn(); + + Reflect.apply(app.setup, undefined, [ + { [builderKey]: { register } }, + ]); + + expect(register).toHaveBeenCalledWith( + expect.objectContaining({ id: "collapse-unpinned-destination" }), + ); + }, + ); + + it("prefers the stable builder when both names are present", async () => { + const app = await loadApp(); + const stableRegister = vi.fn(); + const legacyRegister = vi.fn(); + + Reflect.apply(app.setup, undefined, [ + { + contentScripts: { register: stableRegister }, + experimental_contentScripts: { register: legacyRegister }, + }, + ]); + + expect(stableRegister).toHaveBeenCalledOnce(); + expect(legacyRegister).not.toHaveBeenCalled(); + }); +}); diff --git a/plugins/thread-organizer/app.ts b/plugins/thread-organizer/app.ts index 08d6001..2d7eb95 100644 --- a/plugins/thread-organizer/app.ts +++ b/plugins/thread-organizer/app.ts @@ -1,9 +1,22 @@ -import { definePluginApp } from "@bb/plugin-sdk/app"; +import { + definePluginApp, + type PluginAppContentScripts, +} from "@bb/plugin-sdk/app"; import { mountInboxSectionCollapser } from "./sidebar-controller.js"; -export default definePluginApp((app) => { - app.contentScripts.register({ +interface ContentScriptCompatibleApp { + readonly contentScripts?: PluginAppContentScripts; + readonly experimental_contentScripts?: PluginAppContentScripts; +} + +export default definePluginApp((app: ContentScriptCompatibleApp) => { + const contentScripts = + app.contentScripts ?? app.experimental_contentScripts; + if (contentScripts === undefined) { + throw new Error("BB does not expose the content scripts plugin API"); + } + contentScripts.register({ id: "collapse-unpinned-destination", mount: ({ signal }) => mountInboxSectionCollapser({ signal }), }); diff --git a/plugins/thread-organizer/dist/app.js b/plugins/thread-organizer/dist/app.js index ecfed80..66b3469 100644 --- a/plugins/thread-organizer/dist/app.js +++ b/plugins/thread-organizer/dist/app.js @@ -223,7 +223,11 @@ function mountInboxSectionCollapser({ // app.ts var app_default = definePluginApp((app) => { - app.contentScripts.register({ + const contentScripts = app.contentScripts ?? app.experimental_contentScripts; + if (contentScripts === void 0) { + throw new Error("BB does not expose the content scripts plugin API"); + } + contentScripts.register({ id: "collapse-unpinned-destination", mount: ({ signal }) => mountInboxSectionCollapser({ signal }) }); diff --git a/plugins/thread-organizer/dist/server.js b/plugins/thread-organizer/dist/server.js index db82d51..9195d66 100644 --- a/plugins/thread-organizer/dist/server.js +++ b/plugins/thread-organizer/dist/server.js @@ -483,11 +483,11 @@ function plugin(bb) { state.inboxLastPhase = phase; if (startedNewRun) state.inboxSnoozed = false; if (state.inboxPendingPin && thread.pinnedAt !== null) { - state.inboxManagedPinnedAt = thread.pinnedAt; + state.inboxManagedPinnedAt = null; state.inboxObservedPinned = true; state.inboxPendingPin = false; - bb.log.info( - `thread=${threadId} phase=${phase} action=inbox-pin-adopted` + bb.log.warn( + `thread=${threadId} phase=${phase} action=inbox-pin-ownership-ambiguous` ); } let recoveredManagedUnpin = false; diff --git a/plugins/thread-organizer/dist/server.js.map b/plugins/thread-organizer/dist/server.js.map index 4712d72..2da5662 100644 --- a/plugins/thread-organizer/dist/server.js.map +++ b/plugins/thread-organizer/dist/server.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../core.ts", "../../server.ts"], - "sourcesContent": ["export const SECTION_TARGETS = [\n \"bb\",\n \"extensions\",\n \"design\",\n \"moss\",\n \"qa\",\n \"writing\",\n] as const;\n\nexport type SectionTarget = (typeof SECTION_TARGETS)[number];\n\nexport interface OrganizableThread {\n archivedAt: number | null;\n childOrigin: \"fork\" | \"side-chat\" | null;\n deletedAt: number | null;\n originKind: \"fork\" | \"side-chat\" | null;\n originPluginId: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n status: \"active\" | \"error\" | \"idle\" | \"starting\" | \"stopping\";\n visibility: \"hidden\" | \"visible\";\n}\n\nexport interface SectionClassification {\n confidence: number;\n margin: number;\n reasons: string[];\n runnerUp: SectionTarget | null;\n target: SectionTarget;\n}\n\nexport interface SectionDescriptor {\n id: string;\n name: string;\n}\n\nexport interface TitleCandidate {\n confidence: number;\n title: string;\n}\n\nconst SECTION_ALIASES: Record = {\n bb: [\"bb\", \"bb quick fixes\"],\n design: [\"design\"],\n extensions: [\"extensions\", \"bb extensions\"],\n moss: [\"moss\"],\n qa: [\"qa\", \"quality assurance\"],\n writing: [\"writing\"],\n};\n\nconst LOW_INFORMATION = new Set([\n \"continue\",\n \"do it\",\n \"fix\",\n \"go ahead\",\n \"help\",\n \"help me\",\n \"investigate\",\n \"ok\",\n \"okay\",\n \"proceed\",\n \"root cause this\",\n \"sounds good\",\n \"yes\",\n]);\n\nconst ACTION_PATTERNS: Array<{\n expression: RegExp;\n title: string;\n}> = [\n { expression: /^take\\s+over\\b/i, title: \"Take Over\" },\n { expression: /^clean\\s+up\\b/i, title: \"Clean Up\" },\n { expression: /^root\\s+cause\\b/i, title: \"Investigate\" },\n { expression: /^investigate\\b/i, title: \"Investigate\" },\n { expression: /^implement\\b/i, title: \"Implement\" },\n { expression: /^optimize\\b/i, title: \"Optimize\" },\n { expression: /^reorganize\\b/i, title: \"Reorganize\" },\n { expression: /^refactor\\b/i, title: \"Refactor\" },\n { expression: /^analyze\\b/i, title: \"Analyze\" },\n { expression: /^create\\b/i, title: \"Create\" },\n { expression: /^design\\b/i, title: \"Design\" },\n { expression: /^rewrite\\b/i, title: \"Rewrite\" },\n { expression: /^refresh\\b/i, title: \"Refresh\" },\n { expression: /^profile\\b/i, title: \"Profile\" },\n { expression: /^review\\b/i, title: \"Review\" },\n { expression: /^rename\\b/i, title: \"Rename\" },\n { expression: /^update\\b/i, title: \"Update\" },\n { expression: /^render\\b/i, title: \"Render\" },\n { expression: /^archive\\b/i, title: \"Archive\" },\n { expression: /^debug\\b/i, title: \"Debug\" },\n { expression: /^build\\b/i, title: \"Build\" },\n { expression: /^write\\b/i, title: \"Write\" },\n { expression: /^style\\b/i, title: \"Style\" },\n { expression: /^move\\b/i, title: \"Move\" },\n { expression: /^open\\b/i, title: \"Open\" },\n { expression: /^audit\\b/i, title: \"Audit\" },\n { expression: /^add\\b/i, title: \"Add\" },\n { expression: /^fix\\b/i, title: \"Fix\" },\n];\n\nconst GENERIC_TITLE_WORDS = new Set([\n \"agent\",\n \"automation\",\n \"bb\",\n \"issue\",\n \"plugin\",\n \"problem\",\n \"task\",\n \"thing\",\n \"this\",\n \"thread\",\n]);\n\nconst TITLE_CONNECTORS = new Set([\n \"and\",\n \"for\",\n \"from\",\n \"in\",\n \"of\",\n \"on\",\n \"or\",\n \"to\",\n \"with\",\n]);\n\nconst TITLE_ACRONYMS = new Set([\n \"api\",\n \"bb\",\n \"ci\",\n \"cpu\",\n \"css\",\n \"ds\",\n \"html\",\n \"http\",\n \"https\",\n \"mcp\",\n \"pr\",\n \"qa\",\n \"sdk\",\n \"ui\",\n \"url\",\n \"ux\",\n]);\n\nfunction normalize(value: string): string {\n return value\n .normalize(\"NFKC\")\n .replace(/\\r\\n?/g, \"\\n\")\n .replace(/[ \\t]+/g, \" \")\n .trim()\n .toLowerCase();\n}\n\nfunction matches(value: string, expression: RegExp): boolean {\n expression.lastIndex = 0;\n return expression.test(value);\n}\n\nexport function isSubstantiveText(value: string): boolean {\n const normalized = normalize(value)\n .replace(/^\\/[a-z0-9:_-]+\\s*/i, \"\")\n .replace(/[.!?]+$/g, \"\")\n .trim();\n if (normalized.length < 4 || LOW_INFORMATION.has(normalized)) return false;\n return !/^(?:https?:\\/\\/\\S+|@[a-z0-9:_-]+)$/i.test(normalized);\n}\n\nexport function isManageableThread(thread: OrganizableThread): boolean {\n return (\n thread.visibility === \"visible\" &&\n thread.parentThreadId === null &&\n thread.sourceThreadId === null &&\n thread.originKind === null &&\n thread.childOrigin === null &&\n thread.originPluginId === null &&\n thread.archivedAt === null &&\n thread.deletedAt === null\n );\n}\n\nexport function isEligibleThread(thread: OrganizableThread): boolean {\n return (\n isManageableThread(thread) &&\n thread.status !== \"error\" &&\n thread.status !== \"stopping\"\n );\n}\n\nfunction setScore(\n scores: Map,\n target: SectionTarget,\n confidence: number,\n reason: string,\n): void {\n const current = scores.get(target);\n if (current === undefined || confidence > current.confidence) {\n scores.set(target, { confidence, reasons: [reason] });\n return;\n }\n if (confidence === current.confidence && !current.reasons.includes(reason)) {\n current.reasons.push(reason);\n }\n}\n\nexport function classifySection(input: {\n projectName: string;\n texts: string[];\n}): SectionClassification | null {\n const project = normalize(input.projectName);\n const substantive = input.texts.filter(isSubstantiveText).map(normalize);\n const corpus = substantive.join(\"\\n\");\n const scores = new Map<\n SectionTarget,\n { confidence: number; reasons: string[] }\n >();\n\n if (\n matches(\n corpus,\n /\\b(blog(?:\\s+post)?|article|essay|positioning|product copy|website copy|editorial)\\b/i,\n )\n ) {\n setScore(scores, \"writing\", 0.96, \"explicit editorial intent\");\n }\n\n if (\n project === \"ui pattern atlas\" ||\n matches(\n corpus,\n /\\b(design system|ui patterns?|information architecture|interaction model|product direction|api surface|figma)\\b|design\\s*[\u2194<>-]\\s*code/i,\n )\n ) {\n setScore(\n scores,\n \"design\",\n project === \"ui pattern atlas\" ? 0.97 : 0.95,\n project === \"ui pattern atlas\"\n ? \"design project identity\"\n : \"durable design-system intent\",\n );\n }\n\n if (\n matches(\n corpus,\n /\\b(review-only|code review|qa|quality assurance|regression (?:review|test|coverage)|test audit|coverage audit|audit (?:a |the )?(?:pull request|pr|release|tests?))\\b/i,\n )\n ) {\n setScore(scores, \"qa\", 0.98, \"explicit verification intent\");\n }\n\n const hasCrossCuttingIntent =\n scores.has(\"design\") || scores.has(\"qa\") || scores.has(\"writing\");\n if (\n !hasCrossCuttingIntent &&\n ([\n \"bb plugins\",\n \"design doctrine\",\n \"loop-machine\",\n \"moss-skills\",\n \"ottonomous\",\n \"prompt shaper\",\n ].includes(project) ||\n (project !== \"bb\" &&\n matches(\n corpus,\n /\\b(bb\\s+plugin|plugin|skill|automation|agent tool|agent tooling)\\b/i,\n )))\n ) {\n setScore(\n scores,\n \"extensions\",\n [\n \"bb plugins\",\n \"design doctrine\",\n \"loop-machine\",\n \"moss-skills\",\n \"ottonomous\",\n \"prompt shaper\",\n ].includes(project)\n ? 0.98\n : 0.96,\n [\n \"bb plugins\",\n \"design doctrine\",\n \"loop-machine\",\n \"moss-skills\",\n \"ottonomous\",\n \"prompt shaper\",\n ].includes(project)\n ? \"extension project identity\"\n : \"explicit extension intent\",\n );\n }\n\n const hasSpecificIntent = [...scores.keys()].some((target) =>\n [\"design\", \"extensions\", \"qa\", \"writing\"].includes(target),\n );\n if (\n !hasSpecificIntent &&\n ([\"moss\", \"moss collab recovery\", \"moss-collab\"].includes(project) ||\n matches(corpus, /\\bmoss(?:-collab)?\\b/i))\n ) {\n setScore(\n scores,\n \"moss\",\n [\"moss\", \"moss collab recovery\", \"moss-collab\"].includes(project)\n ? 0.97\n : 0.94,\n [\"moss\", \"moss collab recovery\", \"moss-collab\"].includes(project)\n ? \"moss project identity\"\n : \"explicit moss product intent\",\n );\n }\n\n if (\n project !== \"bb\" &&\n !hasSpecificIntent &&\n !scores.has(\"extensions\") &&\n matches(corpus, /\\bbb\\b/i)\n ) {\n setScore(scores, \"bb\", 0.94, \"explicit bb product intent\");\n }\n\n if (project === \"bb\" && !hasCrossCuttingIntent) {\n setScore(scores, \"bb\", 0.9, \"bb project identity\");\n if (\n matches(\n corpus,\n /\\b(fix|debug|investigate|implement|build|review|refactor|test|ci|server|daemon|sync|branch|pull request|pr\\s*#?\\d+|issue\\s*#?\\d+)\\b/i,\n )\n ) {\n setScore(scores, \"bb\", 0.96, \"bb engineering intent\");\n }\n }\n\n const ranked = [...scores.entries()]\n .map(([target, value]) => ({ target, ...value }))\n .sort(\n (left, right) =>\n right.confidence - left.confidence ||\n left.target.localeCompare(right.target),\n );\n const winner = ranked[0];\n if (winner === undefined) return null;\n const runnerUp = ranked[1] ?? null;\n return {\n confidence: winner.confidence,\n margin: winner.confidence - (runnerUp?.confidence ?? 0),\n reasons: winner.reasons,\n runnerUp: runnerUp?.target ?? null,\n target: winner.target,\n };\n}\n\nexport function resolveSectionId(\n sections: SectionDescriptor[],\n target: SectionTarget,\n): string | null {\n const aliases = new Set(SECTION_ALIASES[target]);\n const matches = sections.filter((section) =>\n aliases.has(normalize(section.name)),\n );\n return matches.length === 1 ? matches[0]!.id : null;\n}\n\nfunction stripPromptPreamble(value: string): string {\n let result = value\n .normalize(\"NFKC\")\n .replace(/\\r\\n?/g, \"\\n\")\n .replace(/^\\s*(?:[-*]|\\d+[.)])\\s+/, \"\")\n .replace(/^\\/[a-z0-9:_-]+\\s+/i, \"\")\n .trim();\n const preambles = [\n /^(?:can|could|would)\\s+you\\s+/i,\n /^can\\s+i\\s+/i,\n /^please\\s+/i,\n /^i\\s+(?:want|need)\\s+to\\s+/i,\n /^i(?:'d| would)\\s+like\\s+to\\s+/i,\n /^help\\s+me\\s+(?:to\\s+)?/i,\n /^let(?:'s| us)\\s+/i,\n ];\n for (const preamble of preambles) result = result.replace(preamble, \"\");\n return result.trim();\n}\n\nfunction displayTitleWord(word: string, index: number): string {\n const lower = word.toLowerCase();\n if (TITLE_ACRONYMS.has(lower)) return lower.toUpperCase();\n if (index > 0 && TITLE_CONNECTORS.has(lower)) return lower;\n if (/[0-9\u2194<>+#./-]/.test(word) && /[A-Z]/.test(word)) return word;\n return `${word.charAt(0).toUpperCase()}${word.slice(1).toLowerCase()}`;\n}\n\nexport function deriveTaskTitle(value: string): TitleCandidate | null {\n let prompt = stripPromptPreamble(value);\n if (\n prompt.length === 0 ||\n /^(?:https?:\\/\\/|@)/i.test(prompt) ||\n !isSubstantiveText(prompt)\n ) {\n return null;\n }\n\n const action = ACTION_PATTERNS.find(({ expression }) =>\n matches(prompt, expression),\n );\n if (action === undefined) return null;\n prompt = prompt.replace(action.expression, \"\").trim();\n prompt = prompt\n .split(/\\b(?:so that|because|and then|then|which|that)\\b|[\\n.!?;:]/i, 1)[0]!\n .replace(/^[\\s\"'`([{]+|[\\s\"'`\\])}]+$/g, \"\")\n .trim();\n\n const words =\n prompt.match(/[A-Za-z0-9][A-Za-z0-9+#./\u2194<>-]*/g)?.filter(Boolean) ?? [];\n while (\n words.length > 0 &&\n /^(?:a|an|my|our|the|this|these|those)$/i.test(words[0]!)\n ) {\n words.shift();\n }\n\n const actionWordCount = action.title.split(/\\s+/).length;\n const objectWords = words.slice(0, Math.max(1, 5 - actionWordCount));\n while (\n objectWords.length > 0 &&\n TITLE_CONNECTORS.has(objectWords.at(-1)!.toLowerCase())\n ) {\n objectWords.pop();\n }\n const specificWords = objectWords.filter((word) => {\n const normalized = word.toLowerCase();\n return (\n !GENERIC_TITLE_WORDS.has(normalized) &&\n !TITLE_CONNECTORS.has(normalized) &&\n normalized.length > 1\n );\n });\n if (objectWords.length === 0 || specificWords.length === 0) return null;\n\n const objectTitle = objectWords\n .map((word, index) => displayTitleWord(word, index + actionWordCount))\n .join(\" \");\n return {\n confidence: 0.92,\n title: `${action.title} ${objectTitle}`.trim(),\n };\n}\n\nexport function nextEvaluationMilestone(current: number): number {\n return current <= 1 ? 5 : current + 10;\n}\n\nexport function advanceEvaluationMilestone(\n current: number,\n completedTurns: number,\n): number {\n let next = current;\n while (next <= completedTurns) next = nextEvaluationMilestone(next);\n return next;\n}\n", "import type { BbPluginApi } from \"@bb/plugin-sdk\";\n\nimport {\n advanceEvaluationMilestone,\n classifySection,\n deriveTaskTitle,\n isEligibleThread,\n isManageableThread,\n isSubstantiveText,\n resolveSectionId,\n type SectionClassification,\n} from \"./core.js\";\n\nconst STATE_PREFIX = \"thread:v1:\";\nconst PERSONAL_PROJECT_ID = \"proj_personal\";\nconst NEW_SECTION_CONFIDENCE = 0.85;\nconst NEW_SECTION_MARGIN = 0.2;\nconst MOVE_SECTION_CONFIDENCE = 0.92;\nconst MOVE_SECTION_MARGIN = 0.25;\nconst TITLE_CONFIDENCE = 0.9;\nconst MAX_COMPLETED_EVENT_DRAIN = 100;\nconst THREAD_LIST_PAGE_SIZE = 100;\nconst RECONCILIATION_CONCURRENCY = 4;\nconst RECONCILIATION_INTERVAL_MS = 5 * 60_000;\nconst RECONCILIATION_RETRY_DELAYS_MS = [100, 500] as const;\nconst SECTION_CLASSIFIER_VERSION = 2;\n\ntype Thread = Awaited>;\ntype ThreadSeed = Pick;\ntype EvaluationPhase = \"active\" | \"created\" | \"settings\" | \"turn\";\n\ninterface SectionClassificationCache {\n classifierVersion: number;\n completedTurns: number;\n contextAvailable: boolean;\n decision: SectionClassification | null;\n evaluatedAt: number;\n}\n\ninterface ThreadState {\n completedTurns: number;\n createdAt: number;\n hasAppliedSection: boolean;\n hasAppliedTitle: boolean;\n inboxManagedPinnedAt: number | null;\n inboxObservedPinned: boolean;\n inboxPendingPin: boolean;\n inboxPendingUnpin: boolean;\n inboxLastPhase: \"active\" | \"failed\" | \"idle\" | null;\n inboxSnoozed: boolean;\n lastAppliedSectionId: string | null;\n lastAppliedTitle: string | null;\n lastCompletedSeq: number;\n nextEvaluationTurn: number;\n pendingSectionId: string | null;\n pendingSectionStreak: number;\n sectionClassification: SectionClassificationCache | null;\n sectionLocked: boolean;\n titleLocked: boolean;\n version: 1;\n}\n\nfunction stateKey(threadId: string): string {\n return `${STATE_PREFIX}${threadId}`;\n}\n\nfunction initialState(thread: ThreadSeed): ThreadState {\n return {\n completedTurns: 0,\n createdAt: thread.createdAt,\n hasAppliedSection: false,\n hasAppliedTitle: false,\n inboxManagedPinnedAt: null,\n inboxObservedPinned: false,\n inboxPendingPin: false,\n inboxPendingUnpin: false,\n inboxLastPhase: null,\n inboxSnoozed: false,\n lastAppliedSectionId: null,\n lastAppliedTitle: null,\n lastCompletedSeq: 0,\n nextEvaluationTurn: 1,\n pendingSectionId: null,\n pendingSectionStreak: 0,\n sectionClassification: null,\n sectionLocked: thread.sectionId !== null,\n titleLocked: thread.title !== null,\n version: 1,\n };\n}\n\nfunction isThreadState(value: unknown): value is ThreadState {\n if (typeof value !== \"object\" || value === null) return false;\n const state = value as Partial;\n return (\n state.version === 1 &&\n typeof state.completedTurns === \"number\" &&\n typeof state.createdAt === \"number\" &&\n typeof state.hasAppliedSection === \"boolean\" &&\n typeof state.hasAppliedTitle === \"boolean\" &&\n (typeof state.inboxManagedPinnedAt === \"number\" ||\n state.inboxManagedPinnedAt === null ||\n state.inboxManagedPinnedAt === undefined) &&\n (typeof state.inboxObservedPinned === \"boolean\" ||\n state.inboxObservedPinned === undefined) &&\n (typeof state.inboxPendingPin === \"boolean\" ||\n state.inboxPendingPin === undefined) &&\n (typeof state.inboxPendingUnpin === \"boolean\" ||\n state.inboxPendingUnpin === undefined) &&\n (state.inboxLastPhase === \"active\" ||\n state.inboxLastPhase === \"failed\" ||\n state.inboxLastPhase === \"idle\" ||\n state.inboxLastPhase === null ||\n state.inboxLastPhase === undefined) &&\n (typeof state.inboxSnoozed === \"boolean\" ||\n state.inboxSnoozed === undefined) &&\n (typeof state.lastAppliedSectionId === \"string\" ||\n state.lastAppliedSectionId === null) &&\n (typeof state.lastAppliedTitle === \"string\" ||\n state.lastAppliedTitle === null) &&\n typeof state.lastCompletedSeq === \"number\" &&\n typeof state.nextEvaluationTurn === \"number\" &&\n (typeof state.pendingSectionId === \"string\" ||\n state.pendingSectionId === null) &&\n typeof state.pendingSectionStreak === \"number\" &&\n (state.sectionClassification === undefined ||\n state.sectionClassification === null ||\n (typeof state.sectionClassification === \"object\" &&\n typeof state.sectionClassification.classifierVersion === \"number\" &&\n typeof state.sectionClassification.completedTurns === \"number\" &&\n typeof state.sectionClassification.contextAvailable === \"boolean\" &&\n (state.sectionClassification.decision === null ||\n typeof state.sectionClassification.decision === \"object\") &&\n typeof state.sectionClassification.evaluatedAt === \"number\")) &&\n typeof state.sectionLocked === \"boolean\" &&\n typeof state.titleLocked === \"boolean\"\n );\n}\n\nfunction normalizeThreadState(state: ThreadState): ThreadState {\n return {\n ...state,\n inboxManagedPinnedAt: state.inboxManagedPinnedAt ?? null,\n inboxObservedPinned: state.inboxObservedPinned ?? false,\n inboxPendingPin: state.inboxPendingPin ?? false,\n inboxPendingUnpin: state.inboxPendingUnpin ?? false,\n inboxLastPhase: state.inboxLastPhase ?? null,\n inboxSnoozed: state.inboxSnoozed ?? false,\n sectionClassification: state.sectionClassification ?? null,\n };\n}\n\nfunction syncManualLocks(state: ThreadState, thread: Thread): boolean {\n let changed = false;\n if (!state.titleLocked) {\n const externalTitle =\n state.hasAppliedTitle\n ? thread.title !== state.lastAppliedTitle\n : thread.title !== null;\n if (externalTitle) {\n state.titleLocked = true;\n changed = true;\n }\n }\n if (!state.sectionLocked) {\n const externalSection =\n state.hasAppliedSection\n ? thread.sectionId !== state.lastAppliedSectionId\n : thread.sectionId !== null;\n if (externalSection) {\n state.sectionLocked = true;\n changed = true;\n }\n }\n return changed;\n}\n\nfunction promptTexts(\n history: Awaited<\n ReturnType\n >,\n): string[] {\n return [...history]\n .sort((left, right) => left.createdAt - right.createdAt)\n .flatMap((entry) =>\n entry.input.flatMap((item) =>\n item.type === \"text\" && item.visibility !== \"agent-only\"\n ? [item.text]\n : [],\n ),\n );\n}\n\nfunction mostRecentSubstantiveText(texts: string[]): string | null {\n for (let index = texts.length - 1; index >= 0; index -= 1) {\n const text = texts[index]!;\n if (isSubstantiveText(text)) return text;\n }\n return null;\n}\n\nfunction classificationSummary(decision: SectionClassification): string {\n return [\n `target=${decision.target}`,\n `confidence=${decision.confidence.toFixed(2)}`,\n `margin=${decision.margin.toFixed(2)}`,\n `reason=${decision.reasons.join(\",\")}`,\n ].join(\" \");\n}\n\nfunction delay(milliseconds: number): Promise {\n return new Promise((resolve) => setTimeout(resolve, milliseconds));\n}\n\nfunction abortableDelay(\n milliseconds: number,\n signal: AbortSignal,\n): Promise {\n if (signal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const timeout = setTimeout(finish, milliseconds);\n signal.addEventListener(\"abort\", finish, { once: true });\n\n function finish(): void {\n clearTimeout(timeout);\n signal.removeEventListener(\"abort\", finish);\n resolve();\n }\n });\n}\n\nexport default function plugin(bb: BbPluginApi): void {\n const settings = bb.settings.define({\n inboxMode: {\n type: \"select\",\n label: \"Mode\",\n description:\n \"Apply organizes threads automatically. Observe only logs proposed changes.\",\n options: [\"observe\", \"apply\"],\n default: \"apply\",\n },\n });\n const queues = new Map>();\n let acceptingWork = true;\n let disposed = false;\n\n async function readState(threadId: string): Promise {\n const stored = await bb.storage.kv.get(stateKey(threadId));\n if (stored === undefined) return null;\n if (isThreadState(stored)) return normalizeThreadState(stored);\n bb.log.warn(`thread=${threadId} action=ignore-invalid-state`);\n return null;\n }\n\n async function saveState(\n threadId: string,\n state: ThreadState,\n ): Promise {\n await bb.storage.kv.set(stateKey(threadId), state);\n }\n\n function enqueue(\n threadId: string,\n work: () => Promise,\n containErrors = true,\n ): Promise {\n if (!acceptingWork) return Promise.resolve();\n const previous = queues.get(threadId) ?? Promise.resolve();\n const workPromise = previous\n .catch(() => undefined)\n .then(async () => {\n if (!disposed) await work();\n });\n const contained = containErrors\n ? workPromise.catch((error: unknown) => {\n const message =\n error instanceof Error ? error.message : String(error);\n bb.log.error(\n `thread=${threadId} action=queue-failed error=${message}`,\n );\n })\n : workPromise;\n const current = contained\n .finally(() => {\n if (queues.get(threadId) === current) queues.delete(threadId);\n });\n queues.set(threadId, current);\n return current;\n }\n\n async function loadContextTexts(\n thread: Thread,\n attempts: number,\n ): Promise {\n let loaded: string[] = [];\n for (let attempt = 0; attempt < attempts; attempt += 1) {\n try {\n loaded = promptTexts(\n await bb.sdk.threads.promptHistory({\n threadId: thread.id,\n limit: \"6\",\n }),\n );\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.debug(\n `thread=${thread.id} action=prompt-history-unavailable attempt=${attempt + 1} error=${message}`,\n );\n }\n if (loaded.some(isSubstantiveText) || attempt === attempts - 1) break;\n await delay(attempt === 0 ? 150 : 600);\n }\n return loaded;\n }\n\n async function reconcileInbox(\n thread: Thread,\n state: ThreadState,\n phase: \"active\" | \"failed\" | \"idle\",\n signal?: AbortSignal,\n runStartPinnedAt?: number | null,\n ): Promise {\n const { inboxMode } = await settings.get();\n if (signal?.aborted) return;\n const threadId = thread.id;\n const startedNewRun =\n phase === \"active\" && state.inboxLastPhase !== \"active\";\n if (\n startedNewRun &&\n thread.pinnedAt === null &&\n state.inboxObservedPinned &&\n runStartPinnedAt === undefined\n ) {\n bb.log.debug(\n `thread=${threadId} phase=${phase} action=await-run-start-pin-observation`,\n );\n return;\n }\n state.inboxLastPhase = phase;\n if (startedNewRun) state.inboxSnoozed = false;\n\n if (state.inboxPendingPin && thread.pinnedAt !== null) {\n state.inboxManagedPinnedAt = thread.pinnedAt;\n state.inboxObservedPinned = true;\n state.inboxPendingPin = false;\n bb.log.info(\n `thread=${threadId} phase=${phase} action=inbox-pin-adopted`,\n );\n }\n\n let recoveredManagedUnpin = false;\n if (state.inboxPendingUnpin && thread.pinnedAt === null) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxPendingUnpin = false;\n recoveredManagedUnpin = true;\n bb.log.info(\n `thread=${threadId} phase=${phase} action=inbox-unpin-adopted`,\n );\n }\n\n if (\n thread.pinnedAt === null &&\n state.inboxObservedPinned &&\n !recoveredManagedUnpin\n ) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxPendingPin = false;\n state.inboxPendingUnpin = false;\n if (startedNewRun && runStartPinnedAt === null) {\n bb.log.info(\n `thread=${threadId} phase=${phase} action=prior-run-unpin-observed`,\n );\n } else {\n state.inboxSnoozed = true;\n bb.log.info(\n `thread=${threadId} phase=${phase} action=inbox-snoozed`,\n );\n }\n }\n\n if (phase !== \"active\") {\n if (thread.pinnedAt !== null) {\n if (\n state.inboxManagedPinnedAt !== null &&\n state.inboxManagedPinnedAt !== thread.pinnedAt\n ) {\n state.inboxManagedPinnedAt = null;\n }\n state.inboxObservedPinned = true;\n return;\n }\n if (state.inboxSnoozed) return;\n if (inboxMode !== \"apply\") {\n bb.log.info(\n `thread=${threadId} phase=${phase} mode=observe action=propose-inbox-pin`,\n );\n return;\n }\n if (signal?.aborted) return;\n if (!state.inboxPendingPin) {\n state.inboxPendingPin = true;\n await saveState(threadId, state);\n }\n if (signal?.aborted) return;\n let pinned: Thread;\n try {\n pinned = await bb.sdk.threads.pin({ threadId });\n } catch (error: unknown) {\n const fresh = (await bb.sdk.threads.get({ threadId })) as Thread;\n state.inboxPendingPin = false;\n if (fresh.pinnedAt === null) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n } else {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = true;\n }\n await saveState(threadId, state);\n throw error;\n }\n state.inboxManagedPinnedAt = pinned.pinnedAt;\n state.inboxObservedPinned = true;\n state.inboxPendingPin = false;\n bb.log.info(\n `thread=${threadId} phase=${phase} mode=apply action=inbox-pinned`,\n );\n return;\n }\n\n if (thread.pinnedAt === null) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxPendingPin = false;\n state.inboxPendingUnpin = false;\n return;\n }\n state.inboxObservedPinned = true;\n if (state.inboxManagedPinnedAt !== thread.pinnedAt) {\n state.inboxManagedPinnedAt = null;\n return;\n }\n if (inboxMode !== \"apply\") {\n bb.log.info(\n `thread=${threadId} phase=${phase} mode=observe action=propose-inbox-unpin`,\n );\n return;\n }\n if (signal?.aborted) return;\n if (!state.inboxPendingUnpin) {\n state.inboxPendingUnpin = true;\n await saveState(threadId, state);\n }\n if (signal?.aborted) return;\n try {\n await bb.sdk.threads.unpin({ threadId });\n } catch (error: unknown) {\n const fresh = (await bb.sdk.threads.get({ threadId })) as Thread;\n state.inboxPendingUnpin = false;\n if (fresh.pinnedAt === null) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxSnoozed = true;\n } else {\n if (fresh.pinnedAt !== state.inboxManagedPinnedAt) {\n state.inboxManagedPinnedAt = null;\n }\n state.inboxObservedPinned = true;\n }\n await saveState(threadId, state);\n throw error;\n }\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxPendingUnpin = false;\n bb.log.info(\n `thread=${threadId} phase=${phase} mode=apply action=inbox-unpinned`,\n );\n }\n\n async function applySection(\n thread: Thread,\n state: ThreadState,\n phase: EvaluationPhase,\n decision: SectionClassification,\n targetSectionId: string,\n mode: string,\n ): Promise {\n if (state.sectionLocked) return;\n\n const movingManagedSection = thread.sectionId !== null;\n if (\n movingManagedSection &&\n (!state.hasAppliedSection || phase !== \"turn\")\n ) {\n return;\n }\n const minimumConfidence = movingManagedSection\n ? MOVE_SECTION_CONFIDENCE\n : NEW_SECTION_CONFIDENCE;\n const minimumMargin = movingManagedSection\n ? MOVE_SECTION_MARGIN\n : NEW_SECTION_MARGIN;\n if (\n decision.confidence < minimumConfidence ||\n decision.margin < minimumMargin\n ) {\n state.pendingSectionId = null;\n state.pendingSectionStreak = 0;\n return;\n }\n if (thread.sectionId === targetSectionId) {\n state.pendingSectionId = null;\n state.pendingSectionStreak = 0;\n return;\n }\n\n if (movingManagedSection) {\n if (state.pendingSectionId === targetSectionId) {\n state.pendingSectionStreak += 1;\n } else {\n state.pendingSectionId = targetSectionId;\n state.pendingSectionStreak = 1;\n }\n if (state.pendingSectionStreak < 2) return;\n }\n\n if (mode !== \"apply\") {\n bb.log.info(\n `thread=${thread.id} phase=${phase} mode=observe action=propose-section ${classificationSummary(decision)}`,\n );\n return;\n }\n\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n syncManualLocks(state, fresh);\n if (\n state.sectionLocked ||\n !isEligibleThread(fresh) ||\n fresh.sectionId !== thread.sectionId\n ) {\n return;\n }\n const updated = await bb.sdk.threads.update({\n threadId: thread.id,\n sectionId: targetSectionId,\n });\n state.hasAppliedSection = true;\n state.lastAppliedSectionId = updated.sectionId;\n state.pendingSectionId = null;\n state.pendingSectionStreak = 0;\n bb.log.info(\n `thread=${thread.id} phase=${phase} mode=apply action=section-updated ${classificationSummary(decision)}`,\n );\n }\n\n async function applyTitle(\n thread: Thread,\n state: ThreadState,\n phase: EvaluationPhase,\n texts: string[],\n mode: string,\n ): Promise {\n if (phase !== \"turn\" || state.titleLocked || thread.title !== null) return;\n const source =\n texts.find(isSubstantiveText) ?? thread.titleFallback ?? undefined;\n if (source === undefined) return;\n const candidate = deriveTaskTitle(source);\n if (candidate === null || candidate.confidence < TITLE_CONFIDENCE) return;\n\n if (mode !== \"apply\") {\n bb.log.info(\n `thread=${thread.id} phase=${phase} mode=observe action=propose-title confidence=${candidate.confidence.toFixed(2)} title=${JSON.stringify(candidate.title)}`,\n );\n return;\n }\n\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n syncManualLocks(state, fresh);\n if (state.titleLocked || !isEligibleThread(fresh) || fresh.title !== null) {\n return;\n }\n const updated = await bb.sdk.threads.update({\n threadId: thread.id,\n title: candidate.title,\n });\n state.hasAppliedTitle = true;\n state.lastAppliedTitle = updated.title;\n bb.log.info(\n `thread=${thread.id} phase=${phase} mode=apply action=title-updated confidence=${candidate.confidence.toFixed(2)} title=${JSON.stringify(candidate.title)}`,\n );\n }\n\n async function evaluate(\n threadId: string,\n phase: EvaluationPhase,\n signal?: AbortSignal,\n ): Promise {\n const state = await readState(threadId);\n if (state === null) return;\n if (signal?.aborted) return;\n const thread = (await bb.sdk.threads.get({ threadId })) as Thread;\n if (signal?.aborted) return;\n const locksChanged = syncManualLocks(state, thread);\n if (locksChanged) {\n bb.log.info(\n `thread=${threadId} action=manual-lock title=${state.titleLocked} section=${state.sectionLocked}`,\n );\n }\n if (thread.archivedAt !== null || thread.deletedAt !== null) {\n await bb.storage.kv.delete(stateKey(threadId));\n return;\n }\n if (!isEligibleThread(thread)) {\n await saveState(threadId, state);\n return;\n }\n\n const { inboxMode } = await settings.get();\n if (signal?.aborted) return;\n const movingManagedSection =\n state.hasAppliedSection && thread.sectionId !== null;\n const canManageSection =\n !state.sectionLocked &&\n (!movingManagedSection || phase === \"turn\");\n const cachedClassification = state.sectionClassification;\n const needsClassification =\n canManageSection &&\n (cachedClassification === null ||\n cachedClassification.classifierVersion !== SECTION_CLASSIFIER_VERSION ||\n (phase === \"active\" &&\n (!cachedClassification.contextAvailable ||\n cachedClassification.decision === null)) ||\n (phase === \"turn\" &&\n cachedClassification.completedTurns < state.completedTurns));\n const needsHistory = needsClassification || phase === \"turn\";\n const historyTexts = needsHistory\n ? await loadContextTexts(\n thread,\n phase === \"active\" || phase === \"created\" ? 3 : 1,\n )\n : [];\n if (signal?.aborted) return;\n const texts = [\n ...(thread.title === null ? [] : [thread.title]),\n ...(thread.titleFallback === null ? [] : [thread.titleFallback]),\n ...historyTexts,\n ];\n const latestPromptText = mostRecentSubstantiveText(historyTexts);\n const sectionTexts =\n phase === \"turn\" &&\n state.hasAppliedSection &&\n thread.sectionId !== null\n ? latestPromptText === null\n ? []\n : [latestPromptText]\n : texts;\n\n if (canManageSection) {\n try {\n let decision = cachedClassification?.decision ?? null;\n if (needsClassification) {\n const projectName =\n thread.projectId === PERSONAL_PROJECT_ID\n ? \"Personal\"\n : (\n await bb.sdk.projects.get({\n projectId: thread.projectId,\n })\n ).name;\n decision = classifySection({\n projectName,\n texts: sectionTexts,\n });\n state.sectionClassification = {\n classifierVersion: SECTION_CLASSIFIER_VERSION,\n completedTurns: state.completedTurns,\n contextAvailable: sectionTexts.some(isSubstantiveText),\n decision,\n evaluatedAt: Date.now(),\n };\n bb.log.info(\n decision === null\n ? `thread=${threadId} phase=${phase} action=section-classified target=none`\n : `thread=${threadId} phase=${phase} action=section-classified ${classificationSummary(decision)}`,\n );\n } else {\n bb.log.debug(\n `thread=${threadId} phase=${phase} action=section-cache-hit target=${decision?.target ?? \"none\"}`,\n );\n }\n if (decision !== null) {\n const sectionId = resolveSectionId(\n await bb.sdk.threadSections.list(),\n decision.target,\n );\n if (sectionId === null) {\n bb.log.warn(\n `thread=${threadId} phase=${phase} action=section-unavailable target=${decision.target}`,\n );\n } else {\n await applySection(\n thread,\n state,\n phase,\n decision,\n sectionId,\n inboxMode,\n );\n }\n } else {\n state.pendingSectionId = null;\n state.pendingSectionStreak = 0;\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(\n `thread=${threadId} phase=${phase} action=section-evaluation-failed error=${message}`,\n );\n }\n }\n\n try {\n await applyTitle(thread, state, phase, historyTexts, inboxMode);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(\n `thread=${threadId} phase=${phase} action=title-evaluation-failed error=${message}`,\n );\n }\n await saveState(threadId, state);\n }\n\n async function consumeCompletedTurns(\n threadId: string,\n state: ThreadState,\n ): Promise {\n let drained = 0;\n while (drained < MAX_COMPLETED_EVENT_DRAIN) {\n const event = await bb.sdk.threads.events.wait({\n threadId,\n type: \"turn/completed\",\n waitMs: \"1\",\n ...(state.lastCompletedSeq === 0\n ? {}\n : { afterSeq: String(state.lastCompletedSeq) }),\n });\n if (event === null) break;\n state.lastCompletedSeq = event.seq;\n if (\n event.type === \"turn/completed\" &&\n event.data.status === \"completed\"\n ) {\n state.completedTurns += 1;\n }\n drained += 1;\n }\n if (drained === MAX_COMPLETED_EVENT_DRAIN) {\n bb.log.warn(\n `thread=${threadId} action=turn-drain-capped limit=${MAX_COMPLETED_EVENT_DRAIN}`,\n );\n }\n }\n\n function inboxPhase(thread: Thread): \"active\" | \"failed\" | \"idle\" {\n if (thread.status === \"idle\") return \"idle\";\n if (thread.status === \"error\") return \"failed\";\n return \"active\";\n }\n\n async function reconcileManagedThread(\n threadId: string,\n signal?: AbortSignal,\n ): Promise {\n if (signal?.aborted) return;\n const fresh = (await bb.sdk.threads.get({ threadId })) as Thread;\n if (signal?.aborted) return;\n if (!isManageableThread(fresh)) {\n if (!signal?.aborted) {\n await bb.storage.kv.delete(stateKey(threadId));\n }\n return;\n }\n let state = await readState(threadId);\n if (signal?.aborted) return;\n const adopted = state === null;\n if (state === null) {\n state = initialState(fresh);\n }\n if (signal?.aborted) return;\n await reconcileInbox(fresh, state, inboxPhase(fresh), signal);\n if (signal?.aborted) return;\n await saveState(threadId, state);\n if (\n isEligibleThread(fresh) &&\n (adopted ||\n state.sectionClassification?.classifierVersion !==\n SECTION_CLASSIFIER_VERSION)\n ) {\n await evaluate(threadId, \"settings\", signal);\n }\n }\n\n async function discoverThreadIds(signal: AbortSignal): Promise {\n const discovered = new Set();\n let foundNewIds = true;\n while (foundNewIds && !disposed && !signal.aborted) {\n foundNewIds = false;\n let offset = 0;\n while (!disposed && !signal.aborted) {\n const page = await bb.sdk.threads.list({\n archived: false,\n excludeSideChats: true,\n hasParent: false,\n limit: THREAD_LIST_PAGE_SIZE,\n offset,\n signal,\n });\n for (const thread of page) {\n if (!discovered.has(thread.id)) {\n discovered.add(thread.id);\n foundNewIds = true;\n }\n }\n if (page.length < THREAD_LIST_PAGE_SIZE) break;\n offset += THREAD_LIST_PAGE_SIZE;\n }\n }\n return [...discovered];\n }\n\n async function reconcileWithRetry(\n threadId: string,\n signal: AbortSignal,\n ): Promise {\n for (\n let attempt = 0;\n attempt <= RECONCILIATION_RETRY_DELAYS_MS.length;\n attempt += 1\n ) {\n if (signal.aborted) return;\n try {\n await enqueue(\n threadId,\n () => reconcileManagedThread(threadId, signal),\n false,\n );\n return;\n } catch (error: unknown) {\n if (signal.aborted) return;\n const retryDelay = RECONCILIATION_RETRY_DELAYS_MS[attempt];\n if (retryDelay === undefined) throw error;\n const message =\n error instanceof Error ? error.message : String(error);\n bb.log.warn(\n `thread=${threadId} action=reconciliation-retry attempt=${attempt + 1} error=${message}`,\n );\n await abortableDelay(retryDelay, signal);\n }\n }\n }\n\n async function reconcileExistingThreads(signal: AbortSignal): Promise {\n const threadIds = await discoverThreadIds(signal);\n let nextIndex = 0;\n let firstError: unknown;\n const workerCount = Math.min(\n RECONCILIATION_CONCURRENCY,\n threadIds.length,\n );\n const workers = Array.from({ length: workerCount }, async () => {\n while (!signal.aborted && firstError === undefined) {\n const threadId = threadIds[nextIndex];\n nextIndex += 1;\n if (threadId === undefined || signal.aborted) return;\n try {\n await reconcileWithRetry(threadId, signal);\n } catch (error: unknown) {\n firstError ??= error;\n }\n }\n });\n await Promise.all(workers);\n if (firstError !== undefined) throw firstError;\n }\n\n bb.events.on(\"thread.created\", ({ thread }) =>\n enqueue(thread.id, async () => {\n if (!isEligibleThread(thread)) return;\n if ((await readState(thread.id)) !== null) return;\n await saveState(thread.id, initialState(thread));\n await evaluate(thread.id, \"created\");\n }),\n );\n\n bb.events.on(\"thread.active\", ({ thread }) =>\n enqueue(thread.id, async () => {\n await evaluate(thread.id, \"active\");\n const state = await readState(thread.id);\n if (state === null) return;\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n if (!isManageableThread(fresh)) {\n await bb.storage.kv.delete(stateKey(thread.id));\n return;\n }\n await reconcileInbox(\n fresh,\n state,\n inboxPhase(fresh),\n undefined,\n thread.pinnedAt,\n );\n await saveState(thread.id, state);\n }),\n );\n\n bb.events.on(\"thread.idle\", ({ thread }) =>\n enqueue(thread.id, async () => {\n const state = await readState(thread.id);\n if (state === null) return;\n try {\n await consumeCompletedTurns(thread.id, state);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(\n `thread=${thread.id} action=turn-count-failed error=${message}`,\n );\n }\n const due = state.completedTurns >= state.nextEvaluationTurn;\n if (due) {\n state.nextEvaluationTurn = advanceEvaluationMilestone(\n state.nextEvaluationTurn,\n state.completedTurns,\n );\n }\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n if (!isManageableThread(fresh)) {\n await bb.storage.kv.delete(stateKey(thread.id));\n return;\n }\n await reconcileInbox(fresh, state, inboxPhase(fresh));\n await saveState(thread.id, state);\n if (due) await evaluate(thread.id, \"turn\");\n }),\n );\n\n bb.events.on(\"thread.failed\", ({ thread }) =>\n enqueue(thread.id, async () => {\n const state = await readState(thread.id);\n if (state === null) return;\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n if (!isManageableThread(fresh)) {\n await bb.storage.kv.delete(stateKey(thread.id));\n return;\n }\n await reconcileInbox(fresh, state, inboxPhase(fresh));\n await saveState(thread.id, state);\n }),\n );\n\n const forget = (threadId: string) =>\n enqueue(threadId, async () => {\n await bb.storage.kv.delete(stateKey(threadId));\n });\n bb.events.on(\"thread.archived\", ({ thread }) => forget(thread.id));\n bb.events.on(\"thread.deleted\", ({ thread }) => forget(thread.id));\n\n let unsubscribeThreadChanges: () => void = () => undefined;\n try {\n unsubscribeThreadChanges = bb.sdk.subscribe({\n event: \"thread:changed\",\n callback(event) {\n const threadId = event.id;\n if (\n threadId === undefined ||\n (!event.changes.includes(\"pin-state-changed\") &&\n !event.changes.includes(\"status-changed\"))\n ) {\n return;\n }\n void enqueue(threadId, () => reconcileManagedThread(threadId));\n },\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(`action=realtime-subscribe-failed error=${message}`);\n }\n\n settings.onChange((next, previous) => {\n if (next.inboxMode === previous.inboxMode) return;\n bb.log.info(\n `action=mode-changed previous=${previous.inboxMode} next=${next.inboxMode}`,\n );\n if (next.inboxMode !== \"apply\") return;\n void bb.storage.kv\n .list(STATE_PREFIX)\n .then(async (keys) => {\n for (const key of keys) {\n const threadId = key.slice(STATE_PREFIX.length);\n await enqueue(threadId, async () => {\n const state = await readState(threadId);\n if (state === null) return;\n const thread = (await bb.sdk.threads.get({\n threadId,\n })) as Thread;\n if (!isManageableThread(thread)) {\n await bb.storage.kv.delete(stateKey(threadId));\n return;\n }\n await reconcileInbox(thread, state, inboxPhase(thread));\n await saveState(threadId, state);\n await evaluate(threadId, \"settings\");\n });\n }\n })\n .catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.error(`action=apply-mode-evaluation-failed error=${message}`);\n });\n });\n\n bb.background.service(\"inbox-reconciliation\", {\n async start(signal) {\n while (!signal.aborted) {\n await reconcileExistingThreads(signal);\n if (signal.aborted) return;\n await abortableDelay(RECONCILIATION_INTERVAL_MS, signal);\n }\n },\n });\n\n bb.onDispose(async () => {\n acceptingWork = false;\n unsubscribeThreadChanges();\n await Promise.allSettled([...queues.values()]);\n disposed = true;\n });\n void settings\n .get()\n .then(({ inboxMode }) =>\n bb.log.info(`Thread Organizer loaded mode=${inboxMode}`),\n )\n .catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(`action=mode-read-failed error=${message}`);\n });\n}\n"], - "mappings": "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", + "sourcesContent": ["export const SECTION_TARGETS = [\n \"bb\",\n \"extensions\",\n \"design\",\n \"moss\",\n \"qa\",\n \"writing\",\n] as const;\n\nexport type SectionTarget = (typeof SECTION_TARGETS)[number];\n\nexport interface OrganizableThread {\n archivedAt: number | null;\n childOrigin: \"fork\" | \"side-chat\" | null;\n deletedAt: number | null;\n originKind: \"fork\" | \"side-chat\" | null;\n originPluginId: string | null;\n parentThreadId: string | null;\n sourceThreadId: string | null;\n status: \"active\" | \"error\" | \"idle\" | \"starting\" | \"stopping\";\n visibility: \"hidden\" | \"visible\";\n}\n\nexport interface SectionClassification {\n confidence: number;\n margin: number;\n reasons: string[];\n runnerUp: SectionTarget | null;\n target: SectionTarget;\n}\n\nexport interface SectionDescriptor {\n id: string;\n name: string;\n}\n\nexport interface TitleCandidate {\n confidence: number;\n title: string;\n}\n\nconst SECTION_ALIASES: Record = {\n bb: [\"bb\", \"bb quick fixes\"],\n design: [\"design\"],\n extensions: [\"extensions\", \"bb extensions\"],\n moss: [\"moss\"],\n qa: [\"qa\", \"quality assurance\"],\n writing: [\"writing\"],\n};\n\nconst LOW_INFORMATION = new Set([\n \"continue\",\n \"do it\",\n \"fix\",\n \"go ahead\",\n \"help\",\n \"help me\",\n \"investigate\",\n \"ok\",\n \"okay\",\n \"proceed\",\n \"root cause this\",\n \"sounds good\",\n \"yes\",\n]);\n\nconst ACTION_PATTERNS: Array<{\n expression: RegExp;\n title: string;\n}> = [\n { expression: /^take\\s+over\\b/i, title: \"Take Over\" },\n { expression: /^clean\\s+up\\b/i, title: \"Clean Up\" },\n { expression: /^root\\s+cause\\b/i, title: \"Investigate\" },\n { expression: /^investigate\\b/i, title: \"Investigate\" },\n { expression: /^implement\\b/i, title: \"Implement\" },\n { expression: /^optimize\\b/i, title: \"Optimize\" },\n { expression: /^reorganize\\b/i, title: \"Reorganize\" },\n { expression: /^refactor\\b/i, title: \"Refactor\" },\n { expression: /^analyze\\b/i, title: \"Analyze\" },\n { expression: /^create\\b/i, title: \"Create\" },\n { expression: /^design\\b/i, title: \"Design\" },\n { expression: /^rewrite\\b/i, title: \"Rewrite\" },\n { expression: /^refresh\\b/i, title: \"Refresh\" },\n { expression: /^profile\\b/i, title: \"Profile\" },\n { expression: /^review\\b/i, title: \"Review\" },\n { expression: /^rename\\b/i, title: \"Rename\" },\n { expression: /^update\\b/i, title: \"Update\" },\n { expression: /^render\\b/i, title: \"Render\" },\n { expression: /^archive\\b/i, title: \"Archive\" },\n { expression: /^debug\\b/i, title: \"Debug\" },\n { expression: /^build\\b/i, title: \"Build\" },\n { expression: /^write\\b/i, title: \"Write\" },\n { expression: /^style\\b/i, title: \"Style\" },\n { expression: /^move\\b/i, title: \"Move\" },\n { expression: /^open\\b/i, title: \"Open\" },\n { expression: /^audit\\b/i, title: \"Audit\" },\n { expression: /^add\\b/i, title: \"Add\" },\n { expression: /^fix\\b/i, title: \"Fix\" },\n];\n\nconst GENERIC_TITLE_WORDS = new Set([\n \"agent\",\n \"automation\",\n \"bb\",\n \"issue\",\n \"plugin\",\n \"problem\",\n \"task\",\n \"thing\",\n \"this\",\n \"thread\",\n]);\n\nconst TITLE_CONNECTORS = new Set([\n \"and\",\n \"for\",\n \"from\",\n \"in\",\n \"of\",\n \"on\",\n \"or\",\n \"to\",\n \"with\",\n]);\n\nconst TITLE_ACRONYMS = new Set([\n \"api\",\n \"bb\",\n \"ci\",\n \"cpu\",\n \"css\",\n \"ds\",\n \"html\",\n \"http\",\n \"https\",\n \"mcp\",\n \"pr\",\n \"qa\",\n \"sdk\",\n \"ui\",\n \"url\",\n \"ux\",\n]);\n\nfunction normalize(value: string): string {\n return value\n .normalize(\"NFKC\")\n .replace(/\\r\\n?/g, \"\\n\")\n .replace(/[ \\t]+/g, \" \")\n .trim()\n .toLowerCase();\n}\n\nfunction matches(value: string, expression: RegExp): boolean {\n expression.lastIndex = 0;\n return expression.test(value);\n}\n\nexport function isSubstantiveText(value: string): boolean {\n const normalized = normalize(value)\n .replace(/^\\/[a-z0-9:_-]+\\s*/i, \"\")\n .replace(/[.!?]+$/g, \"\")\n .trim();\n if (normalized.length < 4 || LOW_INFORMATION.has(normalized)) return false;\n return !/^(?:https?:\\/\\/\\S+|@[a-z0-9:_-]+)$/i.test(normalized);\n}\n\nexport function isManageableThread(thread: OrganizableThread): boolean {\n return (\n thread.visibility === \"visible\" &&\n thread.parentThreadId === null &&\n thread.sourceThreadId === null &&\n thread.originKind === null &&\n thread.childOrigin === null &&\n thread.originPluginId === null &&\n thread.archivedAt === null &&\n thread.deletedAt === null\n );\n}\n\nexport function isEligibleThread(thread: OrganizableThread): boolean {\n return (\n isManageableThread(thread) &&\n thread.status !== \"error\" &&\n thread.status !== \"stopping\"\n );\n}\n\nfunction setScore(\n scores: Map,\n target: SectionTarget,\n confidence: number,\n reason: string,\n): void {\n const current = scores.get(target);\n if (current === undefined || confidence > current.confidence) {\n scores.set(target, { confidence, reasons: [reason] });\n return;\n }\n if (confidence === current.confidence && !current.reasons.includes(reason)) {\n current.reasons.push(reason);\n }\n}\n\nexport function classifySection(input: {\n projectName: string;\n texts: string[];\n}): SectionClassification | null {\n const project = normalize(input.projectName);\n const substantive = input.texts.filter(isSubstantiveText).map(normalize);\n const corpus = substantive.join(\"\\n\");\n const scores = new Map<\n SectionTarget,\n { confidence: number; reasons: string[] }\n >();\n\n if (\n matches(\n corpus,\n /\\b(blog(?:\\s+post)?|article|essay|positioning|product copy|website copy|editorial)\\b/i,\n )\n ) {\n setScore(scores, \"writing\", 0.96, \"explicit editorial intent\");\n }\n\n if (\n project === \"ui pattern atlas\" ||\n matches(\n corpus,\n /\\b(design system|ui patterns?|information architecture|interaction model|product direction|api surface|figma)\\b|design\\s*[\u2194<>-]\\s*code/i,\n )\n ) {\n setScore(\n scores,\n \"design\",\n project === \"ui pattern atlas\" ? 0.97 : 0.95,\n project === \"ui pattern atlas\"\n ? \"design project identity\"\n : \"durable design-system intent\",\n );\n }\n\n if (\n matches(\n corpus,\n /\\b(review-only|code review|qa|quality assurance|regression (?:review|test|coverage)|test audit|coverage audit|audit (?:a |the )?(?:pull request|pr|release|tests?))\\b/i,\n )\n ) {\n setScore(scores, \"qa\", 0.98, \"explicit verification intent\");\n }\n\n const hasCrossCuttingIntent =\n scores.has(\"design\") || scores.has(\"qa\") || scores.has(\"writing\");\n if (\n !hasCrossCuttingIntent &&\n ([\n \"bb plugins\",\n \"design doctrine\",\n \"loop-machine\",\n \"moss-skills\",\n \"ottonomous\",\n \"prompt shaper\",\n ].includes(project) ||\n (project !== \"bb\" &&\n matches(\n corpus,\n /\\b(bb\\s+plugin|plugin|skill|automation|agent tool|agent tooling)\\b/i,\n )))\n ) {\n setScore(\n scores,\n \"extensions\",\n [\n \"bb plugins\",\n \"design doctrine\",\n \"loop-machine\",\n \"moss-skills\",\n \"ottonomous\",\n \"prompt shaper\",\n ].includes(project)\n ? 0.98\n : 0.96,\n [\n \"bb plugins\",\n \"design doctrine\",\n \"loop-machine\",\n \"moss-skills\",\n \"ottonomous\",\n \"prompt shaper\",\n ].includes(project)\n ? \"extension project identity\"\n : \"explicit extension intent\",\n );\n }\n\n const hasSpecificIntent = [...scores.keys()].some((target) =>\n [\"design\", \"extensions\", \"qa\", \"writing\"].includes(target),\n );\n if (\n !hasSpecificIntent &&\n ([\"moss\", \"moss collab recovery\", \"moss-collab\"].includes(project) ||\n matches(corpus, /\\bmoss(?:-collab)?\\b/i))\n ) {\n setScore(\n scores,\n \"moss\",\n [\"moss\", \"moss collab recovery\", \"moss-collab\"].includes(project)\n ? 0.97\n : 0.94,\n [\"moss\", \"moss collab recovery\", \"moss-collab\"].includes(project)\n ? \"moss project identity\"\n : \"explicit moss product intent\",\n );\n }\n\n if (\n project !== \"bb\" &&\n !hasSpecificIntent &&\n !scores.has(\"extensions\") &&\n matches(corpus, /\\bbb\\b/i)\n ) {\n setScore(scores, \"bb\", 0.94, \"explicit bb product intent\");\n }\n\n if (project === \"bb\" && !hasCrossCuttingIntent) {\n setScore(scores, \"bb\", 0.9, \"bb project identity\");\n if (\n matches(\n corpus,\n /\\b(fix|debug|investigate|implement|build|review|refactor|test|ci|server|daemon|sync|branch|pull request|pr\\s*#?\\d+|issue\\s*#?\\d+)\\b/i,\n )\n ) {\n setScore(scores, \"bb\", 0.96, \"bb engineering intent\");\n }\n }\n\n const ranked = [...scores.entries()]\n .map(([target, value]) => ({ target, ...value }))\n .sort(\n (left, right) =>\n right.confidence - left.confidence ||\n left.target.localeCompare(right.target),\n );\n const winner = ranked[0];\n if (winner === undefined) return null;\n const runnerUp = ranked[1] ?? null;\n return {\n confidence: winner.confidence,\n margin: winner.confidence - (runnerUp?.confidence ?? 0),\n reasons: winner.reasons,\n runnerUp: runnerUp?.target ?? null,\n target: winner.target,\n };\n}\n\nexport function resolveSectionId(\n sections: SectionDescriptor[],\n target: SectionTarget,\n): string | null {\n const aliases = new Set(SECTION_ALIASES[target]);\n const matches = sections.filter((section) =>\n aliases.has(normalize(section.name)),\n );\n return matches.length === 1 ? matches[0]!.id : null;\n}\n\nfunction stripPromptPreamble(value: string): string {\n let result = value\n .normalize(\"NFKC\")\n .replace(/\\r\\n?/g, \"\\n\")\n .replace(/^\\s*(?:[-*]|\\d+[.)])\\s+/, \"\")\n .replace(/^\\/[a-z0-9:_-]+\\s+/i, \"\")\n .trim();\n const preambles = [\n /^(?:can|could|would)\\s+you\\s+/i,\n /^can\\s+i\\s+/i,\n /^please\\s+/i,\n /^i\\s+(?:want|need)\\s+to\\s+/i,\n /^i(?:'d| would)\\s+like\\s+to\\s+/i,\n /^help\\s+me\\s+(?:to\\s+)?/i,\n /^let(?:'s| us)\\s+/i,\n ];\n for (const preamble of preambles) result = result.replace(preamble, \"\");\n return result.trim();\n}\n\nfunction displayTitleWord(word: string, index: number): string {\n const lower = word.toLowerCase();\n if (TITLE_ACRONYMS.has(lower)) return lower.toUpperCase();\n if (index > 0 && TITLE_CONNECTORS.has(lower)) return lower;\n if (/[0-9\u2194<>+#./-]/.test(word) && /[A-Z]/.test(word)) return word;\n return `${word.charAt(0).toUpperCase()}${word.slice(1).toLowerCase()}`;\n}\n\nexport function deriveTaskTitle(value: string): TitleCandidate | null {\n let prompt = stripPromptPreamble(value);\n if (\n prompt.length === 0 ||\n /^(?:https?:\\/\\/|@)/i.test(prompt) ||\n !isSubstantiveText(prompt)\n ) {\n return null;\n }\n\n const action = ACTION_PATTERNS.find(({ expression }) =>\n matches(prompt, expression),\n );\n if (action === undefined) return null;\n prompt = prompt.replace(action.expression, \"\").trim();\n prompt = prompt\n .split(/\\b(?:so that|because|and then|then|which|that)\\b|[\\n.!?;:]/i, 1)[0]!\n .replace(/^[\\s\"'`([{]+|[\\s\"'`\\])}]+$/g, \"\")\n .trim();\n\n const words =\n prompt.match(/[A-Za-z0-9][A-Za-z0-9+#./\u2194<>-]*/g)?.filter(Boolean) ?? [];\n while (\n words.length > 0 &&\n /^(?:a|an|my|our|the|this|these|those)$/i.test(words[0]!)\n ) {\n words.shift();\n }\n\n const actionWordCount = action.title.split(/\\s+/).length;\n const objectWords = words.slice(0, Math.max(1, 5 - actionWordCount));\n while (\n objectWords.length > 0 &&\n TITLE_CONNECTORS.has(objectWords.at(-1)!.toLowerCase())\n ) {\n objectWords.pop();\n }\n const specificWords = objectWords.filter((word) => {\n const normalized = word.toLowerCase();\n return (\n !GENERIC_TITLE_WORDS.has(normalized) &&\n !TITLE_CONNECTORS.has(normalized) &&\n normalized.length > 1\n );\n });\n if (objectWords.length === 0 || specificWords.length === 0) return null;\n\n const objectTitle = objectWords\n .map((word, index) => displayTitleWord(word, index + actionWordCount))\n .join(\" \");\n return {\n confidence: 0.92,\n title: `${action.title} ${objectTitle}`.trim(),\n };\n}\n\nexport function nextEvaluationMilestone(current: number): number {\n return current <= 1 ? 5 : current + 10;\n}\n\nexport function advanceEvaluationMilestone(\n current: number,\n completedTurns: number,\n): number {\n let next = current;\n while (next <= completedTurns) next = nextEvaluationMilestone(next);\n return next;\n}\n", "import type { BbPluginApi } from \"@bb/plugin-sdk\";\n\nimport {\n advanceEvaluationMilestone,\n classifySection,\n deriveTaskTitle,\n isEligibleThread,\n isManageableThread,\n isSubstantiveText,\n resolveSectionId,\n type SectionClassification,\n} from \"./core.js\";\n\nconst STATE_PREFIX = \"thread:v1:\";\nconst PERSONAL_PROJECT_ID = \"proj_personal\";\nconst NEW_SECTION_CONFIDENCE = 0.85;\nconst NEW_SECTION_MARGIN = 0.2;\nconst MOVE_SECTION_CONFIDENCE = 0.92;\nconst MOVE_SECTION_MARGIN = 0.25;\nconst TITLE_CONFIDENCE = 0.9;\nconst MAX_COMPLETED_EVENT_DRAIN = 100;\nconst THREAD_LIST_PAGE_SIZE = 100;\nconst RECONCILIATION_CONCURRENCY = 4;\nconst RECONCILIATION_INTERVAL_MS = 5 * 60_000;\nconst RECONCILIATION_RETRY_DELAYS_MS = [100, 500] as const;\nconst SECTION_CLASSIFIER_VERSION = 2;\n\ntype Thread = Awaited>;\ntype ThreadSeed = Pick;\ntype EvaluationPhase = \"active\" | \"created\" | \"settings\" | \"turn\";\n\ninterface SectionClassificationCache {\n classifierVersion: number;\n completedTurns: number;\n contextAvailable: boolean;\n decision: SectionClassification | null;\n evaluatedAt: number;\n}\n\ninterface ThreadState {\n completedTurns: number;\n createdAt: number;\n hasAppliedSection: boolean;\n hasAppliedTitle: boolean;\n inboxManagedPinnedAt: number | null;\n inboxObservedPinned: boolean;\n inboxPendingPin: boolean;\n inboxPendingUnpin: boolean;\n inboxLastPhase: \"active\" | \"failed\" | \"idle\" | null;\n inboxSnoozed: boolean;\n lastAppliedSectionId: string | null;\n lastAppliedTitle: string | null;\n lastCompletedSeq: number;\n nextEvaluationTurn: number;\n pendingSectionId: string | null;\n pendingSectionStreak: number;\n sectionClassification: SectionClassificationCache | null;\n sectionLocked: boolean;\n titleLocked: boolean;\n version: 1;\n}\n\nfunction stateKey(threadId: string): string {\n return `${STATE_PREFIX}${threadId}`;\n}\n\nfunction initialState(thread: ThreadSeed): ThreadState {\n return {\n completedTurns: 0,\n createdAt: thread.createdAt,\n hasAppliedSection: false,\n hasAppliedTitle: false,\n inboxManagedPinnedAt: null,\n inboxObservedPinned: false,\n inboxPendingPin: false,\n inboxPendingUnpin: false,\n inboxLastPhase: null,\n inboxSnoozed: false,\n lastAppliedSectionId: null,\n lastAppliedTitle: null,\n lastCompletedSeq: 0,\n nextEvaluationTurn: 1,\n pendingSectionId: null,\n pendingSectionStreak: 0,\n sectionClassification: null,\n sectionLocked: thread.sectionId !== null,\n titleLocked: thread.title !== null,\n version: 1,\n };\n}\n\nfunction isThreadState(value: unknown): value is ThreadState {\n if (typeof value !== \"object\" || value === null) return false;\n const state = value as Partial;\n return (\n state.version === 1 &&\n typeof state.completedTurns === \"number\" &&\n typeof state.createdAt === \"number\" &&\n typeof state.hasAppliedSection === \"boolean\" &&\n typeof state.hasAppliedTitle === \"boolean\" &&\n (typeof state.inboxManagedPinnedAt === \"number\" ||\n state.inboxManagedPinnedAt === null ||\n state.inboxManagedPinnedAt === undefined) &&\n (typeof state.inboxObservedPinned === \"boolean\" ||\n state.inboxObservedPinned === undefined) &&\n (typeof state.inboxPendingPin === \"boolean\" ||\n state.inboxPendingPin === undefined) &&\n (typeof state.inboxPendingUnpin === \"boolean\" ||\n state.inboxPendingUnpin === undefined) &&\n (state.inboxLastPhase === \"active\" ||\n state.inboxLastPhase === \"failed\" ||\n state.inboxLastPhase === \"idle\" ||\n state.inboxLastPhase === null ||\n state.inboxLastPhase === undefined) &&\n (typeof state.inboxSnoozed === \"boolean\" ||\n state.inboxSnoozed === undefined) &&\n (typeof state.lastAppliedSectionId === \"string\" ||\n state.lastAppliedSectionId === null) &&\n (typeof state.lastAppliedTitle === \"string\" ||\n state.lastAppliedTitle === null) &&\n typeof state.lastCompletedSeq === \"number\" &&\n typeof state.nextEvaluationTurn === \"number\" &&\n (typeof state.pendingSectionId === \"string\" ||\n state.pendingSectionId === null) &&\n typeof state.pendingSectionStreak === \"number\" &&\n (state.sectionClassification === undefined ||\n state.sectionClassification === null ||\n (typeof state.sectionClassification === \"object\" &&\n typeof state.sectionClassification.classifierVersion === \"number\" &&\n typeof state.sectionClassification.completedTurns === \"number\" &&\n typeof state.sectionClassification.contextAvailable === \"boolean\" &&\n (state.sectionClassification.decision === null ||\n typeof state.sectionClassification.decision === \"object\") &&\n typeof state.sectionClassification.evaluatedAt === \"number\")) &&\n typeof state.sectionLocked === \"boolean\" &&\n typeof state.titleLocked === \"boolean\"\n );\n}\n\nfunction normalizeThreadState(state: ThreadState): ThreadState {\n return {\n ...state,\n inboxManagedPinnedAt: state.inboxManagedPinnedAt ?? null,\n inboxObservedPinned: state.inboxObservedPinned ?? false,\n inboxPendingPin: state.inboxPendingPin ?? false,\n inboxPendingUnpin: state.inboxPendingUnpin ?? false,\n inboxLastPhase: state.inboxLastPhase ?? null,\n inboxSnoozed: state.inboxSnoozed ?? false,\n sectionClassification: state.sectionClassification ?? null,\n };\n}\n\nfunction syncManualLocks(state: ThreadState, thread: Thread): boolean {\n let changed = false;\n if (!state.titleLocked) {\n const externalTitle =\n state.hasAppliedTitle\n ? thread.title !== state.lastAppliedTitle\n : thread.title !== null;\n if (externalTitle) {\n state.titleLocked = true;\n changed = true;\n }\n }\n if (!state.sectionLocked) {\n const externalSection =\n state.hasAppliedSection\n ? thread.sectionId !== state.lastAppliedSectionId\n : thread.sectionId !== null;\n if (externalSection) {\n state.sectionLocked = true;\n changed = true;\n }\n }\n return changed;\n}\n\nfunction promptTexts(\n history: Awaited<\n ReturnType\n >,\n): string[] {\n return [...history]\n .sort((left, right) => left.createdAt - right.createdAt)\n .flatMap((entry) =>\n entry.input.flatMap((item) =>\n item.type === \"text\" && item.visibility !== \"agent-only\"\n ? [item.text]\n : [],\n ),\n );\n}\n\nfunction mostRecentSubstantiveText(texts: string[]): string | null {\n for (let index = texts.length - 1; index >= 0; index -= 1) {\n const text = texts[index]!;\n if (isSubstantiveText(text)) return text;\n }\n return null;\n}\n\nfunction classificationSummary(decision: SectionClassification): string {\n return [\n `target=${decision.target}`,\n `confidence=${decision.confidence.toFixed(2)}`,\n `margin=${decision.margin.toFixed(2)}`,\n `reason=${decision.reasons.join(\",\")}`,\n ].join(\" \");\n}\n\nfunction delay(milliseconds: number): Promise {\n return new Promise((resolve) => setTimeout(resolve, milliseconds));\n}\n\nfunction abortableDelay(\n milliseconds: number,\n signal: AbortSignal,\n): Promise {\n if (signal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const timeout = setTimeout(finish, milliseconds);\n signal.addEventListener(\"abort\", finish, { once: true });\n\n function finish(): void {\n clearTimeout(timeout);\n signal.removeEventListener(\"abort\", finish);\n resolve();\n }\n });\n}\n\nexport default function plugin(bb: BbPluginApi): void {\n const settings = bb.settings.define({\n inboxMode: {\n type: \"select\",\n label: \"Mode\",\n description:\n \"Apply organizes threads automatically. Observe only logs proposed changes.\",\n options: [\"observe\", \"apply\"],\n default: \"apply\",\n },\n });\n const queues = new Map>();\n let acceptingWork = true;\n let disposed = false;\n\n async function readState(threadId: string): Promise {\n const stored = await bb.storage.kv.get(stateKey(threadId));\n if (stored === undefined) return null;\n if (isThreadState(stored)) return normalizeThreadState(stored);\n bb.log.warn(`thread=${threadId} action=ignore-invalid-state`);\n return null;\n }\n\n async function saveState(\n threadId: string,\n state: ThreadState,\n ): Promise {\n await bb.storage.kv.set(stateKey(threadId), state);\n }\n\n function enqueue(\n threadId: string,\n work: () => Promise,\n containErrors = true,\n ): Promise {\n if (!acceptingWork) return Promise.resolve();\n const previous = queues.get(threadId) ?? Promise.resolve();\n const workPromise = previous\n .catch(() => undefined)\n .then(async () => {\n if (!disposed) await work();\n });\n const contained = containErrors\n ? workPromise.catch((error: unknown) => {\n const message =\n error instanceof Error ? error.message : String(error);\n bb.log.error(\n `thread=${threadId} action=queue-failed error=${message}`,\n );\n })\n : workPromise;\n const current = contained\n .finally(() => {\n if (queues.get(threadId) === current) queues.delete(threadId);\n });\n queues.set(threadId, current);\n return current;\n }\n\n async function loadContextTexts(\n thread: Thread,\n attempts: number,\n ): Promise {\n let loaded: string[] = [];\n for (let attempt = 0; attempt < attempts; attempt += 1) {\n try {\n loaded = promptTexts(\n await bb.sdk.threads.promptHistory({\n threadId: thread.id,\n limit: \"6\",\n }),\n );\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.debug(\n `thread=${thread.id} action=prompt-history-unavailable attempt=${attempt + 1} error=${message}`,\n );\n }\n if (loaded.some(isSubstantiveText) || attempt === attempts - 1) break;\n await delay(attempt === 0 ? 150 : 600);\n }\n return loaded;\n }\n\n async function reconcileInbox(\n thread: Thread,\n state: ThreadState,\n phase: \"active\" | \"failed\" | \"idle\",\n signal?: AbortSignal,\n runStartPinnedAt?: number | null,\n ): Promise {\n const { inboxMode } = await settings.get();\n if (signal?.aborted) return;\n const threadId = thread.id;\n const startedNewRun =\n phase === \"active\" && state.inboxLastPhase !== \"active\";\n if (\n startedNewRun &&\n thread.pinnedAt === null &&\n state.inboxObservedPinned &&\n runStartPinnedAt === undefined\n ) {\n bb.log.debug(\n `thread=${threadId} phase=${phase} action=await-run-start-pin-observation`,\n );\n return;\n }\n state.inboxLastPhase = phase;\n if (startedNewRun) state.inboxSnoozed = false;\n\n if (state.inboxPendingPin && thread.pinnedAt !== null) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = true;\n state.inboxPendingPin = false;\n bb.log.warn(\n `thread=${threadId} phase=${phase} action=inbox-pin-ownership-ambiguous`,\n );\n }\n\n let recoveredManagedUnpin = false;\n if (state.inboxPendingUnpin && thread.pinnedAt === null) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxPendingUnpin = false;\n recoveredManagedUnpin = true;\n bb.log.info(\n `thread=${threadId} phase=${phase} action=inbox-unpin-adopted`,\n );\n }\n\n if (\n thread.pinnedAt === null &&\n state.inboxObservedPinned &&\n !recoveredManagedUnpin\n ) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxPendingPin = false;\n state.inboxPendingUnpin = false;\n if (startedNewRun && runStartPinnedAt === null) {\n bb.log.info(\n `thread=${threadId} phase=${phase} action=prior-run-unpin-observed`,\n );\n } else {\n state.inboxSnoozed = true;\n bb.log.info(\n `thread=${threadId} phase=${phase} action=inbox-snoozed`,\n );\n }\n }\n\n if (phase !== \"active\") {\n if (thread.pinnedAt !== null) {\n if (\n state.inboxManagedPinnedAt !== null &&\n state.inboxManagedPinnedAt !== thread.pinnedAt\n ) {\n state.inboxManagedPinnedAt = null;\n }\n state.inboxObservedPinned = true;\n return;\n }\n if (state.inboxSnoozed) return;\n if (inboxMode !== \"apply\") {\n bb.log.info(\n `thread=${threadId} phase=${phase} mode=observe action=propose-inbox-pin`,\n );\n return;\n }\n if (signal?.aborted) return;\n if (!state.inboxPendingPin) {\n state.inboxPendingPin = true;\n await saveState(threadId, state);\n }\n if (signal?.aborted) return;\n let pinned: Thread;\n try {\n pinned = await bb.sdk.threads.pin({ threadId });\n } catch (error: unknown) {\n const fresh = (await bb.sdk.threads.get({ threadId })) as Thread;\n state.inboxPendingPin = false;\n if (fresh.pinnedAt === null) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n } else {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = true;\n }\n await saveState(threadId, state);\n throw error;\n }\n state.inboxManagedPinnedAt = pinned.pinnedAt;\n state.inboxObservedPinned = true;\n state.inboxPendingPin = false;\n bb.log.info(\n `thread=${threadId} phase=${phase} mode=apply action=inbox-pinned`,\n );\n return;\n }\n\n if (thread.pinnedAt === null) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxPendingPin = false;\n state.inboxPendingUnpin = false;\n return;\n }\n state.inboxObservedPinned = true;\n if (state.inboxManagedPinnedAt !== thread.pinnedAt) {\n state.inboxManagedPinnedAt = null;\n return;\n }\n if (inboxMode !== \"apply\") {\n bb.log.info(\n `thread=${threadId} phase=${phase} mode=observe action=propose-inbox-unpin`,\n );\n return;\n }\n if (signal?.aborted) return;\n if (!state.inboxPendingUnpin) {\n state.inboxPendingUnpin = true;\n await saveState(threadId, state);\n }\n if (signal?.aborted) return;\n try {\n await bb.sdk.threads.unpin({ threadId });\n } catch (error: unknown) {\n const fresh = (await bb.sdk.threads.get({ threadId })) as Thread;\n state.inboxPendingUnpin = false;\n if (fresh.pinnedAt === null) {\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxSnoozed = true;\n } else {\n if (fresh.pinnedAt !== state.inboxManagedPinnedAt) {\n state.inboxManagedPinnedAt = null;\n }\n state.inboxObservedPinned = true;\n }\n await saveState(threadId, state);\n throw error;\n }\n state.inboxManagedPinnedAt = null;\n state.inboxObservedPinned = false;\n state.inboxPendingUnpin = false;\n bb.log.info(\n `thread=${threadId} phase=${phase} mode=apply action=inbox-unpinned`,\n );\n }\n\n async function applySection(\n thread: Thread,\n state: ThreadState,\n phase: EvaluationPhase,\n decision: SectionClassification,\n targetSectionId: string,\n mode: string,\n ): Promise {\n if (state.sectionLocked) return;\n\n const movingManagedSection = thread.sectionId !== null;\n if (\n movingManagedSection &&\n (!state.hasAppliedSection || phase !== \"turn\")\n ) {\n return;\n }\n const minimumConfidence = movingManagedSection\n ? MOVE_SECTION_CONFIDENCE\n : NEW_SECTION_CONFIDENCE;\n const minimumMargin = movingManagedSection\n ? MOVE_SECTION_MARGIN\n : NEW_SECTION_MARGIN;\n if (\n decision.confidence < minimumConfidence ||\n decision.margin < minimumMargin\n ) {\n state.pendingSectionId = null;\n state.pendingSectionStreak = 0;\n return;\n }\n if (thread.sectionId === targetSectionId) {\n state.pendingSectionId = null;\n state.pendingSectionStreak = 0;\n return;\n }\n\n if (movingManagedSection) {\n if (state.pendingSectionId === targetSectionId) {\n state.pendingSectionStreak += 1;\n } else {\n state.pendingSectionId = targetSectionId;\n state.pendingSectionStreak = 1;\n }\n if (state.pendingSectionStreak < 2) return;\n }\n\n if (mode !== \"apply\") {\n bb.log.info(\n `thread=${thread.id} phase=${phase} mode=observe action=propose-section ${classificationSummary(decision)}`,\n );\n return;\n }\n\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n syncManualLocks(state, fresh);\n if (\n state.sectionLocked ||\n !isEligibleThread(fresh) ||\n fresh.sectionId !== thread.sectionId\n ) {\n return;\n }\n const updated = await bb.sdk.threads.update({\n threadId: thread.id,\n sectionId: targetSectionId,\n });\n state.hasAppliedSection = true;\n state.lastAppliedSectionId = updated.sectionId;\n state.pendingSectionId = null;\n state.pendingSectionStreak = 0;\n bb.log.info(\n `thread=${thread.id} phase=${phase} mode=apply action=section-updated ${classificationSummary(decision)}`,\n );\n }\n\n async function applyTitle(\n thread: Thread,\n state: ThreadState,\n phase: EvaluationPhase,\n texts: string[],\n mode: string,\n ): Promise {\n if (phase !== \"turn\" || state.titleLocked || thread.title !== null) return;\n const source =\n texts.find(isSubstantiveText) ?? thread.titleFallback ?? undefined;\n if (source === undefined) return;\n const candidate = deriveTaskTitle(source);\n if (candidate === null || candidate.confidence < TITLE_CONFIDENCE) return;\n\n if (mode !== \"apply\") {\n bb.log.info(\n `thread=${thread.id} phase=${phase} mode=observe action=propose-title confidence=${candidate.confidence.toFixed(2)} title=${JSON.stringify(candidate.title)}`,\n );\n return;\n }\n\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n syncManualLocks(state, fresh);\n if (state.titleLocked || !isEligibleThread(fresh) || fresh.title !== null) {\n return;\n }\n const updated = await bb.sdk.threads.update({\n threadId: thread.id,\n title: candidate.title,\n });\n state.hasAppliedTitle = true;\n state.lastAppliedTitle = updated.title;\n bb.log.info(\n `thread=${thread.id} phase=${phase} mode=apply action=title-updated confidence=${candidate.confidence.toFixed(2)} title=${JSON.stringify(candidate.title)}`,\n );\n }\n\n async function evaluate(\n threadId: string,\n phase: EvaluationPhase,\n signal?: AbortSignal,\n ): Promise {\n const state = await readState(threadId);\n if (state === null) return;\n if (signal?.aborted) return;\n const thread = (await bb.sdk.threads.get({ threadId })) as Thread;\n if (signal?.aborted) return;\n const locksChanged = syncManualLocks(state, thread);\n if (locksChanged) {\n bb.log.info(\n `thread=${threadId} action=manual-lock title=${state.titleLocked} section=${state.sectionLocked}`,\n );\n }\n if (thread.archivedAt !== null || thread.deletedAt !== null) {\n await bb.storage.kv.delete(stateKey(threadId));\n return;\n }\n if (!isEligibleThread(thread)) {\n await saveState(threadId, state);\n return;\n }\n\n const { inboxMode } = await settings.get();\n if (signal?.aborted) return;\n const movingManagedSection =\n state.hasAppliedSection && thread.sectionId !== null;\n const canManageSection =\n !state.sectionLocked &&\n (!movingManagedSection || phase === \"turn\");\n const cachedClassification = state.sectionClassification;\n const needsClassification =\n canManageSection &&\n (cachedClassification === null ||\n cachedClassification.classifierVersion !== SECTION_CLASSIFIER_VERSION ||\n (phase === \"active\" &&\n (!cachedClassification.contextAvailable ||\n cachedClassification.decision === null)) ||\n (phase === \"turn\" &&\n cachedClassification.completedTurns < state.completedTurns));\n const needsHistory = needsClassification || phase === \"turn\";\n const historyTexts = needsHistory\n ? await loadContextTexts(\n thread,\n phase === \"active\" || phase === \"created\" ? 3 : 1,\n )\n : [];\n if (signal?.aborted) return;\n const texts = [\n ...(thread.title === null ? [] : [thread.title]),\n ...(thread.titleFallback === null ? [] : [thread.titleFallback]),\n ...historyTexts,\n ];\n const latestPromptText = mostRecentSubstantiveText(historyTexts);\n const sectionTexts =\n phase === \"turn\" &&\n state.hasAppliedSection &&\n thread.sectionId !== null\n ? latestPromptText === null\n ? []\n : [latestPromptText]\n : texts;\n\n if (canManageSection) {\n try {\n let decision = cachedClassification?.decision ?? null;\n if (needsClassification) {\n const projectName =\n thread.projectId === PERSONAL_PROJECT_ID\n ? \"Personal\"\n : (\n await bb.sdk.projects.get({\n projectId: thread.projectId,\n })\n ).name;\n decision = classifySection({\n projectName,\n texts: sectionTexts,\n });\n state.sectionClassification = {\n classifierVersion: SECTION_CLASSIFIER_VERSION,\n completedTurns: state.completedTurns,\n contextAvailable: sectionTexts.some(isSubstantiveText),\n decision,\n evaluatedAt: Date.now(),\n };\n bb.log.info(\n decision === null\n ? `thread=${threadId} phase=${phase} action=section-classified target=none`\n : `thread=${threadId} phase=${phase} action=section-classified ${classificationSummary(decision)}`,\n );\n } else {\n bb.log.debug(\n `thread=${threadId} phase=${phase} action=section-cache-hit target=${decision?.target ?? \"none\"}`,\n );\n }\n if (decision !== null) {\n const sectionId = resolveSectionId(\n await bb.sdk.threadSections.list(),\n decision.target,\n );\n if (sectionId === null) {\n bb.log.warn(\n `thread=${threadId} phase=${phase} action=section-unavailable target=${decision.target}`,\n );\n } else {\n await applySection(\n thread,\n state,\n phase,\n decision,\n sectionId,\n inboxMode,\n );\n }\n } else {\n state.pendingSectionId = null;\n state.pendingSectionStreak = 0;\n }\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(\n `thread=${threadId} phase=${phase} action=section-evaluation-failed error=${message}`,\n );\n }\n }\n\n try {\n await applyTitle(thread, state, phase, historyTexts, inboxMode);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(\n `thread=${threadId} phase=${phase} action=title-evaluation-failed error=${message}`,\n );\n }\n await saveState(threadId, state);\n }\n\n async function consumeCompletedTurns(\n threadId: string,\n state: ThreadState,\n ): Promise {\n let drained = 0;\n while (drained < MAX_COMPLETED_EVENT_DRAIN) {\n const event = await bb.sdk.threads.events.wait({\n threadId,\n type: \"turn/completed\",\n waitMs: \"1\",\n ...(state.lastCompletedSeq === 0\n ? {}\n : { afterSeq: String(state.lastCompletedSeq) }),\n });\n if (event === null) break;\n state.lastCompletedSeq = event.seq;\n if (\n event.type === \"turn/completed\" &&\n event.data.status === \"completed\"\n ) {\n state.completedTurns += 1;\n }\n drained += 1;\n }\n if (drained === MAX_COMPLETED_EVENT_DRAIN) {\n bb.log.warn(\n `thread=${threadId} action=turn-drain-capped limit=${MAX_COMPLETED_EVENT_DRAIN}`,\n );\n }\n }\n\n function inboxPhase(thread: Thread): \"active\" | \"failed\" | \"idle\" {\n if (thread.status === \"idle\") return \"idle\";\n if (thread.status === \"error\") return \"failed\";\n return \"active\";\n }\n\n async function reconcileManagedThread(\n threadId: string,\n signal?: AbortSignal,\n ): Promise {\n if (signal?.aborted) return;\n const fresh = (await bb.sdk.threads.get({ threadId })) as Thread;\n if (signal?.aborted) return;\n if (!isManageableThread(fresh)) {\n if (!signal?.aborted) {\n await bb.storage.kv.delete(stateKey(threadId));\n }\n return;\n }\n let state = await readState(threadId);\n if (signal?.aborted) return;\n const adopted = state === null;\n if (state === null) {\n state = initialState(fresh);\n }\n if (signal?.aborted) return;\n await reconcileInbox(fresh, state, inboxPhase(fresh), signal);\n if (signal?.aborted) return;\n await saveState(threadId, state);\n if (\n isEligibleThread(fresh) &&\n (adopted ||\n state.sectionClassification?.classifierVersion !==\n SECTION_CLASSIFIER_VERSION)\n ) {\n await evaluate(threadId, \"settings\", signal);\n }\n }\n\n async function discoverThreadIds(signal: AbortSignal): Promise {\n const discovered = new Set();\n let foundNewIds = true;\n while (foundNewIds && !disposed && !signal.aborted) {\n foundNewIds = false;\n let offset = 0;\n while (!disposed && !signal.aborted) {\n const page = await bb.sdk.threads.list({\n archived: false,\n excludeSideChats: true,\n hasParent: false,\n limit: THREAD_LIST_PAGE_SIZE,\n offset,\n signal,\n });\n for (const thread of page) {\n if (!discovered.has(thread.id)) {\n discovered.add(thread.id);\n foundNewIds = true;\n }\n }\n if (page.length < THREAD_LIST_PAGE_SIZE) break;\n offset += THREAD_LIST_PAGE_SIZE;\n }\n }\n return [...discovered];\n }\n\n async function reconcileWithRetry(\n threadId: string,\n signal: AbortSignal,\n ): Promise {\n for (\n let attempt = 0;\n attempt <= RECONCILIATION_RETRY_DELAYS_MS.length;\n attempt += 1\n ) {\n if (signal.aborted) return;\n try {\n await enqueue(\n threadId,\n () => reconcileManagedThread(threadId, signal),\n false,\n );\n return;\n } catch (error: unknown) {\n if (signal.aborted) return;\n const retryDelay = RECONCILIATION_RETRY_DELAYS_MS[attempt];\n if (retryDelay === undefined) throw error;\n const message =\n error instanceof Error ? error.message : String(error);\n bb.log.warn(\n `thread=${threadId} action=reconciliation-retry attempt=${attempt + 1} error=${message}`,\n );\n await abortableDelay(retryDelay, signal);\n }\n }\n }\n\n async function reconcileExistingThreads(signal: AbortSignal): Promise {\n const threadIds = await discoverThreadIds(signal);\n let nextIndex = 0;\n let firstError: unknown;\n const workerCount = Math.min(\n RECONCILIATION_CONCURRENCY,\n threadIds.length,\n );\n const workers = Array.from({ length: workerCount }, async () => {\n while (!signal.aborted && firstError === undefined) {\n const threadId = threadIds[nextIndex];\n nextIndex += 1;\n if (threadId === undefined || signal.aborted) return;\n try {\n await reconcileWithRetry(threadId, signal);\n } catch (error: unknown) {\n firstError ??= error;\n }\n }\n });\n await Promise.all(workers);\n if (firstError !== undefined) throw firstError;\n }\n\n bb.events.on(\"thread.created\", ({ thread }) =>\n enqueue(thread.id, async () => {\n if (!isEligibleThread(thread)) return;\n if ((await readState(thread.id)) !== null) return;\n await saveState(thread.id, initialState(thread));\n await evaluate(thread.id, \"created\");\n }),\n );\n\n bb.events.on(\"thread.active\", ({ thread }) =>\n enqueue(thread.id, async () => {\n await evaluate(thread.id, \"active\");\n const state = await readState(thread.id);\n if (state === null) return;\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n if (!isManageableThread(fresh)) {\n await bb.storage.kv.delete(stateKey(thread.id));\n return;\n }\n await reconcileInbox(\n fresh,\n state,\n inboxPhase(fresh),\n undefined,\n thread.pinnedAt,\n );\n await saveState(thread.id, state);\n }),\n );\n\n bb.events.on(\"thread.idle\", ({ thread }) =>\n enqueue(thread.id, async () => {\n const state = await readState(thread.id);\n if (state === null) return;\n try {\n await consumeCompletedTurns(thread.id, state);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(\n `thread=${thread.id} action=turn-count-failed error=${message}`,\n );\n }\n const due = state.completedTurns >= state.nextEvaluationTurn;\n if (due) {\n state.nextEvaluationTurn = advanceEvaluationMilestone(\n state.nextEvaluationTurn,\n state.completedTurns,\n );\n }\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n if (!isManageableThread(fresh)) {\n await bb.storage.kv.delete(stateKey(thread.id));\n return;\n }\n await reconcileInbox(fresh, state, inboxPhase(fresh));\n await saveState(thread.id, state);\n if (due) await evaluate(thread.id, \"turn\");\n }),\n );\n\n bb.events.on(\"thread.failed\", ({ thread }) =>\n enqueue(thread.id, async () => {\n const state = await readState(thread.id);\n if (state === null) return;\n const fresh = (await bb.sdk.threads.get({\n threadId: thread.id,\n })) as Thread;\n if (!isManageableThread(fresh)) {\n await bb.storage.kv.delete(stateKey(thread.id));\n return;\n }\n await reconcileInbox(fresh, state, inboxPhase(fresh));\n await saveState(thread.id, state);\n }),\n );\n\n const forget = (threadId: string) =>\n enqueue(threadId, async () => {\n await bb.storage.kv.delete(stateKey(threadId));\n });\n bb.events.on(\"thread.archived\", ({ thread }) => forget(thread.id));\n bb.events.on(\"thread.deleted\", ({ thread }) => forget(thread.id));\n\n let unsubscribeThreadChanges: () => void = () => undefined;\n try {\n unsubscribeThreadChanges = bb.sdk.subscribe({\n event: \"thread:changed\",\n callback(event) {\n const threadId = event.id;\n if (\n threadId === undefined ||\n (!event.changes.includes(\"pin-state-changed\") &&\n !event.changes.includes(\"status-changed\"))\n ) {\n return;\n }\n void enqueue(threadId, () => reconcileManagedThread(threadId));\n },\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(`action=realtime-subscribe-failed error=${message}`);\n }\n\n settings.onChange((next, previous) => {\n if (next.inboxMode === previous.inboxMode) return;\n bb.log.info(\n `action=mode-changed previous=${previous.inboxMode} next=${next.inboxMode}`,\n );\n if (next.inboxMode !== \"apply\") return;\n void bb.storage.kv\n .list(STATE_PREFIX)\n .then(async (keys) => {\n for (const key of keys) {\n const threadId = key.slice(STATE_PREFIX.length);\n await enqueue(threadId, async () => {\n const state = await readState(threadId);\n if (state === null) return;\n const thread = (await bb.sdk.threads.get({\n threadId,\n })) as Thread;\n if (!isManageableThread(thread)) {\n await bb.storage.kv.delete(stateKey(threadId));\n return;\n }\n await reconcileInbox(thread, state, inboxPhase(thread));\n await saveState(threadId, state);\n await evaluate(threadId, \"settings\");\n });\n }\n })\n .catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.error(`action=apply-mode-evaluation-failed error=${message}`);\n });\n });\n\n bb.background.service(\"inbox-reconciliation\", {\n async start(signal) {\n while (!signal.aborted) {\n await reconcileExistingThreads(signal);\n if (signal.aborted) return;\n await abortableDelay(RECONCILIATION_INTERVAL_MS, signal);\n }\n },\n });\n\n bb.onDispose(async () => {\n acceptingWork = false;\n unsubscribeThreadChanges();\n await Promise.allSettled([...queues.values()]);\n disposed = true;\n });\n void settings\n .get()\n .then(({ inboxMode }) =>\n bb.log.info(`Thread Organizer loaded mode=${inboxMode}`),\n )\n .catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n bb.log.warn(`action=mode-read-failed error=${message}`);\n });\n}\n"], + "mappings": "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", "names": ["matches"] } diff --git a/plugins/thread-organizer/server.test.ts b/plugins/thread-organizer/server.test.ts index c013f42..e4bbc63 100644 --- a/plugins/thread-organizer/server.test.ts +++ b/plugins/thread-organizer/server.test.ts @@ -982,7 +982,7 @@ describe("Thread Organizer plugin", () => { await organizer.harness.lifecycle.dispose(); }); - it("recovers organizer pin ownership after the post-pin state save fails", async () => { + it("preserves ambiguous pin ownership after the post-pin state save fails", async () => { const organizer = createHarness({ mode: "apply" }); plugin(organizer.bb); await organizer.harness.behavior.emitThreadEvent("thread.created", { @@ -1022,7 +1022,8 @@ describe("Thread Organizer plugin", () => { expect( await reloaded.bb.storage.kv.get("thread:v1:thr_test"), ).toMatchObject({ - inboxManagedPinnedAt: organizer.currentThread().pinnedAt, + inboxManagedPinnedAt: null, + inboxObservedPinned: true, inboxPendingPin: false, }); }); @@ -1031,9 +1032,52 @@ describe("Thread Organizer plugin", () => { await reloaded.harness.behavior.emitThreadEvent("thread.active", { thread: organizer.currentThread(), }); - expect(organizer.unpin).toHaveBeenCalledWith({ - threadId: "thr_test", + expect(organizer.unpin).not.toHaveBeenCalled(); + expect(organizer.currentThread().pinnedAt).not.toBeNull(); + await reloaded.harness.lifecycle.dispose(); + }); + + it("does not adopt a manual re-pin after the post-pin state save fails", async () => { + const organizer = createHarness({ mode: "apply" }); + plugin(organizer.bb); + await organizer.harness.behavior.emitThreadEvent("thread.created", { + thread: organizer.currentThread(), + }); + + const originalSet = organizer.bb.storage.kv.set.bind( + organizer.bb.storage.kv, + ); + let failPostPinSave = true; + vi.spyOn(organizer.bb.storage.kv, "set").mockImplementation( + async (key, value) => { + if ( + failPostPinSave && + organizer.currentThread().pinnedAt !== null + ) { + failPostPinSave = false; + throw new Error("post-pin save failed"); + } + await originalSet(key, value); + }, + ); + + organizer.setThread({ status: "idle" }); + await organizer.harness.behavior.emitThreadEvent("thread.idle", { + lastAssistantText: "Done.", + thread: organizer.currentThread(), }); + expect( + await organizer.bb.storage.kv.get("thread:v1:thr_test"), + ).toMatchObject({ inboxPendingPin: true }); + + const reloaded = await organizer.harness.lifecycle.reload(plugin); + organizer.setThread({ pinnedAt: 100, status: "active" }); + await reloaded.harness.behavior.emitThreadEvent("thread.active", { + thread: organizer.currentThread(), + }); + + expect(organizer.unpin).not.toHaveBeenCalled(); + expect(organizer.currentThread().pinnedAt).toBe(100); await reloaded.harness.lifecycle.dispose(); }); diff --git a/plugins/thread-organizer/server.ts b/plugins/thread-organizer/server.ts index 5955a2e..f9b2d65 100644 --- a/plugins/thread-organizer/server.ts +++ b/plugins/thread-organizer/server.ts @@ -340,11 +340,11 @@ export default function plugin(bb: BbPluginApi): void { if (startedNewRun) state.inboxSnoozed = false; if (state.inboxPendingPin && thread.pinnedAt !== null) { - state.inboxManagedPinnedAt = thread.pinnedAt; + state.inboxManagedPinnedAt = null; state.inboxObservedPinned = true; state.inboxPendingPin = false; - bb.log.info( - `thread=${threadId} phase=${phase} action=inbox-pin-adopted`, + bb.log.warn( + `thread=${threadId} phase=${phase} action=inbox-pin-ownership-ambiguous`, ); } diff --git a/plugins/ui-patterns/tests/contract.test.mjs b/plugins/ui-patterns/tests/contract.test.mjs index ec04aed..d397b95 100644 --- a/plugins/ui-patterns/tests/contract.test.mjs +++ b/plugins/ui-patterns/tests/contract.test.mjs @@ -160,7 +160,11 @@ test("the thread composer action opens the UI Patterns side-panel", () => { ); assert.match(composerAction, /typeof openThreadPanel !== "function"/); assert.match(composerAction, /openThreadPanel\(\{/); - assert.match(builtApp, /openThreadPanel/); + assert.match( + builtApp, + /const openThreadPanel = navigate\.openThreadPanel/, + ); + assert.doesNotMatch(builtApp, /experimental_openThreadPanel/); assert.doesNotMatch(composerAction, /PluginMessageDirectiveOpenThreadPanel/); assert.match(app, /run: \(\{ openPanel \}\) => \{/); assert.match(app, /openPanel\(\{ title: "UI Patterns" \}\)/); diff --git a/tooling/scaffold-smoke.mjs b/tooling/scaffold-smoke.mjs index 1d03468..126d8e6 100644 --- a/tooling/scaffold-smoke.mjs +++ b/tooling/scaffold-smoke.mjs @@ -165,49 +165,27 @@ try { /invalid expected commit/, ); const releasedManifest = JSON.parse( - releaseManifest( - { - name: "bb-plugin-release-smoke", - dependencies: { - "@fixture/bundled-helper": "0.1.0", - "external-runtime": "^2.0.0", - }, - optionalDependencies: { - "@fixture/optional-bundled-helper": "0.1.0", - }, - peerDependencies: { - "external-peer": "^3.0.0", - }, - devDependencies: { typescript: "^5.7.0" }, - scripts: { check: "tsc --noEmit" }, + releaseManifest({ + name: "bb-plugin-release-smoke", + dependencies: { + "@fixture/bundled-helper": "0.1.0", + "external-runtime": "^2.0.0", }, - new Set([ - "@fixture/bundled-helper", - "@fixture/optional-bundled-helper", - ]), - ), + optionalDependencies: { + "@fixture/optional-bundled-helper": "0.1.0", + }, + peerDependencies: { + "external-peer": "^3.0.0", + }, + devDependencies: { typescript: "^5.7.0" }, + scripts: { check: "tsc --noEmit" }, + }), ); - assert.deepEqual(releasedManifest.dependencies, { - "@fixture/bundled-helper": "file:vendor/@fixture/bundled-helper", - "external-runtime": "^2.0.0", - }); - assert.deepEqual(releasedManifest.optionalDependencies, { - "@fixture/optional-bundled-helper": - "file:vendor/@fixture/optional-bundled-helper", - }); - assert.deepEqual(releasedManifest.peerDependencies, { - "external-peer": "^3.0.0", - }); + assert.equal(releasedManifest.dependencies, undefined); + assert.equal(releasedManifest.optionalDependencies, undefined); + assert.equal(releasedManifest.peerDependencies, undefined); assert.equal(releasedManifest.devDependencies, undefined); assert.equal(releasedManifest.scripts, undefined); - assert.throws( - () => - releaseManifest({ - name: "bb-plugin-release-smoke", - dependencies: { accidental: "file:../accidental" }, - }), - /production dependency accidental uses file:/, - ); await createFixtureRepository(fixtureRoot); const description = "Verifies the personal bb plugin scaffold."; From 3c41619813cce7401a5a9a962388864adb2df866 Mon Sep 17 00:00:00 2001 From: Bersabel Tadesse Date: Thu, 30 Jul 2026 19:19:42 -0700 Subject: [PATCH 3/5] Persist Improve Prompt thread status --- .../improve-prompt/app-registration.test.ts | 69 ++++++++ plugins/improve-prompt/app.test.tsx | 61 ++++++- plugins/improve-prompt/app.tsx | 94 ++++++++-- plugins/improve-prompt/dist/app.js | 160 ++++++++++++++++-- plugins/improve-prompt/thread-status.test.ts | 107 ++++++++++++ plugins/improve-prompt/thread-status.ts | 148 ++++++++++++++++ .../types/bb-plugin-sdk-app.d.ts | 12 ++ .../improve-prompt/types/bb-plugin-sdk.d.ts | 86 ++++++---- 8 files changed, 677 insertions(+), 60 deletions(-) create mode 100644 plugins/improve-prompt/app-registration.test.ts create mode 100644 plugins/improve-prompt/thread-status.test.ts create mode 100644 plugins/improve-prompt/thread-status.ts diff --git a/plugins/improve-prompt/app-registration.test.ts b/plugins/improve-prompt/app-registration.test.ts new file mode 100644 index 0000000..b32960c --- /dev/null +++ b/plugins/improve-prompt/app-registration.test.ts @@ -0,0 +1,69 @@ +// @vitest-environment jsdom + +import { installTestPluginRuntime } from "@bb/plugin-sdk/testing/app"; +import { describe, expect, it, vi } from "vitest"; + +async function loadApp() { + installTestPluginRuntime(); + return (await import("./app.js")).default; +} + +function composerBuilder(customize: ReturnType) { + return { customize }; +} + +describe("Improve Prompt app registration", () => { + it.each(["contentScripts", "experimental_contentScripts"] as const)( + "registers thread status through the %s builder", + async (builderKey) => { + const app = await loadApp(); + const customize = vi.fn(); + const register = vi.fn(); + + Reflect.apply(app.setup, undefined, [ + { + composer: composerBuilder(customize), + [builderKey]: { register }, + }, + ]); + + expect(register).toHaveBeenCalledWith( + expect.objectContaining({ id: "thread-status" }), + ); + expect(customize).toHaveBeenCalledWith( + expect.objectContaining({ id: "improve-prompt" }), + ); + }, + ); + + it("prefers the stable builder when both names are present", async () => { + const app = await loadApp(); + const stableRegister = vi.fn(); + const legacyRegister = vi.fn(); + + Reflect.apply(app.setup, undefined, [ + { + composer: composerBuilder(vi.fn()), + contentScripts: { register: stableRegister }, + experimental_contentScripts: { register: legacyRegister }, + }, + ]); + + expect(stableRegister).toHaveBeenCalledOnce(); + expect(legacyRegister).not.toHaveBeenCalled(); + }); + + it("still registers the composer when content scripts are unavailable", async () => { + const app = await loadApp(); + const customize = vi.fn(); + + expect(() => + Reflect.apply(app.setup, undefined, [ + { composer: composerBuilder(customize) }, + ]), + ).not.toThrow(); + expect(customize).toHaveBeenCalledWith( + expect.objectContaining({ id: "improve-prompt" }), + ); + }); +}); diff --git a/plugins/improve-prompt/app.test.tsx b/plugins/improve-prompt/app.test.tsx index dc9c3d3..7cfb11c 100644 --- a/plugins/improve-prompt/app.test.tsx +++ b/plugins/improve-prompt/app.test.tsx @@ -21,6 +21,10 @@ import { } from "@bb/plugin-sdk/testing/app"; import type { rpcContract } from "./server"; +import { + installPromptThreadStatusController, + THREAD_ROW_STATUS, +} from "./thread-status.js"; vi.mock("sonner", () => ({ toast: { @@ -237,6 +241,61 @@ describe("Improve Prompt composer action", () => { expect(actionSlot.inspection.composer.focusCount).toBe(2); }); + it("decorates the visible parent thread while enhancing a side-chat child", async () => { + const setThreadRowStatus = vi.fn(); + const disposeThreadStatus = installPromptThreadStatusController( + setThreadRowStatus, + ); + configureAction({ + text: "rough side-chat draft", + scope: { + kind: "side-chat", + projectId: "proj_1", + parentThreadId: "thr_parent", + tabId: "side-chat:one", + childThreadId: "thr_child", + }, + rpc: { + startEnhancement: () => ({ + requestId: REQUEST_ID, + helperThreadId: "thr_helper", + }), + getEnhancement: () => ({ + requestId: REQUEST_ID, + helperThreadId: "thr_helper", + status: "running", + createdAt: 1, + }), + cancelEnhancement: () => ({ cancelled: true }), + }, + }); + + try { + const Action = await loadAction(); + mountAction(Action); + fireEvent.click(screen.getByRole("button", { name: "Improve prompt" })); + + await waitFor(() => { + expect(actionSlot.inspection.rpcCalls).toContainEqual({ + method: "startEnhancement", + input: expect.objectContaining({ + sourceThreadId: "thr_child", + }), + }); + expect(setThreadRowStatus).toHaveBeenCalledWith( + "thr_parent", + THREAD_ROW_STATUS, + ); + }); + expect(setThreadRowStatus).not.toHaveBeenCalledWith( + "thr_child", + THREAD_ROW_STATUS, + ); + } finally { + disposeThreadStatus(); + } + }); + it("keeps a durable request after the first result fetch fails and retries on realtime", async () => { let getCalls = 0; configureAction({ @@ -600,7 +659,7 @@ describe("Improve Prompt composer action", () => { expect(actionSlot.inspection.composer.threadRowStatus).toEqual({ icon: "AiContentGenerator01", label: "Improve Prompt is improving the draft", - tone: "success", + tone: "running", }); }); diff --git a/plugins/improve-prompt/app.tsx b/plugins/improve-prompt/app.tsx index 5b6d48e..5561004 100644 --- a/plugins/improve-prompt/app.tsx +++ b/plugins/improve-prompt/app.tsx @@ -1,6 +1,8 @@ import { useCallback, useEffect, useRef, useState } from "react"; import { definePluginApp, + type PluginAppComposer, + type PluginAppContentScripts, useBbContext, useComposer, useComposerView, @@ -20,6 +22,12 @@ import { } from "@/components/ui/tooltip"; import type { rpcContract } from "./server"; import { scopeKey } from "./core.js"; +import { + clearPromptRun, + installPromptThreadStatusController, + THREAD_ROW_STATUS, + trackPromptRun, +} from "./thread-status.js"; interface PendingRequest { cancellationRequested: boolean; @@ -49,11 +57,12 @@ const locallyStartingRequestIds = new Set(); const PROMPT_SHIMMER_EFFECT = { className: "bb-improve-prompt-shimmer", } as const; -const THREAD_ROW_STATUS = { - icon: "AiContentGenerator01", - label: "Improve Prompt is improving the draft", - tone: "success", -} as const; + +interface ContentScriptCompatibleApp { + readonly composer: PluginAppComposer; + readonly contentScripts?: PluginAppContentScripts; + readonly experimental_contentScripts?: PluginAppContentScripts; +} export function resetLocallyStartingRequestsForTest(): void { locallyStartingRequestIds.clear(); @@ -133,11 +142,12 @@ function savePendingRequest(request: PendingRequest): void { function clearPendingRequest(request: PendingRequest): void { try { const stored = loadPendingRequest(request.scopeKey); - if (stored?.requestId !== request.requestId) return; + if (stored !== null && stored.requestId !== request.requestId) return; window.sessionStorage.removeItem(pendingStorageKey(request.scopeKey)); } catch { // Session storage is a recovery aid; enhancement still works without it. } + clearPromptRun(request.requestId); } function signalRequestId(payload: unknown): string | null { @@ -200,12 +210,18 @@ function PromptShaperAction() { view.scope.kind === "side-chat" || view.scope.kind === "new-thread" ? view.scope.projectId : context.projectId; - const threadId = + const sourceThreadId = view.scope.kind === "thread" || view.scope.kind === "queued-message" ? view.scope.threadId : view.scope.kind === "side-chat" ? (view.scope.childThreadId ?? view.scope.parentThreadId) : null; + const statusThreadId = + view.scope.kind === "thread" || view.scope.kind === "queued-message" + ? view.scope.threadId + : view.scope.kind === "side-chat" + ? view.scope.parentThreadId + : null; const rpc = useRpc(); const [pending, setPending] = useState(() => loadPendingRequest(composerScopeKey), @@ -239,6 +255,47 @@ function PromptShaperAction() { setPending(next); }, []); + const trackThreadStatus = useCallback( + (request: PendingRequest) => { + if (statusThreadId === null) return; + trackPromptRun({ + requestId: request.requestId, + threadId: statusThreadId, + getState: async () => { + const record = await rpcRef.current.call("getEnhancement", { + requestId: request.requestId, + }); + if (record?.status === "running") return "running"; + if (record !== null) return "terminal"; + + const stored = readPendingStorage(request.scopeKey); + const durable = + stored.request?.requestId === request.requestId + ? stored.request + : null; + const markerWasRemoved = stored.available && durable === null; + const startupWasAcknowledged = + (durable ?? request).startup === "acknowledged"; + const startupGraceExpired = + Date.now() - (durable ?? request).createdAt >= STARTUP_GRACE_MS; + const startupIsLocallyInFlight = locallyStartingRequestIds.has( + request.requestId, + ); + return markerWasRemoved || + startupWasAcknowledged || + (startupGraceExpired && !startupIsLocallyInFlight) + ? "terminal" + : "running"; + }, + }); + }, + [statusThreadId], + ); + + useEffect(() => { + if (isRunning && pending !== null) trackThreadStatus(pending); + }, [isRunning, pending, trackThreadStatus]); + useEffect(() => { composer.setTextEffect(isRunning ? PROMPT_SHIMMER_EFFECT : null); composer.setInputLock(isRunning); @@ -529,6 +586,7 @@ function PromptShaperAction() { composer.setInputLock(true); composer.setThreadRowStatus(THREAD_ROW_STATUS); setPendingRequest(request); + trackThreadStatus(request); locallyStartingRequestIds.add(request.requestId); try { @@ -536,7 +594,7 @@ function PromptShaperAction() { requestId: request.requestId, draft, projectId, - sourceThreadId: threadId, + sourceThreadId, }); locallyStartingRequestIds.delete(request.requestId); @@ -594,7 +652,8 @@ function PromptShaperAction() { projectId, rpc, setPendingRequest, - threadId, + sourceThreadId, + trackThreadStatus, view.run.isSubmitting, ]); @@ -747,9 +806,22 @@ function PromptShaperAction() { ); } -export default definePluginApp((app) => { +export function registerPromptPluginApp(app: ContentScriptCompatibleApp): void { + const contentScripts = + app.contentScripts ?? app.experimental_contentScripts; + contentScripts?.register({ + id: "thread-status", + mount({ experimental_setThreadRowStatus }) { + if (experimental_setThreadRowStatus === undefined) return; + return installPromptThreadStatusController( + experimental_setThreadRowStatus, + ); + }, + }); app.composer.customize({ id: "improve-prompt", actions: [{ id: "improve", component: PromptShaperAction }], }); -}); +} + +export default definePluginApp((app) => registerPromptPluginApp(app)); diff --git a/plugins/improve-prompt/dist/app.js b/plugins/improve-prompt/dist/app.js index 15bac8a..c0ae91f 100644 --- a/plugins/improve-prompt/dist/app.js +++ b/plugins/improve-prompt/dist/app.js @@ -4900,6 +4900,104 @@ function scopeKey(scope) { return `new-thread:${scope.projectId ?? ""}`; } +// thread-status.ts +var THREAD_ROW_STATUS = { + icon: "AiContentGenerator01", + label: "Improve Prompt is improving the draft", + tone: "running" +}; +var PromptThreadStatusController = class { + constructor(setThreadRowStatus, options = {}) { + this.setThreadRowStatus = setThreadRowStatus; + this.pollIntervalMs = options.pollIntervalMs ?? 2e3; + this.setInterval = options.setInterval ?? ((callback, delayMs) => window.setInterval(callback, delayMs)); + this.clearInterval = options.clearInterval ?? ((timer) => window.clearInterval(timer)); + } + setThreadRowStatus; + clearInterval; + pollIntervalMs; + runs = /* @__PURE__ */ new Map(); + setInterval; + timer = null; + track(run) { + const previous = this.runs.get(run.requestId); + this.runs.set(run.requestId, { ...run, polling: false }); + if (previous !== void 0 && previous.threadId !== run.threadId && !this.hasRunForThread(previous.threadId)) { + this.setThreadRowStatus(previous.threadId, null); + } + this.setThreadRowStatus(run.threadId, THREAD_ROW_STATUS); + this.ensureTimer(); + } + clear(requestId) { + const run = this.runs.get(requestId); + if (run === void 0) return; + this.runs.delete(requestId); + if (!this.hasRunForThread(run.threadId)) { + this.setThreadRowStatus(run.threadId, null); + } + this.stopTimerIfIdle(); + } + async reconcileNow() { + await Promise.all( + [...this.runs.values()].map(async (run) => { + if (run.polling) return; + run.polling = true; + try { + if (await run.getState() === "terminal") { + this.clear(run.requestId); + } + } catch { + } finally { + const current = this.runs.get(run.requestId); + if (current === run) current.polling = false; + } + }) + ); + } + dispose() { + if (this.timer !== null) { + this.clearInterval(this.timer); + this.timer = null; + } + const threadIds = new Set([...this.runs.values()].map((run) => run.threadId)); + this.runs.clear(); + for (const threadId of threadIds) { + this.setThreadRowStatus(threadId, null); + } + } + ensureTimer() { + if (this.timer !== null) return; + this.timer = this.setInterval(() => { + void this.reconcileNow(); + }, this.pollIntervalMs); + } + hasRunForThread(threadId) { + return [...this.runs.values()].some((run) => run.threadId === threadId); + } + stopTimerIfIdle() { + if (this.runs.size > 0 || this.timer === null) return; + this.clearInterval(this.timer); + this.timer = null; + } +}; +var controller = null; +function installPromptThreadStatusController(setThreadRowStatus) { + const next = new PromptThreadStatusController(setThreadRowStatus); + controller?.dispose(); + controller = next; + return () => { + if (controller !== next) return; + controller = null; + next.dispose(); + }; +} +function trackPromptRun(run) { + controller?.track(run); +} +function clearPromptRun(requestId) { + controller?.clear(requestId); +} + // app.tsx var PENDING_STORAGE_PREFIX = "bb-plugin-prompt-shaper:pending:"; var STARTUP_GRACE_MS = 3e4; @@ -4908,11 +5006,6 @@ var locallyStartingRequestIds = /* @__PURE__ */ new Set(); var PROMPT_SHIMMER_EFFECT = { className: "bb-improve-prompt-shimmer" }; -var THREAD_ROW_STATUS = { - icon: "AiContentGenerator01", - label: "Improve Prompt is improving the draft", - tone: "success" -}; function resetLocallyStartingRequestsForTest() { locallyStartingRequestIds.clear(); } @@ -4961,10 +5054,11 @@ function savePendingRequest(request) { function clearPendingRequest(request) { try { const stored = loadPendingRequest(request.scopeKey); - if (stored?.requestId !== request.requestId) return; + if (stored !== null && stored.requestId !== request.requestId) return; window.sessionStorage.removeItem(pendingStorageKey(request.scopeKey)); } catch { } + clearPromptRun(request.requestId); } function signalRequestId(payload) { if (typeof payload === "object" && payload !== null && "requestId" in payload && typeof payload.requestId === "string") { @@ -4995,7 +5089,8 @@ function PromptShaperAction() { const context = useBbContext(); const composerScopeKey = scopeKey(view.scope); const projectId = view.scope.kind === "side-chat" || view.scope.kind === "new-thread" ? view.scope.projectId : context.projectId; - const threadId = view.scope.kind === "thread" || view.scope.kind === "queued-message" ? view.scope.threadId : view.scope.kind === "side-chat" ? view.scope.childThreadId ?? view.scope.parentThreadId : null; + const sourceThreadId = view.scope.kind === "thread" || view.scope.kind === "queued-message" ? view.scope.threadId : view.scope.kind === "side-chat" ? view.scope.childThreadId ?? view.scope.parentThreadId : null; + const statusThreadId = view.scope.kind === "thread" || view.scope.kind === "queued-message" ? view.scope.threadId : view.scope.kind === "side-chat" ? view.scope.parentThreadId : null; const rpc = useRpc(); const [pending, setPending] = useState( () => loadPendingRequest(composerScopeKey) @@ -5024,6 +5119,35 @@ function PromptShaperAction() { pendingRef.current = next; setPending(next); }, []); + const trackThreadStatus = useCallback( + (request) => { + if (statusThreadId === null) return; + trackPromptRun({ + requestId: request.requestId, + threadId: statusThreadId, + getState: async () => { + const record = await rpcRef.current.call("getEnhancement", { + requestId: request.requestId + }); + if (record?.status === "running") return "running"; + if (record !== null) return "terminal"; + const stored = readPendingStorage(request.scopeKey); + const durable = stored.request?.requestId === request.requestId ? stored.request : null; + const markerWasRemoved = stored.available && durable === null; + const startupWasAcknowledged = (durable ?? request).startup === "acknowledged"; + const startupGraceExpired = Date.now() - (durable ?? request).createdAt >= STARTUP_GRACE_MS; + const startupIsLocallyInFlight = locallyStartingRequestIds.has( + request.requestId + ); + return markerWasRemoved || startupWasAcknowledged || startupGraceExpired && !startupIsLocallyInFlight ? "terminal" : "running"; + } + }); + }, + [statusThreadId] + ); + useEffect(() => { + if (isRunning && pending !== null) trackThreadStatus(pending); + }, [isRunning, pending, trackThreadStatus]); useEffect(() => { composer.setTextEffect(isRunning ? PROMPT_SHIMMER_EFFECT : null); composer.setInputLock(isRunning); @@ -5240,13 +5364,14 @@ function PromptShaperAction() { composer.setInputLock(true); composer.setThreadRowStatus(THREAD_ROW_STATUS); setPendingRequest(request); + trackThreadStatus(request); locallyStartingRequestIds.add(request.requestId); try { await rpc.call("startEnhancement", { requestId: request.requestId, draft, projectId, - sourceThreadId: threadId + sourceThreadId }); locallyStartingRequestIds.delete(request.requestId); const stored = loadPendingRequest(request.scopeKey); @@ -5288,7 +5413,8 @@ function PromptShaperAction() { projectId, rpc, setPendingRequest, - threadId, + sourceThreadId, + trackThreadStatus, view.run.isSubmitting ]); const cancel = useCallback(async () => { @@ -5394,15 +5520,27 @@ function PromptShaperAction() { /* @__PURE__ */ jsx(TooltipContent2, { side: "top", children: canUndo ? "Undo prompt" : isRunning ? "Cancel" : "Improve prompt" }) ] }) }) }); } -var app_default = definePluginApp((app) => { +function registerPromptPluginApp(app) { + const contentScripts = app.contentScripts ?? app.experimental_contentScripts; + contentScripts?.register({ + id: "thread-status", + mount({ experimental_setThreadRowStatus }) { + if (experimental_setThreadRowStatus === void 0) return; + return installPromptThreadStatusController( + experimental_setThreadRowStatus + ); + } + }); app.composer.customize({ id: "improve-prompt", actions: [{ id: "improve", component: PromptShaperAction }] }); -}); +} +var app_default = definePluginApp((app) => registerPromptPluginApp(app)); export { canStartEnhancement, app_default as default, + registerPromptPluginApp, resetLocallyStartingRequestsForTest, shouldCancelForSubmission }; diff --git a/plugins/improve-prompt/thread-status.test.ts b/plugins/improve-prompt/thread-status.test.ts new file mode 100644 index 0000000..a05666c --- /dev/null +++ b/plugins/improve-prompt/thread-status.test.ts @@ -0,0 +1,107 @@ +// @vitest-environment jsdom + +import { describe, expect, it, vi } from "vitest"; + +import { + PromptThreadStatusController, + THREAD_ROW_STATUS, + type PromptRunState, +} from "./thread-status.js"; + +function createController() { + const setThreadRowStatus = vi.fn(); + const clearInterval = vi.fn(); + const setInterval = vi.fn(() => 7); + const controller = new PromptThreadStatusController(setThreadRowStatus, { + clearInterval, + setInterval, + }); + return { clearInterval, controller, setInterval, setThreadRowStatus }; +} + +describe("PromptThreadStatusController", () => { + it("uses the shared running appearance and keeps it until the run terminates", async () => { + const harness = createController(); + let state: PromptRunState = "running"; + + harness.controller.track({ + requestId: "req_1", + threadId: "thr_source", + getState: async () => state, + }); + + expect(harness.setThreadRowStatus).toHaveBeenLastCalledWith( + "thr_source", + THREAD_ROW_STATUS, + ); + expect(THREAD_ROW_STATUS).toEqual({ + icon: "AiContentGenerator01", + label: "Improve Prompt is improving the draft", + tone: "running", + }); + + await harness.controller.reconcileNow(); + expect(harness.setThreadRowStatus).not.toHaveBeenCalledWith( + "thr_source", + null, + ); + + state = "terminal"; + await harness.controller.reconcileNow(); + expect(harness.setThreadRowStatus).toHaveBeenLastCalledWith( + "thr_source", + null, + ); + expect(harness.clearInterval).toHaveBeenCalledWith(7); + }); + + it("keeps a thread status until every run owned by that thread ends", async () => { + const harness = createController(); + let firstState: PromptRunState = "running"; + let secondState: PromptRunState = "running"; + harness.controller.track({ + requestId: "req_1", + threadId: "thr_source", + getState: async () => firstState, + }); + harness.controller.track({ + requestId: "req_2", + threadId: "thr_source", + getState: async () => secondState, + }); + + firstState = "terminal"; + await harness.controller.reconcileNow(); + expect(harness.setThreadRowStatus).not.toHaveBeenCalledWith( + "thr_source", + null, + ); + + secondState = "terminal"; + await harness.controller.reconcileNow(); + expect(harness.setThreadRowStatus).toHaveBeenLastCalledWith( + "thr_source", + null, + ); + }); + + it("clears every owned thread status when the plugin generation disposes", () => { + const harness = createController(); + harness.controller.track({ + requestId: "req_1", + threadId: "thr_one", + getState: async () => "running", + }); + harness.controller.track({ + requestId: "req_2", + threadId: "thr_two", + getState: async () => "running", + }); + + harness.controller.dispose(); + + expect(harness.setThreadRowStatus).toHaveBeenCalledWith("thr_one", null); + expect(harness.setThreadRowStatus).toHaveBeenCalledWith("thr_two", null); + expect(harness.clearInterval).toHaveBeenCalledWith(7); + }); +}); diff --git a/plugins/improve-prompt/thread-status.ts b/plugins/improve-prompt/thread-status.ts new file mode 100644 index 0000000..23366cb --- /dev/null +++ b/plugins/improve-prompt/thread-status.ts @@ -0,0 +1,148 @@ +import type { PluginComposerThreadRowStatus } from "@bb/plugin-sdk/app"; + +export const THREAD_ROW_STATUS = { + icon: "AiContentGenerator01", + label: "Improve Prompt is improving the draft", + tone: "running", +} as const satisfies PluginComposerThreadRowStatus; + +export type PromptRunState = "running" | "terminal"; + +export interface TrackedPromptRun { + getState(): Promise; + requestId: string; + threadId: string; +} + +interface PromptThreadStatusControllerOptions { + clearInterval?: (timer: number) => void; + pollIntervalMs?: number; + setInterval?: (callback: () => void, delayMs: number) => number; +} + +type SetThreadRowStatus = ( + threadId: string, + status: PluginComposerThreadRowStatus | null, +) => void; + +export class PromptThreadStatusController { + private readonly clearInterval: (timer: number) => void; + private readonly pollIntervalMs: number; + private readonly runs = new Map< + string, + TrackedPromptRun & { polling: boolean } + >(); + private readonly setInterval: ( + callback: () => void, + delayMs: number, + ) => number; + private timer: number | null = null; + + constructor( + private readonly setThreadRowStatus: SetThreadRowStatus, + options: PromptThreadStatusControllerOptions = {}, + ) { + this.pollIntervalMs = options.pollIntervalMs ?? 2_000; + this.setInterval = + options.setInterval ?? + ((callback, delayMs) => window.setInterval(callback, delayMs)); + this.clearInterval = + options.clearInterval ?? ((timer) => window.clearInterval(timer)); + } + + track(run: TrackedPromptRun): void { + const previous = this.runs.get(run.requestId); + this.runs.set(run.requestId, { ...run, polling: false }); + if ( + previous !== undefined && + previous.threadId !== run.threadId && + !this.hasRunForThread(previous.threadId) + ) { + this.setThreadRowStatus(previous.threadId, null); + } + this.setThreadRowStatus(run.threadId, THREAD_ROW_STATUS); + this.ensureTimer(); + } + + clear(requestId: string): void { + const run = this.runs.get(requestId); + if (run === undefined) return; + this.runs.delete(requestId); + if (!this.hasRunForThread(run.threadId)) { + this.setThreadRowStatus(run.threadId, null); + } + this.stopTimerIfIdle(); + } + + async reconcileNow(): Promise { + await Promise.all( + [...this.runs.values()].map(async (run) => { + if (run.polling) return; + run.polling = true; + try { + if ((await run.getState()) === "terminal") { + this.clear(run.requestId); + } + } catch { + // Polling is only a reconciliation hint. Preserve the indicator and + // retry while the durable plugin request can still be running. + } finally { + const current = this.runs.get(run.requestId); + if (current === run) current.polling = false; + } + }), + ); + } + + dispose(): void { + if (this.timer !== null) { + this.clearInterval(this.timer); + this.timer = null; + } + const threadIds = new Set([...this.runs.values()].map((run) => run.threadId)); + this.runs.clear(); + for (const threadId of threadIds) { + this.setThreadRowStatus(threadId, null); + } + } + + private ensureTimer(): void { + if (this.timer !== null) return; + this.timer = this.setInterval(() => { + void this.reconcileNow(); + }, this.pollIntervalMs); + } + + private hasRunForThread(threadId: string): boolean { + return [...this.runs.values()].some((run) => run.threadId === threadId); + } + + private stopTimerIfIdle(): void { + if (this.runs.size > 0 || this.timer === null) return; + this.clearInterval(this.timer); + this.timer = null; + } +} + +let controller: PromptThreadStatusController | null = null; + +export function installPromptThreadStatusController( + setThreadRowStatus: SetThreadRowStatus, +): () => void { + const next = new PromptThreadStatusController(setThreadRowStatus); + controller?.dispose(); + controller = next; + return () => { + if (controller !== next) return; + controller = null; + next.dispose(); + }; +} + +export function trackPromptRun(run: TrackedPromptRun): void { + controller?.track(run); +} + +export function clearPromptRun(requestId: string): void { + controller?.clear(requestId); +} diff --git a/plugins/improve-prompt/types/bb-plugin-sdk-app.d.ts b/plugins/improve-prompt/types/bb-plugin-sdk-app.d.ts index 763f78f..48e67cb 100644 --- a/plugins/improve-prompt/types/bb-plugin-sdk-app.d.ts +++ b/plugins/improve-prompt/types/bb-plugin-sdk-app.d.ts @@ -407,6 +407,18 @@ interface PluginContentScriptContext { readonly generation: number; /** Aborted before cleanup begins on replacement, deactivation, or teardown. */ readonly signal: AbortSignal; + /** + * Persistently decorate any thread row for this plugin generation. + * + * Unlike `useComposer().setThreadRowStatus`, this status is not owned by the + * currently mounted composer and therefore survives route changes. Passing + * `null` clears the plugin's status for that thread. The host clears every + * remaining status when the frontend generation deactivates. + * + * Optional so bundles can feature-detect support while this experimental + * surface rolls out across 0.x clients. + */ + readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void; } /** Cleanup returned by a frontend content script. */ type PluginContentScriptDisposer = () => void | Promise; diff --git a/plugins/improve-prompt/types/bb-plugin-sdk.d.ts b/plugins/improve-prompt/types/bb-plugin-sdk.d.ts index aa4ea0e..1f4477b 100644 --- a/plugins/improve-prompt/types/bb-plugin-sdk.d.ts +++ b/plugins/improve-prompt/types/bb-plugin-sdk.d.ts @@ -412,6 +412,18 @@ interface PluginContentScriptContext { readonly generation: number; /** Aborted before cleanup begins on replacement, deactivation, or teardown. */ readonly signal: AbortSignal; + /** + * Persistently decorate any thread row for this plugin generation. + * + * Unlike `useComposer().setThreadRowStatus`, this status is not owned by the + * currently mounted composer and therefore survives route changes. Passing + * `null` clears the plugin's status for that thread. The host clears every + * remaining status when the frontend generation deactivates. + * + * Optional so bundles can feature-detect support while this experimental + * surface rolls out across 0.x clients. + */ + readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void; } /** Cleanup returned by a frontend content script. */ type PluginContentScriptDisposer = () => void | Promise; @@ -1556,9 +1568,9 @@ declare const threadEventSchema: z$1.ZodPipe; taskStatus: z$1.ZodEnum<{ pending: "pending"; + completed: "completed"; running: "running"; paused: "paused"; - completed: "completed"; failed: "failed"; killed: "killed"; stopped: "stopped"; @@ -1784,9 +1796,9 @@ declare const threadEventSchema: z$1.ZodPipe; taskStatus: z$1.ZodEnum<{ pending: "pending"; + completed: "completed"; running: "running"; paused: "paused"; - completed: "completed"; failed: "failed"; killed: "killed"; stopped: "stopped"; @@ -1913,9 +1925,9 @@ declare const threadEventSchema: z$1.ZodPipe; taskStatus: z$1.ZodEnum<{ pending: "pending"; + completed: "completed"; running: "running"; paused: "paused"; - completed: "completed"; failed: "failed"; killed: "killed"; stopped: "stopped"; @@ -1985,9 +1997,9 @@ declare const threadEventSchema: z$1.ZodPipe; taskStatus: z$1.ZodEnum<{ pending: "pending"; + completed: "completed"; running: "running"; paused: "paused"; - completed: "completed"; failed: "failed"; killed: "killed"; stopped: "stopped"; @@ -2706,8 +2718,8 @@ declare const threadTimelinePendingTodosSchema: z$1.ZodObject<{ text: z$1.ZodString; status: z$1.ZodEnum<{ pending: "pending"; - completed: "completed"; in_progress: "in_progress"; + completed: "completed"; }>; }, z$1.core.$strip>>; }, z$1.core.$strip>; @@ -4090,16 +4102,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - deny: "deny"; ask: "ask"; + deny: "deny"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - deny: "deny"; ask: "ask"; + deny: "deny"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4183,9 +4195,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - user: "user"; - project: "project"; builtin: "builtin"; + project: "project"; + user: "user"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4264,9 +4276,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - user: "user"; - project: "project"; builtin: "builtin"; + project: "project"; + user: "user"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4357,9 +4369,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - user: "user"; - project: "project"; builtin: "builtin"; + project: "project"; + user: "user"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4438,9 +4450,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - user: "user"; - project: "project"; builtin: "builtin"; + project: "project"; + user: "user"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4503,16 +4515,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - deny: "deny"; ask: "ask"; + deny: "deny"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - deny: "deny"; ask: "ask"; + deny: "deny"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4621,13 +4633,12 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; - projectId: z$1.ZodString; - providerThreadId: z$1.ZodString; - providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; + projectId: z$1.ZodString; + providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; + providerThreadId: z$1.ZodString; }, z$1.core.$strict>; target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ mode: z$1.ZodLiteral<"start">; @@ -4757,8 +4769,8 @@ declare const hostDaemonCommandRegistry: { }, z$1.core.$strip>], "mode">; }, z$1.core.$strict>, z$1.ZodObject<{ appliedAs: z$1.ZodEnum<{ - "new-turn": "new-turn"; steer: "steer"; + "new-turn": "new-turn"; }>; }, z$1.core.$strip>, "settled", false>; "thread.stop": HostDaemonCommandDescriptor<"thread.stop", z$1.ZodObject<{ @@ -4799,16 +4811,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - deny: "deny"; ask: "ask"; + deny: "deny"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - deny: "deny"; ask: "ask"; + deny: "deny"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4917,13 +4929,12 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; - projectId: z$1.ZodString; - providerThreadId: z$1.ZodString; - providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; + projectId: z$1.ZodString; + providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; + providerThreadId: z$1.ZodString; }, z$1.core.$strict>; }, z$1.core.$strict>, z$1.ZodObject<{ cleared: z$1.ZodBoolean; @@ -5199,9 +5211,9 @@ declare const hostDaemonCommandRegistry: { text: z$1.ZodString; startedAt: z$1.ZodOptional; status: z$1.ZodOptional>; metadata: z$1.ZodOptional>; }, z$1.core.$strip>>; @@ -5429,8 +5441,8 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - user: "user"; project: "project"; + user: "user"; }>; description: z$1.ZodNullable; argumentHint: z$1.ZodNullable; @@ -5910,8 +5922,8 @@ declare const hostDaemonCommandRegistry: { npmGlobalPackageVersion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -5933,8 +5945,8 @@ declare const hostDaemonCommandRegistry: { cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - update: "update"; install: "install"; + update: "update"; }>; type: z$1.ZodLiteral<"provider_cli.install">; }, z$1.core.$strict>, z$1.ZodObject<{ @@ -6074,13 +6086,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ - unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; + unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6124,13 +6136,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ - unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; + unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6186,13 +6198,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ - unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; + unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6234,13 +6246,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ - unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; + unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6283,9 +6295,9 @@ declare const hostDaemonCommandRegistry: { conclusion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -6393,8 +6405,8 @@ declare const providerCliInstallRequestSchema: z$1.ZodObject<{ cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - update: "update"; install: "install"; + update: "update"; }>; }, z$1.core.$strip>; type ProviderCliInstallRequest = z$1.infer; From b8217dbe64ffb4d62dde2ddf0de7481b35ac4130 Mon Sep 17 00:00:00 2001 From: Bersabel Tadesse Date: Thu, 30 Jul 2026 19:40:37 -0700 Subject: [PATCH 4/5] Keep Prompt Improver SDK mirrors canonical --- .../types/bb-plugin-sdk-app.d.ts | 12 --- .../improve-prompt/types/bb-plugin-sdk.d.ts | 86 ++++++++----------- .../types/thread-row-status-extension.d.ts | 16 ++++ 3 files changed, 53 insertions(+), 61 deletions(-) create mode 100644 plugins/improve-prompt/types/thread-row-status-extension.d.ts diff --git a/plugins/improve-prompt/types/bb-plugin-sdk-app.d.ts b/plugins/improve-prompt/types/bb-plugin-sdk-app.d.ts index 48e67cb..763f78f 100644 --- a/plugins/improve-prompt/types/bb-plugin-sdk-app.d.ts +++ b/plugins/improve-prompt/types/bb-plugin-sdk-app.d.ts @@ -407,18 +407,6 @@ interface PluginContentScriptContext { readonly generation: number; /** Aborted before cleanup begins on replacement, deactivation, or teardown. */ readonly signal: AbortSignal; - /** - * Persistently decorate any thread row for this plugin generation. - * - * Unlike `useComposer().setThreadRowStatus`, this status is not owned by the - * currently mounted composer and therefore survives route changes. Passing - * `null` clears the plugin's status for that thread. The host clears every - * remaining status when the frontend generation deactivates. - * - * Optional so bundles can feature-detect support while this experimental - * surface rolls out across 0.x clients. - */ - readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void; } /** Cleanup returned by a frontend content script. */ type PluginContentScriptDisposer = () => void | Promise; diff --git a/plugins/improve-prompt/types/bb-plugin-sdk.d.ts b/plugins/improve-prompt/types/bb-plugin-sdk.d.ts index 1f4477b..aa4ea0e 100644 --- a/plugins/improve-prompt/types/bb-plugin-sdk.d.ts +++ b/plugins/improve-prompt/types/bb-plugin-sdk.d.ts @@ -412,18 +412,6 @@ interface PluginContentScriptContext { readonly generation: number; /** Aborted before cleanup begins on replacement, deactivation, or teardown. */ readonly signal: AbortSignal; - /** - * Persistently decorate any thread row for this plugin generation. - * - * Unlike `useComposer().setThreadRowStatus`, this status is not owned by the - * currently mounted composer and therefore survives route changes. Passing - * `null` clears the plugin's status for that thread. The host clears every - * remaining status when the frontend generation deactivates. - * - * Optional so bundles can feature-detect support while this experimental - * surface rolls out across 0.x clients. - */ - readonly experimental_setThreadRowStatus?: (threadId: string, status: PluginComposerThreadRowStatus | null) => void; } /** Cleanup returned by a frontend content script. */ type PluginContentScriptDisposer = () => void | Promise; @@ -1568,9 +1556,9 @@ declare const threadEventSchema: z$1.ZodPipe; taskStatus: z$1.ZodEnum<{ pending: "pending"; - completed: "completed"; running: "running"; paused: "paused"; + completed: "completed"; failed: "failed"; killed: "killed"; stopped: "stopped"; @@ -1796,9 +1784,9 @@ declare const threadEventSchema: z$1.ZodPipe; taskStatus: z$1.ZodEnum<{ pending: "pending"; - completed: "completed"; running: "running"; paused: "paused"; + completed: "completed"; failed: "failed"; killed: "killed"; stopped: "stopped"; @@ -1925,9 +1913,9 @@ declare const threadEventSchema: z$1.ZodPipe; taskStatus: z$1.ZodEnum<{ pending: "pending"; - completed: "completed"; running: "running"; paused: "paused"; + completed: "completed"; failed: "failed"; killed: "killed"; stopped: "stopped"; @@ -1997,9 +1985,9 @@ declare const threadEventSchema: z$1.ZodPipe; taskStatus: z$1.ZodEnum<{ pending: "pending"; - completed: "completed"; running: "running"; paused: "paused"; + completed: "completed"; failed: "failed"; killed: "killed"; stopped: "stopped"; @@ -2718,8 +2706,8 @@ declare const threadTimelinePendingTodosSchema: z$1.ZodObject<{ text: z$1.ZodString; status: z$1.ZodEnum<{ pending: "pending"; - in_progress: "in_progress"; completed: "completed"; + in_progress: "in_progress"; }>; }, z$1.core.$strip>>; }, z$1.core.$strip>; @@ -4102,16 +4090,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4195,9 +4183,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4276,9 +4264,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4369,9 +4357,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4450,9 +4438,9 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - builtin: "builtin"; - project: "project"; user: "user"; + project: "project"; + builtin: "builtin"; }>; label: z$1.ZodString; argumentHint: z$1.ZodNullable; @@ -4515,16 +4503,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4633,12 +4621,13 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; - projectId: z$1.ZodString; - providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; - providerThreadId: z$1.ZodString; }, z$1.core.$strict>; target: z$1.ZodDiscriminatedUnion<[z$1.ZodObject<{ mode: z$1.ZodLiteral<"start">; @@ -4769,8 +4757,8 @@ declare const hostDaemonCommandRegistry: { }, z$1.core.$strip>], "mode">; }, z$1.core.$strict>, z$1.ZodObject<{ appliedAs: z$1.ZodEnum<{ - steer: "steer"; "new-turn": "new-turn"; + steer: "steer"; }>; }, z$1.core.$strip>, "settled", false>; "thread.stop": HostDaemonCommandDescriptor<"thread.stop", z$1.ZodObject<{ @@ -4811,16 +4799,16 @@ declare const hostDaemonCommandRegistry: { permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"user">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"auto">; permissionScope: z$1.ZodLiteral<"workspace">; approvalReviewer: z$1.ZodLiteral<"automatic">; permissionEscalation: z$1.ZodEnum<{ - ask: "ask"; deny: "deny"; + ask: "ask"; }>; }, z$1.core.$strip>, z$1.ZodObject<{ permissionMode: z$1.ZodLiteral<"full">; @@ -4929,12 +4917,13 @@ declare const hostDaemonCommandRegistry: { personal: "personal"; }>; }, z$1.core.$strip>; + projectId: z$1.ZodString; + providerThreadId: z$1.ZodString; + providerId: z$1.ZodString; instructionMode: z$1.ZodEnum<{ append: "append"; replace: "replace"; }>; - projectId: z$1.ZodString; - providerId: z$1.ZodString; acpLaunchSpec: z$1.ZodOptional], "kind">>; disallowedTools: z$1.ZodOptional>; - providerThreadId: z$1.ZodString; }, z$1.core.$strict>; }, z$1.core.$strict>, z$1.ZodObject<{ cleared: z$1.ZodBoolean; @@ -5211,9 +5199,9 @@ declare const hostDaemonCommandRegistry: { text: z$1.ZodString; startedAt: z$1.ZodOptional; status: z$1.ZodOptional>; metadata: z$1.ZodOptional>; }, z$1.core.$strip>>; @@ -5441,8 +5429,8 @@ declare const hostDaemonCommandRegistry: { skill: "skill"; }>; origin: z$1.ZodEnum<{ - project: "project"; user: "user"; + project: "project"; }>; description: z$1.ZodNullable; argumentHint: z$1.ZodNullable; @@ -5922,8 +5910,8 @@ declare const hostDaemonCommandRegistry: { npmGlobalPackageVersion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -5945,8 +5933,8 @@ declare const hostDaemonCommandRegistry: { cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - install: "install"; update: "update"; + install: "install"; }>; type: z$1.ZodLiteral<"provider_cli.install">; }, z$1.core.$strict>, z$1.ZodObject<{ @@ -6086,13 +6074,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6136,13 +6124,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6198,13 +6186,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6246,13 +6234,13 @@ declare const hostDaemonCommandRegistry: { outcome: z$1.ZodLiteral<"unavailable">; failure: z$1.ZodObject<{ code: z$1.ZodEnum<{ + unknown: "unknown"; path_not_found: "path_not_found"; not_git_repo: "not_git_repo"; not_worktree: "not_worktree"; workspace_type_mismatch: "workspace_type_mismatch"; permission_denied: "permission_denied"; unknown_environment: "unknown_environment"; - unknown: "unknown"; }>; workspacePath: z$1.ZodString; message: z$1.ZodString; @@ -6295,9 +6283,9 @@ declare const hostDaemonCommandRegistry: { conclusion: z$1.ZodNullable; installAction: z$1.ZodNullable; label: z$1.ZodEnum<{ Install: "Install"; @@ -6405,8 +6393,8 @@ declare const providerCliInstallRequestSchema: z$1.ZodObject<{ cursor: "cursor"; }>; actionKind: z$1.ZodEnum<{ - install: "install"; update: "update"; + install: "install"; }>; }, z$1.core.$strip>; type ProviderCliInstallRequest = z$1.infer; diff --git a/plugins/improve-prompt/types/thread-row-status-extension.d.ts b/plugins/improve-prompt/types/thread-row-status-extension.d.ts new file mode 100644 index 0000000..fb47210 --- /dev/null +++ b/plugins/improve-prompt/types/thread-row-status-extension.d.ts @@ -0,0 +1,16 @@ +import type { PluginComposerThreadRowStatus } from "@bb/plugin-sdk/app"; + +declare module "@bb/plugin-sdk/app" { + interface PluginContentScriptContext { + /** + * Persistently decorate any thread row for this plugin generation. + * + * Optional so the plugin can feature-detect the companion experimental + * host API while remaining load-safe on older BB 0.34 clients. + */ + readonly experimental_setThreadRowStatus?: ( + threadId: string, + status: PluginComposerThreadRowStatus | null, + ) => void; + } +} From 1e82d6410cba857656c727ea142b6b9fd90e0e2a Mon Sep 17 00:00:00 2001 From: Bersabel Tadesse Date: Thu, 30 Jul 2026 22:16:41 -0700 Subject: [PATCH 5/5] Use persistent thread status exclusively --- plugins/improve-prompt/app.test.tsx | 22 ---------------------- plugins/improve-prompt/app.tsx | 7 ------- plugins/improve-prompt/dist/app.js | 6 ------ 3 files changed, 35 deletions(-) diff --git a/plugins/improve-prompt/app.test.tsx b/plugins/improve-prompt/app.test.tsx index 7cfb11c..b52819d 100644 --- a/plugins/improve-prompt/app.test.tsx +++ b/plugins/improve-prompt/app.test.tsx @@ -595,7 +595,6 @@ describe("Improve Prompt composer action", () => { }); expect(actionSlot.inspection.composer.textEffect).toBeNull(); expect(actionSlot.inspection.composer.inputLocked).toBe(false); - expect(actionSlot.inspection.composer.threadRowStatus).toBeNull(); expect(window.sessionStorage.length).toBe(0); expect( screen.getByRole("button", { name: "Improve prompt" }), @@ -656,11 +655,6 @@ describe("Improve Prompt composer action", () => { expect(actionSlot.inspection.composer.textEffect).toEqual({ className: "bb-improve-prompt-shimmer", }); - expect(actionSlot.inspection.composer.threadRowStatus).toEqual({ - icon: "AiContentGenerator01", - label: "Improve Prompt is improving the draft", - tone: "running", - }); }); await driveComposerText("edited while enhancement was running"); @@ -682,7 +676,6 @@ describe("Improve Prompt composer action", () => { "Enhanced prompt with the missing guardrail.", ); expect(actionSlot.inspection.composer.textEffect).toBeNull(); - expect(actionSlot.inspection.composer.threadRowStatus).toBeNull(); }); expect(actionSlot.inspection.composer.attachmentCount).toBe(1); expect(screen.queryByRole("dialog")).toBeNull(); @@ -766,7 +759,6 @@ describe("Improve Prompt composer action", () => { screen.getByRole("button", { name: "Improve prompt" }), ).not.toBeNull(); expect(actionSlot.inspection.composer.textEffect).toBeNull(); - expect(actionSlot.inspection.composer.threadRowStatus).toBeNull(); }); expect(cancelEnhancement).not.toHaveBeenCalled(); expect(window.sessionStorage.length).toBe(1); @@ -1001,7 +993,6 @@ describe("Improve Prompt composer action", () => { expect( icon?.parentElement?.classList.contains("motion-safe:animate-pulse"), ).toBe(true); - expect(actionSlot.inspection.composer.threadRowStatus).not.toBeNull(); expect( actionSlot.inspection.rpcCalls.map((call) => call.method), ).toContain("getEnhancement"); @@ -1017,7 +1008,6 @@ describe("Improve Prompt composer action", () => { }); expect(actionSlot.inspection.composer.textEffect).toBeNull(); expect(actionSlot.inspection.composer.inputLocked).toBe(false); - expect(actionSlot.inspection.composer.threadRowStatus).toBeNull(); expect(window.sessionStorage.length).toBe(0); }); expect(actionSlot.inspection.composer.text).toBe("keep this draft"); @@ -1084,7 +1074,6 @@ describe("Improve Prompt composer action", () => { expect(actionSlot.inspection.composer.textEffect).toEqual({ className: "bb-improve-prompt-shimmer", }); - expect(actionSlot.inspection.composer.threadRowStatus).not.toBeNull(); expect( screen.getByRole("button", { name: "Cancel prompt improvement" }), ).not.toBeNull(); @@ -1142,7 +1131,6 @@ describe("Improve Prompt composer action", () => { expect(cancelEnhancement).toHaveBeenCalledTimes(2); expect(actionSlot.inspection.composer.inputLocked).toBe(false); expect(actionSlot.inspection.composer.textEffect).toBeNull(); - expect(actionSlot.inspection.composer.threadRowStatus).toBeNull(); expect(window.sessionStorage.length).toBe(0); expect( screen.getByRole("button", { name: "Improve prompt" }), @@ -1192,7 +1180,6 @@ describe("Improve Prompt composer action", () => { expect(getCalls).toBe(2); expect(window.sessionStorage.length).toBe(0); expect(actionSlot.inspection.composer.textEffect).toBeNull(); - expect(actionSlot.inspection.composer.threadRowStatus).toBeNull(); expect( screen.getByRole("button", { name: "Improve prompt" }), ).not.toBeNull(); @@ -1331,7 +1318,6 @@ describe("Improve Prompt composer action", () => { expect(actionSlot.inspection.composer.textEffect).toEqual({ className: "bb-improve-prompt-shimmer", }); - expect(actionSlot.inspection.composer.threadRowStatus).not.toBeNull(); }); await driveComposerScope({ @@ -1341,7 +1327,6 @@ describe("Improve Prompt composer action", () => { await waitFor(() => { expect(actionSlot.inspection.composer.textEffect).toBeNull(); - expect(actionSlot.inspection.composer.threadRowStatus).toBeNull(); }); expect(actionSlot.inspection.composer.text).toBe("rough draft"); }); @@ -1364,12 +1349,10 @@ describe("Improve Prompt composer action", () => { expect(actionSlot.inspection.composer.textEffect).toEqual({ className: "bb-improve-prompt-shimmer", }); - expect(actionSlot.inspection.composer.threadRowStatus).not.toBeNull(); }); view.lifecycle.unmount(); expect(actionSlot.inspection.composer.textEffect).toBeNull(); - expect(actionSlot.inspection.composer.threadRowStatus).toBeNull(); window.sessionStorage.clear(); configureAction({ @@ -1387,7 +1370,6 @@ describe("Improve Prompt composer action", () => { await waitFor(() => { expect(actionSlot.inspection.composer.textEffect).toBeNull(); - expect(actionSlot.inspection.composer.threadRowStatus).toBeNull(); expect(toast.error).toHaveBeenCalledWith("agent unavailable"); }); expect(actionSlot.inspection.composer.textEffectCalls).toContainEqual({ @@ -1444,7 +1426,6 @@ describe("Improve Prompt composer action", () => { expect(window.sessionStorage.length).toBe(0); }); expect(actionSlot.inspection.composer.textEffect).toBeNull(); - expect(actionSlot.inspection.composer.threadRowStatus).toBeNull(); await act(async () => { result.resolve({ @@ -1521,7 +1502,6 @@ describe("Improve Prompt composer action", () => { expect(cancelEnhancement).toHaveBeenCalledTimes(2); expect(window.sessionStorage.length).toBe(0); expect(actionSlot.inspection.composer.textEffect).toBeNull(); - expect(actionSlot.inspection.composer.threadRowStatus).toBeNull(); }); await act(async () => { @@ -1698,7 +1678,6 @@ describe("Improve Prompt composer action", () => { screen.getByRole("button", { name: "Improve prompt" }), ).not.toBeNull(); expect(actionSlot.inspection.composer.textEffect).toBeNull(); - expect(actionSlot.inspection.composer.threadRowStatus).toBeNull(); }, { timeout: 4_000 }, ); @@ -1744,6 +1723,5 @@ describe("Improve Prompt composer action", () => { expect(cancelEnhancement).not.toHaveBeenCalled(); expect(window.sessionStorage.length).toBe(1); expect(actionSlot.inspection.composer.textEffect).toBeNull(); - expect(actionSlot.inspection.composer.threadRowStatus).toBeNull(); }); }); diff --git a/plugins/improve-prompt/app.tsx b/plugins/improve-prompt/app.tsx index 5561004..27f7db7 100644 --- a/plugins/improve-prompt/app.tsx +++ b/plugins/improve-prompt/app.tsx @@ -25,7 +25,6 @@ import { scopeKey } from "./core.js"; import { clearPromptRun, installPromptThreadStatusController, - THREAD_ROW_STATUS, trackPromptRun, } from "./thread-status.js"; @@ -299,11 +298,9 @@ function PromptShaperAction() { useEffect(() => { composer.setTextEffect(isRunning ? PROMPT_SHIMMER_EFFECT : null); composer.setInputLock(isRunning); - composer.setThreadRowStatus(isRunning ? THREAD_ROW_STATUS : null); }, [ composer.setInputLock, composer.setTextEffect, - composer.setThreadRowStatus, isRunning, ]); @@ -321,19 +318,16 @@ function PromptShaperAction() { return () => { composer.setInputLock(false); composer.setTextEffect(null); - composer.setThreadRowStatus(null); }; }, [ composer.setInputLock, composer.setTextEffect, - composer.setThreadRowStatus, composerScopeKey, ]); const clearLoadingEffects = useCallback(() => { composerRef.current.setInputLock(false); composerRef.current.setTextEffect(null); - composerRef.current.setThreadRowStatus(null); }, []); const cancelInBackground = useCallback( @@ -584,7 +578,6 @@ function PromptShaperAction() { setUndoState(null); composer.setTextEffect(PROMPT_SHIMMER_EFFECT); composer.setInputLock(true); - composer.setThreadRowStatus(THREAD_ROW_STATUS); setPendingRequest(request); trackThreadStatus(request); locallyStartingRequestIds.add(request.requestId); diff --git a/plugins/improve-prompt/dist/app.js b/plugins/improve-prompt/dist/app.js index c0ae91f..1f25acd 100644 --- a/plugins/improve-prompt/dist/app.js +++ b/plugins/improve-prompt/dist/app.js @@ -5151,11 +5151,9 @@ function PromptShaperAction() { useEffect(() => { composer.setTextEffect(isRunning ? PROMPT_SHIMMER_EFFECT : null); composer.setInputLock(isRunning); - composer.setThreadRowStatus(isRunning ? THREAD_ROW_STATUS : null); }, [ composer.setInputLock, composer.setTextEffect, - composer.setThreadRowStatus, isRunning ]); useEffect(() => { @@ -5167,18 +5165,15 @@ function PromptShaperAction() { return () => { composer.setInputLock(false); composer.setTextEffect(null); - composer.setThreadRowStatus(null); }; }, [ composer.setInputLock, composer.setTextEffect, - composer.setThreadRowStatus, composerScopeKey ]); const clearLoadingEffects = useCallback(() => { composerRef.current.setInputLock(false); composerRef.current.setTextEffect(null); - composerRef.current.setThreadRowStatus(null); }, []); const cancelInBackground = useCallback( (request) => { @@ -5362,7 +5357,6 @@ function PromptShaperAction() { setUndoState(null); composer.setTextEffect(PROMPT_SHIMMER_EFFECT); composer.setInputLock(true); - composer.setThreadRowStatus(THREAD_ROW_STATUS); setPendingRequest(request); trackThreadStatus(request); locallyStartingRequestIds.add(request.requestId);