diff --git a/bin/knowledge-mcp.js b/bin/knowledge-mcp.js index 67d5741..5027356 100755 --- a/bin/knowledge-mcp.js +++ b/bin/knowledge-mcp.js @@ -15025,6 +15025,7 @@ var package_default = { "bin", "dist", "scripts/apply-cloud-migrations.mjs", + "scripts/live-private-query.mjs", "scripts/lib/remote-temp-dir.mjs", "scripts/smoke-machine-sync-release.mjs", "scripts/smoke-machines-adapter.mjs", @@ -15051,6 +15052,7 @@ var package_default = { "smoke:machine-sync-release": "bun scripts/smoke-machine-sync-release.mjs", "smoke:open-files-installed-boundary": "bun scripts/smoke-open-files-installed-boundary.mjs", "migrate:cloud": "bun scripts/apply-cloud-migrations.mjs", + "live:private-query": "bun scripts/live-private-query.mjs", serve: "bun src/serve-entry.ts", "verify:generated": "bun scripts/verify-generated-artifacts.mjs", "contracts:conformance": "contracts conformance fixtures", @@ -16442,6 +16444,12 @@ function assertKnowledgeModeSelected(env = process.env, options = {}) { throw new HalfConfiguredKnowledgeClientError(urlKeysPresent); } +// src/query-contract.ts +var KNOWLEDGE_BOUNDED_QUERY_CAPABILITY = "hasna.knowledge.bounded-query.v1"; +function hasKnowledgeBoundedQueryCapability(value) { + return Boolean(value && typeof value === "object" && value.query_capability === KNOWLEDGE_BOUNDED_QUERY_CAPABILITY); +} + // src/cloud-store.ts function transportOverrides(env) { return { @@ -16462,33 +16470,95 @@ class KnowledgeVersionConflictError extends Error { this.name = "KnowledgeVersionConflictError"; } } + +class KnowledgeBoundedQueryCapabilityError extends Error { + operation; + fields; + code = "bounded_query_capability_required"; + constructor(operation, fields) { + super(`bounded_query_capability_required: the Knowledge server did not prove support for ${operation} field(s): ` + `${fields.join(", ")}. Refusing to accept a possibly unfiltered response; update the server and retry.`); + this.operation = operation; + this.fields = fields; + this.name = "KnowledgeBoundedQueryCapabilityError"; + } +} function toQuery(options) { const q = {}; - if (options.search) + if (options.search) { + q.filter = options.search; q.search = options.search; + } + if (options.tags?.length) + q.tags = options.tags; + if (options.archive) { + q.archive = options.archive; + if (options.archive === "all") + q.includeArchived = true; + } + if (options.sort) + q.sort = options.sort; + if (options.direction) + q.direction = options.direction; if (options.limit !== undefined) q.limit = options.limit; if (options.offset !== undefined) q.offset = options.offset; - if (options.includeArchived || options.archivedOnly) - q.includeArchived = true; return q; } +function listFieldsRequiringCapability(options) { + const fields = []; + if (options.tags?.length) + fields.push("tags"); + if (options.sort !== undefined) + fields.push("sort"); + if (options.direction !== undefined) + fields.push("direction"); + if (options.archive === "archived") + fields.push("archive=archived"); + return fields; +} +function boundedQueryInteger(value, fallback, field, minimum, maximum) { + const resolved = value ?? fallback; + if (!Number.isFinite(resolved) || !Number.isInteger(resolved) || resolved < minimum || resolved > maximum) { + throw new Error(`${field} must be an integer between ${minimum} and ${maximum}.`); + } + return resolved; +} function wrap(client) { return { baseUrl: client.baseUrl, async list(options = {}) { - const wantLimit = options.limit ?? 200; - const query2 = toQuery({ ...options, limit: Math.min(Math.max(wantLimit, 1), 200) }); + const limit = boundedQueryInteger(options.limit, 200, "limit", 1, 200); + const offset = boundedQueryInteger(options.offset, 0, "offset", 0, 1e4); + const query2 = toQuery({ ...options, limit, offset }); const res = await client.list(KNOWLEDGE_RESOURCE, { query: query2 }); - let items = res.items; - if (options.archivedOnly) - items = items.filter((x) => x.archived === true); - if (options.tag) { - const t = options.tag.toLowerCase(); - items = items.filter((x) => (x.tags ?? []).some((tag) => tag.toLowerCase() === t)); - } - return { items, total: res.total }; + if (!Number.isInteger(res.total) || Number(res.total) < 0) { + throw new Error("knowledge cloud list response is missing a valid producer total."); + } + const requiredFields = listFieldsRequiringCapability(options); + if (requiredFields.length > 0 && !hasKnowledgeBoundedQueryCapability(res.raw)) { + throw new KnowledgeBoundedQueryCapabilityError("list", requiredFields); + } + return { items: res.items, total: Number(res.total) }; + }, + async search(options) { + const limit = boundedQueryInteger(options.limit, 20, "limit", 1, 200); + const offset = boundedQueryInteger(options.offset, 0, "offset", 0, 1e4); + const response = await client.transport.get(`/${KNOWLEDGE_RESOURCE}/search`, { + query: { + q: options.query, + archive: options.archive ?? "active", + limit, + offset + } + }); + if (!Number.isInteger(response.total) || response.total < 0 || !Array.isArray(response.items) || response.items.some((hit) => !hit || typeof hit !== "object" || !hit.item || typeof hit.rank !== "number" || !Number.isFinite(hit.rank))) { + throw new Error("knowledge cloud search response is missing producer rank or total evidence."); + } + if (!hasKnowledgeBoundedQueryCapability(response)) { + throw new KnowledgeBoundedQueryCapabilityError("search", ["q", "rank", "total"]); + } + return { items: response.items, total: response.total }; }, async get(idOrShort) { return client.get(KNOWLEDGE_RESOURCE, idOrShort); @@ -16596,7 +16666,7 @@ async function fetchAllCloudItems(store) { const pageSize = 200; const all = []; for (let offset = 0;; offset += pageSize) { - const { items } = await store.list({ includeArchived: true, limit: pageSize, offset }); + const { items } = await store.list({ archive: "all", limit: pageSize, offset }); all.push(...items); if (items.length < pageSize) break; @@ -17265,12 +17335,6 @@ import { } from "fs"; import { randomUUID } from "crypto"; import { basename, dirname as dirname2, join as join3 } from "path"; -function itemMatchesSearch(item, needle) { - if (!needle) - return true; - const q = needle.toLowerCase(); - return item.id.toLowerCase().includes(q) || item.title.toLowerCase().includes(q) || item.content.toLowerCase().includes(q); -} function defaultStorePath() { return workspaceForHome(globalKnowledgeHome()).jsonStorePath; } @@ -17642,6 +17706,53 @@ class VersionHistoryUnsupportedError extends Error { function matchesId(item, idOrShort) { return item.id === idOrShort || item.short_id === idOrShort; } +function itemMatchesLiteralSearch(item, search) { + const query2 = search.trim().toLowerCase(); + if (!query2) + return true; + return item.id.toLowerCase().includes(query2) || item.title.toLowerCase().includes(query2) || item.content.toLowerCase().includes(query2); +} +function itemMatchesTagFilters(item, rawFilters) { + if (rawFilters.length === 0) + return true; + const itemTags = new Set((item.tags ?? []).map((tag) => tag.toLowerCase())); + return rawFilters.every((raw) => { + const whole = raw.trim().toLowerCase(); + const parts = raw.split(",").map((tag) => tag.trim().toLowerCase()).filter(Boolean); + return whole.length > 0 && itemTags.has(whole) || parts.length > 0 && parts.every((tag) => itemTags.has(tag)); + }); +} +function compareItems(left, right, sort, direction) { + const primary = sort === "title" ? left.title.localeCompare(right.title) : left.created_at.localeCompare(right.created_at); + const deterministic = primary === 0 ? left.id.localeCompare(right.id) : primary; + return direction === "desc" ? -deterministic : deterministic; +} +function boundedListInteger(value, fallback, field, minimum, maximum) { + const resolved = value ?? fallback; + if (!Number.isFinite(resolved) || !Number.isInteger(resolved) || resolved < minimum || resolved > maximum) { + throw new Error(`${field} must be an integer between ${minimum} and ${maximum}.`); + } + return resolved; +} +function boundedLocalList(items, options) { + const archive = options.archive ?? "active"; + const sort = options.sort ?? "created"; + const direction = options.direction ?? "asc"; + const limit = boundedListInteger(options.limit, 50, "limit", 1, 200); + const offset = boundedListInteger(options.offset, 0, "offset", 0, 1e4); + let filtered = items.filter((item) => archive === "all" || (archive === "archived" ? item.archived === true : item.archived !== true)); + if (options.search) { + filtered = filtered.filter((item) => itemMatchesLiteralSearch(item, options.search)); + } + if (options.tags?.length) { + filtered = filtered.filter((item) => itemMatchesTagFilters(item, options.tags)); + } + filtered.sort((left, right) => compareItems(left, right, sort, direction)); + return { + total: filtered.length, + items: filtered.slice(offset, offset + limit) + }; +} class LocalItemStore { storePath; @@ -17662,9 +17773,14 @@ class LocalItemStore { get exists() { return existsSync3(this.storePath); } + async list(options = {}) { + const store = loadStoreIfExists(this.storePath); + const result = boundedLocalList(store.items, options); + return { ...result, exists: store.exists }; + } async listAll() { const store = loadStoreIfExists(this.storePath); - return { items: store.items, exists: store.exists }; + return { items: store.items, total: store.items.length, exists: store.exists }; } async get(idOrShort) { const store = loadStoreIfExists(this.storePath); @@ -17767,8 +17883,25 @@ class ApiItemStore { get location() { return this.cloud.baseUrl; } + async list(options = {}) { + const result = await this.cloud.list({ + search: options.search, + tags: options.tags, + archive: options.archive, + sort: options.sort, + direction: options.direction, + limit: options.limit, + offset: options.offset + }); + return { + items: result.items, + total: result.total, + exists: true + }; + } async listAll() { - return { items: await fetchAllCloudItems(this.cloud), exists: true }; + const items = await fetchAllCloudItems(this.cloud); + return { items, total: items.length, exists: true }; } async get(idOrShort) { return this.cloud.get(idOrShort); @@ -21399,6 +21532,35 @@ async function hybridSearchItems(items, options, baseWarnings = []) { results }; } +function hybridSearchFromProducerPage(hits, options, warnings = [], producerTotal = hits.length) { + const query2 = options.query.trim(); + if (!query2) + throw new Error("Search query is required."); + const limit = Math.max(1, Math.min(options.limit ?? 10, 100)); + const offset = Math.max(0, Math.floor(options.offset ?? 0)); + const results = hits.map(({ item, rank }) => legacyItemResult(item, rank)); + return { + query: query2, + limit, + offset, + mode: { + keyword: true, + catalog: true, + semantic: options.semantic === true + }, + semantic_provider: null, + semantic_model: null, + semantic_dimensions: null, + counts: { + keyword_results: producerTotal, + catalog_results: 0, + semantic_results: 0, + merged_results: results.length + }, + warnings, + results + }; +} // src/retrieval.ts function stableId4(prefix, value) { @@ -21916,7 +22078,7 @@ ${answer}`; warnings }; } -async function runKnowledgePromptOverItems(items, options) { +async function runKnowledgePromptOverItems(items, options, producerSearch) { const prompt = options.prompt.trim(); if (!prompt) throw new Error("Knowledge prompt is required."); @@ -21924,7 +22086,7 @@ async function runKnowledgePromptOverItems(items, options) { const modelRef = resolveModelRef(options.modelRef ?? "default", options.config); const parsed = parseModelRef(modelRef); const { prompt: _p, generate: _g, approveWrite: _a3, now: _n, ...retrievalOptions } = options; - const context = await retrieveKnowledgeContextFromItems(items, { + const context = producerSearch ? retrieveKnowledgeContextFromSearch(producerSearch, { contextChars: options.contextChars }) : await retrieveKnowledgeContextFromItems(items, { ...retrievalOptions, query: prompt }); @@ -30067,6 +30229,14 @@ function normalizeMode(value) { throw new Error("Invalid setup mode. Use hosted or local."); } +class KnowledgeSemanticSearchUnavailableError extends Error { + code = "semantic_query_unavailable"; + constructor() { + super("semantic_query_unavailable: the hosted Knowledge item store has no configured vector index."); + this.name = "KnowledgeSemanticSearchUnavailableError"; + } +} + class KnowledgeService { options; ensuredWorkspace; @@ -30095,8 +30265,8 @@ class KnowledgeService { storePathOverridden: false }); } - async listItems() { - return this.itemStore().listAll(); + async listItems(options = {}) { + return this.itemStore().list(options); } async getItem(idOrShort) { return this.itemStore().get(idOrShort); @@ -30889,24 +31059,20 @@ class KnowledgeService { isApiMode() { return isKnowledgeApiMode(); } - async fetchCloudItems() { + cloudStore() { const cloud = resolveKnowledgeCloudStore(); - if (!cloud) - throw new Error("knowledge: cloud store requested but not resolvable (check HASNA_KNOWLEDGE_API_URL + HASNA_KNOWLEDGE_API_KEY)."); - return fetchAllCloudItems(cloud); + if (!cloud) { + throw new Error("knowledge: cloud store requested but not resolvable " + "(check HASNA_KNOWLEDGE_API_URL + HASNA_KNOWLEDGE_API_KEY)."); + } + return cloud; + } + async fetchCloudItems() { + return fetchAllCloudItems(this.cloudStore()); } async semanticSearch(options) { const workspace = this.workspace; if (this.isApiMode()) { - const items = await this.fetchCloudItems(); - const search = await hybridSearchItems(items, { ...options }, ["semantic_search_requires_local_catalog"]); - return { - provider: "openai", - model: "text-embedding-3-small", - dimensions: options.dimensions ?? 1536, - query: options.query, - results: search.results - }; + throw new KnowledgeSemanticSearchUnavailableError; } if (!existsSync14(workspace.knowledgeDbPath)) { return { @@ -30926,8 +31092,16 @@ class KnowledgeService { async search(options) { const workspace = this.workspace; if (this.isApiMode()) { - const items = await this.fetchCloudItems(); - return hybridSearchItems(items, options); + if (options.semantic === true || options.fake === true || Boolean(options.modelRef)) { + throw new KnowledgeSemanticSearchUnavailableError; + } + const producer = await this.cloudStore().search({ + query: options.query, + archive: "active", + limit: options.limit, + offset: options.offset + }); + return hybridSearchFromProducerPage(producer.items, options, [], producer.total); } const legacyStorePath = legacyStorePathForRead(this.scope, workspace, options.legacyStorePath); if (!existsSync14(workspace.knowledgeDbPath)) { @@ -30950,8 +31124,10 @@ class KnowledgeService { async retrieveContext(options) { const workspace = this.workspace; if (this.isApiMode()) { - const items = await this.fetchCloudItems(); - return retrieveKnowledgeContextFromItems(items, options); + const search = await this.search(options); + return retrieveKnowledgeContextFromSearch(search, { + contextChars: options.contextChars + }); } const legacyStorePath = legacyStorePathForRead(this.scope, workspace, options.legacyStorePath); if (!existsSync14(workspace.knowledgeDbPath)) { @@ -30979,8 +31155,7 @@ class KnowledgeService { if (this.isApiMode()) { const query2 = (options.query ?? options.topic ?? "").trim(); if (query2 && options.source !== "loops" && options.source !== "runs") { - const items = await this.fetchCloudItems(); - const search = await hybridSearchItems(items, { ...options, query: query2 }); + const search = await this.search({ ...options, query: query2 }); const context = retrieveKnowledgeContextFromSearch(search, { contextChars: options.contextChars }); return legacyAgentContextPack(options, context, this.safetyPolicy()); } @@ -31013,8 +31188,22 @@ class KnowledgeService { } async runPrompt(options) { if (this.isApiMode()) { - const items = await this.fetchCloudItems(); - return runKnowledgePromptOverItems(items, { ...options, config: this.config() }); + if (options.semantic === true || options.fake === true || Boolean(options.modelRef)) { + throw new KnowledgeSemanticSearchUnavailableError; + } + const producer = await this.cloudStore().search({ + query: options.prompt, + archive: "active", + limit: options.limit, + offset: options.offset + }); + const producerSearch = hybridSearchFromProducerPage(producer.items, { + query: options.prompt, + limit: options.limit, + offset: options.offset, + semantic: false + }, [], producer.total); + return runKnowledgePromptOverItems(producer.items.map((hit) => hit.item), { ...options, config: this.config() }, producerSearch); } const workspace = this.ensureWorkspace(); const legacyStorePath = options.legacyStorePath ?? workspace.jsonStorePath; @@ -31685,16 +31874,6 @@ function itemStoreFor(storePath, scope) { const resolved = resolveStorePath(storePath, scope); return resolveItemStore({ storePath: resolved, storePathOverridden: Boolean(storePath) }); } -function sortItems(items, sort = "created", desc = false) { - const sorted = [...items].sort((a, b) => { - if (sort === "title") - return a.title.localeCompare(b.title); - return a.created_at.localeCompare(b.created_at); - }); - if (desc) - sorted.reverse(); - return sorted; -} function activeItems(items, includeArchived) { return includeArchived ? items : items.filter((item) => !item.archived); } @@ -31780,8 +31959,8 @@ function openProjectDb(service = projectService()) { } async function itemResources(storePath, scope = "project") { const store = itemStoreFor(storePath, scope); - const { items } = await store.listAll(); - return activeItems(items, false).slice(0, 100).map((item) => ({ + const { items } = await store.list({ archive: "active", limit: 100, offset: 0 }); + return items.map((item) => ({ uri: `knowledge://project/items/${encodeURIComponent(item.id)}`, name: item.title, description: `Knowledge item ${item.id}`, @@ -32958,31 +33137,27 @@ function buildServer() { include_archived: exports_external.boolean().optional().describe("Include archived items"), include_content: exports_external.boolean().optional().describe("Include full item content in each list row; default false to keep agent output compact"), include_metadata: exports_external.boolean().optional().describe("Include full item metadata in each list row; default false to keep agent output compact"), - page: exports_external.number().optional().describe("Page number"), - limit: exports_external.number().optional().describe("Items per page"), + page: exports_external.number().int().min(1).optional().describe("Page number"), + limit: exports_external.number().int().min(1).max(200).optional().describe("Items per page"), sort: exports_external.enum(["created", "title"]).optional().describe("Sort field"), desc: exports_external.boolean().optional().describe("Sort descending"), store_path: storePathField, scope: scopeField }, async ({ search, tag, include_archived, include_content, include_metadata, page, limit, sort, desc, store_path, scope }) => { const store = itemStoreFor(store_path, scope); - const { items: all } = await store.listAll(); - const q = search ? search.toLowerCase() : ""; - const requiredTags = (tag ?? []).map((entry) => entry.toLowerCase()); - let items = activeItems(all, include_archived); - if (q) - items = items.filter((item) => itemMatchesSearch(item, q)); - if (requiredTags.length > 0) { - items = items.filter((item) => { - const itemTags = (item.tags ?? []).map((entry) => entry.toLowerCase()); - return requiredTags.every((entry) => itemTags.includes(entry)); - }); - } - const p = page && page > 0 ? page : 1; - const l = limit && limit > 0 ? limit : 20; - const sorted = sortItems(items, sort ?? "created", desc ?? false); + const p = page ?? 1; + const l = limit ?? 20; const start = (p - 1) * l; - const rows = sorted.slice(start, start + l); + const result = await store.list({ + search, + tags: tag ?? [], + archive: include_archived ? "all" : "active", + sort: sort ?? "created", + direction: desc ? "desc" : "asc", + limit: l, + offset: start + }); + const rows = result.items; const compactRows = rows.map((item) => compactItem(item, { includeContent: include_content === true, includeMetadata: include_metadata === true @@ -32991,8 +33166,8 @@ function buildServer() { ok: true, page: p, limit: l, - total: sorted.length, - total_pages: Math.max(1, Math.ceil(sorted.length / l)), + total: result.total, + total_pages: Math.max(1, Math.ceil(result.total / l)), items: compactRows, detail_hint: "Use ok_get with an id for full item details, or set include_content/include_metadata for expanded list rows." }); diff --git a/bin/knowledge-serve.js b/bin/knowledge-serve.js index 7fcdcc4..c556cdb 100755 --- a/bin/knowledge-serve.js +++ b/bin/knowledge-serve.js @@ -730,6 +730,9 @@ import { createHash as createHash2, randomUUID } from "crypto"; var KNOWLEDGE_GUARDED_WRITE_CONTRACT = "FCAME-1"; var KNOWLEDGE_PRIVATE_INPUT_SCHEMA = "hasna.knowledge.private-input.v1"; var KNOWLEDGE_PRIVATE_TITLE_LOOKUP_SCHEMA = "hasna.knowledge.private-title-lookup.v1"; +var KNOWLEDGE_PRIVATE_QUERY_SCHEMA = "hasna.knowledge.private-query.v1"; +var KNOWLEDGE_RELATIONS_SCHEMA = "hasna.knowledge.relations.v1"; +var KNOWLEDGE_RELATIONS_METADATA_KEY = "hasna_knowledge_relations"; var DEFAULT_KNOWLEDGE_GUARDED_LIMITS = Object.freeze({ submission: Object.freeze({ max_calls: 1, @@ -755,6 +758,7 @@ var MAX_GUARDED_WALL_TIME_MS = 30000; var MAX_DESCRIPTOR_LIFETIME_MS = 60 * 60 * 1000; var PRIVATE_PAYLOADS = new WeakMap; var PRIVATE_TITLE_LOOKUPS = new WeakMap; +var PRIVATE_QUERIES = new WeakMap; var PRIVATE_RESULTS = new WeakMap; function assertObjectKeys(value, field, allowed, required = allowed) { if (!value || typeof value !== "object" || Array.isArray(value)) { @@ -828,6 +832,92 @@ function assertKnowledgeGuardedBounds(bounds, field = "limits") { throw new Error(`${field}.wall_time_ms must be a positive integer no greater than ${MAX_GUARDED_WALL_TIME_MS}.`); } } +function assertKnowledgePrivateQueryBounds(bounds, field = "query limits") { + assertObjectKeys(bounds, field, ["max_calls", "max_items", "max_bytes", "wall_time_ms"]); + if (bounds.max_calls !== 1) + throw new Error(`${field}.max_calls must be exactly 1.`); + if (!Number.isInteger(bounds.max_items) || bounds.max_items < 1 || bounds.max_items > 50) { + throw new Error(`${field}.max_items must be an integer between 1 and 50.`); + } + if (!Number.isInteger(bounds.max_bytes) || bounds.max_bytes < 1 || bounds.max_bytes > MAX_GUARDED_BYTES) { + throw new Error(`${field}.max_bytes must be a positive integer no greater than ${MAX_GUARDED_BYTES}.`); + } + if (!Number.isInteger(bounds.wall_time_ms) || bounds.wall_time_ms < 1 || bounds.wall_time_ms > MAX_GUARDED_WALL_TIME_MS) { + throw new Error(`${field}.wall_time_ms must be a positive integer no greater than ${MAX_GUARDED_WALL_TIME_MS}.`); + } +} +function assertKnowledgePrivateQueryPage(page, bounds) { + assertObjectKeys(page, "query page", ["limit", "offset"]); + if (!Number.isInteger(page.limit) || page.limit < 1 || page.limit > bounds.max_items) { + throw new Error("query page.limit must be a positive integer no greater than limits.max_items."); + } + if (!Number.isInteger(page.offset) || page.offset < 0 || page.offset > 1e4) { + throw new Error("query page.offset must be an integer between 0 and 10000."); + } +} +function assertKnowledgePrivateQuerySelector(selector) { + if (!selector || typeof selector !== "object" || Array.isArray(selector)) { + throw new Error("private query selector must be an object."); + } + switch (selector.kind) { + case "exact_title": + assertObjectKeys(selector, "private query selector", ["kind", "title"]); + assertBoundText(selector.title, "private query selector.title", 2048); + return; + case "lexical_overlap": + case "semantic_overlap": + assertObjectKeys(selector, "private query selector", ["kind", "query"]); + assertBoundText(selector.query, "private query selector.query", 4096); + return; + case "supersession": + assertObjectKeys(selector, "private query selector", ["kind", "supersedes_item_id"]); + assertBoundText(selector.supersedes_item_id, "private query selector.supersedes_item_id"); + return; + case "current_version": + assertObjectKeys(selector, "private query selector", ["kind", "item_id"]); + assertBoundText(selector.item_id, "private query selector.item_id"); + return; + case "historical_version": + assertObjectKeys(selector, "private query selector", ["kind", "item_id", "version"]); + assertBoundText(selector.item_id, "private query selector.item_id"); + if (!Number.isInteger(selector.version) || selector.version < 1) { + throw new Error("private query selector.version must be a positive integer."); + } + return; + case "canonical_pointer": + assertObjectKeys(selector, "private query selector", ["kind", "canonical_item_id"]); + assertBoundText(selector.canonical_item_id, "private query selector.canonical_item_id"); + return; + default: + throw new Error("private query selector.kind is unsupported."); + } +} +function assertKnowledgeRelationsMetadata(metadata, itemId) { + const raw = metadata[KNOWLEDGE_RELATIONS_METADATA_KEY]; + if (raw === undefined) + return; + assertObjectKeys(raw, `metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}`, ["schema", "supersedes_item_id", "canonical_item_id"], ["schema"]); + if (raw.schema !== KNOWLEDGE_RELATIONS_SCHEMA) { + throw new Error(`metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.schema is unsupported.`); + } + const supersedes = raw.supersedes_item_id; + const canonical = raw.canonical_item_id; + if (supersedes === undefined && canonical === undefined) { + throw new Error(`metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY} must contain at least one pointer.`); + } + if (supersedes !== undefined) { + assertBoundText(supersedes, `metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.supersedes_item_id`); + if (itemId && supersedes === itemId) { + throw new Error("an item cannot supersede itself."); + } + } + if (canonical !== undefined) { + assertBoundText(canonical, `metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.canonical_item_id`); + if (itemId && canonical === itemId) { + throw new Error(`metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.canonical_item_id cannot reference itself.`); + } + } +} function normalizeKnowledgeGuardedLimits(limits = {}) { assertObjectKeys(limits, "limits", ["submission", "reconciliation", "readback"], []); if (limits.submission !== undefined) { @@ -1203,6 +1293,34 @@ function knowledgePrivateItemProof(item) { archived: item.archived === true }); } +function knowledgePrivateQueryItemProof(item, matchedValue = null) { + return Object.freeze({ + id_sha256: knowledgeGuardedContentSha256(item.id), + version: Number(item.version ?? 1), + title_sha256: knowledgeGuardedContentSha256(item.title), + content_sha256: knowledgeGuardedContentSha256(item.content), + url_sha256: item.url === null || item.url === undefined ? null : knowledgeGuardedContentSha256(item.url), + tags_sha256: knowledgeGuardedDigest(item.tags ?? []), + metadata_sha256: knowledgeGuardedDigest(item.metadata ?? {}), + archived: item.archived === true, + record_kind: "current", + matched_value_sha256: matchedValue === null ? null : knowledgeGuardedContentSha256(matchedValue) + }); +} +function knowledgePrivateHistoricalQueryItemProof(item, matchedValue = null) { + return Object.freeze({ + id_sha256: knowledgeGuardedContentSha256(item.item_id), + version: item.version, + title_sha256: knowledgeGuardedContentSha256(item.title), + content_sha256: item.content_hash, + url_sha256: item.url === null ? null : knowledgeGuardedContentSha256(item.url), + tags_sha256: knowledgeGuardedDigest(item.tags), + metadata_sha256: knowledgeGuardedDigest(item.metadata), + archived: item.archived, + record_kind: "historical", + matched_value_sha256: matchedValue === null ? null : knowledgeGuardedContentSha256(matchedValue) + }); +} function evaluateKnowledgeGuardedManifestCompletion(steps) { if (steps.length === 0 || steps.some((step) => step.state === "unverified_external_authority" || step.recovery_state === "unverified_external_authority")) { return { terminal_complete: false, accepted_complete: false }; @@ -1239,6 +1357,9 @@ function knowledgeGuardedUtf8Bytes(value) { return Buffer.byteLength(JSON.stringify(value), "utf8"); } +// src/query-contract.ts +var KNOWLEDGE_BOUNDED_QUERY_CAPABILITY = "hasna.knowledge.bounded-query.v1"; + // src/serve.ts var KNOWLEDGE_SERVE_APP = "knowledge"; function normalizeCloudDatabaseUrl(env = process.env) { @@ -1262,7 +1383,7 @@ function resolveVersion() { const pkg = JSON.parse(readFileSync2(url, "utf8")); return pkg.version ?? "0.0.0"; } catch { - return process.env.npm_package_version ?? "0.0.0"; + return "0.0.0"; } } function resolveSigningSecret(env = process.env) { @@ -1296,6 +1417,13 @@ function parseJsonColumn(value, fallback) { } return value; } +function boundedInteger(value, fallback, field, minimum, maximum) { + const resolved = value ?? fallback; + if (!Number.isFinite(resolved) || !Number.isInteger(resolved) || resolved < minimum || resolved > maximum) { + throw new HttpError(400, `${field} must be an integer between ${minimum} and ${maximum}.`); + } + return resolved; +} function rowToVersion(row) { return { id: String(row.id), @@ -1365,6 +1493,13 @@ class NoteRepo { } const now = new Date().toISOString(); const suppliedId = typeof input.id === "string" ? input.id.trim() : ""; + if (input.metadata) { + try { + assertKnowledgeRelationsMetadata(input.metadata, suppliedId || undefined); + } catch (error) { + throw new HttpError(400, error instanceof Error ? error.message : "invalid relation metadata."); + } + } if (suppliedId) { const guarded = await this.client.get(`SELECT TRUE AS guarded FROM knowledge_items WHERE id = $1 AND authority_classification IS NOT NULL @@ -1410,8 +1545,8 @@ class NoteRepo { return rowToItem(row); } async list(options = {}, guardedTenantId) { - const limit = Math.min(Math.max(options.limit ?? 50, 1), 200); - const offset = Math.max(options.offset ?? 0, 0); + const limit = boundedInteger(options.limit, 50, "limit", 1, 200); + const offset = boundedInteger(options.offset, 0, "offset", 0, 1e4); const params = []; const where = []; if (guardedTenantId) { @@ -1420,21 +1555,88 @@ class NoteRepo { } else { where.push("authority_classification IS NULL"); } - if (!options.includeArchived) + const archive = options.archive ?? "active"; + if (archive === "active") where.push("archived = FALSE"); - const search = options.search?.trim(); - let tsQueryExpr = null; - if (search) { - params.push(search); - tsQueryExpr = `websearch_to_tsquery('english', $${params.length})`; - where.push(`search_vector @@ ${tsQueryExpr}`); + else if (archive === "archived") + where.push("archived = TRUE"); + const filter = options.filter?.trim(); + if (filter) { + params.push(filter); + const position = params.length; + where.push(`(strpos(LOWER(id), LOWER($${position})) > 0 + OR strpos(LOWER(title), LOWER($${position})) > 0 + OR strpos(LOWER(content), LOWER($${position})) > 0)`); + } + for (const raw of options.tags ?? []) { + const whole = raw.trim().toLowerCase(); + const parts = raw.split(",").map((tag) => tag.trim().toLowerCase()).filter(Boolean); + const tagPredicates = []; + if (whole) { + params.push(whole); + tagPredicates.push(`EXISTS ( + SELECT 1 FROM jsonb_array_elements_text(tags) AS item_tag + WHERE LOWER(item_tag) = $${params.length} + )`); + } + if (parts.length > 0) { + const partPredicates = parts.map((part) => { + params.push(part); + return `EXISTS ( + SELECT 1 FROM jsonb_array_elements_text(tags) AS item_tag + WHERE LOWER(item_tag) = $${params.length} + )`; + }); + tagPredicates.push(`(${partPredicates.join(" AND ")})`); + } + if (tagPredicates.length > 0) + where.push(`(${tagPredicates.join(" OR ")})`); } const whereSql = where.length ? `WHERE ${where.join(" AND ")}` : ""; - const orderSql = tsQueryExpr ? `ORDER BY ts_rank_cd(search_vector, ${tsQueryExpr}) DESC, created_at DESC` : "ORDER BY created_at DESC"; + const sortColumn = options.sort === "title" ? "title" : "created_at"; + const direction = options.direction === "desc" ? "DESC" : "ASC"; + const orderSql = `ORDER BY ${sortColumn} ${direction}, id ${direction}`; const totalRow = await this.client.get(`SELECT count(*)::text AS count FROM knowledge_items ${whereSql}`, params); const rows = await this.client.many(`SELECT * FROM knowledge_items ${whereSql} ${orderSql} LIMIT ${limit} OFFSET ${offset}`, params); return { items: rows.map(rowToItem), total: Number(totalRow?.count ?? 0) }; } + async search(options, guardedTenantId) { + const query2 = options.query.trim(); + if (!query2) + throw new HttpError(400, "q is required"); + const limit = boundedInteger(options.limit, 20, "limit", 1, 200); + const offset = boundedInteger(options.offset, 0, "offset", 0, 1e4); + const params = []; + const where = []; + if (guardedTenantId) { + params.push(guardedTenantId); + where.push(`(authority_classification IS NULL OR tenant_id = $${params.length})`); + } else { + where.push("authority_classification IS NULL"); + } + const archive = options.archive ?? "active"; + if (archive === "active") + where.push("archived = FALSE"); + else if (archive === "archived") + where.push("archived = TRUE"); + params.push(query2); + const tsQueryExpr = `websearch_to_tsquery('english', $${params.length})`; + where.push(`search_vector @@ ${tsQueryExpr}`); + const whereSql = `WHERE ${where.join(" AND ")}`; + const totalRow = await this.client.get(`SELECT count(*)::text AS count FROM knowledge_items ${whereSql}`, params); + const rows = await this.client.many(`SELECT *, ts_rank_cd(search_vector, ${tsQueryExpr}) AS search_rank + FROM knowledge_items + ${whereSql} + ORDER BY search_rank DESC, created_at DESC, id ASC + LIMIT ${limit} OFFSET ${offset}`, params); + return { + items: rows.map((row) => ({ + item: rowToItem(row), + rank: Number(row.search_rank ?? 0) + })), + total: Number(totalRow?.count ?? 0) + }; + } async get(idOrShort, guardedTenantId) { const guardedVisibility = guardedTenantId ? "AND (authority_classification IS NULL OR tenant_id = $2)" : "AND authority_classification IS NULL"; const row = await this.client.get(`SELECT * FROM knowledge_items @@ -1447,6 +1649,13 @@ class NoteRepo { const existing = await this.get(idOrShort); if (!existing) return null; + if (patch.metadata !== undefined) { + try { + assertKnowledgeRelationsMetadata(patch.metadata, existing.id); + } catch (error) { + throw new HttpError(400, error instanceof Error ? error.message : "invalid relation metadata."); + } + } const sets = []; const params = []; const push = (col, val, cast = "") => { @@ -1609,6 +1818,15 @@ function rowToGuardedReceipt(row) { function rowMatchesGuardedBinding(row, binding) { return row.authority_classification === binding.authority.classification && row.authority_id === binding.authority.authority_id && row.tenant_id === binding.tenant_id && row.scope === binding.scope && row.parent_id === binding.parent_id; } +function guardedRelationTargets(payload) { + if (!("metadata" in payload) || !payload.metadata) + return []; + const relation = payload.metadata[KNOWLEDGE_RELATIONS_METADATA_KEY]; + if (!relation || typeof relation !== "object" || Array.isArray(relation)) + return []; + const value = relation; + return [value.supersedes_item_id, value.canonical_item_id].filter((target) => typeof target === "string"); +} function rowToManifestStep(row) { return { ordinal: Number(row.ordinal), @@ -2367,6 +2585,32 @@ class GuardedWriteRepo { duplicate: true }; } + for (const targetId of guardedRelationTargets(envelope.payload)) { + const target = await tx.get(`SELECT id FROM knowledge_items + WHERE id = $1 + AND authority_classification = $2 + AND authority_id = $3 + AND tenant_id = $4 + AND scope = $5 + AND parent_id = $6 + LIMIT 1`, [ + targetId, + binding.authority.classification, + binding.authority.authority_id, + binding.tenant_id, + binding.scope, + binding.parent_id + ]); + if (!target) { + const receipt2 = await this.finish(tx, envelope, "rejected", "relation_binding_mismatch", null); + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + deterministic_key: envelope.deterministic_key, + receipt: receipt2, + duplicate: false + }; + } + } if (descriptor.verb === "create") { const payload = envelope.payload; const now = new Date().toISOString(); @@ -2610,6 +2854,162 @@ class GuardedWriteRepo { limits }; } + async query(selector, selectorDigest, archive, page, binding, limits) { + if (selector.kind === "semantic_overlap") { + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + exact: true, + bounded: true, + private: true, + query_kind: selector.kind, + status: "unavailable", + code: "semantic_query_unavailable", + binding, + selector_digest: selectorDigest, + total: 0, + item_count: 0, + page: { + limit: page.limit, + offset: page.offset, + returned: 0, + has_more: false + }, + items: [], + limits + }; + } + const bindingParams = [ + binding.authority.classification, + binding.authority.authority_id, + binding.tenant_id, + binding.scope, + binding.parent_id + ]; + const currentWhere = [ + "authority_classification = $1", + "authority_id = $2", + "tenant_id = $3", + "scope = $4", + "parent_id = $5" + ]; + if (archive === "active") + currentWhere.push("archived = FALSE"); + else if (archive === "archived") + currentWhere.push("archived = TRUE"); + let currentOrder = "ORDER BY id ASC"; + let matchedValue; + if (selector.kind === "historical_version") { + const params = [...bindingParams, selector.item_id, selector.version]; + const historyWhere = [ + "i.authority_classification = $1", + "i.authority_id = $2", + "i.tenant_id = $3", + "i.scope = $4", + "i.parent_id = $5", + "v.item_id = $6", + "v.version = $7" + ]; + if (archive === "active") + historyWhere.push("v.archived = FALSE"); + else if (archive === "archived") + historyWhere.push("v.archived = TRUE"); + const whereSql2 = `WHERE ${historyWhere.join(" AND ")}`; + const totalRow2 = await this.client.get(`SELECT count(*)::text AS count + FROM knowledge_item_versions v + JOIN knowledge_items i ON i.id = v.item_id + ${whereSql2}`, params); + const rows2 = await this.client.many(`SELECT v.* + FROM knowledge_item_versions v + JOIN knowledge_items i ON i.id = v.item_id + ${whereSql2} + ORDER BY v.version ASC + LIMIT ${page.limit} OFFSET ${page.offset}`, params); + const total2 = Number(totalRow2?.count ?? 0); + const items2 = rows2.map((row) => knowledgePrivateHistoricalQueryItemProof(rowToVersion(row), selector.item_id)); + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + exact: true, + bounded: true, + private: true, + query_kind: selector.kind, + status: "available", + code: null, + binding, + selector_digest: selectorDigest, + total: total2, + item_count: items2.length, + page: { + limit: page.limit, + offset: page.offset, + returned: items2.length, + has_more: page.offset + items2.length < total2 + }, + items: items2, + limits + }; + } + switch (selector.kind) { + case "exact_title": + bindingParams.push(selector.title); + currentWhere.push(`title = $${bindingParams.length}`); + matchedValue = selector.title; + break; + case "lexical_overlap": { + bindingParams.push(selector.query); + const tsQuery = `websearch_to_tsquery('english', $${bindingParams.length})`; + currentWhere.push(`search_vector @@ ${tsQuery}`); + currentOrder = `ORDER BY ts_rank_cd(search_vector, ${tsQuery}) DESC, id ASC`; + matchedValue = selector.query; + break; + } + case "supersession": + bindingParams.push(KNOWLEDGE_RELATIONS_SCHEMA, selector.supersedes_item_id); + currentWhere.push(`metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},schema}' = $${bindingParams.length - 1}`, `metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},supersedes_item_id}' = $${bindingParams.length}`); + matchedValue = selector.supersedes_item_id; + break; + case "current_version": + bindingParams.push(selector.item_id); + currentWhere.push(`id = $${bindingParams.length}`); + matchedValue = selector.item_id; + break; + case "canonical_pointer": + bindingParams.push(KNOWLEDGE_RELATIONS_SCHEMA, selector.canonical_item_id); + currentWhere.push(`metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},schema}' = $${bindingParams.length - 1}`, `metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},canonical_item_id}' = $${bindingParams.length}`); + matchedValue = selector.canonical_item_id; + break; + default: + throw new HttpError(400, "private query selector kind is unsupported."); + } + const whereSql = `WHERE ${currentWhere.join(" AND ")}`; + const totalRow = await this.client.get(`SELECT count(*)::text AS count FROM knowledge_items ${whereSql}`, bindingParams); + const rows = await this.client.many(`SELECT * FROM knowledge_items + ${whereSql} + ${currentOrder} + LIMIT ${page.limit} OFFSET ${page.offset}`, bindingParams); + const total = Number(totalRow?.count ?? 0); + const items = rows.map((row) => knowledgePrivateQueryItemProof(rowToItem(row), matchedValue)); + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + exact: true, + bounded: true, + private: true, + query_kind: selector.kind, + status: "available", + code: null, + binding, + selector_digest: selectorDigest, + total, + item_count: items.length, + page: { + limit: page.limit, + offset: page.offset, + returned: items.length, + has_more: page.offset + items.length < total + }, + items, + limits + }; + } async readback(fullId, binding, limits) { const row = await this.client.get(`SELECT * FROM knowledge_items WHERE id = $1 @@ -2870,9 +3270,35 @@ function knowledgeOpenApi(version) { type: "object", properties: { items: { type: "array", items: { $ref: "#/components/schemas/Note" } }, - total: { type: "integer" } + total: { type: "integer" }, + query_capability: { + type: "string", + enum: [KNOWLEDGE_BOUNDED_QUERY_CAPABILITY] + } + }, + required: ["items", "total", "query_capability"] + }, + NoteSearchList: { + type: "object", + properties: { + items: { + type: "array", + items: { + type: "object", + properties: { + item: { $ref: "#/components/schemas/Note" }, + rank: { type: "number" } + }, + required: ["item", "rank"] + } + }, + total: { type: "integer" }, + query_capability: { + type: "string", + enum: [KNOWLEDGE_BOUNDED_QUERY_CAPABILITY] + } }, - required: ["items", "total"] + required: ["items", "total", "query_capability"] }, NoteVersionList: { type: "object", @@ -2891,14 +3317,42 @@ function knowledgeOpenApi(version) { "/v1/notes": { get: { operationId: "listNotes", - summary: "List knowledge items", + summary: "List knowledge items with literal filters and bounded paging", parameters: [ { name: "limit", in: "query", schema: { type: "integer" } }, { name: "offset", in: "query", schema: { type: "integer" } }, - { name: "search", in: "query", schema: { type: "string" } } + { name: "filter", in: "query", schema: { type: "string" } }, + { + name: "search", + in: "query", + deprecated: true, + description: "Legacy alias for filter.", + schema: { type: "string" } + }, + { + name: "tags", + in: "query", + style: "form", + explode: true, + schema: { type: "array", items: { type: "string" } } + }, + { name: "archive", in: "query", schema: { type: "string", enum: ["active", "archived", "all"] } }, + { + name: "includeArchived", + in: "query", + deprecated: true, + description: "Legacy alias: true maps to archive=all.", + schema: { type: "boolean" } + }, + { name: "sort", in: "query", schema: { type: "string", enum: ["created", "title"] } }, + { name: "direction", in: "query", schema: { type: "string", enum: ["asc", "desc"] } } ], responses: { - "200": { content: { "application/json": { schema: { $ref: "#/components/schemas/NoteList" } } } } + "200": { + content: { + "application/json": { schema: { $ref: "#/components/schemas/NoteList" } } + } + } } }, post: { @@ -2913,6 +3367,25 @@ function knowledgeOpenApi(version) { } } }, + "/v1/notes/search": { + get: { + operationId: "searchNotes", + summary: "Ranked PostgreSQL full-text query with bounded paging", + parameters: [ + { name: "q", in: "query", required: true, schema: { type: "string" } }, + { name: "limit", in: "query", schema: { type: "integer" } }, + { name: "offset", in: "query", schema: { type: "integer" } }, + { name: "archive", in: "query", schema: { type: "string", enum: ["active", "archived", "all"] } } + ], + responses: { + "200": { + content: { + "application/json": { schema: { $ref: "#/components/schemas/NoteSearchList" } } + } + } + } + } + }, "/v1/notes/{id}": { get: { operationId: "getNote", @@ -3071,6 +3544,29 @@ function knowledgeOpenApi(version) { } } }, + "/v1/guarded-writes/queries": { + post: { + operationId: "queryGuardedKnowledge", + summary: "Bounded private Knowledge query under one frozen FCAME-1 binding", + description: "The raw selector exists only in this authenticated request body. " + "The response contains hashes, versions, page evidence, and no raw selector or item id.", + requestBody: { + required: true, + content: { + "application/json": { + schema: { + type: "object", + required: ["contract", "descriptor", "selector", "limits"], + additionalProperties: false + } + } + } + }, + responses: { + "200": { description: "Exact bounded private result or typed semantic unavailability." }, + "400": { description: "Descriptor, selector, binding digest, page, or bounds mismatch." } + } + } + }, "/v1/guarded-writes/receipts/{deterministicKey}": { get: { operationId: "reconcileGuardedKnowledgeWrite", @@ -3196,6 +3692,20 @@ function guardedBoundsFromHeaders(req) { } return bounds; } +function privateQueryBoundsFromHeaders(req) { + const bounds = { + max_calls: parsePositiveInteger(req.headers.get("x-knowledge-max-calls"), "x-knowledge-max-calls"), + max_items: parsePositiveInteger(req.headers.get("x-knowledge-max-items"), "x-knowledge-max-items"), + max_bytes: parsePositiveInteger(req.headers.get("x-knowledge-max-bytes"), "x-knowledge-max-bytes"), + wall_time_ms: parsePositiveInteger(req.headers.get("x-knowledge-wall-time-ms"), "x-knowledge-wall-time-ms") + }; + try { + assertKnowledgePrivateQueryBounds(bounds); + } catch (error) { + throw new HttpError(400, error instanceof Error ? error.message : "invalid private query bounds."); + } + return bounds; +} function guardedBoundsFromQuery(req, url) { const fromHeaders = guardedBoundsFromHeaders(req); const fromQuery = { @@ -3322,6 +3832,9 @@ function validateGuardedEnvelope(value, headerBounds, authority, idempotencyKey) assertConfiguredAuthority(descriptor.binding, authority); assertKnowledgeGuardedPrecondition(descriptor.verb, descriptor.precondition); assertKnowledgeGuardedPayload(descriptor.verb, envelope.payload); + if ("metadata" in envelope.payload && envelope.payload.metadata) { + assertKnowledgeRelationsMetadata(envelope.payload.metadata, descriptor.target_id); + } const limits = normalizeKnowledgeGuardedLimits(envelope.limits); if (canonicalKnowledgeGuardedJson(limits) !== canonicalKnowledgeGuardedJson(envelope.limits)) { throw new Error("guarded-write limits must be explicit and complete."); @@ -3430,6 +3943,78 @@ function validatePrivateTitleLookupEnvelope(value, headerBounds, authority) { throw new HttpError(400, error instanceof Error ? error.message : "invalid private title lookup envelope."); } } +function validatePrivateQueryEnvelope(value, headerBounds, authority) { + try { + if (!value || typeof value !== "object") { + throw new Error("private query envelope is required."); + } + const envelope = value; + assertExactRequestKeys(value, "private query envelope", ["contract", "descriptor", "selector", "limits"]); + if (envelope.contract !== KNOWLEDGE_GUARDED_WRITE_CONTRACT) { + throw new Error("unsupported guarded-write contract."); + } + const descriptor = envelope.descriptor; + if (!descriptor || descriptor.contract !== KNOWLEDGE_GUARDED_WRITE_CONTRACT || descriptor.schema !== KNOWLEDGE_PRIVATE_QUERY_SCHEMA) { + throw new Error("invalid private query descriptor schema."); + } + assertExactRequestKeys(descriptor, "private query descriptor", [ + "contract", + "schema", + "operation_id", + "step_id", + "query_kind", + "selector_digest", + "binding_digest", + "binding", + "archive", + "page", + "expires_at" + ]); + if (typeof descriptor.operation_id !== "string" || descriptor.operation_id.length === 0 || typeof descriptor.step_id !== "string" || descriptor.step_id.length === 0 || !["active", "archived", "all"].includes(descriptor.archive)) { + throw new Error("private query operation, step, and archive mode are required."); + } + const descriptorExpiresAt = Date.parse(descriptor.expires_at); + const descriptorNow = Date.now(); + if (!Number.isFinite(descriptorExpiresAt) || descriptorExpiresAt <= descriptorNow || descriptorExpiresAt > descriptorNow + 60 * 60 * 1000) { + throw new Error("private query descriptor is expired or malformed."); + } + assertKnowledgeGuardedBinding(descriptor.binding); + assertConfiguredAuthority(descriptor.binding, authority); + assertKnowledgePrivateQueryBounds(envelope.limits); + assertKnowledgePrivateQueryPage(descriptor.page, envelope.limits); + if (canonicalKnowledgeGuardedJson(envelope.limits) !== canonicalKnowledgeGuardedJson(headerBounds)) { + throw new Error("private query limits must exactly match the producer bound headers."); + } + assertKnowledgePrivateQuerySelector(envelope.selector); + if (envelope.selector.kind !== descriptor.query_kind) { + throw new Error("private query selector kind does not match the frozen descriptor."); + } + const selectorDigest = knowledgeGuardedDigest(envelope.selector); + if (selectorDigest !== descriptor.selector_digest) { + throw new Error("private query selector digest does not match the frozen descriptor."); + } + const bindingDigest = knowledgeGuardedDigest({ + binding: descriptor.binding, + operation_id: descriptor.operation_id, + step_id: descriptor.step_id, + query_kind: descriptor.query_kind, + selector_digest: descriptor.selector_digest, + archive: descriptor.archive, + page: descriptor.page + }); + if (bindingDigest !== descriptor.binding_digest) { + throw new Error("private query binding digest does not match."); + } + if (knowledgeGuardedUtf8Bytes(envelope) > headerBounds.max_bytes) { + throw new Error("private query envelope exceeds the producer byte cap."); + } + return envelope; + } catch (error) { + if (error instanceof HttpError) + throw error; + throw new HttpError(400, error instanceof Error ? error.message : "invalid private query envelope."); + } +} function validateGuardedAdoptionEnvelope(value, headerBounds, authority, idempotencyKey) { try { if (!value || typeof value !== "object") { @@ -3746,6 +4331,24 @@ function createServeHandler(deps) { throw error; } } + if (path === "/v1/guarded-writes/queries" && method === "POST") { + if (!guardedRepo) { + return json({ error: "guarded_authority_unconfigured" }, 503); + } + const startedAt = Date.now(); + const tenantId = req.headers.get("x-knowledge-tenant-id"); + if (!tenantId) + throw new HttpError(400, "x-knowledge-tenant-id is required."); + await authOrThrow(req, ["knowledge:read"], tenantId); + const bounds = privateQueryBoundsFromHeaders(req); + const raw = await readBoundedJson(req, bounds, startedAt); + const envelope = validatePrivateQueryEnvelope(raw, bounds, guardedRepo.authority); + if (envelope.descriptor.binding.tenant_id !== tenantId) { + throw new HttpError(403, "descriptor tenant does not match the authenticated request tenant."); + } + const result = await guardedRepo.query(envelope.selector, envelope.descriptor.selector_digest, envelope.descriptor.archive, envelope.descriptor.page, envelope.descriptor.binding, bounds); + return boundedJson(result, 200, bounds, startedAt); + } const guardedReceiptMatch = path.match(/^\/v1\/guarded-writes\/receipts\/([^/]+)$/); if (guardedReceiptMatch) { if (method !== "GET") @@ -3779,16 +4382,50 @@ function createServeHandler(deps) { const readback = await guardedRepo.readback(decodeURIComponent(guardedItemMatch[1]), binding, bounds); return readback ? boundedJson(readback, 200, bounds, startedAt) : boundedJson({ error: "not_found" }, 404, bounds, startedAt); } + if (path === "/v1/notes/search") { + if (method !== "GET") + return json({ error: "method_not_allowed" }, 405); + const principal = await authOrThrow(req, ["knowledge:read"]); + const query2 = url.searchParams.get("q") ?? ""; + const archiveRaw = url.searchParams.get("archive") ?? "active"; + if (!["active", "archived", "all"].includes(archiveRaw)) { + throw new HttpError(400, "archive must be active, archived, or all."); + } + const result = await repo.search({ + query: query2, + archive: archiveRaw, + limit: url.searchParams.has("limit") ? Number(url.searchParams.get("limit")) : undefined, + offset: url.searchParams.has("offset") ? Number(url.searchParams.get("offset")) : undefined + }, principal.tid); + return json({ ...result, query_capability: KNOWLEDGE_BOUNDED_QUERY_CAPABILITY }); + } if (path === "/v1/notes") { if (method === "GET") { const principal = await authOrThrow(req, ["knowledge:read"]); + const includeArchived = url.searchParams.get("includeArchived") === "true"; + const archiveRaw = url.searchParams.get("archive") ?? (includeArchived ? "all" : "active"); + const sortRaw = url.searchParams.get("sort") ?? "created"; + const directionRaw = url.searchParams.get("direction") ?? "asc"; + if (!["active", "archived", "all"].includes(archiveRaw)) { + throw new HttpError(400, "archive must be active, archived, or all."); + } + if (!["created", "title"].includes(sortRaw)) { + throw new HttpError(400, "sort must be created or title."); + } + if (!["asc", "desc"].includes(directionRaw)) { + throw new HttpError(400, "direction must be asc or desc."); + } + const tags = url.searchParams.getAll("tags"); const result = await repo.list({ limit: url.searchParams.has("limit") ? Number(url.searchParams.get("limit")) : undefined, offset: url.searchParams.has("offset") ? Number(url.searchParams.get("offset")) : undefined, - search: url.searchParams.get("search") ?? undefined, - includeArchived: url.searchParams.get("includeArchived") === "true" + filter: url.searchParams.get("filter") ?? url.searchParams.get("search") ?? undefined, + tags: tags.length > 0 ? tags : undefined, + archive: archiveRaw, + sort: sortRaw, + direction: directionRaw }, principal.tid); - return json(result); + return json({ ...result, query_capability: KNOWLEDGE_BOUNDED_QUERY_CAPABILITY }); } if (method === "POST") { const principal = await authOrThrow(req, ["knowledge:write"]); diff --git a/bin/knowledge.js b/bin/knowledge.js index d337709..c54dfa5 100755 --- a/bin/knowledge.js +++ b/bin/knowledge.js @@ -1,9 +1,9 @@ #!/usr/bin/env bun // @bun -var e8=Object.create;var{getPrototypeOf:a8,defineProperty:BN,getOwnPropertyNames:s8}=Object;var _Y=Object.prototype.hasOwnProperty;function $Y(_){return this[_]}var DY,gY,UY=(_,$,D)=>{var U=_!=null&&typeof _==="object";if(U){var g=$?DY??=new WeakMap:gY??=new WeakMap,I=g.get(_);if(I)return I}D=_!=null?e8(a8(_)):{};let j=$||!_||!_.__esModule?BN(D,"default",{value:_,enumerable:!0}):D;for(let N of s8(_))if(!_Y.call(j,N))BN(j,N,{get:$Y.bind(_,N),enumerable:!0});if(U)g.set(_,j);return j};var e6=(_,$)=>()=>($||_(($={exports:{}}).exports,$),$.exports);var IY=(_)=>_;function jY(_,$){this[_]=IY.bind(null,$)}var v$=(_,$)=>{for(var D in $)BN(_,D,{get:$[D],enumerable:!0,configurable:!0,set:jY.bind($,D)})};var f=(_,$)=>()=>(_&&($=_(_=0)),$);var O_=import.meta.require;function Y(_,$,D){function U(N,O){if(!N._zod)Object.defineProperty(N,"_zod",{value:{def:O,constr:j,traits:new Set},enumerable:!1});if(N._zod.traits.has(_))return;N._zod.traits.add(_),$(N,O);let A=j.prototype,L=Object.keys(A);for(let z=0;z{if(D?.Parent&&N instanceof D.Parent)return!0;return N?._zod?.traits?.has(_)}}),Object.defineProperty(j,"name",{value:_}),j}function Z_(_){if(_)Object.assign(A4,_);return A4}var qX,RI,GI,x$,L4,A4;var J4=f(()=>{RI=Object.freeze({status:"aborted"});GI=Symbol("zod_brand");x$=class x$ extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}};L4=class L4 extends Error{constructor(_){super(`Encountered unidirectional transform during encode: ${_}`);this.name="ZodEncodeError"}};(qX=globalThis).__zod_globalConfig??(qX.__zod_globalConfig={});A4=globalThis.__zod_globalConfig});var H={};v$(H,{unwrapMessage:()=>pD,uint8ArrayToHex:()=>YV,uint8ArrayToBase64url:()=>RV,uint8ArrayToBase64:()=>KX,stringifyPrimitive:()=>F,slugify:()=>hE,shallowClone:()=>nE,safeExtend:()=>JV,required:()=>SV,randomString:()=>IV,propertyKeyTypes:()=>sD,promiseAllObject:()=>UV,primitiveTypes:()=>dE,prefixIssues:()=>s_,pick:()=>OV,partial:()=>zV,parsedType:()=>M,optionalKeys:()=>mE,omit:()=>AV,objectClone:()=>$V,numKeys:()=>jV,nullish:()=>M6,normalizeParams:()=>C,mergeDefs:()=>g6,merge:()=>PV,jsonStringifyReplacer:()=>K0,joinValues:()=>B,issue:()=>M0,isPlainObject:()=>b6,isObject:()=>P4,hexToUint8Array:()=>GV,getSizableOrigin:()=>_g,getParsedType:()=>NV,getLengthableOrigin:()=>$g,getEnumValues:()=>eD,getElementAtPath:()=>gV,floatSafeRemainder:()=>yE,finalizeIssue:()=>l_,extend:()=>LV,explicitlyAborted:()=>tE,escapeRegex:()=>P$,esc:()=>YI,defineLazy:()=>$_,createTransparentProxy:()=>EV,cloneDef:()=>DV,clone:()=>y_,cleanRegex:()=>aD,cleanEnum:()=>WV,captureStackTrace:()=>QI,cached:()=>F0,base64urlToUint8Array:()=>XV,base64ToUint8Array:()=>VX,assignProp:()=>Z6,assertNotEqual:()=>eB,assertNever:()=>sB,assertIs:()=>aB,assertEqual:()=>pB,assert:()=>_V,allowsEval:()=>cE,aborted:()=>H6,NUMBER_FORMAT_RANGES:()=>iE,Class:()=>FX,BIGINT_FORMAT_RANGES:()=>lE});function pB(_){return _}function eB(_){return _}function aB(_){}function sB(_){throw Error("Unexpected value in exhaustive check")}function _V(_){}function eD(_){let $=Object.values(_).filter((U)=>typeof U==="number");return Object.entries(_).filter(([U,g])=>$.indexOf(+U)===-1).map(([U,g])=>g)}function B(_,$="|"){return _.map((D)=>F(D)).join($)}function K0(_,$){if(typeof $==="bigint")return $.toString();return $}function F0(_){return{get value(){{let D=_();return Object.defineProperty(this,"value",{value:D}),D}throw Error("cached value already set")}}}function M6(_){return _===null||_===void 0}function aD(_){let $=_.startsWith("^")?1:0,D=_.endsWith("$")?_.length-1:_.length;return _.slice($,D)}function yE(_,$){let D=_/$,U=Math.round(D),g=Number.EPSILON*Math.max(Math.abs(D),1);if(Math.abs(D-U)D?.[U],_)}function UV(_){let $=Object.keys(_),D=$.map((U)=>_[U]);return Promise.all(D).then((U)=>{let g={};for(let I=0;I<$.length;I++)g[$[I]]=U[I];return g})}function IV(_=10){let D="";for(let U=0;U<_;U++)D+="abcdefghijklmnopqrstuvwxyz"[Math.floor(Math.random()*26)];return D}function YI(_){return JSON.stringify(_)}function hE(_){return _.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function P4(_){return typeof _==="object"&&_!==null&&!Array.isArray(_)}function b6(_){if(P4(_)===!1)return!1;let $=_.constructor;if($===void 0)return!0;if(typeof $!=="function")return!0;let D=$.prototype;if(P4(D)===!1)return!1;if(Object.prototype.hasOwnProperty.call(D,"isPrototypeOf")===!1)return!1;return!0}function nE(_){if(b6(_))return{..._};if(Array.isArray(_))return[..._];if(_ instanceof Map)return new Map(_);if(_ instanceof Set)return new Set(_);return _}function jV(_){let $=0;for(let D in _)if(Object.prototype.hasOwnProperty.call(_,D))$++;return $}function P$(_){return _.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function y_(_,$,D){let U=new _._zod.constr($??_._zod.def);if(!$||D?.parent)U._zod.parent=_;return U}function C(_){let $=_;if(!$)return{};if(typeof $==="string")return{error:()=>$};if($?.message!==void 0){if($?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");$.error=$.message}if(delete $.message,typeof $.error==="string")return{...$,error:()=>$.error};return $}function EV(_){let $;return new Proxy({},{get(D,U,g){return $??($=_()),Reflect.get($,U,g)},set(D,U,g,I){return $??($=_()),Reflect.set($,U,g,I)},has(D,U){return $??($=_()),Reflect.has($,U)},deleteProperty(D,U){return $??($=_()),Reflect.deleteProperty($,U)},ownKeys(D){return $??($=_()),Reflect.ownKeys($)},getOwnPropertyDescriptor(D,U){return $??($=_()),Reflect.getOwnPropertyDescriptor($,U)},defineProperty(D,U,g){return $??($=_()),Reflect.defineProperty($,U,g)}})}function F(_){if(typeof _==="bigint")return _.toString()+"n";if(typeof _==="string")return`"${_}"`;return`${_}`}function mE(_){return Object.keys(_).filter(($)=>{return _[$]._zod.optin==="optional"&&_[$]._zod.optout==="optional"})}function OV(_,$){let D=_._zod.def,U=D.checks;if(U&&U.length>0)throw Error(".pick() cannot be used on object schemas containing refinements");let I=g6(_._zod.def,{get shape(){let j={};for(let N in $){if(!(N in D.shape))throw Error(`Unrecognized key: "${N}"`);if(!$[N])continue;j[N]=D.shape[N]}return Z6(this,"shape",j),j},checks:[]});return y_(_,I)}function AV(_,$){let D=_._zod.def,U=D.checks;if(U&&U.length>0)throw Error(".omit() cannot be used on object schemas containing refinements");let I=g6(_._zod.def,{get shape(){let j={..._._zod.def.shape};for(let N in $){if(!(N in D.shape))throw Error(`Unrecognized key: "${N}"`);if(!$[N])continue;delete j[N]}return Z6(this,"shape",j),j},checks:[]});return y_(_,I)}function LV(_,$){if(!b6($))throw Error("Invalid input to extend: expected a plain object");let D=_._zod.def.checks;if(D&&D.length>0){let I=_._zod.def.shape;for(let j in $)if(Object.getOwnPropertyDescriptor(I,j)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}let g=g6(_._zod.def,{get shape(){let I={..._._zod.def.shape,...$};return Z6(this,"shape",I),I}});return y_(_,g)}function JV(_,$){if(!b6($))throw Error("Invalid input to safeExtend: expected a plain object");let D=g6(_._zod.def,{get shape(){let U={..._._zod.def.shape,...$};return Z6(this,"shape",U),U}});return y_(_,D)}function PV(_,$){if(_._zod.def.checks?.length)throw Error(".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.");let D=g6(_._zod.def,{get shape(){let U={..._._zod.def.shape,...$._zod.def.shape};return Z6(this,"shape",U),U},get catchall(){return $._zod.def.catchall},checks:$._zod.def.checks??[]});return y_(_,D)}function zV(_,$,D){let g=$._zod.def.checks;if(g&&g.length>0)throw Error(".partial() cannot be used on object schemas containing refinements");let j=g6($._zod.def,{get shape(){let N=$._zod.def.shape,O={...N};if(D)for(let A in D){if(!(A in N))throw Error(`Unrecognized key: "${A}"`);if(!D[A])continue;O[A]=_?new _({type:"optional",innerType:N[A]}):N[A]}else for(let A in N)O[A]=_?new _({type:"optional",innerType:N[A]}):N[A];return Z6(this,"shape",O),O},checks:[]});return y_($,j)}function SV(_,$,D){let U=g6($._zod.def,{get shape(){let g=$._zod.def.shape,I={...g};if(D)for(let j in D){if(!(j in I))throw Error(`Unrecognized key: "${j}"`);if(!D[j])continue;I[j]=new _({type:"nonoptional",innerType:g[j]})}else for(let j in g)I[j]=new _({type:"nonoptional",innerType:g[j]});return Z6(this,"shape",I),I}});return y_($,U)}function H6(_,$=0){if(_.aborted===!0)return!0;for(let D=$;D<_.issues.length;D++)if(_.issues[D]?.continue!==!0)return!0;return!1}function tE(_,$=0){if(_.aborted===!0)return!0;for(let D=$;D<_.issues.length;D++)if(_.issues[D]?.continue===!1)return!0;return!1}function s_(_,$){return $.map((D)=>{var U;return(U=D).path??(U.path=[]),D.path.unshift(_),D})}function pD(_){return typeof _==="string"?_:_?.message}function l_(_,$,D){let U=_.message?_.message:pD(_.inst?._zod.def?.error?.(_))??pD($?.error?.(_))??pD(D.customError?.(_))??pD(D.localeError?.(_))??"Invalid input",{inst:g,continue:I,input:j,...N}=_;if(N.path??(N.path=[]),N.message=U,$?.reportInput)N.input=j;return N}function _g(_){if(_ instanceof Set)return"set";if(_ instanceof Map)return"map";if(_ instanceof File)return"file";return"unknown"}function $g(_){if(Array.isArray(_))return"array";if(typeof _==="string")return"string";return"unknown"}function M(_){let $=typeof _;switch($){case"number":return Number.isNaN(_)?"nan":"number";case"object":{if(_===null)return"null";if(Array.isArray(_))return"array";let D=_;if(D&&Object.getPrototypeOf(D)!==Object.prototype&&"constructor"in D&&D.constructor)return D.constructor.name}}return $}function M0(..._){let[$,D,U]=_;if(typeof $==="string")return{message:$,code:"custom",input:D,inst:U};return{...$}}function WV(_){return Object.entries(_).filter(([$,D])=>{return Number.isNaN(Number.parseInt($,10))}).map(($)=>$[1])}function VX(_){let $=atob(_),D=new Uint8Array($.length);for(let U=0;U<$.length;U++)D[U]=$.charCodeAt(U);return D}function KX(_){let $="";for(let D=0;D<_.length;D++)$+=String.fromCharCode(_[D]);return btoa($)}function XV(_){let $=_.replace(/-/g,"+").replace(/_/g,"/"),D="=".repeat((4-$.length%4)%4);return VX($+D)}function RV(_){return KX(_).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function GV(_){let $=_.replace(/^0x/,"");if($.length%2!==0)throw Error("Invalid hex string length");let D=new Uint8Array($.length/2);for(let U=0;U<$.length;U+=2)D[U/2]=Number.parseInt($.slice(U,U+2),16);return D}function YV(_){return Array.from(_).map(($)=>$.toString(16).padStart(2,"0")).join("")}class FX{constructor(..._){}}var BX,QI,cE,NV=(_)=>{let $=typeof _;switch($){case"undefined":return"undefined";case"string":return"string";case"number":return Number.isNaN(_)?"nan":"number";case"boolean":return"boolean";case"function":return"function";case"bigint":return"bigint";case"symbol":return"symbol";case"object":if(Array.isArray(_))return"array";if(_===null)return"null";if(_.then&&typeof _.then==="function"&&_.catch&&typeof _.catch==="function")return"promise";if(typeof Map<"u"&&_ instanceof Map)return"map";if(typeof Set<"u"&&_ instanceof Set)return"set";if(typeof Date<"u"&&_ instanceof Date)return"date";if(typeof File<"u"&&_ instanceof File)return"file";return"object";default:throw Error(`Unknown data type: ${$}`)}},sD,dE,iE,lE;var c=f(()=>{J4();BX=Symbol("evaluating");QI="captureStackTrace"in Error?Error.captureStackTrace:(..._)=>{};cE=F0(()=>{if(A4.jitless)return!1;if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{return new Function(""),!0}catch(_){return!1}});sD=new Set(["string","number","symbol"]),dE=new Set(["string","number","bigint","boolean","symbol","undefined"]);iE={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-340282346638528860000000000000000000000,340282346638528860000000000000000000000],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},lE={int64:[BigInt("-9223372036854775808"),BigInt("9223372036854775807")],uint64:[BigInt(0),BigInt("18446744073709551615")]}});function Z0(_,$=(D)=>D.message){let D={},U=[];for(let g of _.issues)if(g.path.length>0)D[g.path[0]]=D[g.path[0]]||[],D[g.path[0]].push($(g));else U.push($(g));return{formErrors:U,fieldErrors:D}}function b0(_,$=(D)=>D.message){let D={_errors:[]},U=(g,I=[])=>{for(let j of g.issues)if(j.code==="invalid_union"&&j.errors.length)j.errors.map((N)=>U({issues:N},[...I,...j.path]));else if(j.code==="invalid_key")U({issues:j.issues},[...I,...j.path]);else if(j.code==="invalid_element")U({issues:j.issues},[...I,...j.path]);else{let N=[...I,...j.path];if(N.length===0)D._errors.push($(j));else{let O=D,A=0;while(AD.message){let D={errors:[]},U=(g,I=[])=>{var j,N;for(let O of g.issues)if(O.code==="invalid_union"&&O.errors.length)O.errors.map((A)=>U({issues:A},[...I,...O.path]));else if(O.code==="invalid_key")U({issues:O.issues},[...I,...O.path]);else if(O.code==="invalid_element")U({issues:O.issues},[...I,...O.path]);else{let A=[...I,...O.path];if(A.length===0){D.errors.push($(O));continue}let L=D,z=0;while(ztypeof U==="object"?U.key:U);for(let U of D)if(typeof U==="number")$.push(`[${U}]`);else if(typeof U==="symbol")$.push(`[${JSON.stringify(String(U))}]`);else if(/[^\w$]/.test(U))$.push(`[${JSON.stringify(U)}]`);else{if($.length)$.push(".");$.push(U)}return $.join("")}function qI(_){let $=[],D=[..._.issues].sort((U,g)=>(U.path??[]).length-(g.path??[]).length);for(let U of D)if($.push(`\u2716 ${U.message}`),U.path?.length)$.push(` \u2192 at ${ZX(U.path)}`);return $.join(` -`)}var MX=(_,$)=>{_.name="$ZodError",Object.defineProperty(_,"_zod",{value:_._zod,enumerable:!1}),Object.defineProperty(_,"issues",{value:$,enumerable:!1}),_.message=JSON.stringify($,K0,2),Object.defineProperty(_,"toString",{value:()=>_.message,enumerable:!1})},Dg,_$;var oE=f(()=>{J4();c();Dg=Y("$ZodError",MX),_$=Y("$ZodError",MX,{Parent:Error})});var H0=(_)=>($,D,U,g)=>{let I=U?{...U,async:!1}:{async:!1},j=$._zod.run({value:D,issues:[]},I);if(j instanceof Promise)throw new x$;if(j.issues.length){let N=new(g?.Err??_)(j.issues.map((O)=>l_(O,I,Z_())));throw QI(N,g?.callee),N}return j.value},BI,k0=(_)=>async($,D,U,g)=>{let I=U?{...U,async:!0}:{async:!0},j=$._zod.run({value:D,issues:[]},I);if(j instanceof Promise)j=await j;if(j.issues.length){let N=new(g?.Err??_)(j.issues.map((O)=>l_(O,I,Z_())));throw QI(N,g?.callee),N}return j.value},VI,C0=(_)=>($,D,U)=>{let g=U?{...U,async:!1}:{async:!1},I=$._zod.run({value:D,issues:[]},g);if(I instanceof Promise)throw new x$;return I.issues.length?{success:!1,error:new(_??Dg)(I.issues.map((j)=>l_(j,g,Z_())))}:{success:!0,data:I.value}},pE,v0=(_)=>async($,D,U)=>{let g=U?{...U,async:!0}:{async:!0},I=$._zod.run({value:D,issues:[]},g);if(I instanceof Promise)I=await I;return I.issues.length?{success:!1,error:new _(I.issues.map((j)=>l_(j,g,Z_())))}:{success:!0,data:I.value}},eE,KI=(_)=>($,D,U)=>{let g=U?{...U,direction:"backward"}:{direction:"backward"};return H0(_)($,D,g)},TV,FI=(_)=>($,D,U)=>{return H0(_)($,D,U)},qV,MI=(_)=>async($,D,U)=>{let g=U?{...U,direction:"backward"}:{direction:"backward"};return k0(_)($,D,g)},BV,ZI=(_)=>async($,D,U)=>{return k0(_)($,D,U)},VV,bI=(_)=>($,D,U)=>{let g=U?{...U,direction:"backward"}:{direction:"backward"};return C0(_)($,D,g)},KV,HI=(_)=>($,D,U)=>{return C0(_)($,D,U)},FV,kI=(_)=>async($,D,U)=>{let g=U?{...U,direction:"backward"}:{direction:"backward"};return v0(_)($,D,g)},MV,CI=(_)=>async($,D,U)=>{return v0(_)($,D,U)},ZV;var aE=f(()=>{J4();oE();c();BI=H0(_$),VI=k0(_$),pE=C0(_$),eE=v0(_$),TV=KI(_$),qV=FI(_$),BV=MI(_$),VV=ZI(_$),KV=bI(_$),FV=HI(_$),MV=kI(_$),ZV=CI(_$)});var $$={};v$($$,{xid:()=>D2,uuid7:()=>CV,uuid6:()=>kV,uuid4:()=>HV,uuid:()=>z4,uppercase:()=>F2,unicodeEmail:()=>bX,undefined:()=>V2,ulid:()=>$2,time:()=>R2,string:()=>Y2,sha512_hex:()=>_K,sha512_base64url:()=>DK,sha512_base64:()=>$K,sha384_hex:()=>eV,sha384_base64url:()=>sV,sha384_base64:()=>aV,sha256_hex:()=>tV,sha256_base64url:()=>pV,sha256_base64:()=>oV,sha1_hex:()=>mV,sha1_base64url:()=>lV,sha1_base64:()=>iV,rfc5322Email:()=>rV,number:()=>gg,null:()=>B2,nanoid:()=>U2,md5_hex:()=>cV,md5_base64url:()=>dV,md5_base64:()=>nV,mac:()=>L2,lowercase:()=>K2,ksuid:()=>g2,ipv6:()=>A2,ipv4:()=>O2,integer:()=>T2,idnEmail:()=>fV,httpProtocol:()=>S2,html5Email:()=>vV,hostname:()=>xV,hex:()=>hV,guid:()=>j2,extendedDuration:()=>bV,emoji:()=>E2,email:()=>N2,e164:()=>W2,duration:()=>I2,domain:()=>yV,datetime:()=>G2,date:()=>X2,cuid2:()=>_2,cuid:()=>sE,cidrv6:()=>P2,cidrv4:()=>J2,browserEmail:()=>wV,boolean:()=>q2,bigint:()=>Q2,base64url:()=>vI,base64:()=>z2});function E2(){return new RegExp(uV,"u")}function kX(_){return typeof _.precision==="number"?_.precision===-1?"(?:[01]\\d|2[0-3]):[0-5]\\d":_.precision===0?"(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d":`(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{${_.precision}}`:"(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?"}function R2(_){return new RegExp(`^${kX(_)}$`)}function G2(_){let $=kX({precision:_.precision}),D=["Z"];if(_.local)D.push("");if(_.offset)D.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");let U=`${$}(?:${D.join("|")})`;return new RegExp(`^${HX}T(?:${U})$`)}function Ug(_,$){return new RegExp(`^[A-Za-z0-9+/]{${_}}${$}$`)}function Ig(_){return new RegExp(`^[A-Za-z0-9_-]{${_}}$`)}var sE,_2,$2,D2,g2,U2,I2,bV,j2,z4=(_)=>{if(!_)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}-${_}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`)},HV,kV,CV,N2,vV,rV,bX,fV,wV,uV="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",O2,A2,L2=(_)=>{let $=P$(_??":");return new RegExp(`^(?:[0-9A-F]{2}${$}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${$}){5}[0-9a-f]{2}$`)},J2,P2,z2,vI,xV,yV,S2,W2,HX="(?:(?:\\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])))",X2,Y2=(_)=>{let $=_?`[\\s\\S]{${_?.minimum??0},${_?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${$}$`)},Q2,T2,gg,q2,B2,V2,K2,F2,hV,cV,nV,dV,mV,iV,lV,tV,oV,pV,eV,aV,sV,_K,$K,DK;var rI=f(()=>{c();sE=/^[cC][0-9a-z]{6,}$/,_2=/^[0-9a-z]+$/,$2=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,D2=/^[0-9a-vA-V]{20}$/,g2=/^[A-Za-z0-9]{27}$/,U2=/^[a-zA-Z0-9_-]{21}$/,I2=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,bV=/^[-+]?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)?)??$/,j2=/^([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})$/,HV=z4(4),kV=z4(6),CV=z4(7),N2=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,vV=/^[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])?)*$/,rV=/^(([^<>()\[\]\\.,;:\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,}))$/,bX=/^[^\s@"]{1,64}@[^\s@]{1,255}$/u,fV=bX,wV=/^[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])?)*$/;O2=/^(?:(?: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])$/,A2=/^(([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}|:))$/,J2=/^((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])$/,P2=/^(([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])$/,z2=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,vI=/^[A-Za-z0-9_-]*$/,xV=/^(?=.{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])?)*\.?$/,yV=/^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/,S2=/^https?$/,W2=/^\+[1-9]\d{6,14}$/,X2=new RegExp(`^${HX}$`);Q2=/^-?\d+n?$/,T2=/^-?\d+$/,gg=/^-?\d+(?:\.\d+)?$/,q2=/^(?:true|false)$/i,B2=/^null$/i,V2=/^undefined$/i,K2=/^[^A-Z]*$/,F2=/^[^a-z]*$/,hV=/^[0-9a-fA-F]*$/;cV=/^[0-9a-fA-F]{32}$/,nV=Ug(22,"=="),dV=Ig(22),mV=/^[0-9a-fA-F]{40}$/,iV=Ug(27,"="),lV=Ig(27),tV=/^[0-9a-fA-F]{64}$/,oV=Ug(43,"="),pV=Ig(43),eV=/^[0-9a-fA-F]{96}$/,aV=Ug(64,""),sV=Ig(64),_K=/^[0-9a-fA-F]{128}$/,$K=Ug(86,"=="),DK=Ig(86)});function CX(_,$,D){if(_.issues.length)$.issues.push(...s_(D,_.issues))}var Y_,vX,fI,wI,M2,Z2,b2,H2,k2,C2,v2,r2,f2,r0,w2,u2,x2,y2,h2,c2,n2,d2,m2;var uI=f(()=>{J4();rI();c();Y_=Y("$ZodCheck",(_,$)=>{var D;_._zod??(_._zod={}),_._zod.def=$,(D=_._zod).onattach??(D.onattach=[])}),vX={number:"number",bigint:"bigint",object:"date"},fI=Y("$ZodCheckLessThan",(_,$)=>{Y_.init(_,$);let D=vX[typeof $.value];_._zod.onattach.push((U)=>{let g=U._zod.bag,I=($.inclusive?g.maximum:g.exclusiveMaximum)??Number.POSITIVE_INFINITY;if($.value{if($.inclusive?U.value<=$.value:U.value<$.value)return;U.issues.push({origin:D,code:"too_big",maximum:typeof $.value==="object"?$.value.getTime():$.value,input:U.value,inclusive:$.inclusive,inst:_,continue:!$.abort})}}),wI=Y("$ZodCheckGreaterThan",(_,$)=>{Y_.init(_,$);let D=vX[typeof $.value];_._zod.onattach.push((U)=>{let g=U._zod.bag,I=($.inclusive?g.minimum:g.exclusiveMinimum)??Number.NEGATIVE_INFINITY;if($.value>I)if($.inclusive)g.minimum=$.value;else g.exclusiveMinimum=$.value}),_._zod.check=(U)=>{if($.inclusive?U.value>=$.value:U.value>$.value)return;U.issues.push({origin:D,code:"too_small",minimum:typeof $.value==="object"?$.value.getTime():$.value,input:U.value,inclusive:$.inclusive,inst:_,continue:!$.abort})}}),M2=Y("$ZodCheckMultipleOf",(_,$)=>{Y_.init(_,$),_._zod.onattach.push((D)=>{var U;(U=D._zod.bag).multipleOf??(U.multipleOf=$.value)}),_._zod.check=(D)=>{if(typeof D.value!==typeof $.value)throw Error("Cannot mix number and bigint in multiple_of check.");if(typeof D.value==="bigint"?D.value%$.value===BigInt(0):yE(D.value,$.value)===0)return;D.issues.push({origin:typeof D.value,code:"not_multiple_of",divisor:$.value,input:D.value,inst:_,continue:!$.abort})}}),Z2=Y("$ZodCheckNumberFormat",(_,$)=>{Y_.init(_,$),$.format=$.format||"float64";let D=$.format?.includes("int"),U=D?"int":"number",[g,I]=iE[$.format];_._zod.onattach.push((j)=>{let N=j._zod.bag;if(N.format=$.format,N.minimum=g,N.maximum=I,D)N.pattern=T2}),_._zod.check=(j)=>{let N=j.value;if(D){if(!Number.isInteger(N)){j.issues.push({expected:U,format:$.format,code:"invalid_type",continue:!1,input:N,inst:_});return}if(!Number.isSafeInteger(N)){if(N>0)j.issues.push({input:N,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:_,origin:U,inclusive:!0,continue:!$.abort});else j.issues.push({input:N,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:_,origin:U,inclusive:!0,continue:!$.abort});return}}if(NI)j.issues.push({origin:"number",input:N,code:"too_big",maximum:I,inclusive:!0,inst:_,continue:!$.abort})}}),b2=Y("$ZodCheckBigIntFormat",(_,$)=>{Y_.init(_,$);let[D,U]=lE[$.format];_._zod.onattach.push((g)=>{let I=g._zod.bag;I.format=$.format,I.minimum=D,I.maximum=U}),_._zod.check=(g)=>{let I=g.value;if(IU)g.issues.push({origin:"bigint",input:I,code:"too_big",maximum:U,inclusive:!0,inst:_,continue:!$.abort})}}),H2=Y("$ZodCheckMaxSize",(_,$)=>{var D;Y_.init(_,$),(D=_._zod.def).when??(D.when=(U)=>{let g=U.value;return!M6(g)&&g.size!==void 0}),_._zod.onattach.push((U)=>{let g=U._zod.bag.maximum??Number.POSITIVE_INFINITY;if($.maximum{let g=U.value;if(g.size<=$.maximum)return;U.issues.push({origin:_g(g),code:"too_big",maximum:$.maximum,inclusive:!0,input:g,inst:_,continue:!$.abort})}}),k2=Y("$ZodCheckMinSize",(_,$)=>{var D;Y_.init(_,$),(D=_._zod.def).when??(D.when=(U)=>{let g=U.value;return!M6(g)&&g.size!==void 0}),_._zod.onattach.push((U)=>{let g=U._zod.bag.minimum??Number.NEGATIVE_INFINITY;if($.minimum>g)U._zod.bag.minimum=$.minimum}),_._zod.check=(U)=>{let g=U.value;if(g.size>=$.minimum)return;U.issues.push({origin:_g(g),code:"too_small",minimum:$.minimum,inclusive:!0,input:g,inst:_,continue:!$.abort})}}),C2=Y("$ZodCheckSizeEquals",(_,$)=>{var D;Y_.init(_,$),(D=_._zod.def).when??(D.when=(U)=>{let g=U.value;return!M6(g)&&g.size!==void 0}),_._zod.onattach.push((U)=>{let g=U._zod.bag;g.minimum=$.size,g.maximum=$.size,g.size=$.size}),_._zod.check=(U)=>{let g=U.value,I=g.size;if(I===$.size)return;let j=I>$.size;U.issues.push({origin:_g(g),...j?{code:"too_big",maximum:$.size}:{code:"too_small",minimum:$.size},inclusive:!0,exact:!0,input:U.value,inst:_,continue:!$.abort})}}),v2=Y("$ZodCheckMaxLength",(_,$)=>{var D;Y_.init(_,$),(D=_._zod.def).when??(D.when=(U)=>{let g=U.value;return!M6(g)&&g.length!==void 0}),_._zod.onattach.push((U)=>{let g=U._zod.bag.maximum??Number.POSITIVE_INFINITY;if($.maximum{let g=U.value;if(g.length<=$.maximum)return;let j=$g(g);U.issues.push({origin:j,code:"too_big",maximum:$.maximum,inclusive:!0,input:g,inst:_,continue:!$.abort})}}),r2=Y("$ZodCheckMinLength",(_,$)=>{var D;Y_.init(_,$),(D=_._zod.def).when??(D.when=(U)=>{let g=U.value;return!M6(g)&&g.length!==void 0}),_._zod.onattach.push((U)=>{let g=U._zod.bag.minimum??Number.NEGATIVE_INFINITY;if($.minimum>g)U._zod.bag.minimum=$.minimum}),_._zod.check=(U)=>{let g=U.value;if(g.length>=$.minimum)return;let j=$g(g);U.issues.push({origin:j,code:"too_small",minimum:$.minimum,inclusive:!0,input:g,inst:_,continue:!$.abort})}}),f2=Y("$ZodCheckLengthEquals",(_,$)=>{var D;Y_.init(_,$),(D=_._zod.def).when??(D.when=(U)=>{let g=U.value;return!M6(g)&&g.length!==void 0}),_._zod.onattach.push((U)=>{let g=U._zod.bag;g.minimum=$.length,g.maximum=$.length,g.length=$.length}),_._zod.check=(U)=>{let g=U.value,I=g.length;if(I===$.length)return;let j=$g(g),N=I>$.length;U.issues.push({origin:j,...N?{code:"too_big",maximum:$.length}:{code:"too_small",minimum:$.length},inclusive:!0,exact:!0,input:U.value,inst:_,continue:!$.abort})}}),r0=Y("$ZodCheckStringFormat",(_,$)=>{var D,U;if(Y_.init(_,$),_._zod.onattach.push((g)=>{let I=g._zod.bag;if(I.format=$.format,$.pattern)I.patterns??(I.patterns=new Set),I.patterns.add($.pattern)}),$.pattern)(D=_._zod).check??(D.check=(g)=>{if($.pattern.lastIndex=0,$.pattern.test(g.value))return;g.issues.push({origin:"string",code:"invalid_format",format:$.format,input:g.value,...$.pattern?{pattern:$.pattern.toString()}:{},inst:_,continue:!$.abort})});else(U=_._zod).check??(U.check=()=>{})}),w2=Y("$ZodCheckRegex",(_,$)=>{r0.init(_,$),_._zod.check=(D)=>{if($.pattern.lastIndex=0,$.pattern.test(D.value))return;D.issues.push({origin:"string",code:"invalid_format",format:"regex",input:D.value,pattern:$.pattern.toString(),inst:_,continue:!$.abort})}}),u2=Y("$ZodCheckLowerCase",(_,$)=>{$.pattern??($.pattern=K2),r0.init(_,$)}),x2=Y("$ZodCheckUpperCase",(_,$)=>{$.pattern??($.pattern=F2),r0.init(_,$)}),y2=Y("$ZodCheckIncludes",(_,$)=>{Y_.init(_,$);let D=P$($.includes),U=new RegExp(typeof $.position==="number"?`^.{${$.position}}${D}`:D);$.pattern=U,_._zod.onattach.push((g)=>{let I=g._zod.bag;I.patterns??(I.patterns=new Set),I.patterns.add(U)}),_._zod.check=(g)=>{if(g.value.includes($.includes,$.position))return;g.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:$.includes,input:g.value,inst:_,continue:!$.abort})}}),h2=Y("$ZodCheckStartsWith",(_,$)=>{Y_.init(_,$);let D=new RegExp(`^${P$($.prefix)}.*`);$.pattern??($.pattern=D),_._zod.onattach.push((U)=>{let g=U._zod.bag;g.patterns??(g.patterns=new Set),g.patterns.add(D)}),_._zod.check=(U)=>{if(U.value.startsWith($.prefix))return;U.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:$.prefix,input:U.value,inst:_,continue:!$.abort})}}),c2=Y("$ZodCheckEndsWith",(_,$)=>{Y_.init(_,$);let D=new RegExp(`.*${P$($.suffix)}$`);$.pattern??($.pattern=D),_._zod.onattach.push((U)=>{let g=U._zod.bag;g.patterns??(g.patterns=new Set),g.patterns.add(D)}),_._zod.check=(U)=>{if(U.value.endsWith($.suffix))return;U.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:$.suffix,input:U.value,inst:_,continue:!$.abort})}});n2=Y("$ZodCheckProperty",(_,$)=>{Y_.init(_,$),_._zod.check=(D)=>{let U=$.schema._zod.run({value:D.value[$.property],issues:[]},{});if(U instanceof Promise)return U.then((g)=>CX(g,D,$.property));CX(U,D,$.property);return}}),d2=Y("$ZodCheckMimeType",(_,$)=>{Y_.init(_,$);let D=new Set($.mime);_._zod.onattach.push((U)=>{U._zod.bag.mime=$.mime}),_._zod.check=(U)=>{if(D.has(U.value.type))return;U.issues.push({code:"invalid_value",values:$.mime,input:U.value.type,inst:_,continue:!$.abort})}}),m2=Y("$ZodCheckOverwrite",(_,$)=>{Y_.init(_,$),_._zod.check=(D)=>{D.value=$.tx(D.value)}})});class xI{constructor(_=[]){if(this.content=[],this.indent=0,this)this.args=_}indented(_){this.indent+=1,_(this),this.indent-=1}write(_){if(typeof _==="function"){_(this,{execution:"sync"}),_(this,{execution:"async"});return}let D=_.split(` -`).filter((I)=>I),U=Math.min(...D.map((I)=>I.length-I.trimStart().length)),g=D.map((I)=>I.slice(U)).map((I)=>" ".repeat(this.indent*2)+I);for(let I of g)this.content.push(I)}compile(){let _=Function,$=this?.args,U=[...(this?.content??[""]).map((g)=>` ${g}`)];return new _(...$,U.join(` -`))}}var i2;var l2=f(()=>{i2={major:4,minor:4,patch:3}});function SO(_){if(_==="")return!0;if(/\s/.test(_))return!1;if(_.length%4!==0)return!1;try{return atob(_),!0}catch{return!1}}function pX(_){if(!vI.test(_))return!1;let $=_.replace(/[-_]/g,(U)=>U==="-"?"+":"/"),D=$.padEnd(Math.ceil($.length/4)*4,"=");return SO(D)}function eX(_,$=null){try{let D=_.split(".");if(D.length!==3)return!1;let[U]=D;if(!U)return!1;let g=JSON.parse(atob(U));if("typ"in g&&g?.typ!=="JWT")return!1;if(!g.alg)return!1;if($&&(!("alg"in g)||g.alg!==$))return!1;return!0}catch{return!1}}function fX(_,$,D){if(_.issues.length)$.issues.push(...s_(D,_.issues));$.value[D]=_.value}function nI(_,$,D,U,g,I){let j=D in U;if(_.issues.length){if(g&&I&&!j)return;$.issues.push(...s_(D,_.issues))}if(!j&&!g){if(!_.issues.length)$.issues.push({code:"invalid_type",expected:"nonoptional",input:void 0,path:[D]});return}if(_.value===void 0){if(j)$.value[D]=void 0}else $.value[D]=_.value}function aX(_){let $=Object.keys(_.shape);for(let U of $)if(!_.shape?.[U]?._zod?.traits?.has("$ZodType"))throw Error(`Invalid element at key "${U}": expected a Zod schema`);let D=mE(_.shape);return{..._,keys:$,keySet:new Set($),numKeys:$.length,optionalKeys:new Set(D)}}function sX(_,$,D,U,g,I){let j=[],N=g.keySet,O=g.catchall._zod,A=O.def.type,L=O.optin==="optional",z=O.optout==="optional";for(let W in $){if(W==="__proto__")continue;if(N.has(W))continue;if(A==="never"){j.push(W);continue}let J=O.run({value:$[W],issues:[]},U);if(J instanceof Promise)_.push(J.then((P)=>nI(P,D,W,$,L,z)));else nI(J,D,W,$,L,z)}if(j.length)D.issues.push({code:"unrecognized_keys",keys:j,input:$,inst:I});if(!_.length)return D;return Promise.all(_).then(()=>{return D})}function wX(_,$,D,U){for(let I of _)if(I.issues.length===0)return $.value=I.value,$;let g=_.filter((I)=>!H6(I));if(g.length===1)return $.value=g[0].value,g[0];return $.issues.push({code:"invalid_union",input:$.value,inst:D,errors:_.map((I)=>I.issues.map((j)=>l_(j,U,Z_())))}),$}function uX(_,$,D,U){let g=_.filter((I)=>I.issues.length===0);if(g.length===1)return $.value=g[0].value,$;if(g.length===0)$.issues.push({code:"invalid_union",input:$.value,inst:D,errors:_.map((I)=>I.issues.map((j)=>l_(j,U,Z_())))});else $.issues.push({code:"invalid_union",input:$.value,inst:D,errors:[],inclusive:!1});return $}function t2(_,$){if(_===$)return{valid:!0,data:_};if(_ instanceof Date&&$ instanceof Date&&+_===+$)return{valid:!0,data:_};if(b6(_)&&b6($)){let D=Object.keys($),U=Object.keys(_).filter((I)=>D.indexOf(I)!==-1),g={..._,...$};for(let I of U){let j=t2(_[I],$[I]);if(!j.valid)return{valid:!1,mergeErrorPath:[I,...j.mergeErrorPath]};g[I]=j.data}return{valid:!0,data:g}}if(Array.isArray(_)&&Array.isArray($)){if(_.length!==$.length)return{valid:!1,mergeErrorPath:[]};let D=[];for(let U=0;U<_.length;U++){let g=_[U],I=$[U],j=t2(g,I);if(!j.valid)return{valid:!1,mergeErrorPath:[U,...j.mergeErrorPath]};D.push(j.data)}return{valid:!0,data:D}}return{valid:!1,mergeErrorPath:[]}}function xX(_,$,D){let U=new Map,g;for(let N of $.issues)if(N.code==="unrecognized_keys"){g??(g=N);for(let O of N.keys){if(!U.has(O))U.set(O,{});U.get(O).l=!0}}else _.issues.push(N);for(let N of D.issues)if(N.code==="unrecognized_keys")for(let O of N.keys){if(!U.has(O))U.set(O,{});U.get(O).r=!0}else _.issues.push(N);let I=[...U].filter(([,N])=>N.l&&N.r).map(([N])=>N);if(I.length&&g)_.issues.push({...g,keys:I});if(H6(_))return _;let j=t2($.value,D.value);if(!j.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(j.mergeErrorPath)}`);return _.value=j.data,_}function yX(_,$){for(let D=_.length-1;D>=0;D--)if(_[D]._zod[$]!=="optional")return D+1;return 0}function hX(_,$,D){if(_.issues.length)$.issues.push(...s_(D,_.issues));$.value[D]=_.value}function cX(_,$,D,U,g){for(let I=0;I=g){$.value.length=I;break}$.issues.push(...s_(I,j.issues))}$.value[I]=j.value}for(let I=$.value.length-1;I>=U.length;I--)if(D[I]._zod.optout==="optional"&&$.value[I]===void 0)$.value.length=I;else break;return $}function nX(_,$,D,U,g,I,j){if(_.issues.length)if(sD.has(typeof U))D.issues.push(...s_(U,_.issues));else D.issues.push({code:"invalid_key",origin:"map",input:g,inst:I,issues:_.issues.map((N)=>l_(N,j,Z_()))});if($.issues.length)if(sD.has(typeof U))D.issues.push(...s_(U,$.issues));else D.issues.push({origin:"map",code:"invalid_element",input:g,inst:I,key:U,issues:$.issues.map((N)=>l_(N,j,Z_()))});D.value.set(_.value,$.value)}function dX(_,$){if(_.issues.length)$.issues.push(..._.issues);$.value.add(_.value)}function mX(_,$){if($===void 0&&(_.issues.length||_.fallback))return{issues:[],value:void 0};return _}function iX(_,$){if(_.value===void 0)_.value=$.defaultValue;return _}function lX(_,$){if(!_.issues.length&&_.value===void 0)_.issues.push({code:"invalid_type",expected:"nonoptional",input:_.value,inst:$});return _}function yI(_,$,D){if(_.issues.length)return _.aborted=!0,_;return $._zod.run({value:_.value,issues:_.issues,fallback:_.fallback},D)}function hI(_,$,D){if(_.issues.length)return _.aborted=!0,_;if((D.direction||"forward")==="forward"){let g=$.transform(_.value,_);if(g instanceof Promise)return g.then((I)=>cI(_,I,$.out,D));return cI(_,g,$.out,D)}else{let g=$.reverseTransform(_.value,_);if(g instanceof Promise)return g.then((I)=>cI(_,I,$.in,D));return cI(_,g,$.in,D)}}function cI(_,$,D,U){if(_.issues.length)return _.aborted=!0,_;return D._zod.run({value:$,issues:_.issues},U)}function tX(_){return _.value=Object.freeze(_.value),_}function oX(_,$,D,U){if(!_){let g={code:"custom",input:D,inst:U,path:[...U._zod.def.path??[]],continue:!U._zod.def.abort};if(U._zod.def.params)g.params=U._zod.def.params;$.issues.push(M0(g))}}var l,S4,R_,o2,p2,e2,a2,s2,_O,$O,DO,gO,UO,IO,jO,NO,EO,OO,AO,LO,JO,PO,zO,WO,XO,RO,GO,YO,dI,QO,jg,mI,TO,qO,BO,VO,KO,FO,MO,ZO,bO,HO,_5,kO,Ng,CO,vO,rO,iI,fO,wO,uO,xO,yO,hO,cO,lI,nO,dO,mO,iO,lO,tO,oO,pO,tI,Eg,eO,aO,sO,_A,$A,DA,gA;var UA=f(()=>{uI();J4();aE();rI();c();l2();c();l=Y("$ZodType",(_,$)=>{var D;_??(_={}),_._zod.def=$,_._zod.bag=_._zod.bag||{},_._zod.version=i2;let U=[..._._zod.def.checks??[]];if(_._zod.traits.has("$ZodCheck"))U.unshift(_);for(let g of U)for(let I of g._zod.onattach)I(_);if(U.length===0)(D=_._zod).deferred??(D.deferred=[]),_._zod.deferred?.push(()=>{_._zod.run=_._zod.parse});else{let g=(j,N,O)=>{let A=H6(j),L;for(let z of N){if(z._zod.def.when){if(tE(j))continue;if(!z._zod.def.when(j))continue}else if(A)continue;let W=j.issues.length,J=z._zod.check(j);if(J instanceof Promise&&O?.async===!1)throw new x$;if(L||J instanceof Promise)L=(L??Promise.resolve()).then(async()=>{if(await J,j.issues.length===W)return;if(!A)A=H6(j,W)});else{if(j.issues.length===W)continue;if(!A)A=H6(j,W)}}if(L)return L.then(()=>{return j});return j},I=(j,N,O)=>{if(H6(j))return j.aborted=!0,j;let A=g(N,U,O);if(A instanceof Promise){if(O.async===!1)throw new x$;return A.then((L)=>_._zod.parse(L,O))}return _._zod.parse(A,O)};_._zod.run=(j,N)=>{if(N.skipChecks)return _._zod.parse(j,N);if(N.direction==="backward"){let A=_._zod.parse({value:j.value,issues:[]},{...N,skipChecks:!0});if(A instanceof Promise)return A.then((L)=>{return I(L,j,N)});return I(A,j,N)}let O=_._zod.parse(j,N);if(O instanceof Promise){if(N.async===!1)throw new x$;return O.then((A)=>g(A,U,N))}return g(O,U,N)}}$_(_,"~standard",()=>({validate:(g)=>{try{let I=pE(_,g);return I.success?{value:I.data}:{issues:I.error?.issues}}catch(I){return eE(_,g).then((j)=>j.success?{value:j.data}:{issues:j.error?.issues})}},vendor:"zod",version:1}))}),S4=Y("$ZodString",(_,$)=>{l.init(_,$),_._zod.pattern=[..._?._zod.bag?.patterns??[]].pop()??Y2(_._zod.bag),_._zod.parse=(D,U)=>{if($.coerce)try{D.value=String(D.value)}catch(g){}if(typeof D.value==="string")return D;return D.issues.push({expected:"string",code:"invalid_type",input:D.value,inst:_}),D}}),R_=Y("$ZodStringFormat",(_,$)=>{r0.init(_,$),S4.init(_,$)}),o2=Y("$ZodGUID",(_,$)=>{$.pattern??($.pattern=j2),R_.init(_,$)}),p2=Y("$ZodUUID",(_,$)=>{if($.version){let U={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[$.version];if(U===void 0)throw Error(`Invalid UUID version: "${$.version}"`);$.pattern??($.pattern=z4(U))}else $.pattern??($.pattern=z4());R_.init(_,$)}),e2=Y("$ZodEmail",(_,$)=>{$.pattern??($.pattern=N2),R_.init(_,$)}),a2=Y("$ZodURL",(_,$)=>{R_.init(_,$),_._zod.check=(D)=>{try{let U=D.value.trim();if(!$.normalize&&$.protocol?.source===S2.source){if(!/^https?:\/\//i.test(U)){D.issues.push({code:"invalid_format",format:"url",note:"Invalid URL format",input:D.value,inst:_,continue:!$.abort});return}}let g=new URL(U);if($.hostname){if($.hostname.lastIndex=0,!$.hostname.test(g.hostname))D.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:$.hostname.source,input:D.value,inst:_,continue:!$.abort})}if($.protocol){if($.protocol.lastIndex=0,!$.protocol.test(g.protocol.endsWith(":")?g.protocol.slice(0,-1):g.protocol))D.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:$.protocol.source,input:D.value,inst:_,continue:!$.abort})}if($.normalize)D.value=g.href;else D.value=U;return}catch(U){D.issues.push({code:"invalid_format",format:"url",input:D.value,inst:_,continue:!$.abort})}}}),s2=Y("$ZodEmoji",(_,$)=>{$.pattern??($.pattern=E2()),R_.init(_,$)}),_O=Y("$ZodNanoID",(_,$)=>{$.pattern??($.pattern=U2),R_.init(_,$)}),$O=Y("$ZodCUID",(_,$)=>{$.pattern??($.pattern=sE),R_.init(_,$)}),DO=Y("$ZodCUID2",(_,$)=>{$.pattern??($.pattern=_2),R_.init(_,$)}),gO=Y("$ZodULID",(_,$)=>{$.pattern??($.pattern=$2),R_.init(_,$)}),UO=Y("$ZodXID",(_,$)=>{$.pattern??($.pattern=D2),R_.init(_,$)}),IO=Y("$ZodKSUID",(_,$)=>{$.pattern??($.pattern=g2),R_.init(_,$)}),jO=Y("$ZodISODateTime",(_,$)=>{$.pattern??($.pattern=G2($)),R_.init(_,$)}),NO=Y("$ZodISODate",(_,$)=>{$.pattern??($.pattern=X2),R_.init(_,$)}),EO=Y("$ZodISOTime",(_,$)=>{$.pattern??($.pattern=R2($)),R_.init(_,$)}),OO=Y("$ZodISODuration",(_,$)=>{$.pattern??($.pattern=I2),R_.init(_,$)}),AO=Y("$ZodIPv4",(_,$)=>{$.pattern??($.pattern=O2),R_.init(_,$),_._zod.bag.format="ipv4"}),LO=Y("$ZodIPv6",(_,$)=>{$.pattern??($.pattern=A2),R_.init(_,$),_._zod.bag.format="ipv6",_._zod.check=(D)=>{try{new URL(`http://[${D.value}]`)}catch{D.issues.push({code:"invalid_format",format:"ipv6",input:D.value,inst:_,continue:!$.abort})}}}),JO=Y("$ZodMAC",(_,$)=>{$.pattern??($.pattern=L2($.delimiter)),R_.init(_,$),_._zod.bag.format="mac"}),PO=Y("$ZodCIDRv4",(_,$)=>{$.pattern??($.pattern=J2),R_.init(_,$)}),zO=Y("$ZodCIDRv6",(_,$)=>{$.pattern??($.pattern=P2),R_.init(_,$),_._zod.check=(D)=>{let U=D.value.split("/");try{if(U.length!==2)throw Error();let[g,I]=U;if(!I)throw Error();let j=Number(I);if(`${j}`!==I)throw Error();if(j<0||j>128)throw Error();new URL(`http://[${g}]`)}catch{D.issues.push({code:"invalid_format",format:"cidrv6",input:D.value,inst:_,continue:!$.abort})}}});WO=Y("$ZodBase64",(_,$)=>{$.pattern??($.pattern=z2),R_.init(_,$),_._zod.bag.contentEncoding="base64",_._zod.check=(D)=>{if(SO(D.value))return;D.issues.push({code:"invalid_format",format:"base64",input:D.value,inst:_,continue:!$.abort})}});XO=Y("$ZodBase64URL",(_,$)=>{$.pattern??($.pattern=vI),R_.init(_,$),_._zod.bag.contentEncoding="base64url",_._zod.check=(D)=>{if(pX(D.value))return;D.issues.push({code:"invalid_format",format:"base64url",input:D.value,inst:_,continue:!$.abort})}}),RO=Y("$ZodE164",(_,$)=>{$.pattern??($.pattern=W2),R_.init(_,$)});GO=Y("$ZodJWT",(_,$)=>{R_.init(_,$),_._zod.check=(D)=>{if(eX(D.value,$.alg))return;D.issues.push({code:"invalid_format",format:"jwt",input:D.value,inst:_,continue:!$.abort})}}),YO=Y("$ZodCustomStringFormat",(_,$)=>{R_.init(_,$),_._zod.check=(D)=>{if($.fn(D.value))return;D.issues.push({code:"invalid_format",format:$.format,input:D.value,inst:_,continue:!$.abort})}}),dI=Y("$ZodNumber",(_,$)=>{l.init(_,$),_._zod.pattern=_._zod.bag.pattern??gg,_._zod.parse=(D,U)=>{if($.coerce)try{D.value=Number(D.value)}catch(j){}let g=D.value;if(typeof g==="number"&&!Number.isNaN(g)&&Number.isFinite(g))return D;let I=typeof g==="number"?Number.isNaN(g)?"NaN":!Number.isFinite(g)?"Infinity":void 0:void 0;return D.issues.push({expected:"number",code:"invalid_type",input:g,inst:_,...I?{received:I}:{}}),D}}),QO=Y("$ZodNumberFormat",(_,$)=>{Z2.init(_,$),dI.init(_,$)}),jg=Y("$ZodBoolean",(_,$)=>{l.init(_,$),_._zod.pattern=q2,_._zod.parse=(D,U)=>{if($.coerce)try{D.value=Boolean(D.value)}catch(I){}let g=D.value;if(typeof g==="boolean")return D;return D.issues.push({expected:"boolean",code:"invalid_type",input:g,inst:_}),D}}),mI=Y("$ZodBigInt",(_,$)=>{l.init(_,$),_._zod.pattern=Q2,_._zod.parse=(D,U)=>{if($.coerce)try{D.value=BigInt(D.value)}catch(g){}if(typeof D.value==="bigint")return D;return D.issues.push({expected:"bigint",code:"invalid_type",input:D.value,inst:_}),D}}),TO=Y("$ZodBigIntFormat",(_,$)=>{b2.init(_,$),mI.init(_,$)}),qO=Y("$ZodSymbol",(_,$)=>{l.init(_,$),_._zod.parse=(D,U)=>{let g=D.value;if(typeof g==="symbol")return D;return D.issues.push({expected:"symbol",code:"invalid_type",input:g,inst:_}),D}}),BO=Y("$ZodUndefined",(_,$)=>{l.init(_,$),_._zod.pattern=V2,_._zod.values=new Set([void 0]),_._zod.parse=(D,U)=>{let g=D.value;if(typeof g>"u")return D;return D.issues.push({expected:"undefined",code:"invalid_type",input:g,inst:_}),D}}),VO=Y("$ZodNull",(_,$)=>{l.init(_,$),_._zod.pattern=B2,_._zod.values=new Set([null]),_._zod.parse=(D,U)=>{let g=D.value;if(g===null)return D;return D.issues.push({expected:"null",code:"invalid_type",input:g,inst:_}),D}}),KO=Y("$ZodAny",(_,$)=>{l.init(_,$),_._zod.parse=(D)=>D}),FO=Y("$ZodUnknown",(_,$)=>{l.init(_,$),_._zod.parse=(D)=>D}),MO=Y("$ZodNever",(_,$)=>{l.init(_,$),_._zod.parse=(D,U)=>{return D.issues.push({expected:"never",code:"invalid_type",input:D.value,inst:_}),D}}),ZO=Y("$ZodVoid",(_,$)=>{l.init(_,$),_._zod.parse=(D,U)=>{let g=D.value;if(typeof g>"u")return D;return D.issues.push({expected:"void",code:"invalid_type",input:g,inst:_}),D}}),bO=Y("$ZodDate",(_,$)=>{l.init(_,$),_._zod.parse=(D,U)=>{if($.coerce)try{D.value=new Date(D.value)}catch(N){}let g=D.value,I=g instanceof Date;if(I&&!Number.isNaN(g.getTime()))return D;return D.issues.push({expected:"date",code:"invalid_type",input:g,...I?{received:"Invalid Date"}:{},inst:_}),D}});HO=Y("$ZodArray",(_,$)=>{l.init(_,$),_._zod.parse=(D,U)=>{let g=D.value;if(!Array.isArray(g))return D.issues.push({expected:"array",code:"invalid_type",input:g,inst:_}),D;D.value=Array(g.length);let I=[];for(let j=0;jfX(A,D,j)));else fX(O,D,j)}if(I.length)return Promise.all(I).then(()=>D);return D}});_5=Y("$ZodObject",(_,$)=>{if(l.init(_,$),!Object.getOwnPropertyDescriptor($,"shape")?.get){let N=$.shape;Object.defineProperty($,"shape",{get:()=>{let O={...N};return Object.defineProperty($,"shape",{value:O}),O}})}let U=F0(()=>aX($));$_(_._zod,"propValues",()=>{let N=$.shape,O={};for(let A in N){let L=N[A]._zod;if(L.values){O[A]??(O[A]=new Set);for(let z of L.values)O[A].add(z)}}return O});let g=P4,I=$.catchall,j;_._zod.parse=(N,O)=>{j??(j=U.value);let A=N.value;if(!g(A))return N.issues.push({expected:"object",code:"invalid_type",input:A,inst:_}),N;N.value={};let L=[],z=j.shape;for(let W of j.keys){let J=z[W],P=J._zod.optin==="optional",S=J._zod.optout==="optional",X=J._zod.run({value:A[W],issues:[]},O);if(X instanceof Promise)L.push(X.then((G)=>nI(G,N,W,A,P,S)));else nI(X,N,W,A,P,S)}if(!I)return L.length?Promise.all(L).then(()=>N):N;return sX(L,A,N,O,U.value,_)}}),kO=Y("$ZodObjectJIT",(_,$)=>{_5.init(_,$);let D=_._zod.parse,U=F0(()=>aX($)),g=(W)=>{let J=new xI(["shape","payload","ctx"]),P=U.value,S=(V)=>{let Q=YI(V);return`shape[${Q}]._zod.run({ value: input[${Q}], issues: [] }, ctx)`};J.write("const input = payload.value;");let X=Object.create(null),G=0;for(let V of P.keys)X[V]=`key_${G++}`;J.write("const newResult = {};");for(let V of P.keys){let Q=X[V],T=YI(V),q=W[V],K=q?._zod?.optin==="optional",Z=q?._zod?.optout==="optional";if(J.write(`const ${Q} = ${S(V)};`),K&&Z)J.write(` +var gY=Object.create;var{getPrototypeOf:DY,defineProperty:qE,getOwnPropertyNames:UY}=Object;var IY=Object.prototype.hasOwnProperty;function jY(_){return this[_]}var EY,NY,AY=(_,$,g)=>{var U=_!=null&&typeof _==="object";if(U){var D=$?EY??=new WeakMap:NY??=new WeakMap,I=D.get(_);if(I)return I}g=_!=null?gY(DY(_)):{};let j=$||!_||!_.__esModule?qE(g,"default",{value:_,enumerable:!0}):g;for(let E of UY(_))if(!IY.call(j,E))qE(j,E,{get:jY.bind(_,E),enumerable:!0});if(U)D.set(_,j);return j};var a6=(_,$)=>()=>($||_(($={exports:{}}).exports,$),$.exports);var OY=(_)=>_;function PY(_,$){this[_]=OY.bind(null,$)}var k$=(_,$)=>{for(var g in $)qE(_,g,{get:$[g],enumerable:!0,configurable:!0,set:PY.bind($,g)})};var w=(_,$)=>()=>(_&&($=_(_=0)),$);var A_=import.meta.require;function Y(_,$,g){function U(E,A){if(!E._zod)Object.defineProperty(E,"_zod",{value:{def:A,constr:j,traits:new Set},enumerable:!1});if(E._zod.traits.has(_))return;E._zod.traits.add(_),$(E,A);let O=j.prototype,P=Object.keys(O);for(let W=0;W{if(g?.Parent&&E instanceof g.Parent)return!0;return E?._zod?.traits?.has(_)}}),Object.defineProperty(j,"name",{value:_}),j}function F_(_){if(_)Object.assign(Pg,_);return Pg}var rR,RI,GI,f$,Sg,Pg;var Lg=w(()=>{RI=Object.freeze({status:"aborted"});GI=Symbol("zod_brand");f$=class f$ extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}};Sg=class Sg extends Error{constructor(_){super(`Encountered unidirectional transform during encode: ${_}`);this.name="ZodEncodeError"}};(rR=globalThis).__zod_globalConfig??(rR.__zod_globalConfig={});Pg=globalThis.__zod_globalConfig});var Z={};k$(Z,{unwrapMessage:()=>o0,uint8ArrayToHex:()=>MB,uint8ArrayToBase64url:()=>rB,uint8ArrayToBase64:()=>ZR,stringifyPrimitive:()=>r,slugify:()=>iN,shallowClone:()=>tN,safeExtend:()=>TB,required:()=>BB,randomString:()=>JB,propertyKeyTypes:()=>a0,promiseAllObject:()=>WB,primitiveTypes:()=>oN,prefixIssues:()=>e_,pick:()=>XB,partial:()=>qB,parsedType:()=>b,optionalKeys:()=>pN,omit:()=>YB,objectClone:()=>PB,numKeys:()=>zB,nullish:()=>b6,normalizeParams:()=>k,mergeDefs:()=>I6,merge:()=>KB,jsonStringifyReplacer:()=>B4,joinValues:()=>q,issue:()=>F4,isPlainObject:()=>Z6,isObject:()=>Wg,hexToUint8Array:()=>bB,getSizableOrigin:()=>s0,getParsedType:()=>RB,getLengthableOrigin:()=>_D,getEnumValues:()=>p0,getElementAtPath:()=>LB,floatSafeRemainder:()=>mN,finalizeIssue:()=>m_,extend:()=>QB,explicitlyAborted:()=>sN,escapeRegex:()=>S$,esc:()=>XI,defineLazy:()=>$_,createTransparentProxy:()=>GB,cloneDef:()=>SB,clone:()=>f_,cleanRegex:()=>e0,cleanEnum:()=>VB,captureStackTrace:()=>YI,cached:()=>V4,base64urlToUint8Array:()=>FB,base64ToUint8Array:()=>MR,assignProp:()=>M6,assertNotEqual:()=>EB,assertNever:()=>AB,assertIs:()=>NB,assertEqual:()=>jB,assert:()=>OB,allowsEval:()=>lN,aborted:()=>H6,NUMBER_FORMAT_RANGES:()=>eN,Class:()=>HR,BIGINT_FORMAT_RANGES:()=>aN});function jB(_){return _}function EB(_){return _}function NB(_){}function AB(_){throw Error("Unexpected value in exhaustive check")}function OB(_){}function p0(_){let $=Object.values(_).filter((U)=>typeof U==="number");return Object.entries(_).filter(([U,D])=>$.indexOf(+U)===-1).map(([U,D])=>D)}function q(_,$="|"){return _.map((g)=>r(g)).join($)}function B4(_,$){if(typeof $==="bigint")return $.toString();return $}function V4(_){return{get value(){{let g=_();return Object.defineProperty(this,"value",{value:g}),g}throw Error("cached value already set")}}}function b6(_){return _===null||_===void 0}function e0(_){let $=_.startsWith("^")?1:0,g=_.endsWith("$")?_.length-1:_.length;return _.slice($,g)}function mN(_,$){let g=_/$,U=Math.round(g),D=Number.EPSILON*Math.max(Math.abs(g),1);if(Math.abs(g-U)g?.[U],_)}function WB(_){let $=Object.keys(_),g=$.map((U)=>_[U]);return Promise.all(g).then((U)=>{let D={};for(let I=0;I<$.length;I++)D[$[I]]=U[I];return D})}function JB(_=10){let g="";for(let U=0;U<_;U++)g+="abcdefghijklmnopqrstuvwxyz"[Math.floor(Math.random()*26)];return g}function XI(_){return JSON.stringify(_)}function iN(_){return _.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function Wg(_){return typeof _==="object"&&_!==null&&!Array.isArray(_)}function Z6(_){if(Wg(_)===!1)return!1;let $=_.constructor;if($===void 0)return!0;if(typeof $!=="function")return!0;let g=$.prototype;if(Wg(g)===!1)return!1;if(Object.prototype.hasOwnProperty.call(g,"isPrototypeOf")===!1)return!1;return!0}function tN(_){if(Z6(_))return{..._};if(Array.isArray(_))return[..._];if(_ instanceof Map)return new Map(_);if(_ instanceof Set)return new Set(_);return _}function zB(_){let $=0;for(let g in _)if(Object.prototype.hasOwnProperty.call(_,g))$++;return $}function S$(_){return _.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function f_(_,$,g){let U=new _._zod.constr($??_._zod.def);if(!$||g?.parent)U._zod.parent=_;return U}function k(_){let $=_;if(!$)return{};if(typeof $==="string")return{error:()=>$};if($?.message!==void 0){if($?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");$.error=$.message}if(delete $.message,typeof $.error==="string")return{...$,error:()=>$.error};return $}function GB(_){let $;return new Proxy({},{get(g,U,D){return $??($=_()),Reflect.get($,U,D)},set(g,U,D,I){return $??($=_()),Reflect.set($,U,D,I)},has(g,U){return $??($=_()),Reflect.has($,U)},deleteProperty(g,U){return $??($=_()),Reflect.deleteProperty($,U)},ownKeys(g){return $??($=_()),Reflect.ownKeys($)},getOwnPropertyDescriptor(g,U){return $??($=_()),Reflect.getOwnPropertyDescriptor($,U)},defineProperty(g,U,D){return $??($=_()),Reflect.defineProperty($,U,D)}})}function r(_){if(typeof _==="bigint")return _.toString()+"n";if(typeof _==="string")return`"${_}"`;return`${_}`}function pN(_){return Object.keys(_).filter(($)=>{return _[$]._zod.optin==="optional"&&_[$]._zod.optout==="optional"})}function XB(_,$){let g=_._zod.def,U=g.checks;if(U&&U.length>0)throw Error(".pick() cannot be used on object schemas containing refinements");let I=I6(_._zod.def,{get shape(){let j={};for(let E in $){if(!(E in g.shape))throw Error(`Unrecognized key: "${E}"`);if(!$[E])continue;j[E]=g.shape[E]}return M6(this,"shape",j),j},checks:[]});return f_(_,I)}function YB(_,$){let g=_._zod.def,U=g.checks;if(U&&U.length>0)throw Error(".omit() cannot be used on object schemas containing refinements");let I=I6(_._zod.def,{get shape(){let j={..._._zod.def.shape};for(let E in $){if(!(E in g.shape))throw Error(`Unrecognized key: "${E}"`);if(!$[E])continue;delete j[E]}return M6(this,"shape",j),j},checks:[]});return f_(_,I)}function QB(_,$){if(!Z6($))throw Error("Invalid input to extend: expected a plain object");let g=_._zod.def.checks;if(g&&g.length>0){let I=_._zod.def.shape;for(let j in $)if(Object.getOwnPropertyDescriptor(I,j)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}let D=I6(_._zod.def,{get shape(){let I={..._._zod.def.shape,...$};return M6(this,"shape",I),I}});return f_(_,D)}function TB(_,$){if(!Z6($))throw Error("Invalid input to safeExtend: expected a plain object");let g=I6(_._zod.def,{get shape(){let U={..._._zod.def.shape,...$};return M6(this,"shape",U),U}});return f_(_,g)}function KB(_,$){if(_._zod.def.checks?.length)throw Error(".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.");let g=I6(_._zod.def,{get shape(){let U={..._._zod.def.shape,...$._zod.def.shape};return M6(this,"shape",U),U},get catchall(){return $._zod.def.catchall},checks:$._zod.def.checks??[]});return f_(_,g)}function qB(_,$,g){let D=$._zod.def.checks;if(D&&D.length>0)throw Error(".partial() cannot be used on object schemas containing refinements");let j=I6($._zod.def,{get shape(){let E=$._zod.def.shape,A={...E};if(g)for(let O in g){if(!(O in E))throw Error(`Unrecognized key: "${O}"`);if(!g[O])continue;A[O]=_?new _({type:"optional",innerType:E[O]}):E[O]}else for(let O in E)A[O]=_?new _({type:"optional",innerType:E[O]}):E[O];return M6(this,"shape",A),A},checks:[]});return f_($,j)}function BB(_,$,g){let U=I6($._zod.def,{get shape(){let D=$._zod.def.shape,I={...D};if(g)for(let j in g){if(!(j in I))throw Error(`Unrecognized key: "${j}"`);if(!g[j])continue;I[j]=new _({type:"nonoptional",innerType:D[j]})}else for(let j in D)I[j]=new _({type:"nonoptional",innerType:D[j]});return M6(this,"shape",I),I}});return f_($,U)}function H6(_,$=0){if(_.aborted===!0)return!0;for(let g=$;g<_.issues.length;g++)if(_.issues[g]?.continue!==!0)return!0;return!1}function sN(_,$=0){if(_.aborted===!0)return!0;for(let g=$;g<_.issues.length;g++)if(_.issues[g]?.continue===!1)return!0;return!1}function e_(_,$){return $.map((g)=>{var U;return(U=g).path??(U.path=[]),g.path.unshift(_),g})}function o0(_){return typeof _==="string"?_:_?.message}function m_(_,$,g){let U=_.message?_.message:o0(_.inst?._zod.def?.error?.(_))??o0($?.error?.(_))??o0(g.customError?.(_))??o0(g.localeError?.(_))??"Invalid input",{inst:D,continue:I,input:j,...E}=_;if(E.path??(E.path=[]),E.message=U,$?.reportInput)E.input=j;return E}function s0(_){if(_ instanceof Set)return"set";if(_ instanceof Map)return"map";if(_ instanceof File)return"file";return"unknown"}function _D(_){if(Array.isArray(_))return"array";if(typeof _==="string")return"string";return"unknown"}function b(_){let $=typeof _;switch($){case"number":return Number.isNaN(_)?"nan":"number";case"object":{if(_===null)return"null";if(Array.isArray(_))return"array";let g=_;if(g&&Object.getPrototypeOf(g)!==Object.prototype&&"constructor"in g&&g.constructor)return g.constructor.name}}return $}function F4(..._){let[$,g,U]=_;if(typeof $==="string")return{message:$,code:"custom",input:g,inst:U};return{...$}}function VB(_){return Object.entries(_).filter(([$,g])=>{return Number.isNaN(Number.parseInt($,10))}).map(($)=>$[1])}function MR(_){let $=atob(_),g=new Uint8Array($.length);for(let U=0;U<$.length;U++)g[U]=$.charCodeAt(U);return g}function ZR(_){let $="";for(let g=0;g<_.length;g++)$+=String.fromCharCode(_[g]);return btoa($)}function FB(_){let $=_.replace(/-/g,"+").replace(/_/g,"/"),g="=".repeat((4-$.length%4)%4);return MR($+g)}function rB(_){return ZR(_).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function bB(_){let $=_.replace(/^0x/,"");if($.length%2!==0)throw Error("Invalid hex string length");let g=new Uint8Array($.length/2);for(let U=0;U<$.length;U+=2)g[U/2]=Number.parseInt($.slice(U,U+2),16);return g}function MB(_){return Array.from(_).map(($)=>$.toString(16).padStart(2,"0")).join("")}class HR{constructor(..._){}}var bR,YI,lN,RB=(_)=>{let $=typeof _;switch($){case"undefined":return"undefined";case"string":return"string";case"number":return Number.isNaN(_)?"nan":"number";case"boolean":return"boolean";case"function":return"function";case"bigint":return"bigint";case"symbol":return"symbol";case"object":if(Array.isArray(_))return"array";if(_===null)return"null";if(_.then&&typeof _.then==="function"&&_.catch&&typeof _.catch==="function")return"promise";if(typeof Map<"u"&&_ instanceof Map)return"map";if(typeof Set<"u"&&_ instanceof Set)return"set";if(typeof Date<"u"&&_ instanceof Date)return"date";if(typeof File<"u"&&_ instanceof File)return"file";return"object";default:throw Error(`Unknown data type: ${$}`)}},a0,oN,eN,aN;var h=w(()=>{Lg();bR=Symbol("evaluating");YI="captureStackTrace"in Error?Error.captureStackTrace:(..._)=>{};lN=V4(()=>{if(Pg.jitless)return!1;if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{return new Function(""),!0}catch(_){return!1}});a0=new Set(["string","number","symbol"]),oN=new Set(["string","number","bigint","boolean","symbol","undefined"]);eN={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-340282346638528860000000000000000000000,340282346638528860000000000000000000000],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},aN={int64:[BigInt("-9223372036854775808"),BigInt("9223372036854775807")],uint64:[BigInt(0),BigInt("18446744073709551615")]}});function r4(_,$=(g)=>g.message){let g={},U=[];for(let D of _.issues)if(D.path.length>0)g[D.path[0]]=g[D.path[0]]||[],g[D.path[0]].push($(D));else U.push($(D));return{formErrors:U,fieldErrors:g}}function b4(_,$=(g)=>g.message){let g={_errors:[]},U=(D,I=[])=>{for(let j of D.issues)if(j.code==="invalid_union"&&j.errors.length)j.errors.map((E)=>U({issues:E},[...I,...j.path]));else if(j.code==="invalid_key")U({issues:j.issues},[...I,...j.path]);else if(j.code==="invalid_element")U({issues:j.issues},[...I,...j.path]);else{let E=[...I,...j.path];if(E.length===0)g._errors.push($(j));else{let A=g,O=0;while(Og.message){let g={errors:[]},U=(D,I=[])=>{var j,E;for(let A of D.issues)if(A.code==="invalid_union"&&A.errors.length)A.errors.map((O)=>U({issues:O},[...I,...A.path]));else if(A.code==="invalid_key")U({issues:A.issues},[...I,...A.path]);else if(A.code==="invalid_element")U({issues:A.issues},[...I,...A.path]);else{let O=[...I,...A.path];if(O.length===0){g.errors.push($(A));continue}let P=g,W=0;while(Wtypeof U==="object"?U.key:U);for(let U of g)if(typeof U==="number")$.push(`[${U}]`);else if(typeof U==="symbol")$.push(`[${JSON.stringify(String(U))}]`);else if(/[^\w$]/.test(U))$.push(`[${JSON.stringify(U)}]`);else{if($.length)$.push(".");$.push(U)}return $.join("")}function TI(_){let $=[],g=[..._.issues].sort((U,D)=>(U.path??[]).length-(D.path??[]).length);for(let U of g)if($.push(`\u2716 ${U.message}`),U.path?.length)$.push(` \u2192 at ${CR(U.path)}`);return $.join(` +`)}var kR=(_,$)=>{_.name="$ZodError",Object.defineProperty(_,"_zod",{value:_._zod,enumerable:!1}),Object.defineProperty(_,"issues",{value:$,enumerable:!1}),_.message=JSON.stringify($,B4,2),Object.defineProperty(_,"toString",{value:()=>_.message,enumerable:!1})},$D,a_;var _2=w(()=>{Lg();h();$D=Y("$ZodError",kR),a_=Y("$ZodError",kR,{Parent:Error})});var M4=(_)=>($,g,U,D)=>{let I=U?{...U,async:!1}:{async:!1},j=$._zod.run({value:g,issues:[]},I);if(j instanceof Promise)throw new f$;if(j.issues.length){let E=new(D?.Err??_)(j.issues.map((A)=>m_(A,I,F_())));throw YI(E,D?.callee),E}return j.value},KI,Z4=(_)=>async($,g,U,D)=>{let I=U?{...U,async:!0}:{async:!0},j=$._zod.run({value:g,issues:[]},I);if(j instanceof Promise)j=await j;if(j.issues.length){let E=new(D?.Err??_)(j.issues.map((A)=>m_(A,I,F_())));throw YI(E,D?.callee),E}return j.value},qI,H4=(_)=>($,g,U)=>{let D=U?{...U,async:!1}:{async:!1},I=$._zod.run({value:g,issues:[]},D);if(I instanceof Promise)throw new f$;return I.issues.length?{success:!1,error:new(_??$D)(I.issues.map((j)=>m_(j,D,F_())))}:{success:!0,data:I.value}},$2,k4=(_)=>async($,g,U)=>{let D=U?{...U,async:!0}:{async:!0},I=$._zod.run({value:g,issues:[]},D);if(I instanceof Promise)I=await I;return I.issues.length?{success:!1,error:new _(I.issues.map((j)=>m_(j,D,F_())))}:{success:!0,data:I.value}},g2,BI=(_)=>($,g,U)=>{let D=U?{...U,direction:"backward"}:{direction:"backward"};return M4(_)($,g,D)},HB,VI=(_)=>($,g,U)=>{return M4(_)($,g,U)},kB,FI=(_)=>async($,g,U)=>{let D=U?{...U,direction:"backward"}:{direction:"backward"};return Z4(_)($,g,D)},CB,rI=(_)=>async($,g,U)=>{return Z4(_)($,g,U)},vB,bI=(_)=>($,g,U)=>{let D=U?{...U,direction:"backward"}:{direction:"backward"};return H4(_)($,g,D)},wB,MI=(_)=>($,g,U)=>{return H4(_)($,g,U)},uB,ZI=(_)=>async($,g,U)=>{let D=U?{...U,direction:"backward"}:{direction:"backward"};return k4(_)($,g,D)},fB,HI=(_)=>async($,g,U)=>{return k4(_)($,g,U)},xB;var D2=w(()=>{Lg();_2();h();KI=M4(a_),qI=Z4(a_),$2=H4(a_),g2=k4(a_),HB=BI(a_),kB=VI(a_),CB=FI(a_),vB=rI(a_),wB=bI(a_),uB=MI(a_),fB=ZI(a_),xB=HI(a_)});var s_={};k$(s_,{xid:()=>E2,uuid7:()=>nB,uuid6:()=>hB,uuid4:()=>cB,uuid:()=>Jg,uppercase:()=>H2,unicodeEmail:()=>vR,undefined:()=>M2,ulid:()=>j2,time:()=>K2,string:()=>B2,sha512_hex:()=>OV,sha512_base64url:()=>SV,sha512_base64:()=>PV,sha384_hex:()=>EV,sha384_base64url:()=>AV,sha384_base64:()=>NV,sha256_hex:()=>UV,sha256_base64url:()=>jV,sha256_base64:()=>IV,sha1_hex:()=>$V,sha1_base64url:()=>DV,sha1_base64:()=>gV,rfc5322Email:()=>mB,number:()=>gD,null:()=>b2,nanoid:()=>A2,md5_hex:()=>aB,md5_base64url:()=>_V,md5_base64:()=>sB,mac:()=>z2,lowercase:()=>Z2,ksuid:()=>N2,ipv6:()=>J2,ipv4:()=>W2,integer:()=>F2,idnEmail:()=>iB,httpProtocol:()=>Y2,html5Email:()=>dB,hostname:()=>oB,hex:()=>eB,guid:()=>P2,extendedDuration:()=>yB,emoji:()=>L2,email:()=>S2,e164:()=>Q2,duration:()=>O2,domain:()=>pB,datetime:()=>q2,date:()=>T2,cuid2:()=>I2,cuid:()=>U2,cidrv6:()=>G2,cidrv4:()=>R2,browserEmail:()=>lB,boolean:()=>r2,bigint:()=>V2,base64url:()=>kI,base64:()=>X2});function L2(){return new RegExp(tB,"u")}function uR(_){return typeof _.precision==="number"?_.precision===-1?"(?:[01]\\d|2[0-3]):[0-5]\\d":_.precision===0?"(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d":`(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{${_.precision}}`:"(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?"}function K2(_){return new RegExp(`^${uR(_)}$`)}function q2(_){let $=uR({precision:_.precision}),g=["Z"];if(_.local)g.push("");if(_.offset)g.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");let U=`${$}(?:${g.join("|")})`;return new RegExp(`^${wR}T(?:${U})$`)}function DD(_,$){return new RegExp(`^[A-Za-z0-9+/]{${_}}${$}$`)}function UD(_){return new RegExp(`^[A-Za-z0-9_-]{${_}}$`)}var U2,I2,j2,E2,N2,A2,O2,yB,P2,Jg=(_)=>{if(!_)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}-${_}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`)},cB,hB,nB,S2,dB,mB,vR,iB,lB,tB="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",W2,J2,z2=(_)=>{let $=S$(_??":");return new RegExp(`^(?:[0-9A-F]{2}${$}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${$}){5}[0-9a-f]{2}$`)},R2,G2,X2,kI,oB,pB,Y2,Q2,wR="(?:(?:\\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])))",T2,B2=(_)=>{let $=_?`[\\s\\S]{${_?.minimum??0},${_?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${$}$`)},V2,F2,gD,r2,b2,M2,Z2,H2,eB,aB,sB,_V,$V,gV,DV,UV,IV,jV,EV,NV,AV,OV,PV,SV;var CI=w(()=>{h();U2=/^[cC][0-9a-z]{6,}$/,I2=/^[0-9a-z]+$/,j2=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,E2=/^[0-9a-vA-V]{20}$/,N2=/^[A-Za-z0-9]{27}$/,A2=/^[a-zA-Z0-9_-]{21}$/,O2=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,yB=/^[-+]?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)?)??$/,P2=/^([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})$/,cB=Jg(4),hB=Jg(6),nB=Jg(7),S2=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,dB=/^[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])?)*$/,mB=/^(([^<>()\[\]\\.,;:\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,}))$/,vR=/^[^\s@"]{1,64}@[^\s@]{1,255}$/u,iB=vR,lB=/^[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])?)*$/;W2=/^(?:(?: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])$/,J2=/^(([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}|:))$/,R2=/^((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])$/,G2=/^(([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])$/,X2=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,kI=/^[A-Za-z0-9_-]*$/,oB=/^(?=.{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])?)*\.?$/,pB=/^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}$/,Y2=/^https?$/,Q2=/^\+[1-9]\d{6,14}$/,T2=new RegExp(`^${wR}$`);V2=/^-?\d+n?$/,F2=/^-?\d+$/,gD=/^-?\d+(?:\.\d+)?$/,r2=/^(?:true|false)$/i,b2=/^null$/i,M2=/^undefined$/i,Z2=/^[^A-Z]*$/,H2=/^[^a-z]*$/,eB=/^[0-9a-fA-F]*$/;aB=/^[0-9a-fA-F]{32}$/,sB=DD(22,"=="),_V=UD(22),$V=/^[0-9a-fA-F]{40}$/,gV=DD(27,"="),DV=UD(27),UV=/^[0-9a-fA-F]{64}$/,IV=DD(43,"="),jV=UD(43),EV=/^[0-9a-fA-F]{96}$/,NV=DD(64,""),AV=UD(64),OV=/^[0-9a-fA-F]{128}$/,PV=DD(86,"=="),SV=UD(86)});function fR(_,$,g){if(_.issues.length)$.issues.push(...e_(g,_.issues))}var G_,xR,vI,wI,k2,C2,v2,w2,u2,f2,x2,y2,c2,C4,h2,n2,d2,m2,i2,l2,t2,o2,p2;var uI=w(()=>{Lg();CI();h();G_=Y("$ZodCheck",(_,$)=>{var g;_._zod??(_._zod={}),_._zod.def=$,(g=_._zod).onattach??(g.onattach=[])}),xR={number:"number",bigint:"bigint",object:"date"},vI=Y("$ZodCheckLessThan",(_,$)=>{G_.init(_,$);let g=xR[typeof $.value];_._zod.onattach.push((U)=>{let D=U._zod.bag,I=($.inclusive?D.maximum:D.exclusiveMaximum)??Number.POSITIVE_INFINITY;if($.value{if($.inclusive?U.value<=$.value:U.value<$.value)return;U.issues.push({origin:g,code:"too_big",maximum:typeof $.value==="object"?$.value.getTime():$.value,input:U.value,inclusive:$.inclusive,inst:_,continue:!$.abort})}}),wI=Y("$ZodCheckGreaterThan",(_,$)=>{G_.init(_,$);let g=xR[typeof $.value];_._zod.onattach.push((U)=>{let D=U._zod.bag,I=($.inclusive?D.minimum:D.exclusiveMinimum)??Number.NEGATIVE_INFINITY;if($.value>I)if($.inclusive)D.minimum=$.value;else D.exclusiveMinimum=$.value}),_._zod.check=(U)=>{if($.inclusive?U.value>=$.value:U.value>$.value)return;U.issues.push({origin:g,code:"too_small",minimum:typeof $.value==="object"?$.value.getTime():$.value,input:U.value,inclusive:$.inclusive,inst:_,continue:!$.abort})}}),k2=Y("$ZodCheckMultipleOf",(_,$)=>{G_.init(_,$),_._zod.onattach.push((g)=>{var U;(U=g._zod.bag).multipleOf??(U.multipleOf=$.value)}),_._zod.check=(g)=>{if(typeof g.value!==typeof $.value)throw Error("Cannot mix number and bigint in multiple_of check.");if(typeof g.value==="bigint"?g.value%$.value===BigInt(0):mN(g.value,$.value)===0)return;g.issues.push({origin:typeof g.value,code:"not_multiple_of",divisor:$.value,input:g.value,inst:_,continue:!$.abort})}}),C2=Y("$ZodCheckNumberFormat",(_,$)=>{G_.init(_,$),$.format=$.format||"float64";let g=$.format?.includes("int"),U=g?"int":"number",[D,I]=eN[$.format];_._zod.onattach.push((j)=>{let E=j._zod.bag;if(E.format=$.format,E.minimum=D,E.maximum=I,g)E.pattern=F2}),_._zod.check=(j)=>{let E=j.value;if(g){if(!Number.isInteger(E)){j.issues.push({expected:U,format:$.format,code:"invalid_type",continue:!1,input:E,inst:_});return}if(!Number.isSafeInteger(E)){if(E>0)j.issues.push({input:E,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:_,origin:U,inclusive:!0,continue:!$.abort});else j.issues.push({input:E,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:_,origin:U,inclusive:!0,continue:!$.abort});return}}if(EI)j.issues.push({origin:"number",input:E,code:"too_big",maximum:I,inclusive:!0,inst:_,continue:!$.abort})}}),v2=Y("$ZodCheckBigIntFormat",(_,$)=>{G_.init(_,$);let[g,U]=aN[$.format];_._zod.onattach.push((D)=>{let I=D._zod.bag;I.format=$.format,I.minimum=g,I.maximum=U}),_._zod.check=(D)=>{let I=D.value;if(IU)D.issues.push({origin:"bigint",input:I,code:"too_big",maximum:U,inclusive:!0,inst:_,continue:!$.abort})}}),w2=Y("$ZodCheckMaxSize",(_,$)=>{var g;G_.init(_,$),(g=_._zod.def).when??(g.when=(U)=>{let D=U.value;return!b6(D)&&D.size!==void 0}),_._zod.onattach.push((U)=>{let D=U._zod.bag.maximum??Number.POSITIVE_INFINITY;if($.maximum{let D=U.value;if(D.size<=$.maximum)return;U.issues.push({origin:s0(D),code:"too_big",maximum:$.maximum,inclusive:!0,input:D,inst:_,continue:!$.abort})}}),u2=Y("$ZodCheckMinSize",(_,$)=>{var g;G_.init(_,$),(g=_._zod.def).when??(g.when=(U)=>{let D=U.value;return!b6(D)&&D.size!==void 0}),_._zod.onattach.push((U)=>{let D=U._zod.bag.minimum??Number.NEGATIVE_INFINITY;if($.minimum>D)U._zod.bag.minimum=$.minimum}),_._zod.check=(U)=>{let D=U.value;if(D.size>=$.minimum)return;U.issues.push({origin:s0(D),code:"too_small",minimum:$.minimum,inclusive:!0,input:D,inst:_,continue:!$.abort})}}),f2=Y("$ZodCheckSizeEquals",(_,$)=>{var g;G_.init(_,$),(g=_._zod.def).when??(g.when=(U)=>{let D=U.value;return!b6(D)&&D.size!==void 0}),_._zod.onattach.push((U)=>{let D=U._zod.bag;D.minimum=$.size,D.maximum=$.size,D.size=$.size}),_._zod.check=(U)=>{let D=U.value,I=D.size;if(I===$.size)return;let j=I>$.size;U.issues.push({origin:s0(D),...j?{code:"too_big",maximum:$.size}:{code:"too_small",minimum:$.size},inclusive:!0,exact:!0,input:U.value,inst:_,continue:!$.abort})}}),x2=Y("$ZodCheckMaxLength",(_,$)=>{var g;G_.init(_,$),(g=_._zod.def).when??(g.when=(U)=>{let D=U.value;return!b6(D)&&D.length!==void 0}),_._zod.onattach.push((U)=>{let D=U._zod.bag.maximum??Number.POSITIVE_INFINITY;if($.maximum{let D=U.value;if(D.length<=$.maximum)return;let j=_D(D);U.issues.push({origin:j,code:"too_big",maximum:$.maximum,inclusive:!0,input:D,inst:_,continue:!$.abort})}}),y2=Y("$ZodCheckMinLength",(_,$)=>{var g;G_.init(_,$),(g=_._zod.def).when??(g.when=(U)=>{let D=U.value;return!b6(D)&&D.length!==void 0}),_._zod.onattach.push((U)=>{let D=U._zod.bag.minimum??Number.NEGATIVE_INFINITY;if($.minimum>D)U._zod.bag.minimum=$.minimum}),_._zod.check=(U)=>{let D=U.value;if(D.length>=$.minimum)return;let j=_D(D);U.issues.push({origin:j,code:"too_small",minimum:$.minimum,inclusive:!0,input:D,inst:_,continue:!$.abort})}}),c2=Y("$ZodCheckLengthEquals",(_,$)=>{var g;G_.init(_,$),(g=_._zod.def).when??(g.when=(U)=>{let D=U.value;return!b6(D)&&D.length!==void 0}),_._zod.onattach.push((U)=>{let D=U._zod.bag;D.minimum=$.length,D.maximum=$.length,D.length=$.length}),_._zod.check=(U)=>{let D=U.value,I=D.length;if(I===$.length)return;let j=_D(D),E=I>$.length;U.issues.push({origin:j,...E?{code:"too_big",maximum:$.length}:{code:"too_small",minimum:$.length},inclusive:!0,exact:!0,input:U.value,inst:_,continue:!$.abort})}}),C4=Y("$ZodCheckStringFormat",(_,$)=>{var g,U;if(G_.init(_,$),_._zod.onattach.push((D)=>{let I=D._zod.bag;if(I.format=$.format,$.pattern)I.patterns??(I.patterns=new Set),I.patterns.add($.pattern)}),$.pattern)(g=_._zod).check??(g.check=(D)=>{if($.pattern.lastIndex=0,$.pattern.test(D.value))return;D.issues.push({origin:"string",code:"invalid_format",format:$.format,input:D.value,...$.pattern?{pattern:$.pattern.toString()}:{},inst:_,continue:!$.abort})});else(U=_._zod).check??(U.check=()=>{})}),h2=Y("$ZodCheckRegex",(_,$)=>{C4.init(_,$),_._zod.check=(g)=>{if($.pattern.lastIndex=0,$.pattern.test(g.value))return;g.issues.push({origin:"string",code:"invalid_format",format:"regex",input:g.value,pattern:$.pattern.toString(),inst:_,continue:!$.abort})}}),n2=Y("$ZodCheckLowerCase",(_,$)=>{$.pattern??($.pattern=Z2),C4.init(_,$)}),d2=Y("$ZodCheckUpperCase",(_,$)=>{$.pattern??($.pattern=H2),C4.init(_,$)}),m2=Y("$ZodCheckIncludes",(_,$)=>{G_.init(_,$);let g=S$($.includes),U=new RegExp(typeof $.position==="number"?`^.{${$.position}}${g}`:g);$.pattern=U,_._zod.onattach.push((D)=>{let I=D._zod.bag;I.patterns??(I.patterns=new Set),I.patterns.add(U)}),_._zod.check=(D)=>{if(D.value.includes($.includes,$.position))return;D.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:$.includes,input:D.value,inst:_,continue:!$.abort})}}),i2=Y("$ZodCheckStartsWith",(_,$)=>{G_.init(_,$);let g=new RegExp(`^${S$($.prefix)}.*`);$.pattern??($.pattern=g),_._zod.onattach.push((U)=>{let D=U._zod.bag;D.patterns??(D.patterns=new Set),D.patterns.add(g)}),_._zod.check=(U)=>{if(U.value.startsWith($.prefix))return;U.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:$.prefix,input:U.value,inst:_,continue:!$.abort})}}),l2=Y("$ZodCheckEndsWith",(_,$)=>{G_.init(_,$);let g=new RegExp(`.*${S$($.suffix)}$`);$.pattern??($.pattern=g),_._zod.onattach.push((U)=>{let D=U._zod.bag;D.patterns??(D.patterns=new Set),D.patterns.add(g)}),_._zod.check=(U)=>{if(U.value.endsWith($.suffix))return;U.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:$.suffix,input:U.value,inst:_,continue:!$.abort})}});t2=Y("$ZodCheckProperty",(_,$)=>{G_.init(_,$),_._zod.check=(g)=>{let U=$.schema._zod.run({value:g.value[$.property],issues:[]},{});if(U instanceof Promise)return U.then((D)=>fR(D,g,$.property));fR(U,g,$.property);return}}),o2=Y("$ZodCheckMimeType",(_,$)=>{G_.init(_,$);let g=new Set($.mime);_._zod.onattach.push((U)=>{U._zod.bag.mime=$.mime}),_._zod.check=(U)=>{if(g.has(U.value.type))return;U.issues.push({code:"invalid_value",values:$.mime,input:U.value.type,inst:_,continue:!$.abort})}}),p2=Y("$ZodCheckOverwrite",(_,$)=>{G_.init(_,$),_._zod.check=(g)=>{g.value=$.tx(g.value)}})});class fI{constructor(_=[]){if(this.content=[],this.indent=0,this)this.args=_}indented(_){this.indent+=1,_(this),this.indent-=1}write(_){if(typeof _==="function"){_(this,{execution:"sync"}),_(this,{execution:"async"});return}let g=_.split(` +`).filter((I)=>I),U=Math.min(...g.map((I)=>I.length-I.trimStart().length)),D=g.map((I)=>I.slice(U)).map((I)=>" ".repeat(this.indent*2)+I);for(let I of D)this.content.push(I)}compile(){let _=Function,$=this?.args,U=[...(this?.content??[""]).map((D)=>` ${D}`)];return new _(...$,U.join(` +`))}}var e2;var a2=w(()=>{e2={major:4,minor:4,patch:3}});function YA(_){if(_==="")return!0;if(/\s/.test(_))return!1;if(_.length%4!==0)return!1;try{return atob(_),!0}catch{return!1}}function $G(_){if(!kI.test(_))return!1;let $=_.replace(/[-_]/g,(U)=>U==="-"?"+":"/"),g=$.padEnd(Math.ceil($.length/4)*4,"=");return YA(g)}function gG(_,$=null){try{let g=_.split(".");if(g.length!==3)return!1;let[U]=g;if(!U)return!1;let D=JSON.parse(atob(U));if("typ"in D&&D?.typ!=="JWT")return!1;if(!D.alg)return!1;if($&&(!("alg"in D)||D.alg!==$))return!1;return!0}catch{return!1}}function cR(_,$,g){if(_.issues.length)$.issues.push(...e_(g,_.issues));$.value[g]=_.value}function hI(_,$,g,U,D,I){let j=g in U;if(_.issues.length){if(D&&I&&!j)return;$.issues.push(...e_(g,_.issues))}if(!j&&!D){if(!_.issues.length)$.issues.push({code:"invalid_type",expected:"nonoptional",input:void 0,path:[g]});return}if(_.value===void 0){if(j)$.value[g]=void 0}else $.value[g]=_.value}function DG(_){let $=Object.keys(_.shape);for(let U of $)if(!_.shape?.[U]?._zod?.traits?.has("$ZodType"))throw Error(`Invalid element at key "${U}": expected a Zod schema`);let g=pN(_.shape);return{..._,keys:$,keySet:new Set($),numKeys:$.length,optionalKeys:new Set(g)}}function UG(_,$,g,U,D,I){let j=[],E=D.keySet,A=D.catchall._zod,O=A.def.type,P=A.optin==="optional",W=A.optout==="optional";for(let z in $){if(z==="__proto__")continue;if(E.has(z))continue;if(O==="never"){j.push(z);continue}let S=A.run({value:$[z],issues:[]},U);if(S instanceof Promise)_.push(S.then((L)=>hI(L,g,z,$,P,W)));else hI(S,g,z,$,P,W)}if(j.length)g.issues.push({code:"unrecognized_keys",keys:j,input:$,inst:I});if(!_.length)return g;return Promise.all(_).then(()=>{return g})}function hR(_,$,g,U){for(let I of _)if(I.issues.length===0)return $.value=I.value,$;let D=_.filter((I)=>!H6(I));if(D.length===1)return $.value=D[0].value,D[0];return $.issues.push({code:"invalid_union",input:$.value,inst:g,errors:_.map((I)=>I.issues.map((j)=>m_(j,U,F_())))}),$}function nR(_,$,g,U){let D=_.filter((I)=>I.issues.length===0);if(D.length===1)return $.value=D[0].value,$;if(D.length===0)$.issues.push({code:"invalid_union",input:$.value,inst:g,errors:_.map((I)=>I.issues.map((j)=>m_(j,U,F_())))});else $.issues.push({code:"invalid_union",input:$.value,inst:g,errors:[],inclusive:!1});return $}function s2(_,$){if(_===$)return{valid:!0,data:_};if(_ instanceof Date&&$ instanceof Date&&+_===+$)return{valid:!0,data:_};if(Z6(_)&&Z6($)){let g=Object.keys($),U=Object.keys(_).filter((I)=>g.indexOf(I)!==-1),D={..._,...$};for(let I of U){let j=s2(_[I],$[I]);if(!j.valid)return{valid:!1,mergeErrorPath:[I,...j.mergeErrorPath]};D[I]=j.data}return{valid:!0,data:D}}if(Array.isArray(_)&&Array.isArray($)){if(_.length!==$.length)return{valid:!1,mergeErrorPath:[]};let g=[];for(let U=0;U<_.length;U++){let D=_[U],I=$[U],j=s2(D,I);if(!j.valid)return{valid:!1,mergeErrorPath:[U,...j.mergeErrorPath]};g.push(j.data)}return{valid:!0,data:g}}return{valid:!1,mergeErrorPath:[]}}function dR(_,$,g){let U=new Map,D;for(let E of $.issues)if(E.code==="unrecognized_keys"){D??(D=E);for(let A of E.keys){if(!U.has(A))U.set(A,{});U.get(A).l=!0}}else _.issues.push(E);for(let E of g.issues)if(E.code==="unrecognized_keys")for(let A of E.keys){if(!U.has(A))U.set(A,{});U.get(A).r=!0}else _.issues.push(E);let I=[...U].filter(([,E])=>E.l&&E.r).map(([E])=>E);if(I.length&&D)_.issues.push({...D,keys:I});if(H6(_))return _;let j=s2($.value,g.value);if(!j.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(j.mergeErrorPath)}`);return _.value=j.data,_}function mR(_,$){for(let g=_.length-1;g>=0;g--)if(_[g]._zod[$]!=="optional")return g+1;return 0}function iR(_,$,g){if(_.issues.length)$.issues.push(...e_(g,_.issues));$.value[g]=_.value}function lR(_,$,g,U,D){for(let I=0;I=D){$.value.length=I;break}$.issues.push(...e_(I,j.issues))}$.value[I]=j.value}for(let I=$.value.length-1;I>=U.length;I--)if(g[I]._zod.optout==="optional"&&$.value[I]===void 0)$.value.length=I;else break;return $}function tR(_,$,g,U,D,I,j){if(_.issues.length)if(a0.has(typeof U))g.issues.push(...e_(U,_.issues));else g.issues.push({code:"invalid_key",origin:"map",input:D,inst:I,issues:_.issues.map((E)=>m_(E,j,F_()))});if($.issues.length)if(a0.has(typeof U))g.issues.push(...e_(U,$.issues));else g.issues.push({origin:"map",code:"invalid_element",input:D,inst:I,key:U,issues:$.issues.map((E)=>m_(E,j,F_()))});g.value.set(_.value,$.value)}function oR(_,$){if(_.issues.length)$.issues.push(..._.issues);$.value.add(_.value)}function pR(_,$){if($===void 0&&(_.issues.length||_.fallback))return{issues:[],value:void 0};return _}function eR(_,$){if(_.value===void 0)_.value=$.defaultValue;return _}function aR(_,$){if(!_.issues.length&&_.value===void 0)_.issues.push({code:"invalid_type",expected:"nonoptional",input:_.value,inst:$});return _}function xI(_,$,g){if(_.issues.length)return _.aborted=!0,_;return $._zod.run({value:_.value,issues:_.issues,fallback:_.fallback},g)}function yI(_,$,g){if(_.issues.length)return _.aborted=!0,_;if((g.direction||"forward")==="forward"){let D=$.transform(_.value,_);if(D instanceof Promise)return D.then((I)=>cI(_,I,$.out,g));return cI(_,D,$.out,g)}else{let D=$.reverseTransform(_.value,_);if(D instanceof Promise)return D.then((I)=>cI(_,I,$.in,g));return cI(_,D,$.in,g)}}function cI(_,$,g,U){if(_.issues.length)return _.aborted=!0,_;return g._zod.run({value:$,issues:_.issues},U)}function sR(_){return _.value=Object.freeze(_.value),_}function _G(_,$,g,U){if(!_){let D={code:"custom",input:g,inst:U,path:[...U._zod.def.path??[]],continue:!U._zod.def.abort};if(U._zod.def.params)D.params=U._zod.def.params;$.issues.push(F4(D))}}var l,zg,R_,_A,$A,gA,DA,UA,IA,jA,EA,NA,AA,OA,PA,SA,LA,WA,JA,zA,RA,GA,XA,QA,TA,KA,qA,BA,nI,VA,ID,dI,FA,rA,bA,MA,ZA,HA,kA,CA,vA,wA,IG,uA,jD,fA,xA,yA,mI,cA,hA,nA,dA,mA,iA,lA,iI,tA,oA,pA,eA,aA,sA,_O,$O,lI,ED,gO,DO,UO,IO,jO,EO,NO;var AO=w(()=>{uI();Lg();D2();CI();h();a2();h();l=Y("$ZodType",(_,$)=>{var g;_??(_={}),_._zod.def=$,_._zod.bag=_._zod.bag||{},_._zod.version=e2;let U=[..._._zod.def.checks??[]];if(_._zod.traits.has("$ZodCheck"))U.unshift(_);for(let D of U)for(let I of D._zod.onattach)I(_);if(U.length===0)(g=_._zod).deferred??(g.deferred=[]),_._zod.deferred?.push(()=>{_._zod.run=_._zod.parse});else{let D=(j,E,A)=>{let O=H6(j),P;for(let W of E){if(W._zod.def.when){if(sN(j))continue;if(!W._zod.def.when(j))continue}else if(O)continue;let z=j.issues.length,S=W._zod.check(j);if(S instanceof Promise&&A?.async===!1)throw new f$;if(P||S instanceof Promise)P=(P??Promise.resolve()).then(async()=>{if(await S,j.issues.length===z)return;if(!O)O=H6(j,z)});else{if(j.issues.length===z)continue;if(!O)O=H6(j,z)}}if(P)return P.then(()=>{return j});return j},I=(j,E,A)=>{if(H6(j))return j.aborted=!0,j;let O=D(E,U,A);if(O instanceof Promise){if(A.async===!1)throw new f$;return O.then((P)=>_._zod.parse(P,A))}return _._zod.parse(O,A)};_._zod.run=(j,E)=>{if(E.skipChecks)return _._zod.parse(j,E);if(E.direction==="backward"){let O=_._zod.parse({value:j.value,issues:[]},{...E,skipChecks:!0});if(O instanceof Promise)return O.then((P)=>{return I(P,j,E)});return I(O,j,E)}let A=_._zod.parse(j,E);if(A instanceof Promise){if(E.async===!1)throw new f$;return A.then((O)=>D(O,U,E))}return D(A,U,E)}}$_(_,"~standard",()=>({validate:(D)=>{try{let I=$2(_,D);return I.success?{value:I.data}:{issues:I.error?.issues}}catch(I){return g2(_,D).then((j)=>j.success?{value:j.data}:{issues:j.error?.issues})}},vendor:"zod",version:1}))}),zg=Y("$ZodString",(_,$)=>{l.init(_,$),_._zod.pattern=[..._?._zod.bag?.patterns??[]].pop()??B2(_._zod.bag),_._zod.parse=(g,U)=>{if($.coerce)try{g.value=String(g.value)}catch(D){}if(typeof g.value==="string")return g;return g.issues.push({expected:"string",code:"invalid_type",input:g.value,inst:_}),g}}),R_=Y("$ZodStringFormat",(_,$)=>{C4.init(_,$),zg.init(_,$)}),_A=Y("$ZodGUID",(_,$)=>{$.pattern??($.pattern=P2),R_.init(_,$)}),$A=Y("$ZodUUID",(_,$)=>{if($.version){let U={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[$.version];if(U===void 0)throw Error(`Invalid UUID version: "${$.version}"`);$.pattern??($.pattern=Jg(U))}else $.pattern??($.pattern=Jg());R_.init(_,$)}),gA=Y("$ZodEmail",(_,$)=>{$.pattern??($.pattern=S2),R_.init(_,$)}),DA=Y("$ZodURL",(_,$)=>{R_.init(_,$),_._zod.check=(g)=>{try{let U=g.value.trim();if(!$.normalize&&$.protocol?.source===Y2.source){if(!/^https?:\/\//i.test(U)){g.issues.push({code:"invalid_format",format:"url",note:"Invalid URL format",input:g.value,inst:_,continue:!$.abort});return}}let D=new URL(U);if($.hostname){if($.hostname.lastIndex=0,!$.hostname.test(D.hostname))g.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:$.hostname.source,input:g.value,inst:_,continue:!$.abort})}if($.protocol){if($.protocol.lastIndex=0,!$.protocol.test(D.protocol.endsWith(":")?D.protocol.slice(0,-1):D.protocol))g.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:$.protocol.source,input:g.value,inst:_,continue:!$.abort})}if($.normalize)g.value=D.href;else g.value=U;return}catch(U){g.issues.push({code:"invalid_format",format:"url",input:g.value,inst:_,continue:!$.abort})}}}),UA=Y("$ZodEmoji",(_,$)=>{$.pattern??($.pattern=L2()),R_.init(_,$)}),IA=Y("$ZodNanoID",(_,$)=>{$.pattern??($.pattern=A2),R_.init(_,$)}),jA=Y("$ZodCUID",(_,$)=>{$.pattern??($.pattern=U2),R_.init(_,$)}),EA=Y("$ZodCUID2",(_,$)=>{$.pattern??($.pattern=I2),R_.init(_,$)}),NA=Y("$ZodULID",(_,$)=>{$.pattern??($.pattern=j2),R_.init(_,$)}),AA=Y("$ZodXID",(_,$)=>{$.pattern??($.pattern=E2),R_.init(_,$)}),OA=Y("$ZodKSUID",(_,$)=>{$.pattern??($.pattern=N2),R_.init(_,$)}),PA=Y("$ZodISODateTime",(_,$)=>{$.pattern??($.pattern=q2($)),R_.init(_,$)}),SA=Y("$ZodISODate",(_,$)=>{$.pattern??($.pattern=T2),R_.init(_,$)}),LA=Y("$ZodISOTime",(_,$)=>{$.pattern??($.pattern=K2($)),R_.init(_,$)}),WA=Y("$ZodISODuration",(_,$)=>{$.pattern??($.pattern=O2),R_.init(_,$)}),JA=Y("$ZodIPv4",(_,$)=>{$.pattern??($.pattern=W2),R_.init(_,$),_._zod.bag.format="ipv4"}),zA=Y("$ZodIPv6",(_,$)=>{$.pattern??($.pattern=J2),R_.init(_,$),_._zod.bag.format="ipv6",_._zod.check=(g)=>{try{new URL(`http://[${g.value}]`)}catch{g.issues.push({code:"invalid_format",format:"ipv6",input:g.value,inst:_,continue:!$.abort})}}}),RA=Y("$ZodMAC",(_,$)=>{$.pattern??($.pattern=z2($.delimiter)),R_.init(_,$),_._zod.bag.format="mac"}),GA=Y("$ZodCIDRv4",(_,$)=>{$.pattern??($.pattern=R2),R_.init(_,$)}),XA=Y("$ZodCIDRv6",(_,$)=>{$.pattern??($.pattern=G2),R_.init(_,$),_._zod.check=(g)=>{let U=g.value.split("/");try{if(U.length!==2)throw Error();let[D,I]=U;if(!I)throw Error();let j=Number(I);if(`${j}`!==I)throw Error();if(j<0||j>128)throw Error();new URL(`http://[${D}]`)}catch{g.issues.push({code:"invalid_format",format:"cidrv6",input:g.value,inst:_,continue:!$.abort})}}});QA=Y("$ZodBase64",(_,$)=>{$.pattern??($.pattern=X2),R_.init(_,$),_._zod.bag.contentEncoding="base64",_._zod.check=(g)=>{if(YA(g.value))return;g.issues.push({code:"invalid_format",format:"base64",input:g.value,inst:_,continue:!$.abort})}});TA=Y("$ZodBase64URL",(_,$)=>{$.pattern??($.pattern=kI),R_.init(_,$),_._zod.bag.contentEncoding="base64url",_._zod.check=(g)=>{if($G(g.value))return;g.issues.push({code:"invalid_format",format:"base64url",input:g.value,inst:_,continue:!$.abort})}}),KA=Y("$ZodE164",(_,$)=>{$.pattern??($.pattern=Q2),R_.init(_,$)});qA=Y("$ZodJWT",(_,$)=>{R_.init(_,$),_._zod.check=(g)=>{if(gG(g.value,$.alg))return;g.issues.push({code:"invalid_format",format:"jwt",input:g.value,inst:_,continue:!$.abort})}}),BA=Y("$ZodCustomStringFormat",(_,$)=>{R_.init(_,$),_._zod.check=(g)=>{if($.fn(g.value))return;g.issues.push({code:"invalid_format",format:$.format,input:g.value,inst:_,continue:!$.abort})}}),nI=Y("$ZodNumber",(_,$)=>{l.init(_,$),_._zod.pattern=_._zod.bag.pattern??gD,_._zod.parse=(g,U)=>{if($.coerce)try{g.value=Number(g.value)}catch(j){}let D=g.value;if(typeof D==="number"&&!Number.isNaN(D)&&Number.isFinite(D))return g;let I=typeof D==="number"?Number.isNaN(D)?"NaN":!Number.isFinite(D)?"Infinity":void 0:void 0;return g.issues.push({expected:"number",code:"invalid_type",input:D,inst:_,...I?{received:I}:{}}),g}}),VA=Y("$ZodNumberFormat",(_,$)=>{C2.init(_,$),nI.init(_,$)}),ID=Y("$ZodBoolean",(_,$)=>{l.init(_,$),_._zod.pattern=r2,_._zod.parse=(g,U)=>{if($.coerce)try{g.value=Boolean(g.value)}catch(I){}let D=g.value;if(typeof D==="boolean")return g;return g.issues.push({expected:"boolean",code:"invalid_type",input:D,inst:_}),g}}),dI=Y("$ZodBigInt",(_,$)=>{l.init(_,$),_._zod.pattern=V2,_._zod.parse=(g,U)=>{if($.coerce)try{g.value=BigInt(g.value)}catch(D){}if(typeof g.value==="bigint")return g;return g.issues.push({expected:"bigint",code:"invalid_type",input:g.value,inst:_}),g}}),FA=Y("$ZodBigIntFormat",(_,$)=>{v2.init(_,$),dI.init(_,$)}),rA=Y("$ZodSymbol",(_,$)=>{l.init(_,$),_._zod.parse=(g,U)=>{let D=g.value;if(typeof D==="symbol")return g;return g.issues.push({expected:"symbol",code:"invalid_type",input:D,inst:_}),g}}),bA=Y("$ZodUndefined",(_,$)=>{l.init(_,$),_._zod.pattern=M2,_._zod.values=new Set([void 0]),_._zod.parse=(g,U)=>{let D=g.value;if(typeof D>"u")return g;return g.issues.push({expected:"undefined",code:"invalid_type",input:D,inst:_}),g}}),MA=Y("$ZodNull",(_,$)=>{l.init(_,$),_._zod.pattern=b2,_._zod.values=new Set([null]),_._zod.parse=(g,U)=>{let D=g.value;if(D===null)return g;return g.issues.push({expected:"null",code:"invalid_type",input:D,inst:_}),g}}),ZA=Y("$ZodAny",(_,$)=>{l.init(_,$),_._zod.parse=(g)=>g}),HA=Y("$ZodUnknown",(_,$)=>{l.init(_,$),_._zod.parse=(g)=>g}),kA=Y("$ZodNever",(_,$)=>{l.init(_,$),_._zod.parse=(g,U)=>{return g.issues.push({expected:"never",code:"invalid_type",input:g.value,inst:_}),g}}),CA=Y("$ZodVoid",(_,$)=>{l.init(_,$),_._zod.parse=(g,U)=>{let D=g.value;if(typeof D>"u")return g;return g.issues.push({expected:"void",code:"invalid_type",input:D,inst:_}),g}}),vA=Y("$ZodDate",(_,$)=>{l.init(_,$),_._zod.parse=(g,U)=>{if($.coerce)try{g.value=new Date(g.value)}catch(E){}let D=g.value,I=D instanceof Date;if(I&&!Number.isNaN(D.getTime()))return g;return g.issues.push({expected:"date",code:"invalid_type",input:D,...I?{received:"Invalid Date"}:{},inst:_}),g}});wA=Y("$ZodArray",(_,$)=>{l.init(_,$),_._zod.parse=(g,U)=>{let D=g.value;if(!Array.isArray(D))return g.issues.push({expected:"array",code:"invalid_type",input:D,inst:_}),g;g.value=Array(D.length);let I=[];for(let j=0;jcR(O,g,j)));else cR(A,g,j)}if(I.length)return Promise.all(I).then(()=>g);return g}});IG=Y("$ZodObject",(_,$)=>{if(l.init(_,$),!Object.getOwnPropertyDescriptor($,"shape")?.get){let E=$.shape;Object.defineProperty($,"shape",{get:()=>{let A={...E};return Object.defineProperty($,"shape",{value:A}),A}})}let U=V4(()=>DG($));$_(_._zod,"propValues",()=>{let E=$.shape,A={};for(let O in E){let P=E[O]._zod;if(P.values){A[O]??(A[O]=new Set);for(let W of P.values)A[O].add(W)}}return A});let D=Wg,I=$.catchall,j;_._zod.parse=(E,A)=>{j??(j=U.value);let O=E.value;if(!D(O))return E.issues.push({expected:"object",code:"invalid_type",input:O,inst:_}),E;E.value={};let P=[],W=j.shape;for(let z of j.keys){let S=W[z],L=S._zod.optin==="optional",J=S._zod.optout==="optional",R=S._zod.run({value:O[z],issues:[]},A);if(R instanceof Promise)P.push(R.then((X)=>hI(X,E,z,O,L,J)));else hI(R,E,z,O,L,J)}if(!I)return P.length?Promise.all(P).then(()=>E):E;return UG(P,O,E,A,U.value,_)}}),uA=Y("$ZodObjectJIT",(_,$)=>{IG.init(_,$);let g=_._zod.parse,U=V4(()=>DG($)),D=(z)=>{let S=new fI(["shape","payload","ctx"]),L=U.value,J=(B)=>{let Q=XI(B);return`shape[${Q}]._zod.run({ value: input[${Q}], issues: [] }, ctx)`};S.write("const input = payload.value;");let R=Object.create(null),X=0;for(let B of L.keys)R[B]=`key_${X++}`;S.write("const newResult = {};");for(let B of L.keys){let Q=R[B],T=XI(B),K=z[B],V=K?._zod?.optin==="optional",F=K?._zod?.optout==="optional";if(S.write(`const ${Q} = ${J(B)};`),V&&F)S.write(` if (${Q}.issues.length) { if (${T} in input) { payload.issues = payload.issues.concat(${Q}.issues.map(iss => ({ @@ -21,7 +21,7 @@ var e8=Object.create;var{getPrototypeOf:a8,defineProperty:BN,getOwnPropertyNames newResult[${T}] = ${Q}.value; } - `);else if(!K)J.write(` + `);else if(!V)S.write(` const ${Q}_present = ${T} in input; if (${Q}.issues.length) { payload.issues = payload.issues.concat(${Q}.issues.map(iss => ({ @@ -46,7 +46,7 @@ var e8=Object.create;var{getPrototypeOf:a8,defineProperty:BN,getOwnPropertyNames } } - `);else J.write(` + `);else S.write(` if (${Q}.issues.length) { payload.issues = payload.issues.concat(${Q}.issues.map(iss => ({ ...iss, @@ -62,44 +62,44 @@ var e8=Object.create;var{getPrototypeOf:a8,defineProperty:BN,getOwnPropertyNames newResult[${T}] = ${Q}.value; } - `)}J.write("payload.value = newResult;"),J.write("return payload;");let R=J.compile();return(V,Q)=>R(W,V,Q)},I,j=P4,N=!A4.jitless,A=N&&cE.value,L=$.catchall,z;_._zod.parse=(W,J)=>{z??(z=U.value);let P=W.value;if(!j(P))return W.issues.push({expected:"object",code:"invalid_type",input:P,inst:_}),W;if(N&&A&&J?.async===!1&&J.jitless!==!0){if(!I)I=g($.shape);if(W=I(W,J),!L)return W;return sX([],P,W,J,z,_)}return D(W,J)}});Ng=Y("$ZodUnion",(_,$)=>{l.init(_,$),$_(_._zod,"optin",()=>$.options.some((U)=>U._zod.optin==="optional")?"optional":void 0),$_(_._zod,"optout",()=>$.options.some((U)=>U._zod.optout==="optional")?"optional":void 0),$_(_._zod,"values",()=>{if($.options.every((U)=>U._zod.values))return new Set($.options.flatMap((U)=>Array.from(U._zod.values)));return}),$_(_._zod,"pattern",()=>{if($.options.every((U)=>U._zod.pattern)){let U=$.options.map((g)=>g._zod.pattern);return new RegExp(`^(${U.map((g)=>aD(g.source)).join("|")})$`)}return});let D=$.options.length===1?$.options[0]._zod.run:null;_._zod.parse=(U,g)=>{if(D)return D(U,g);let I=!1,j=[];for(let N of $.options){let O=N._zod.run({value:U.value,issues:[]},g);if(O instanceof Promise)j.push(O),I=!0;else{if(O.issues.length===0)return O;j.push(O)}}if(!I)return wX(j,U,_,g);return Promise.all(j).then((N)=>{return wX(N,U,_,g)})}});CO=Y("$ZodXor",(_,$)=>{Ng.init(_,$),$.inclusive=!1;let D=$.options.length===1?$.options[0]._zod.run:null;_._zod.parse=(U,g)=>{if(D)return D(U,g);let I=!1,j=[];for(let N of $.options){let O=N._zod.run({value:U.value,issues:[]},g);if(O instanceof Promise)j.push(O),I=!0;else j.push(O)}if(!I)return uX(j,U,_,g);return Promise.all(j).then((N)=>{return uX(N,U,_,g)})}}),vO=Y("$ZodDiscriminatedUnion",(_,$)=>{$.inclusive=!1,Ng.init(_,$);let D=_._zod.parse;$_(_._zod,"propValues",()=>{let g={};for(let I of $.options){let j=I._zod.propValues;if(!j||Object.keys(j).length===0)throw Error(`Invalid discriminated union option at index "${$.options.indexOf(I)}"`);for(let[N,O]of Object.entries(j)){if(!g[N])g[N]=new Set;for(let A of O)g[N].add(A)}}return g});let U=F0(()=>{let g=$.options,I=new Map;for(let j of g){let N=j._zod.propValues?.[$.discriminator];if(!N||N.size===0)throw Error(`Invalid discriminated union option at index "${$.options.indexOf(j)}"`);for(let O of N){if(I.has(O))throw Error(`Duplicate discriminator value "${String(O)}"`);I.set(O,j)}}return I});_._zod.parse=(g,I)=>{let j=g.value;if(!P4(j))return g.issues.push({code:"invalid_type",expected:"object",input:j,inst:_}),g;let N=U.value.get(j?.[$.discriminator]);if(N)return N._zod.run(g,I);if($.unionFallback||I.direction==="backward")return D(g,I);return g.issues.push({code:"invalid_union",errors:[],note:"No matching discriminator",discriminator:$.discriminator,options:Array.from(U.value.keys()),input:j,path:[$.discriminator],inst:_}),g}}),rO=Y("$ZodIntersection",(_,$)=>{l.init(_,$),_._zod.parse=(D,U)=>{let g=D.value,I=$.left._zod.run({value:g,issues:[]},U),j=$.right._zod.run({value:g,issues:[]},U);if(I instanceof Promise||j instanceof Promise)return Promise.all([I,j]).then(([O,A])=>{return xX(D,O,A)});return xX(D,I,j)}});iI=Y("$ZodTuple",(_,$)=>{l.init(_,$);let D=$.items;_._zod.parse=(U,g)=>{let I=U.value;if(!Array.isArray(I))return U.issues.push({input:I,inst:_,expected:"tuple",code:"invalid_type"}),U;U.value=[];let j=[],N=yX(D,"optin"),O=yX(D,"optout");if(!$.rest){if(I.lengthD.length)U.issues.push({code:"too_big",maximum:D.length,inclusive:!0,input:I,inst:_,origin:"array"})}let A=Array(D.length);for(let L=0;L{A[L]=W}));else A[L]=z}if($.rest){let L=D.length-1,z=I.slice(D.length);for(let W of z){L++;let J=$.rest._zod.run({value:W,issues:[]},g);if(J instanceof Promise)j.push(J.then((P)=>hX(P,U,L)));else hX(J,U,L)}}if(j.length)return Promise.all(j).then(()=>cX(A,U,D,I,O));return cX(A,U,D,I,O)}});fO=Y("$ZodRecord",(_,$)=>{l.init(_,$),_._zod.parse=(D,U)=>{let g=D.value;if(!b6(g))return D.issues.push({expected:"record",code:"invalid_type",input:g,inst:_}),D;let I=[],j=$.keyType._zod.values;if(j){D.value={};let N=new Set;for(let A of j)if(typeof A==="string"||typeof A==="number"||typeof A==="symbol"){N.add(typeof A==="number"?A.toString():A);let L=$.keyType._zod.run({value:A,issues:[]},U);if(L instanceof Promise)throw Error("Async schemas not supported in object keys currently");if(L.issues.length){D.issues.push({code:"invalid_key",origin:"record",issues:L.issues.map((J)=>l_(J,U,Z_())),input:A,path:[A],inst:_});continue}let z=L.value,W=$.valueType._zod.run({value:g[A],issues:[]},U);if(W instanceof Promise)I.push(W.then((J)=>{if(J.issues.length)D.issues.push(...s_(A,J.issues));D.value[z]=J.value}));else{if(W.issues.length)D.issues.push(...s_(A,W.issues));D.value[z]=W.value}}let O;for(let A in g)if(!N.has(A))O=O??[],O.push(A);if(O&&O.length>0)D.issues.push({code:"unrecognized_keys",input:g,inst:_,keys:O})}else{D.value={};for(let N of Reflect.ownKeys(g)){if(N==="__proto__")continue;if(!Object.prototype.propertyIsEnumerable.call(g,N))continue;let O=$.keyType._zod.run({value:N,issues:[]},U);if(O instanceof Promise)throw Error("Async schemas not supported in object keys currently");if(typeof N==="string"&&gg.test(N)&&O.issues.length){let z=$.keyType._zod.run({value:Number(N),issues:[]},U);if(z instanceof Promise)throw Error("Async schemas not supported in object keys currently");if(z.issues.length===0)O=z}if(O.issues.length){if($.mode==="loose")D.value[N]=g[N];else D.issues.push({code:"invalid_key",origin:"record",issues:O.issues.map((z)=>l_(z,U,Z_())),input:N,path:[N],inst:_});continue}let L=$.valueType._zod.run({value:g[N],issues:[]},U);if(L instanceof Promise)I.push(L.then((z)=>{if(z.issues.length)D.issues.push(...s_(N,z.issues));D.value[O.value]=z.value}));else{if(L.issues.length)D.issues.push(...s_(N,L.issues));D.value[O.value]=L.value}}}if(I.length)return Promise.all(I).then(()=>D);return D}}),wO=Y("$ZodMap",(_,$)=>{l.init(_,$),_._zod.parse=(D,U)=>{let g=D.value;if(!(g instanceof Map))return D.issues.push({expected:"map",code:"invalid_type",input:g,inst:_}),D;let I=[];D.value=new Map;for(let[j,N]of g){let O=$.keyType._zod.run({value:j,issues:[]},U),A=$.valueType._zod.run({value:N,issues:[]},U);if(O instanceof Promise||A instanceof Promise)I.push(Promise.all([O,A]).then(([L,z])=>{nX(L,z,D,j,g,_,U)}));else nX(O,A,D,j,g,_,U)}if(I.length)return Promise.all(I).then(()=>D);return D}});uO=Y("$ZodSet",(_,$)=>{l.init(_,$),_._zod.parse=(D,U)=>{let g=D.value;if(!(g instanceof Set))return D.issues.push({input:g,inst:_,expected:"set",code:"invalid_type"}),D;let I=[];D.value=new Set;for(let j of g){let N=$.valueType._zod.run({value:j,issues:[]},U);if(N instanceof Promise)I.push(N.then((O)=>dX(O,D)));else dX(N,D)}if(I.length)return Promise.all(I).then(()=>D);return D}});xO=Y("$ZodEnum",(_,$)=>{l.init(_,$);let D=eD($.entries),U=new Set(D);_._zod.values=U,_._zod.pattern=new RegExp(`^(${D.filter((g)=>sD.has(typeof g)).map((g)=>typeof g==="string"?P$(g):g.toString()).join("|")})$`),_._zod.parse=(g,I)=>{let j=g.value;if(U.has(j))return g;return g.issues.push({code:"invalid_value",values:D,input:j,inst:_}),g}}),yO=Y("$ZodLiteral",(_,$)=>{if(l.init(_,$),$.values.length===0)throw Error("Cannot create literal schema with no valid values");let D=new Set($.values);_._zod.values=D,_._zod.pattern=new RegExp(`^(${$.values.map((U)=>typeof U==="string"?P$(U):U?P$(U.toString()):String(U)).join("|")})$`),_._zod.parse=(U,g)=>{let I=U.value;if(D.has(I))return U;return U.issues.push({code:"invalid_value",values:$.values,input:I,inst:_}),U}}),hO=Y("$ZodFile",(_,$)=>{l.init(_,$),_._zod.parse=(D,U)=>{let g=D.value;if(g instanceof File)return D;return D.issues.push({expected:"file",code:"invalid_type",input:g,inst:_}),D}}),cO=Y("$ZodTransform",(_,$)=>{l.init(_,$),_._zod.optin="optional",_._zod.parse=(D,U)=>{if(U.direction==="backward")throw new L4(_.constructor.name);let g=$.transform(D.value,D);if(U.async)return(g instanceof Promise?g:Promise.resolve(g)).then((j)=>{return D.value=j,D.fallback=!0,D});if(g instanceof Promise)throw new x$;return D.value=g,D.fallback=!0,D}});lI=Y("$ZodOptional",(_,$)=>{l.init(_,$),_._zod.optin="optional",_._zod.optout="optional",$_(_._zod,"values",()=>{return $.innerType._zod.values?new Set([...$.innerType._zod.values,void 0]):void 0}),$_(_._zod,"pattern",()=>{let D=$.innerType._zod.pattern;return D?new RegExp(`^(${aD(D.source)})?$`):void 0}),_._zod.parse=(D,U)=>{if($.innerType._zod.optin==="optional"){let g=D.value,I=$.innerType._zod.run(D,U);if(I instanceof Promise)return I.then((j)=>mX(j,g));return mX(I,g)}if(D.value===void 0)return D;return $.innerType._zod.run(D,U)}}),nO=Y("$ZodExactOptional",(_,$)=>{lI.init(_,$),$_(_._zod,"values",()=>$.innerType._zod.values),$_(_._zod,"pattern",()=>$.innerType._zod.pattern),_._zod.parse=(D,U)=>{return $.innerType._zod.run(D,U)}}),dO=Y("$ZodNullable",(_,$)=>{l.init(_,$),$_(_._zod,"optin",()=>$.innerType._zod.optin),$_(_._zod,"optout",()=>$.innerType._zod.optout),$_(_._zod,"pattern",()=>{let D=$.innerType._zod.pattern;return D?new RegExp(`^(${aD(D.source)}|null)$`):void 0}),$_(_._zod,"values",()=>{return $.innerType._zod.values?new Set([...$.innerType._zod.values,null]):void 0}),_._zod.parse=(D,U)=>{if(D.value===null)return D;return $.innerType._zod.run(D,U)}}),mO=Y("$ZodDefault",(_,$)=>{l.init(_,$),_._zod.optin="optional",$_(_._zod,"values",()=>$.innerType._zod.values),_._zod.parse=(D,U)=>{if(U.direction==="backward")return $.innerType._zod.run(D,U);if(D.value===void 0)return D.value=$.defaultValue,D;let g=$.innerType._zod.run(D,U);if(g instanceof Promise)return g.then((I)=>iX(I,$));return iX(g,$)}});iO=Y("$ZodPrefault",(_,$)=>{l.init(_,$),_._zod.optin="optional",$_(_._zod,"values",()=>$.innerType._zod.values),_._zod.parse=(D,U)=>{if(U.direction==="backward")return $.innerType._zod.run(D,U);if(D.value===void 0)D.value=$.defaultValue;return $.innerType._zod.run(D,U)}}),lO=Y("$ZodNonOptional",(_,$)=>{l.init(_,$),$_(_._zod,"values",()=>{let D=$.innerType._zod.values;return D?new Set([...D].filter((U)=>U!==void 0)):void 0}),_._zod.parse=(D,U)=>{let g=$.innerType._zod.run(D,U);if(g instanceof Promise)return g.then((I)=>lX(I,_));return lX(g,_)}});tO=Y("$ZodSuccess",(_,$)=>{l.init(_,$),_._zod.parse=(D,U)=>{if(U.direction==="backward")throw new L4("ZodSuccess");let g=$.innerType._zod.run(D,U);if(g instanceof Promise)return g.then((I)=>{return D.value=I.issues.length===0,D});return D.value=g.issues.length===0,D}}),oO=Y("$ZodCatch",(_,$)=>{l.init(_,$),_._zod.optin="optional",$_(_._zod,"optout",()=>$.innerType._zod.optout),$_(_._zod,"values",()=>$.innerType._zod.values),_._zod.parse=(D,U)=>{if(U.direction==="backward")return $.innerType._zod.run(D,U);let g=$.innerType._zod.run(D,U);if(g instanceof Promise)return g.then((I)=>{if(D.value=I.value,I.issues.length)D.value=$.catchValue({...D,error:{issues:I.issues.map((j)=>l_(j,U,Z_()))},input:D.value}),D.issues=[],D.fallback=!0;return D});if(D.value=g.value,g.issues.length)D.value=$.catchValue({...D,error:{issues:g.issues.map((I)=>l_(I,U,Z_()))},input:D.value}),D.issues=[],D.fallback=!0;return D}}),pO=Y("$ZodNaN",(_,$)=>{l.init(_,$),_._zod.parse=(D,U)=>{if(typeof D.value!=="number"||!Number.isNaN(D.value))return D.issues.push({input:D.value,inst:_,expected:"nan",code:"invalid_type"}),D;return D}}),tI=Y("$ZodPipe",(_,$)=>{l.init(_,$),$_(_._zod,"values",()=>$.in._zod.values),$_(_._zod,"optin",()=>$.in._zod.optin),$_(_._zod,"optout",()=>$.out._zod.optout),$_(_._zod,"propValues",()=>$.in._zod.propValues),_._zod.parse=(D,U)=>{if(U.direction==="backward"){let I=$.out._zod.run(D,U);if(I instanceof Promise)return I.then((j)=>yI(j,$.in,U));return yI(I,$.in,U)}let g=$.in._zod.run(D,U);if(g instanceof Promise)return g.then((I)=>yI(I,$.out,U));return yI(g,$.out,U)}});Eg=Y("$ZodCodec",(_,$)=>{l.init(_,$),$_(_._zod,"values",()=>$.in._zod.values),$_(_._zod,"optin",()=>$.in._zod.optin),$_(_._zod,"optout",()=>$.out._zod.optout),$_(_._zod,"propValues",()=>$.in._zod.propValues),_._zod.parse=(D,U)=>{if((U.direction||"forward")==="forward"){let I=$.in._zod.run(D,U);if(I instanceof Promise)return I.then((j)=>hI(j,$,U));return hI(I,$,U)}else{let I=$.out._zod.run(D,U);if(I instanceof Promise)return I.then((j)=>hI(j,$,U));return hI(I,$,U)}}});eO=Y("$ZodPreprocess",(_,$)=>{tI.init(_,$)}),aO=Y("$ZodReadonly",(_,$)=>{l.init(_,$),$_(_._zod,"propValues",()=>$.innerType._zod.propValues),$_(_._zod,"values",()=>$.innerType._zod.values),$_(_._zod,"optin",()=>$.innerType?._zod?.optin),$_(_._zod,"optout",()=>$.innerType?._zod?.optout),_._zod.parse=(D,U)=>{if(U.direction==="backward")return $.innerType._zod.run(D,U);let g=$.innerType._zod.run(D,U);if(g instanceof Promise)return g.then(tX);return tX(g)}});sO=Y("$ZodTemplateLiteral",(_,$)=>{l.init(_,$);let D=[];for(let U of $.parts)if(typeof U==="object"&&U!==null){if(!U._zod.pattern)throw Error(`Invalid template literal part, no pattern found: ${[...U._zod.traits].shift()}`);let g=U._zod.pattern instanceof RegExp?U._zod.pattern.source:U._zod.pattern;if(!g)throw Error(`Invalid template literal part: ${U._zod.traits}`);let I=g.startsWith("^")?1:0,j=g.endsWith("$")?g.length-1:g.length;D.push(g.slice(I,j))}else if(U===null||dE.has(typeof U))D.push(P$(`${U}`));else throw Error(`Invalid template literal part: ${U}`);_._zod.pattern=new RegExp(`^${D.join("")}$`),_._zod.parse=(U,g)=>{if(typeof U.value!=="string")return U.issues.push({input:U.value,inst:_,expected:"string",code:"invalid_type"}),U;if(_._zod.pattern.lastIndex=0,!_._zod.pattern.test(U.value))return U.issues.push({input:U.value,inst:_,code:"invalid_format",format:$.format??"template_literal",pattern:_._zod.pattern.source}),U;return U}}),_A=Y("$ZodFunction",(_,$)=>{return l.init(_,$),_._def=$,_._zod.def=$,_.implement=(D)=>{if(typeof D!=="function")throw Error("implement() must be called with a function");return function(...U){let g=_._def.input?BI(_._def.input,U):U,I=Reflect.apply(D,this,g);if(_._def.output)return BI(_._def.output,I);return I}},_.implementAsync=(D)=>{if(typeof D!=="function")throw Error("implementAsync() must be called with a function");return async function(...U){let g=_._def.input?await VI(_._def.input,U):U,I=await Reflect.apply(D,this,g);if(_._def.output)return await VI(_._def.output,I);return I}},_._zod.parse=(D,U)=>{if(typeof D.value!=="function")return D.issues.push({code:"invalid_type",expected:"function",input:D.value,inst:_}),D;if(_._def.output&&_._def.output._zod.def.type==="promise")D.value=_.implementAsync(D.value);else D.value=_.implement(D.value);return D},_.input=(...D)=>{let U=_.constructor;if(Array.isArray(D[0]))return new U({type:"function",input:new iI({type:"tuple",items:D[0],rest:D[1]}),output:_._def.output});return new U({type:"function",input:D[0],output:_._def.output})},_.output=(D)=>{return new _.constructor({type:"function",input:_._def.input,output:D})},_}),$A=Y("$ZodPromise",(_,$)=>{l.init(_,$),_._zod.parse=(D,U)=>{return Promise.resolve(D.value).then((g)=>$.innerType._zod.run({value:g,issues:[]},U))}}),DA=Y("$ZodLazy",(_,$)=>{l.init(_,$),$_(_._zod,"innerType",()=>{let D=$;if(!D._cachedInner)D._cachedInner=$.getter();return D._cachedInner}),$_(_._zod,"pattern",()=>_._zod.innerType?._zod?.pattern),$_(_._zod,"propValues",()=>_._zod.innerType?._zod?.propValues),$_(_._zod,"optin",()=>_._zod.innerType?._zod?.optin??void 0),$_(_._zod,"optout",()=>_._zod.innerType?._zod?.optout??void 0),_._zod.parse=(D,U)=>{return _._zod.innerType._zod.run(D,U)}}),gA=Y("$ZodCustom",(_,$)=>{Y_.init(_,$),l.init(_,$),_._zod.parse=(D,U)=>{return D},_._zod.check=(D)=>{let U=D.value,g=$.fn(U);if(g instanceof Promise)return g.then((I)=>oX(I,D,U,_));oX(g,D,U,_);return}})});function IA(){return{localeError:IK()}}var IK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.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 ${g.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${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 ${I}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${N}`}case"invalid_value":if(g.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 ${F(g.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: ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${g.origin??"\u0627\u0644\u0642\u064A\u0645\u0629"} ${I} ${g.maximum.toString()} ${j.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 ${g.origin??"\u0627\u0644\u0642\u064A\u0645\u0629"} ${I} ${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${g.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${I} ${g.minimum.toString()} ${j.unit}`;return`\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${g.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${I} ${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.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 "${g.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;return`${D[I.format]??g.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 ${g.divisor}`;case"unrecognized_keys":return`\u0645\u0639\u0631\u0641${g.keys.length>1?"\u0627\u062A":""} \u063A\u0631\u064A\u0628${g.keys.length>1?"\u0629":""}: ${B(g.keys,"\u060C ")}`;case"invalid_key":return`\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${g.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 ${g.origin}`;default:return"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644"}}};var $5=f(()=>{c()});function jA(){return{localeError:jK()}}var jK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n instanceof ${g.expected}, daxil olan ${N}`;return`Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${I}, daxil olan ${N}`}case"invalid_value":if(g.values.length===1)return`Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${F(g.values[0])}`;return`Yanl\u0131\u015F se\xE7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${g.origin??"d\u0259y\u0259r"} ${I}${g.maximum.toString()} ${j.unit??"element"}`;return`\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${g.origin??"d\u0259y\u0259r"} ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${g.origin} ${I}${g.minimum.toString()} ${j.unit}`;return`\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${g.origin} ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Yanl\u0131\u015F m\u0259tn: "${I.prefix}" il\u0259 ba\u015Flamal\u0131d\u0131r`;if(I.format==="ends_with")return`Yanl\u0131\u015F m\u0259tn: "${I.suffix}" il\u0259 bitm\u0259lidir`;if(I.format==="includes")return`Yanl\u0131\u015F m\u0259tn: "${I.includes}" daxil olmal\u0131d\u0131r`;if(I.format==="regex")return`Yanl\u0131\u015F m\u0259tn: ${I.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`;return`Yanl\u0131\u015F ${D[I.format]??g.format}`}case"not_multiple_of":return`Yanl\u0131\u015F \u0259d\u0259d: ${g.divisor} il\u0259 b\xF6l\xFCn\u0259 bil\u0259n olmal\u0131d\u0131r`;case"unrecognized_keys":return`Tan\u0131nmayan a\xE7ar${g.keys.length>1?"lar":""}: ${B(g.keys,", ")}`;case"invalid_key":return`${g.origin} daxilind\u0259 yanl\u0131\u015F a\xE7ar`;case"invalid_union":return"Yanl\u0131\u015F d\u0259y\u0259r";case"invalid_element":return`${g.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`;default:return"Yanl\u0131\u015F d\u0259y\u0259r"}}};var D5=f(()=>{c()});function g5(_,$,D,U){let g=Math.abs(_),I=g%10,j=g%100;if(j>=11&&j<=19)return U;if(I===1)return $;if(I>=2&&I<=4)return D;return U}function NA(){return{localeError:NK()}}var NK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"\u043B\u0456\u043A",array:"\u043C\u0430\u0441\u0456\u045E"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.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 ${g.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${N}`;return`\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${I}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${N}`}case"invalid_value":if(g.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 ${F(g.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 ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j){let N=Number(g.maximum),O=g5(N,j.unit.one,j.unit.few,j.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 ${g.origin??"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${j.verb} ${I}${g.maximum.toString()} ${O}`}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 ${g.origin??"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j){let N=Number(g.minimum),O=g5(N,j.unit.one,j.unit.few,j.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 ${g.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${j.verb} ${I}${g.minimum.toString()} ${O}`}return`\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${g.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;return`\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${D[I.format]??g.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 ${g.divisor}`;case"unrecognized_keys":return`\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${g.keys.length>1?"\u043A\u043B\u044E\u0447\u044B":"\u043A\u043B\u044E\u0447"}: ${B(g.keys,", ")}`;case"invalid_key":return`\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${g.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 ${g.origin}`;default:return"\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434"}}};var U5=f(()=>{c()});function EA(){return{localeError:EK()}}var EK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"\u0447\u0438\u0441\u043B\u043E",array:"\u043C\u0430\u0441\u0438\u0432"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D instanceof ${g.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${N}`;return`\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${I}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${N}`}case"invalid_value":if(g.values.length===1)return`\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${F(g.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 ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${g.origin??"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442"} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${I}${g.maximum.toString()} ${j.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 ${g.origin??"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442"} \u0434\u0430 \u0431\u044A\u0434\u0435 ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${g.origin} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${I}${g.minimum.toString()} ${j.unit}`;return`\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${g.origin} \u0434\u0430 \u0431\u044A\u0434\u0435 ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;let j="\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D";if(I.format==="emoji")j="\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E";if(I.format==="datetime")j="\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E";if(I.format==="date")j="\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430";if(I.format==="time")j="\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E";if(I.format==="duration")j="\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430";return`${j} ${D[I.format]??g.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 ${g.divisor}`;case"unrecognized_keys":return`\u041D\u0435\u0440\u0430\u0437\u043F\u043E\u0437\u043D\u0430\u0442${g.keys.length>1?"\u0438":""} \u043A\u043B\u044E\u0447${g.keys.length>1?"\u043E\u0432\u0435":""}: ${B(g.keys,", ")}`;case"invalid_key":return`\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043A\u043B\u044E\u0447 \u0432 ${g.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 ${g.origin}`;default:return"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434"}}};var I5=f(()=>{c()});function OA(){return{localeError:OK()}}var OK=()=>{let _={string:{unit:"car\xE0cters",verb:"contenir"},file:{unit:"bytes",verb:"contenir"},array:{unit:"elements",verb:"contenir"},set:{unit:"elements",verb:"contenir"}};function $(g){return _[g]??null}let D={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"},U={nan:"NaN"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Tipus inv\xE0lid: s'esperava instanceof ${g.expected}, s'ha rebut ${N}`;return`Tipus inv\xE0lid: s'esperava ${I}, s'ha rebut ${N}`}case"invalid_value":if(g.values.length===1)return`Valor inv\xE0lid: s'esperava ${F(g.values[0])}`;return`Opci\xF3 inv\xE0lida: s'esperava una de ${B(g.values," o ")}`;case"too_big":{let I=g.inclusive?"com a m\xE0xim":"menys de",j=$(g.origin);if(j)return`Massa gran: s'esperava que ${g.origin??"el valor"} contingu\xE9s ${I} ${g.maximum.toString()} ${j.unit??"elements"}`;return`Massa gran: s'esperava que ${g.origin??"el valor"} fos ${I} ${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?"com a m\xEDnim":"m\xE9s de",j=$(g.origin);if(j)return`Massa petit: s'esperava que ${g.origin} contingu\xE9s ${I} ${g.minimum.toString()} ${j.unit}`;return`Massa petit: s'esperava que ${g.origin} fos ${I} ${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Format inv\xE0lid: ha de comen\xE7ar amb "${I.prefix}"`;if(I.format==="ends_with")return`Format inv\xE0lid: ha d'acabar amb "${I.suffix}"`;if(I.format==="includes")return`Format inv\xE0lid: ha d'incloure "${I.includes}"`;if(I.format==="regex")return`Format inv\xE0lid: ha de coincidir amb el patr\xF3 ${I.pattern}`;return`Format inv\xE0lid per a ${D[I.format]??g.format}`}case"not_multiple_of":return`N\xFAmero inv\xE0lid: ha de ser m\xFAltiple de ${g.divisor}`;case"unrecognized_keys":return`Clau${g.keys.length>1?"s":""} no reconeguda${g.keys.length>1?"s":""}: ${B(g.keys,", ")}`;case"invalid_key":return`Clau inv\xE0lida a ${g.origin}`;case"invalid_union":return"Entrada inv\xE0lida";case"invalid_element":return`Element inv\xE0lid a ${g.origin}`;default:return"Entrada inv\xE0lida"}}};var j5=f(()=>{c()});function AA(){return{localeError:AK()}}var AK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"\u010D\xEDslo",string:"\u0159et\u011Bzec",function:"funkce",array:"pole"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no instanceof ${g.expected}, obdr\u017Eeno ${N}`;return`Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${I}, obdr\u017Eeno ${N}`}case"invalid_value":if(g.values.length===1)return`Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${F(g.values[0])}`;return`Neplatn\xE1 mo\u017Enost: o\u010Dek\xE1v\xE1na jedna z hodnot ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${g.origin??"hodnota"} mus\xED m\xEDt ${I}${g.maximum.toString()} ${j.unit??"prvk\u016F"}`;return`Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${g.origin??"hodnota"} mus\xED b\xFDt ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${g.origin??"hodnota"} mus\xED m\xEDt ${I}${g.minimum.toString()} ${j.unit??"prvk\u016F"}`;return`Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${g.origin??"hodnota"} mus\xED b\xFDt ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Neplatn\xFD \u0159et\u011Bzec: mus\xED za\u010D\xEDnat na "${I.prefix}"`;if(I.format==="ends_with")return`Neplatn\xFD \u0159et\u011Bzec: mus\xED kon\u010Dit na "${I.suffix}"`;if(I.format==="includes")return`Neplatn\xFD \u0159et\u011Bzec: mus\xED obsahovat "${I.includes}"`;if(I.format==="regex")return`Neplatn\xFD \u0159et\u011Bzec: mus\xED odpov\xEDdat vzoru ${I.pattern}`;return`Neplatn\xFD form\xE1t ${D[I.format]??g.format}`}case"not_multiple_of":return`Neplatn\xE9 \u010D\xEDslo: mus\xED b\xFDt n\xE1sobkem ${g.divisor}`;case"unrecognized_keys":return`Nezn\xE1m\xE9 kl\xED\u010De: ${B(g.keys,", ")}`;case"invalid_key":return`Neplatn\xFD kl\xED\u010D v ${g.origin}`;case"invalid_union":return"Neplatn\xFD vstup";case"invalid_element":return`Neplatn\xE1 hodnota v ${g.origin}`;default:return"Neplatn\xFD vstup"}}};var N5=f(()=>{c()});function LA(){return{localeError:LK()}}var LK=()=>{let _={string:{unit:"tegn",verb:"havde"},file:{unit:"bytes",verb:"havde"},array:{unit:"elementer",verb:"indeholdt"},set:{unit:"elementer",verb:"indeholdt"}};function $(g){return _[g]??null}let D={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"},U={nan:"NaN",string:"streng",number:"tal",boolean:"boolean",array:"liste",object:"objekt",set:"s\xE6t",file:"fil"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Ugyldigt input: forventede instanceof ${g.expected}, fik ${N}`;return`Ugyldigt input: forventede ${I}, fik ${N}`}case"invalid_value":if(g.values.length===1)return`Ugyldig v\xE6rdi: forventede ${F(g.values[0])}`;return`Ugyldigt valg: forventede en af f\xF8lgende ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin),N=U[g.origin]??g.origin;if(j)return`For stor: forventede ${N??"value"} ${j.verb} ${I} ${g.maximum.toString()} ${j.unit??"elementer"}`;return`For stor: forventede ${N??"value"} havde ${I} ${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin),N=U[g.origin]??g.origin;if(j)return`For lille: forventede ${N} ${j.verb} ${I} ${g.minimum.toString()} ${j.unit}`;return`For lille: forventede ${N} havde ${I} ${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Ugyldig streng: skal starte med "${I.prefix}"`;if(I.format==="ends_with")return`Ugyldig streng: skal ende med "${I.suffix}"`;if(I.format==="includes")return`Ugyldig streng: skal indeholde "${I.includes}"`;if(I.format==="regex")return`Ugyldig streng: skal matche m\xF8nsteret ${I.pattern}`;return`Ugyldig ${D[I.format]??g.format}`}case"not_multiple_of":return`Ugyldigt tal: skal v\xE6re deleligt med ${g.divisor}`;case"unrecognized_keys":return`${g.keys.length>1?"Ukendte n\xF8gler":"Ukendt n\xF8gle"}: ${B(g.keys,", ")}`;case"invalid_key":return`Ugyldig n\xF8gle i ${g.origin}`;case"invalid_union":return"Ugyldigt input: matcher ingen af de tilladte typer";case"invalid_element":return`Ugyldig v\xE6rdi i ${g.origin}`;default:return"Ugyldigt input"}}};var E5=f(()=>{c()});function JA(){return{localeError:JK()}}var JK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"Zahl",array:"Array"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Ung\xFCltige Eingabe: erwartet instanceof ${g.expected}, erhalten ${N}`;return`Ung\xFCltige Eingabe: erwartet ${I}, erhalten ${N}`}case"invalid_value":if(g.values.length===1)return`Ung\xFCltige Eingabe: erwartet ${F(g.values[0])}`;return`Ung\xFCltige Option: erwartet eine von ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Zu gro\xDF: erwartet, dass ${g.origin??"Wert"} ${I}${g.maximum.toString()} ${j.unit??"Elemente"} hat`;return`Zu gro\xDF: erwartet, dass ${g.origin??"Wert"} ${I}${g.maximum.toString()} ist`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Zu klein: erwartet, dass ${g.origin} ${I}${g.minimum.toString()} ${j.unit} hat`;return`Zu klein: erwartet, dass ${g.origin} ${I}${g.minimum.toString()} ist`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Ung\xFCltiger String: muss mit "${I.prefix}" beginnen`;if(I.format==="ends_with")return`Ung\xFCltiger String: muss mit "${I.suffix}" enden`;if(I.format==="includes")return`Ung\xFCltiger String: muss "${I.includes}" enthalten`;if(I.format==="regex")return`Ung\xFCltiger String: muss dem Muster ${I.pattern} entsprechen`;return`Ung\xFCltig: ${D[I.format]??g.format}`}case"not_multiple_of":return`Ung\xFCltige Zahl: muss ein Vielfaches von ${g.divisor} sein`;case"unrecognized_keys":return`${g.keys.length>1?"Unbekannte Schl\xFCssel":"Unbekannter Schl\xFCssel"}: ${B(g.keys,", ")}`;case"invalid_key":return`Ung\xFCltiger Schl\xFCssel in ${g.origin}`;case"invalid_union":return"Ung\xFCltige Eingabe";case"invalid_element":return`Ung\xFCltiger Wert in ${g.origin}`;default:return"Ung\xFCltige Eingabe"}}};var O5=f(()=>{c()});function PA(){return{localeError:PK()}}var PK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(typeof g.expected==="string"&&/^[A-Z]/.test(g.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 ${g.expected}, \u03BB\u03AE\u03C6\u03B8\u03B7\u03BA\u03B5 ${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 ${I}, \u03BB\u03AE\u03C6\u03B8\u03B7\u03BA\u03B5 ${N}`}case"invalid_value":if(g.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 ${F(g.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 ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`\u03A0\u03BF\u03BB\u03CD \u03BC\u03B5\u03B3\u03AC\u03BB\u03BF: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${g.origin??"\u03C4\u03B9\u03BC\u03AE"} \u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9 ${I}${g.maximum.toString()} ${j.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 ${g.origin??"\u03C4\u03B9\u03BC\u03AE"} \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`\u03A0\u03BF\u03BB\u03CD \u03BC\u03B9\u03BA\u03C1\u03CC: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${g.origin} \u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9 ${I}${g.minimum.toString()} ${j.unit}`;return`\u03A0\u03BF\u03BB\u03CD \u03BC\u03B9\u03BA\u03C1\u03CC: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${g.origin} \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;return`\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF: ${D[I.format]??g.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 ${g.divisor}`;case"unrecognized_keys":return`\u0386\u03B3\u03BD\u03C9\u03C3\u03C4${g.keys.length>1?"\u03B1":"\u03BF"} \u03BA\u03BB\u03B5\u03B9\u03B4${g.keys.length>1?"\u03B9\u03AC":"\u03AF"}: ${B(g.keys,", ")}`;case"invalid_key":return`\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF \u03BA\u03BB\u03B5\u03B9\u03B4\u03AF \u03C3\u03C4\u03BF ${g.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 ${g.origin}`;default:return"\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2"}}};var A5=f(()=>{c()});function Og(){return{localeError:zK()}}var zK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;return`Invalid input: expected ${I}, received ${N}`}case"invalid_value":if(g.values.length===1)return`Invalid input: expected ${F(g.values[0])}`;return`Invalid option: expected one of ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Too big: expected ${g.origin??"value"} to have ${I}${g.maximum.toString()} ${j.unit??"elements"}`;return`Too big: expected ${g.origin??"value"} to be ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Too small: expected ${g.origin} to have ${I}${g.minimum.toString()} ${j.unit}`;return`Too small: expected ${g.origin} to be ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Invalid string: must start with "${I.prefix}"`;if(I.format==="ends_with")return`Invalid string: must end with "${I.suffix}"`;if(I.format==="includes")return`Invalid string: must include "${I.includes}"`;if(I.format==="regex")return`Invalid string: must match pattern ${I.pattern}`;return`Invalid ${D[I.format]??g.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${g.divisor}`;case"unrecognized_keys":return`Unrecognized key${g.keys.length>1?"s":""}: ${B(g.keys,", ")}`;case"invalid_key":return`Invalid key in ${g.origin}`;case"invalid_union":if(g.options&&Array.isArray(g.options)&&g.options.length>0)return`Invalid discriminator value. Expected ${g.options.map((j)=>`'${j}'`).join(" | ")}`;return"Invalid input";case"invalid_element":return`Invalid value in ${g.origin}`;default:return"Invalid input"}}};var zA=f(()=>{c()});function SA(){return{localeError:SK()}}var SK=()=>{let _={string:{unit:"karaktrojn",verb:"havi"},file:{unit:"bajtojn",verb:"havi"},array:{unit:"elementojn",verb:"havi"},set:{unit:"elementojn",verb:"havi"}};function $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"nombro",array:"tabelo",null:"senvalora"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Nevalida enigo: atendi\u011Dis instanceof ${g.expected}, ricevi\u011Dis ${N}`;return`Nevalida enigo: atendi\u011Dis ${I}, ricevi\u011Dis ${N}`}case"invalid_value":if(g.values.length===1)return`Nevalida enigo: atendi\u011Dis ${F(g.values[0])}`;return`Nevalida opcio: atendi\u011Dis unu el ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Tro granda: atendi\u011Dis ke ${g.origin??"valoro"} havu ${I}${g.maximum.toString()} ${j.unit??"elementojn"}`;return`Tro granda: atendi\u011Dis ke ${g.origin??"valoro"} havu ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Tro malgranda: atendi\u011Dis ke ${g.origin} havu ${I}${g.minimum.toString()} ${j.unit}`;return`Tro malgranda: atendi\u011Dis ke ${g.origin} estu ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Nevalida karaktraro: devas komenci\u011Di per "${I.prefix}"`;if(I.format==="ends_with")return`Nevalida karaktraro: devas fini\u011Di per "${I.suffix}"`;if(I.format==="includes")return`Nevalida karaktraro: devas inkluzivi "${I.includes}"`;if(I.format==="regex")return`Nevalida karaktraro: devas kongrui kun la modelo ${I.pattern}`;return`Nevalida ${D[I.format]??g.format}`}case"not_multiple_of":return`Nevalida nombro: devas esti oblo de ${g.divisor}`;case"unrecognized_keys":return`Nekonata${g.keys.length>1?"j":""} \u015Dlosilo${g.keys.length>1?"j":""}: ${B(g.keys,", ")}`;case"invalid_key":return`Nevalida \u015Dlosilo en ${g.origin}`;case"invalid_union":return"Nevalida enigo";case"invalid_element":return`Nevalida valoro en ${g.origin}`;default:return"Nevalida enigo"}}};var L5=f(()=>{c()});function WA(){return{localeError:WK()}}var WK=()=>{let _={string:{unit:"caracteres",verb:"tener"},file:{unit:"bytes",verb:"tener"},array:{unit:"elementos",verb:"tener"},set:{unit:"elementos",verb:"tener"}};function $(g){return _[g]??null}let D={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"},U={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(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Entrada inv\xE1lida: se esperaba instanceof ${g.expected}, recibido ${N}`;return`Entrada inv\xE1lida: se esperaba ${I}, recibido ${N}`}case"invalid_value":if(g.values.length===1)return`Entrada inv\xE1lida: se esperaba ${F(g.values[0])}`;return`Opci\xF3n inv\xE1lida: se esperaba una de ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin),N=U[g.origin]??g.origin;if(j)return`Demasiado grande: se esperaba que ${N??"valor"} tuviera ${I}${g.maximum.toString()} ${j.unit??"elementos"}`;return`Demasiado grande: se esperaba que ${N??"valor"} fuera ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin),N=U[g.origin]??g.origin;if(j)return`Demasiado peque\xF1o: se esperaba que ${N} tuviera ${I}${g.minimum.toString()} ${j.unit}`;return`Demasiado peque\xF1o: se esperaba que ${N} fuera ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Cadena inv\xE1lida: debe comenzar con "${I.prefix}"`;if(I.format==="ends_with")return`Cadena inv\xE1lida: debe terminar en "${I.suffix}"`;if(I.format==="includes")return`Cadena inv\xE1lida: debe incluir "${I.includes}"`;if(I.format==="regex")return`Cadena inv\xE1lida: debe coincidir con el patr\xF3n ${I.pattern}`;return`Inv\xE1lido ${D[I.format]??g.format}`}case"not_multiple_of":return`N\xFAmero inv\xE1lido: debe ser m\xFAltiplo de ${g.divisor}`;case"unrecognized_keys":return`Llave${g.keys.length>1?"s":""} desconocida${g.keys.length>1?"s":""}: ${B(g.keys,", ")}`;case"invalid_key":return`Llave inv\xE1lida en ${U[g.origin]??g.origin}`;case"invalid_union":return"Entrada inv\xE1lida";case"invalid_element":return`Valor inv\xE1lido en ${U[g.origin]??g.origin}`;default:return"Entrada inv\xE1lida"}}};var J5=f(()=>{c()});function XA(){return{localeError:XK()}}var XK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"\u0639\u062F\u062F",array:"\u0622\u0631\u0627\u06CC\u0647"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A instanceof ${g.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${N} \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 ${I} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${N} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`}case"invalid_value":if(g.values.length===1)return`\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${F(g.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 ${B(g.values,"|")} \u0645\u06CC\u200C\u0628\u0648\u062F`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${g.origin??"\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${I}${g.maximum.toString()} ${j.unit??"\u0639\u0646\u0635\u0631"} \u0628\u0627\u0634\u062F`;return`\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${g.origin??"\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${I}${g.maximum.toString()} \u0628\u0627\u0634\u062F`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${g.origin} \u0628\u0627\u06CC\u062F ${I}${g.minimum.toString()} ${j.unit} \u0628\u0627\u0634\u062F`;return`\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${g.origin} \u0628\u0627\u06CC\u062F ${I}${g.minimum.toString()} \u0628\u0627\u0634\u062F`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${I.prefix}" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`;if(I.format==="ends_with")return`\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${I.suffix}" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`;if(I.format==="includes")return`\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 "${I.includes}" \u0628\u0627\u0634\u062F`;if(I.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 ${I.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`;return`${D[I.format]??g.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 ${g.divisor} \u0628\u0627\u0634\u062F`;case"unrecognized_keys":return`\u06A9\u0644\u06CC\u062F${g.keys.length>1?"\u0647\u0627\u06CC":""} \u0646\u0627\u0634\u0646\u0627\u0633: ${B(g.keys,", ")}`;case"invalid_key":return`\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${g.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 ${g.origin}`;default:return"\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631"}}};var P5=f(()=>{c()});function RA(){return{localeError:RK()}}var RK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Virheellinen tyyppi: odotettiin instanceof ${g.expected}, oli ${N}`;return`Virheellinen tyyppi: odotettiin ${I}, oli ${N}`}case"invalid_value":if(g.values.length===1)return`Virheellinen sy\xF6te: t\xE4ytyy olla ${F(g.values[0])}`;return`Virheellinen valinta: t\xE4ytyy olla yksi seuraavista: ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Liian suuri: ${j.subject} t\xE4ytyy olla ${I}${g.maximum.toString()} ${j.unit}`.trim();return`Liian suuri: arvon t\xE4ytyy olla ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Liian pieni: ${j.subject} t\xE4ytyy olla ${I}${g.minimum.toString()} ${j.unit}`.trim();return`Liian pieni: arvon t\xE4ytyy olla ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Virheellinen sy\xF6te: t\xE4ytyy alkaa "${I.prefix}"`;if(I.format==="ends_with")return`Virheellinen sy\xF6te: t\xE4ytyy loppua "${I.suffix}"`;if(I.format==="includes")return`Virheellinen sy\xF6te: t\xE4ytyy sis\xE4lt\xE4\xE4 "${I.includes}"`;if(I.format==="regex")return`Virheellinen sy\xF6te: t\xE4ytyy vastata s\xE4\xE4nn\xF6llist\xE4 lauseketta ${I.pattern}`;return`Virheellinen ${D[I.format]??g.format}`}case"not_multiple_of":return`Virheellinen luku: t\xE4ytyy olla luvun ${g.divisor} monikerta`;case"unrecognized_keys":return`${g.keys.length>1?"Tuntemattomat avaimet":"Tuntematon avain"}: ${B(g.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"}}};var z5=f(()=>{c()});function GA(){return{localeError:GK()}}var GK=()=>{let _={string:{unit:"caract\xE8res",verb:"avoir"},file:{unit:"octets",verb:"avoir"},array:{unit:"\xE9l\xE9ments",verb:"avoir"},set:{unit:"\xE9l\xE9ments",verb:"avoir"}};function $(g){return _[g]??null}let D={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"},U={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(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Entr\xE9e invalide : instanceof ${g.expected} attendu, ${N} re\xE7u`;return`Entr\xE9e invalide : ${I} attendu, ${N} re\xE7u`}case"invalid_value":if(g.values.length===1)return`Entr\xE9e invalide : ${F(g.values[0])} attendu`;return`Option invalide : une valeur parmi ${B(g.values,"|")} attendue`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Trop grand : ${U[g.origin]??"valeur"} doit ${j.verb} ${I}${g.maximum.toString()} ${j.unit??"\xE9l\xE9ment(s)"}`;return`Trop grand : ${U[g.origin]??"valeur"} doit \xEAtre ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Trop petit : ${U[g.origin]??"valeur"} doit ${j.verb} ${I}${g.minimum.toString()} ${j.unit}`;return`Trop petit : ${U[g.origin]??"valeur"} doit \xEAtre ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Cha\xEEne invalide : doit commencer par "${I.prefix}"`;if(I.format==="ends_with")return`Cha\xEEne invalide : doit se terminer par "${I.suffix}"`;if(I.format==="includes")return`Cha\xEEne invalide : doit inclure "${I.includes}"`;if(I.format==="regex")return`Cha\xEEne invalide : doit correspondre au mod\xE8le ${I.pattern}`;return`${D[I.format]??g.format} invalide`}case"not_multiple_of":return`Nombre invalide : doit \xEAtre un multiple de ${g.divisor}`;case"unrecognized_keys":return`Cl\xE9${g.keys.length>1?"s":""} non reconnue${g.keys.length>1?"s":""} : ${B(g.keys,", ")}`;case"invalid_key":return`Cl\xE9 invalide dans ${g.origin}`;case"invalid_union":return"Entr\xE9e invalide";case"invalid_element":return`Valeur invalide dans ${g.origin}`;default:return"Entr\xE9e invalide"}}};var S5=f(()=>{c()});function YA(){return{localeError:YK()}}var YK=()=>{let _={string:{unit:"caract\xE8res",verb:"avoir"},file:{unit:"octets",verb:"avoir"},array:{unit:"\xE9l\xE9ments",verb:"avoir"},set:{unit:"\xE9l\xE9ments",verb:"avoir"}};function $(g){return _[g]??null}let D={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"},U={nan:"NaN"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Entr\xE9e invalide : attendu instanceof ${g.expected}, re\xE7u ${N}`;return`Entr\xE9e invalide : attendu ${I}, re\xE7u ${N}`}case"invalid_value":if(g.values.length===1)return`Entr\xE9e invalide : attendu ${F(g.values[0])}`;return`Option invalide : attendu l'une des valeurs suivantes ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"\u2264":"<",j=$(g.origin);if(j)return`Trop grand : attendu que ${g.origin??"la valeur"} ait ${I}${g.maximum.toString()} ${j.unit}`;return`Trop grand : attendu que ${g.origin??"la valeur"} soit ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?"\u2265":">",j=$(g.origin);if(j)return`Trop petit : attendu que ${g.origin} ait ${I}${g.minimum.toString()} ${j.unit}`;return`Trop petit : attendu que ${g.origin} soit ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Cha\xEEne invalide : doit commencer par "${I.prefix}"`;if(I.format==="ends_with")return`Cha\xEEne invalide : doit se terminer par "${I.suffix}"`;if(I.format==="includes")return`Cha\xEEne invalide : doit inclure "${I.includes}"`;if(I.format==="regex")return`Cha\xEEne invalide : doit correspondre au motif ${I.pattern}`;return`${D[I.format]??g.format} invalide`}case"not_multiple_of":return`Nombre invalide : doit \xEAtre un multiple de ${g.divisor}`;case"unrecognized_keys":return`Cl\xE9${g.keys.length>1?"s":""} non reconnue${g.keys.length>1?"s":""} : ${B(g.keys,", ")}`;case"invalid_key":return`Cl\xE9 invalide dans ${g.origin}`;case"invalid_union":return"Entr\xE9e invalide";case"invalid_element":return`Valeur invalide dans ${g.origin}`;default:return"Entr\xE9e invalide"}}};var W5=f(()=>{c()});function QA(){return{localeError:QK()}}var QK=()=>{let _={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"}},$={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"}},D=(A)=>A?_[A]:void 0,U=(A)=>{let L=D(A);if(L)return L.label;return A??_.unknown.label},g=(A)=>`\u05D4${U(A)}`,I=(A)=>{return(D(A)?.gender??"m")==="f"?"\u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05D9\u05D5\u05EA":"\u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA"},j=(A)=>{if(!A)return null;return $[A]??null},N={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"}},O={nan:"NaN"};return(A)=>{switch(A.code){case"invalid_type":{let L=A.expected,z=O[L??""]??U(L),W=M(A.input),J=O[W]??_[W]?.label??W;if(/^[A-Z]/.test(A.expected))return`\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA instanceof ${A.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${J}`;return`\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${z}, \u05D4\u05EA\u05E7\u05D1\u05DC ${J}`}case"invalid_value":{if(A.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 ${F(A.values[0])}`;let L=A.values.map((J)=>F(J));if(A.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 ${L[0]} \u05D0\u05D5 ${L[1]}`;let z=L[L.length-1];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 ${L.slice(0,-1).join(", ")} \u05D0\u05D5 ${z}`}case"too_big":{let L=j(A.origin),z=g(A.origin??"value");if(A.origin==="string")return`${L?.longLabel??"\u05D0\u05E8\u05D5\u05DA"} \u05DE\u05D3\u05D9: ${z} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${A.maximum.toString()} ${L?.unit??""} ${A.inclusive?"\u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA":"\u05DC\u05DB\u05DC \u05D4\u05D9\u05D5\u05EA\u05E8"}`.trim();if(A.origin==="number"){let P=A.inclusive?`\u05E7\u05D8\u05DF \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${A.maximum}`:`\u05E7\u05D8\u05DF \u05DE-${A.maximum}`;return`\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${z} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${P}`}if(A.origin==="array"||A.origin==="set"){let P=A.origin==="set"?"\u05E6\u05E8\u05D9\u05DB\u05D4":"\u05E6\u05E8\u05D9\u05DA",S=A.inclusive?`${A.maximum} ${L?.unit??""} \u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA`:`\u05E4\u05D7\u05D5\u05EA \u05DE-${A.maximum} ${L?.unit??""}`;return`\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${z} ${P} \u05DC\u05D4\u05DB\u05D9\u05DC ${S}`.trim()}let W=A.inclusive?"<=":"<",J=I(A.origin??"value");if(L?.unit)return`${L.longLabel} \u05DE\u05D3\u05D9: ${z} ${J} ${W}${A.maximum.toString()} ${L.unit}`;return`${L?.longLabel??"\u05D2\u05D3\u05D5\u05DC"} \u05DE\u05D3\u05D9: ${z} ${J} ${W}${A.maximum.toString()}`}case"too_small":{let L=j(A.origin),z=g(A.origin??"value");if(A.origin==="string")return`${L?.shortLabel??"\u05E7\u05E6\u05E8"} \u05DE\u05D3\u05D9: ${z} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${A.minimum.toString()} ${L?.unit??""} ${A.inclusive?"\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8":"\u05DC\u05E4\u05D7\u05D5\u05EA"}`.trim();if(A.origin==="number"){let P=A.inclusive?`\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${A.minimum}`:`\u05D2\u05D3\u05D5\u05DC \u05DE-${A.minimum}`;return`\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${z} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${P}`}if(A.origin==="array"||A.origin==="set"){let P=A.origin==="set"?"\u05E6\u05E8\u05D9\u05DB\u05D4":"\u05E6\u05E8\u05D9\u05DA";if(A.minimum===1&&A.inclusive){let X=A.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: ${z} ${P} \u05DC\u05D4\u05DB\u05D9\u05DC ${X}`}let S=A.inclusive?`${A.minimum} ${L?.unit??""} \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8`:`\u05D9\u05D5\u05EA\u05E8 \u05DE-${A.minimum} ${L?.unit??""}`;return`\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${z} ${P} \u05DC\u05D4\u05DB\u05D9\u05DC ${S}`.trim()}let W=A.inclusive?">=":">",J=I(A.origin??"value");if(L?.unit)return`${L.shortLabel} \u05DE\u05D3\u05D9: ${z} ${J} ${W}${A.minimum.toString()} ${L.unit}`;return`${L?.shortLabel??"\u05E7\u05D8\u05DF"} \u05DE\u05D3\u05D9: ${z} ${J} ${W}${A.minimum.toString()}`}case"invalid_format":{let L=A;if(L.format==="starts_with")return`\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 "${L.prefix}"`;if(L.format==="ends_with")return`\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 "${L.suffix}"`;if(L.format==="includes")return`\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC "${L.includes}"`;if(L.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 ${L.pattern}`;let z=N[L.format],W=z?.label??L.format,P=(z?.gender??"m")==="f"?"\u05EA\u05E7\u05D9\u05E0\u05D4":"\u05EA\u05E7\u05D9\u05DF";return`${W} \u05DC\u05D0 ${P}`}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 ${A.divisor}`;case"unrecognized_keys":return`\u05DE\u05E4\u05EA\u05D7${A.keys.length>1?"\u05D5\u05EA":""} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${A.keys.length>1?"\u05D9\u05DD":"\u05D4"}: ${B(A.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":return`\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${g(A.origin??"array")}`;default:return"\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF"}}};var X5=f(()=>{c()});function TA(){return{localeError:TK()}}var TK=()=>{let _={string:{unit:"znakova",verb:"imati"},file:{unit:"bajtova",verb:"imati"},array:{unit:"stavki",verb:"imati"},set:{unit:"stavki",verb:"imati"}};function $(g){return _[g]??null}let D={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"},U={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(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Neispravan unos: o\u010Dekuje se instanceof ${g.expected}, a primljeno je ${N}`;return`Neispravan unos: o\u010Dekuje se ${I}, a primljeno je ${N}`}case"invalid_value":if(g.values.length===1)return`Neispravna vrijednost: o\u010Dekivano ${F(g.values[0])}`;return`Neispravna opcija: o\u010Dekivano jedno od ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin),N=U[g.origin]??g.origin;if(j)return`Preveliko: o\u010Dekivano da ${N??"vrijednost"} ima ${I}${g.maximum.toString()} ${j.unit??"elemenata"}`;return`Preveliko: o\u010Dekivano da ${N??"vrijednost"} bude ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin),N=U[g.origin]??g.origin;if(j)return`Premalo: o\u010Dekivano da ${N} ima ${I}${g.minimum.toString()} ${j.unit}`;return`Premalo: o\u010Dekivano da ${N} bude ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Neispravan tekst: mora zapo\u010Dinjati s "${I.prefix}"`;if(I.format==="ends_with")return`Neispravan tekst: mora zavr\u0161avati s "${I.suffix}"`;if(I.format==="includes")return`Neispravan tekst: mora sadr\u017Eavati "${I.includes}"`;if(I.format==="regex")return`Neispravan tekst: mora odgovarati uzorku ${I.pattern}`;return`Neispravna ${D[I.format]??g.format}`}case"not_multiple_of":return`Neispravan broj: mora biti vi\u0161ekratnik od ${g.divisor}`;case"unrecognized_keys":return`Neprepoznat${g.keys.length>1?"i klju\u010Devi":" klju\u010D"}: ${B(g.keys,", ")}`;case"invalid_key":return`Neispravan klju\u010D u ${U[g.origin]??g.origin}`;case"invalid_union":return"Neispravan unos";case"invalid_element":return`Neispravna vrijednost u ${U[g.origin]??g.origin}`;default:return"Neispravan unos"}}};var R5=f(()=>{c()});function qA(){return{localeError:qK()}}var qK=()=>{let _={string:{unit:"karakter",verb:"legyen"},file:{unit:"byte",verb:"legyen"},array:{unit:"elem",verb:"legyen"},set:{unit:"elem",verb:"legyen"}};function $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"sz\xE1m",array:"t\xF6mb"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k instanceof ${g.expected}, a kapott \xE9rt\xE9k ${N}`;return`\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${I}, a kapott \xE9rt\xE9k ${N}`}case"invalid_value":if(g.values.length===1)return`\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${F(g.values[0])}`;return`\xC9rv\xE9nytelen opci\xF3: valamelyik \xE9rt\xE9k v\xE1rt ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`T\xFAl nagy: ${g.origin??"\xE9rt\xE9k"} m\xE9rete t\xFAl nagy ${I}${g.maximum.toString()} ${j.unit??"elem"}`;return`T\xFAl nagy: a bemeneti \xE9rt\xE9k ${g.origin??"\xE9rt\xE9k"} t\xFAl nagy: ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${g.origin} m\xE9rete t\xFAl kicsi ${I}${g.minimum.toString()} ${j.unit}`;return`T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${g.origin} t\xFAl kicsi ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`\xC9rv\xE9nytelen string: "${I.prefix}" \xE9rt\xE9kkel kell kezd\u0151dnie`;if(I.format==="ends_with")return`\xC9rv\xE9nytelen string: "${I.suffix}" \xE9rt\xE9kkel kell v\xE9gz\u0151dnie`;if(I.format==="includes")return`\xC9rv\xE9nytelen string: "${I.includes}" \xE9rt\xE9ket kell tartalmaznia`;if(I.format==="regex")return`\xC9rv\xE9nytelen string: ${I.pattern} mint\xE1nak kell megfelelnie`;return`\xC9rv\xE9nytelen ${D[I.format]??g.format}`}case"not_multiple_of":return`\xC9rv\xE9nytelen sz\xE1m: ${g.divisor} t\xF6bbsz\xF6r\xF6s\xE9nek kell lennie`;case"unrecognized_keys":return`Ismeretlen kulcs${g.keys.length>1?"s":""}: ${B(g.keys,", ")}`;case"invalid_key":return`\xC9rv\xE9nytelen kulcs ${g.origin}`;case"invalid_union":return"\xC9rv\xE9nytelen bemenet";case"invalid_element":return`\xC9rv\xE9nytelen \xE9rt\xE9k: ${g.origin}`;default:return"\xC9rv\xE9nytelen bemenet"}}};var G5=f(()=>{c()});function Y5(_,$,D){return Math.abs(_)===1?$:D}function f0(_){if(!_)return"";let $=["\u0561","\u0565","\u0568","\u056B","\u0578","\u0578\u0582","\u0585"],D=_[_.length-1];return _+($.includes(D)?"\u0576":"\u0568")}function BA(){return{localeError:BK()}}var BK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"\u0569\u056B\u057E",array:"\u0566\u0561\u0576\u0563\u057E\u0561\u056E"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.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 ${g.expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${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 ${I}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${N}`}case"invalid_value":if(g.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 ${F(g.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 ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j){let N=Number(g.maximum),O=Y5(N,j.unit.one,j.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 ${f0(g.origin??"\u0561\u0580\u056A\u0565\u0584")} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${I}${g.maximum.toString()} ${O}`}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 ${f0(g.origin??"\u0561\u0580\u056A\u0565\u0584")} \u056C\u056B\u0576\u056B ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j){let N=Number(g.minimum),O=Y5(N,j.unit.one,j.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 ${f0(g.origin)} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${I}${g.minimum.toString()} ${O}`}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 ${f0(g.origin)} \u056C\u056B\u0576\u056B ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057D\u056F\u057D\u057E\u056B "${I.prefix}"-\u0578\u057E`;if(I.format==="ends_with")return`\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0561\u057E\u0561\u0580\u057F\u057E\u056B "${I.suffix}"-\u0578\u057E`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern} \u0571\u0587\u0561\u0579\u0561\u0583\u056B\u0576`;return`\u054D\u056D\u0561\u056C ${D[I.format]??g.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 ${g.divisor}-\u056B`;case"unrecognized_keys":return`\u0549\u0573\u0561\u0576\u0561\u0579\u057E\u0561\u056E \u0562\u0561\u0576\u0561\u056C\u056B${g.keys.length>1?"\u0576\u0565\u0580":""}. ${B(g.keys,", ")}`;case"invalid_key":return`\u054D\u056D\u0561\u056C \u0562\u0561\u0576\u0561\u056C\u056B ${f0(g.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 ${f0(g.origin)}-\u0578\u0582\u0574`;default:return"\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574"}}};var Q5=f(()=>{c()});function VA(){return{localeError:VK()}}var VK=()=>{let _={string:{unit:"karakter",verb:"memiliki"},file:{unit:"byte",verb:"memiliki"},array:{unit:"item",verb:"memiliki"},set:{unit:"item",verb:"memiliki"}};function $(g){return _[g]??null}let D={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"},U={nan:"NaN"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Input tidak valid: diharapkan instanceof ${g.expected}, diterima ${N}`;return`Input tidak valid: diharapkan ${I}, diterima ${N}`}case"invalid_value":if(g.values.length===1)return`Input tidak valid: diharapkan ${F(g.values[0])}`;return`Pilihan tidak valid: diharapkan salah satu dari ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Terlalu besar: diharapkan ${g.origin??"value"} memiliki ${I}${g.maximum.toString()} ${j.unit??"elemen"}`;return`Terlalu besar: diharapkan ${g.origin??"value"} menjadi ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Terlalu kecil: diharapkan ${g.origin} memiliki ${I}${g.minimum.toString()} ${j.unit}`;return`Terlalu kecil: diharapkan ${g.origin} menjadi ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`String tidak valid: harus dimulai dengan "${I.prefix}"`;if(I.format==="ends_with")return`String tidak valid: harus berakhir dengan "${I.suffix}"`;if(I.format==="includes")return`String tidak valid: harus menyertakan "${I.includes}"`;if(I.format==="regex")return`String tidak valid: harus sesuai pola ${I.pattern}`;return`${D[I.format]??g.format} tidak valid`}case"not_multiple_of":return`Angka tidak valid: harus kelipatan dari ${g.divisor}`;case"unrecognized_keys":return`Kunci tidak dikenali ${g.keys.length>1?"s":""}: ${B(g.keys,", ")}`;case"invalid_key":return`Kunci tidak valid di ${g.origin}`;case"invalid_union":return"Input tidak valid";case"invalid_element":return`Nilai tidak valid di ${g.origin}`;default:return"Input tidak valid"}}};var T5=f(()=>{c()});function KA(){return{localeError:KK()}}var KK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"n\xFAmer",array:"fylki"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Rangt gildi: \xDE\xFA sl\xF3st inn ${N} \xFEar sem \xE1 a\xF0 vera instanceof ${g.expected}`;return`Rangt gildi: \xDE\xFA sl\xF3st inn ${N} \xFEar sem \xE1 a\xF0 vera ${I}`}case"invalid_value":if(g.values.length===1)return`Rangt gildi: gert r\xE1\xF0 fyrir ${F(g.values[0])}`;return`\xD3gilt val: m\xE1 vera eitt af eftirfarandi ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Of st\xF3rt: gert er r\xE1\xF0 fyrir a\xF0 ${g.origin??"gildi"} hafi ${I}${g.maximum.toString()} ${j.unit??"hluti"}`;return`Of st\xF3rt: gert er r\xE1\xF0 fyrir a\xF0 ${g.origin??"gildi"} s\xE9 ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Of l\xEDti\xF0: gert er r\xE1\xF0 fyrir a\xF0 ${g.origin} hafi ${I}${g.minimum.toString()} ${j.unit}`;return`Of l\xEDti\xF0: gert er r\xE1\xF0 fyrir a\xF0 ${g.origin} s\xE9 ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`\xD3gildur strengur: ver\xF0ur a\xF0 byrja \xE1 "${I.prefix}"`;if(I.format==="ends_with")return`\xD3gildur strengur: ver\xF0ur a\xF0 enda \xE1 "${I.suffix}"`;if(I.format==="includes")return`\xD3gildur strengur: ver\xF0ur a\xF0 innihalda "${I.includes}"`;if(I.format==="regex")return`\xD3gildur strengur: ver\xF0ur a\xF0 fylgja mynstri ${I.pattern}`;return`Rangt ${D[I.format]??g.format}`}case"not_multiple_of":return`R\xF6ng tala: ver\xF0ur a\xF0 vera margfeldi af ${g.divisor}`;case"unrecognized_keys":return`\xD3\xFEekkt ${g.keys.length>1?"ir lyklar":"ur lykill"}: ${B(g.keys,", ")}`;case"invalid_key":return`Rangur lykill \xED ${g.origin}`;case"invalid_union":return"Rangt gildi";case"invalid_element":return`Rangt gildi \xED ${g.origin}`;default:return"Rangt gildi"}}};var q5=f(()=>{c()});function FA(){return{localeError:FK()}}var FK=()=>{let _={string:{unit:"caratteri",verb:"avere"},file:{unit:"byte",verb:"avere"},array:{unit:"elementi",verb:"avere"},set:{unit:"elementi",verb:"avere"}};function $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"numero",array:"vettore"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Input non valido: atteso instanceof ${g.expected}, ricevuto ${N}`;return`Input non valido: atteso ${I}, ricevuto ${N}`}case"invalid_value":if(g.values.length===1)return`Input non valido: atteso ${F(g.values[0])}`;return`Opzione non valida: atteso uno tra ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Troppo grande: ${g.origin??"valore"} deve avere ${I}${g.maximum.toString()} ${j.unit??"elementi"}`;return`Troppo grande: ${g.origin??"valore"} deve essere ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Troppo piccolo: ${g.origin} deve avere ${I}${g.minimum.toString()} ${j.unit}`;return`Troppo piccolo: ${g.origin} deve essere ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Stringa non valida: deve iniziare con "${I.prefix}"`;if(I.format==="ends_with")return`Stringa non valida: deve terminare con "${I.suffix}"`;if(I.format==="includes")return`Stringa non valida: deve includere "${I.includes}"`;if(I.format==="regex")return`Stringa non valida: deve corrispondere al pattern ${I.pattern}`;return`Input non valido: ${D[I.format]??g.format}`}case"not_multiple_of":return`Numero non valido: deve essere un multiplo di ${g.divisor}`;case"unrecognized_keys":return`Chiav${g.keys.length>1?"i":"e"} non riconosciut${g.keys.length>1?"e":"a"}: ${B(g.keys,", ")}`;case"invalid_key":return`Chiave non valida in ${g.origin}`;case"invalid_union":return"Input non valido";case"invalid_element":return`Valore non valido in ${g.origin}`;default:return"Input non valido"}}};var B5=f(()=>{c()});function MA(){return{localeError:MK()}}var MK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"\u6570\u5024",array:"\u914D\u5217"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`\u7121\u52B9\u306A\u5165\u529B: instanceof ${g.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${N}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;return`\u7121\u52B9\u306A\u5165\u529B: ${I}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${N}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`}case"invalid_value":if(g.values.length===1)return`\u7121\u52B9\u306A\u5165\u529B: ${F(g.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`;return`\u7121\u52B9\u306A\u9078\u629E: ${B(g.values,"\u3001")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;case"too_big":{let I=g.inclusive?"\u4EE5\u4E0B\u3067\u3042\u308B":"\u3088\u308A\u5C0F\u3055\u3044",j=$(g.origin);if(j)return`\u5927\u304D\u3059\u304E\u308B\u5024: ${g.origin??"\u5024"}\u306F${g.maximum.toString()}${j.unit??"\u8981\u7D20"}${I}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;return`\u5927\u304D\u3059\u304E\u308B\u5024: ${g.origin??"\u5024"}\u306F${g.maximum.toString()}${I}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`}case"too_small":{let I=g.inclusive?"\u4EE5\u4E0A\u3067\u3042\u308B":"\u3088\u308A\u5927\u304D\u3044",j=$(g.origin);if(j)return`\u5C0F\u3055\u3059\u304E\u308B\u5024: ${g.origin}\u306F${g.minimum.toString()}${j.unit}${I}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;return`\u5C0F\u3055\u3059\u304E\u308B\u5024: ${g.origin}\u306F${g.minimum.toString()}${I}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`\u7121\u52B9\u306A\u6587\u5B57\u5217: "${I.prefix}"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;if(I.format==="ends_with")return`\u7121\u52B9\u306A\u6587\u5B57\u5217: "${I.suffix}"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;if(I.format==="includes")return`\u7121\u52B9\u306A\u6587\u5B57\u5217: "${I.includes}"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;if(I.format==="regex")return`\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${I.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;return`\u7121\u52B9\u306A${D[I.format]??g.format}`}case"not_multiple_of":return`\u7121\u52B9\u306A\u6570\u5024: ${g.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${g.keys.length>1?"\u7FA4":""}: ${B(g.keys,"\u3001")}`;case"invalid_key":return`${g.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`;case"invalid_union":return"\u7121\u52B9\u306A\u5165\u529B";case"invalid_element":return`${g.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`;default:return"\u7121\u52B9\u306A\u5165\u529B"}}};var V5=f(()=>{c()});function ZA(){return{localeError:ZK()}}var ZK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={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(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.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 ${g.expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${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 ${I}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${N}`}case"invalid_value":if(g.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 ${F(g.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 ${B(g.values,"|")}-\u10D3\u10D0\u10DC`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${g.origin??"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0"} ${j.verb} ${I}${g.maximum.toString()} ${j.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 ${g.origin??"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0"} \u10D8\u10E7\u10DD\u10E1 ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)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 ${g.origin} ${j.verb} ${I}${g.minimum.toString()} ${j.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 ${g.origin} \u10D8\u10E7\u10DD\u10E1 ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.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 "${I.prefix}"-\u10D8\u10D7`;if(I.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 "${I.suffix}"-\u10D8\u10D7`;if(I.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 "${I.includes}"-\u10E1`;if(I.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 ${I.pattern}`;return`\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 ${D[I.format]??g.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 ${g.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${g.keys.length>1?"\u10D4\u10D1\u10D8":"\u10D8"}: ${B(g.keys,", ")}`;case"invalid_key":return`\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1\u10D8 ${g.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 ${g.origin}-\u10E8\u10D8`;default:return"\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0"}}};var K5=f(()=>{c()});function Ag(){return{localeError:bK()}}var bK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={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(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.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 ${g.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${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 ${I} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${N}`}case"invalid_value":if(g.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 ${F(g.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 ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${g.origin??"\u178F\u1798\u17D2\u179B\u17C3"} ${I} ${g.maximum.toString()} ${j.unit??"\u1792\u17B6\u178F\u17BB"}`;return`\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${g.origin??"\u178F\u1798\u17D2\u179B\u17C3"} ${I} ${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${g.origin} ${I} ${g.minimum.toString()} ${j.unit}`;return`\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${g.origin} ${I} ${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;return`\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${D[I.format]??g.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 ${g.divisor}`;case"unrecognized_keys":return`\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${B(g.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 ${g.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 ${g.origin}`;default:return"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C"}}};var bA=f(()=>{c()});function HA(){return Ag()}var F5=f(()=>{bA()});function kA(){return{localeError:HK()}}var HK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 instanceof ${g.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${N}\uC785\uB2C8\uB2E4`;return`\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${I}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${N}\uC785\uB2C8\uB2E4`}case"invalid_value":if(g.values.length===1)return`\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${F(g.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`;return`\uC798\uBABB\uB41C \uC635\uC158: ${B(g.values,"\uB610\uB294 ")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`;case"too_big":{let I=g.inclusive?"\uC774\uD558":"\uBBF8\uB9CC",j=I==="\uBBF8\uB9CC"?"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4":"\uC5EC\uC57C \uD569\uB2C8\uB2E4",N=$(g.origin),O=N?.unit??"\uC694\uC18C";if(N)return`${g.origin??"\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${g.maximum.toString()}${O} ${I}${j}`;return`${g.origin??"\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${g.maximum.toString()} ${I}${j}`}case"too_small":{let I=g.inclusive?"\uC774\uC0C1":"\uCD08\uACFC",j=I==="\uC774\uC0C1"?"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4":"\uC5EC\uC57C \uD569\uB2C8\uB2E4",N=$(g.origin),O=N?.unit??"\uC694\uC18C";if(N)return`${g.origin??"\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${g.minimum.toString()}${O} ${I}${j}`;return`${g.origin??"\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${g.minimum.toString()} ${I}${j}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${I.prefix}"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`;if(I.format==="ends_with")return`\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${I.suffix}"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`;if(I.format==="includes")return`\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${I.includes}"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`;if(I.format==="regex")return`\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${I.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`;return`\uC798\uBABB\uB41C ${D[I.format]??g.format}`}case"not_multiple_of":return`\uC798\uBABB\uB41C \uC22B\uC790: ${g.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`;case"unrecognized_keys":return`\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${B(g.keys,", ")}`;case"invalid_key":return`\uC798\uBABB\uB41C \uD0A4: ${g.origin}`;case"invalid_union":return"\uC798\uBABB\uB41C \uC785\uB825";case"invalid_element":return`\uC798\uBABB\uB41C \uAC12: ${g.origin}`;default:return"\uC798\uBABB\uB41C \uC785\uB825"}}};var M5=f(()=>{c()});function Z5(_){let $=Math.abs(_),D=$%10,U=$%100;if(U>=11&&U<=19||D===0)return"many";if(D===1)return"one";return"few"}function CA(){return{localeError:kK()}}var Lg=(_)=>{return _.charAt(0).toUpperCase()+_.slice(1)},kK=()=>{let _={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 $(g,I,j,N){let O=_[g]??null;if(O===null)return O;return{unit:O.unit[I],verb:O.verb[N][j?"inclusive":"notInclusive"]}}let D={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"},U={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(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Gautas tipas ${N}, o tik\u0117tasi - instanceof ${g.expected}`;return`Gautas tipas ${N}, o tik\u0117tasi - ${I}`}case"invalid_value":if(g.values.length===1)return`Privalo b\u016Bti ${F(g.values[0])}`;return`Privalo b\u016Bti vienas i\u0161 ${B(g.values,"|")} pasirinkim\u0173`;case"too_big":{let I=U[g.origin]??g.origin,j=$(g.origin,Z5(Number(g.maximum)),g.inclusive??!1,"smaller");if(j?.verb)return`${Lg(I??g.origin??"reik\u0161m\u0117")} ${j.verb} ${g.maximum.toString()} ${j.unit??"element\u0173"}`;let N=g.inclusive?"ne didesnis kaip":"ma\u017Eesnis kaip";return`${Lg(I??g.origin??"reik\u0161m\u0117")} turi b\u016Bti ${N} ${g.maximum.toString()} ${j?.unit}`}case"too_small":{let I=U[g.origin]??g.origin,j=$(g.origin,Z5(Number(g.minimum)),g.inclusive??!1,"bigger");if(j?.verb)return`${Lg(I??g.origin??"reik\u0161m\u0117")} ${j.verb} ${g.minimum.toString()} ${j.unit??"element\u0173"}`;let N=g.inclusive?"ne ma\u017Eesnis kaip":"didesnis kaip";return`${Lg(I??g.origin??"reik\u0161m\u0117")} turi b\u016Bti ${N} ${g.minimum.toString()} ${j?.unit}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Eilut\u0117 privalo prasid\u0117ti "${I.prefix}"`;if(I.format==="ends_with")return`Eilut\u0117 privalo pasibaigti "${I.suffix}"`;if(I.format==="includes")return`Eilut\u0117 privalo \u012Ftraukti "${I.includes}"`;if(I.format==="regex")return`Eilut\u0117 privalo atitikti ${I.pattern}`;return`Neteisingas ${D[I.format]??g.format}`}case"not_multiple_of":return`Skai\u010Dius privalo b\u016Bti ${g.divisor} kartotinis.`;case"unrecognized_keys":return`Neatpa\u017Eint${g.keys.length>1?"i":"as"} rakt${g.keys.length>1?"ai":"as"}: ${B(g.keys,", ")}`;case"invalid_key":return"Rastas klaidingas raktas";case"invalid_union":return"Klaidinga \u012Fvestis";case"invalid_element":{let I=U[g.origin]??g.origin;return`${Lg(I??g.origin??"reik\u0161m\u0117")} turi klaiding\u0105 \u012Fvest\u012F`}default:return"Klaidinga \u012Fvestis"}}};var b5=f(()=>{c()});function vA(){return{localeError:CK()}}var CK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"\u0431\u0440\u043E\u0458",array:"\u043D\u0438\u0437\u0430"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 instanceof ${g.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${N}`;return`\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${I}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${N}`}case"invalid_value":if(g.values.length===1)return`Invalid input: expected ${F(g.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 ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${g.origin??"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0438\u043C\u0430 ${I}${g.maximum.toString()} ${j.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 ${g.origin??"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${g.origin} \u0434\u0430 \u0438\u043C\u0430 ${I}${g.minimum.toString()} ${j.unit}`;return`\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${g.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;return`Invalid ${D[I.format]??g.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 ${g.divisor}`;case"unrecognized_keys":return`${g.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"}: ${B(g.keys,", ")}`;case"invalid_key":return`\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${g.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 ${g.origin}`;default:return"\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441"}}};var H5=f(()=>{c()});function rA(){return{localeError:vK()}}var vK=()=>{let _={string:{unit:"aksara",verb:"mempunyai"},file:{unit:"bait",verb:"mempunyai"},array:{unit:"elemen",verb:"mempunyai"},set:{unit:"elemen",verb:"mempunyai"}};function $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"nombor"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Input tidak sah: dijangka instanceof ${g.expected}, diterima ${N}`;return`Input tidak sah: dijangka ${I}, diterima ${N}`}case"invalid_value":if(g.values.length===1)return`Input tidak sah: dijangka ${F(g.values[0])}`;return`Pilihan tidak sah: dijangka salah satu daripada ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Terlalu besar: dijangka ${g.origin??"nilai"} ${j.verb} ${I}${g.maximum.toString()} ${j.unit??"elemen"}`;return`Terlalu besar: dijangka ${g.origin??"nilai"} adalah ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Terlalu kecil: dijangka ${g.origin} ${j.verb} ${I}${g.minimum.toString()} ${j.unit}`;return`Terlalu kecil: dijangka ${g.origin} adalah ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`String tidak sah: mesti bermula dengan "${I.prefix}"`;if(I.format==="ends_with")return`String tidak sah: mesti berakhir dengan "${I.suffix}"`;if(I.format==="includes")return`String tidak sah: mesti mengandungi "${I.includes}"`;if(I.format==="regex")return`String tidak sah: mesti sepadan dengan corak ${I.pattern}`;return`${D[I.format]??g.format} tidak sah`}case"not_multiple_of":return`Nombor tidak sah: perlu gandaan ${g.divisor}`;case"unrecognized_keys":return`Kunci tidak dikenali: ${B(g.keys,", ")}`;case"invalid_key":return`Kunci tidak sah dalam ${g.origin}`;case"invalid_union":return"Input tidak sah";case"invalid_element":return`Nilai tidak sah dalam ${g.origin}`;default:return"Input tidak sah"}}};var k5=f(()=>{c()});function fA(){return{localeError:rK()}}var rK=()=>{let _={string:{unit:"tekens",verb:"heeft"},file:{unit:"bytes",verb:"heeft"},array:{unit:"elementen",verb:"heeft"},set:{unit:"elementen",verb:"heeft"}};function $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"getal"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Ongeldige invoer: verwacht instanceof ${g.expected}, ontving ${N}`;return`Ongeldige invoer: verwacht ${I}, ontving ${N}`}case"invalid_value":if(g.values.length===1)return`Ongeldige invoer: verwacht ${F(g.values[0])}`;return`Ongeldige optie: verwacht \xE9\xE9n van ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin),N=g.origin==="date"?"laat":g.origin==="string"?"lang":"groot";if(j)return`Te ${N}: verwacht dat ${g.origin??"waarde"} ${I}${g.maximum.toString()} ${j.unit??"elementen"} ${j.verb}`;return`Te ${N}: verwacht dat ${g.origin??"waarde"} ${I}${g.maximum.toString()} is`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin),N=g.origin==="date"?"vroeg":g.origin==="string"?"kort":"klein";if(j)return`Te ${N}: verwacht dat ${g.origin} ${I}${g.minimum.toString()} ${j.unit} ${j.verb}`;return`Te ${N}: verwacht dat ${g.origin} ${I}${g.minimum.toString()} is`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Ongeldige tekst: moet met "${I.prefix}" beginnen`;if(I.format==="ends_with")return`Ongeldige tekst: moet op "${I.suffix}" eindigen`;if(I.format==="includes")return`Ongeldige tekst: moet "${I.includes}" bevatten`;if(I.format==="regex")return`Ongeldige tekst: moet overeenkomen met patroon ${I.pattern}`;return`Ongeldig: ${D[I.format]??g.format}`}case"not_multiple_of":return`Ongeldig getal: moet een veelvoud van ${g.divisor} zijn`;case"unrecognized_keys":return`Onbekende key${g.keys.length>1?"s":""}: ${B(g.keys,", ")}`;case"invalid_key":return`Ongeldige key in ${g.origin}`;case"invalid_union":return"Ongeldige invoer";case"invalid_element":return`Ongeldige waarde in ${g.origin}`;default:return"Ongeldige invoer"}}};var C5=f(()=>{c()});function wA(){return{localeError:fK()}}var fK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"tall",array:"liste"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Ugyldig input: forventet instanceof ${g.expected}, fikk ${N}`;return`Ugyldig input: forventet ${I}, fikk ${N}`}case"invalid_value":if(g.values.length===1)return`Ugyldig verdi: forventet ${F(g.values[0])}`;return`Ugyldig valg: forventet en av ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`For stor(t): forventet ${g.origin??"value"} til \xE5 ha ${I}${g.maximum.toString()} ${j.unit??"elementer"}`;return`For stor(t): forventet ${g.origin??"value"} til \xE5 ha ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`For lite(n): forventet ${g.origin} til \xE5 ha ${I}${g.minimum.toString()} ${j.unit}`;return`For lite(n): forventet ${g.origin} til \xE5 ha ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Ugyldig streng: m\xE5 starte med "${I.prefix}"`;if(I.format==="ends_with")return`Ugyldig streng: m\xE5 ende med "${I.suffix}"`;if(I.format==="includes")return`Ugyldig streng: m\xE5 inneholde "${I.includes}"`;if(I.format==="regex")return`Ugyldig streng: m\xE5 matche m\xF8nsteret ${I.pattern}`;return`Ugyldig ${D[I.format]??g.format}`}case"not_multiple_of":return`Ugyldig tall: m\xE5 v\xE6re et multiplum av ${g.divisor}`;case"unrecognized_keys":return`${g.keys.length>1?"Ukjente n\xF8kler":"Ukjent n\xF8kkel"}: ${B(g.keys,", ")}`;case"invalid_key":return`Ugyldig n\xF8kkel i ${g.origin}`;case"invalid_union":return"Ugyldig input";case"invalid_element":return`Ugyldig verdi i ${g.origin}`;default:return"Ugyldig input"}}};var v5=f(()=>{c()});function uA(){return{localeError:wK()}}var wK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"numara",array:"saf",null:"gayb"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`F\xE2sit giren: umulan instanceof ${g.expected}, al\u0131nan ${N}`;return`F\xE2sit giren: umulan ${I}, al\u0131nan ${N}`}case"invalid_value":if(g.values.length===1)return`F\xE2sit giren: umulan ${F(g.values[0])}`;return`F\xE2sit tercih: m\xFBteberler ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Fazla b\xFCy\xFCk: ${g.origin??"value"}, ${I}${g.maximum.toString()} ${j.unit??"elements"} sahip olmal\u0131yd\u0131.`;return`Fazla b\xFCy\xFCk: ${g.origin??"value"}, ${I}${g.maximum.toString()} olmal\u0131yd\u0131.`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Fazla k\xFC\xE7\xFCk: ${g.origin}, ${I}${g.minimum.toString()} ${j.unit} sahip olmal\u0131yd\u0131.`;return`Fazla k\xFC\xE7\xFCk: ${g.origin}, ${I}${g.minimum.toString()} olmal\u0131yd\u0131.`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`F\xE2sit metin: "${I.prefix}" ile ba\u015Flamal\u0131.`;if(I.format==="ends_with")return`F\xE2sit metin: "${I.suffix}" ile bitmeli.`;if(I.format==="includes")return`F\xE2sit metin: "${I.includes}" ihtiv\xE2 etmeli.`;if(I.format==="regex")return`F\xE2sit metin: ${I.pattern} nak\u015F\u0131na uymal\u0131.`;return`F\xE2sit ${D[I.format]??g.format}`}case"not_multiple_of":return`F\xE2sit say\u0131: ${g.divisor} kat\u0131 olmal\u0131yd\u0131.`;case"unrecognized_keys":return`Tan\u0131nmayan anahtar ${g.keys.length>1?"s":""}: ${B(g.keys,", ")}`;case"invalid_key":return`${g.origin} i\xE7in tan\u0131nmayan anahtar var.`;case"invalid_union":return"Giren tan\u0131namad\u0131.";case"invalid_element":return`${g.origin} i\xE7in tan\u0131nmayan k\u0131ymet var.`;default:return"K\u0131ymet tan\u0131namad\u0131."}}};var r5=f(()=>{c()});function xA(){return{localeError:uK()}}var uK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"\u0639\u062F\u062F",array:"\u0627\u0631\u06D0"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F instanceof ${g.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${N} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;return`\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${I} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${N} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`}case"invalid_value":if(g.values.length===1)return`\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${F(g.values[0])} \u0648\u0627\u06CC`;return`\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${B(g.values,"|")} \u0685\u062E\u0647 \u0648\u0627\u06CC`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${g.origin??"\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${I}${g.maximum.toString()} ${j.unit??"\u0639\u0646\u0635\u0631\u0648\u0646\u0647"} \u0648\u0644\u0631\u064A`;return`\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${g.origin??"\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${I}${g.maximum.toString()} \u0648\u064A`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${g.origin} \u0628\u0627\u06CC\u062F ${I}${g.minimum.toString()} ${j.unit} \u0648\u0644\u0631\u064A`;return`\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${g.origin} \u0628\u0627\u06CC\u062F ${I}${g.minimum.toString()} \u0648\u064A`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${I.prefix}" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`;if(I.format==="ends_with")return`\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${I.suffix}" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`;if(I.format==="includes")return`\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F "${I.includes}" \u0648\u0644\u0631\u064A`;if(I.format==="regex")return`\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${I.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`;return`${D[I.format]??g.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`}case"not_multiple_of":return`\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${g.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`;case"unrecognized_keys":return`\u0646\u0627\u0633\u0645 ${g.keys.length>1?"\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647":"\u06A9\u0644\u06CC\u0689"}: ${B(g.keys,", ")}`;case"invalid_key":return`\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${g.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 ${g.origin} \u06A9\u06D0`;default:return"\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A"}}};var f5=f(()=>{c()});function yA(){return{localeError:xK()}}var xK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"liczba",array:"tablica"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano instanceof ${g.expected}, otrzymano ${N}`;return`Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${I}, otrzymano ${N}`}case"invalid_value":if(g.values.length===1)return`Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${F(g.values[0])}`;return`Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${g.origin??"warto\u015B\u0107"} b\u0119dzie mie\u0107 ${I}${g.maximum.toString()} ${j.unit??"element\xF3w"}`;return`Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${g.origin??"warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${g.origin??"warto\u015B\u0107"} b\u0119dzie mie\u0107 ${I}${g.minimum.toString()} ${j.unit??"element\xF3w"}`;return`Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${g.origin??"warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zaczyna\u0107 si\u0119 od "${I.prefix}"`;if(I.format==="ends_with")return`Nieprawid\u0142owy ci\u0105g znak\xF3w: musi ko\u0144czy\u0107 si\u0119 na "${I.suffix}"`;if(I.format==="includes")return`Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zawiera\u0107 "${I.includes}"`;if(I.format==="regex")return`Nieprawid\u0142owy ci\u0105g znak\xF3w: musi odpowiada\u0107 wzorcowi ${I.pattern}`;return`Nieprawid\u0142ow(y/a/e) ${D[I.format]??g.format}`}case"not_multiple_of":return`Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${g.divisor}`;case"unrecognized_keys":return`Nierozpoznane klucze${g.keys.length>1?"s":""}: ${B(g.keys,", ")}`;case"invalid_key":return`Nieprawid\u0142owy klucz w ${g.origin}`;case"invalid_union":return"Nieprawid\u0142owe dane wej\u015Bciowe";case"invalid_element":return`Nieprawid\u0142owa warto\u015B\u0107 w ${g.origin}`;default:return"Nieprawid\u0142owe dane wej\u015Bciowe"}}};var w5=f(()=>{c()});function hA(){return{localeError:yK()}}var yK=()=>{let _={string:{unit:"caracteres",verb:"ter"},file:{unit:"bytes",verb:"ter"},array:{unit:"itens",verb:"ter"},set:{unit:"itens",verb:"ter"}};function $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"n\xFAmero",null:"nulo"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Tipo inv\xE1lido: esperado instanceof ${g.expected}, recebido ${N}`;return`Tipo inv\xE1lido: esperado ${I}, recebido ${N}`}case"invalid_value":if(g.values.length===1)return`Entrada inv\xE1lida: esperado ${F(g.values[0])}`;return`Op\xE7\xE3o inv\xE1lida: esperada uma das ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Muito grande: esperado que ${g.origin??"valor"} tivesse ${I}${g.maximum.toString()} ${j.unit??"elementos"}`;return`Muito grande: esperado que ${g.origin??"valor"} fosse ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Muito pequeno: esperado que ${g.origin} tivesse ${I}${g.minimum.toString()} ${j.unit}`;return`Muito pequeno: esperado que ${g.origin} fosse ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Texto inv\xE1lido: deve come\xE7ar com "${I.prefix}"`;if(I.format==="ends_with")return`Texto inv\xE1lido: deve terminar com "${I.suffix}"`;if(I.format==="includes")return`Texto inv\xE1lido: deve incluir "${I.includes}"`;if(I.format==="regex")return`Texto inv\xE1lido: deve corresponder ao padr\xE3o ${I.pattern}`;return`${D[I.format]??g.format} inv\xE1lido`}case"not_multiple_of":return`N\xFAmero inv\xE1lido: deve ser m\xFAltiplo de ${g.divisor}`;case"unrecognized_keys":return`Chave${g.keys.length>1?"s":""} desconhecida${g.keys.length>1?"s":""}: ${B(g.keys,", ")}`;case"invalid_key":return`Chave inv\xE1lida em ${g.origin}`;case"invalid_union":return"Entrada inv\xE1lida";case"invalid_element":return`Valor inv\xE1lido em ${g.origin}`;default:return"Campo inv\xE1lido"}}};var u5=f(()=>{c()});function cA(){return{localeError:hK()}}var hK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={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(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;return`Intrare invalid\u0103: a\u0219teptat ${I}, primit ${N}`}case"invalid_value":if(g.values.length===1)return`Intrare invalid\u0103: a\u0219teptat ${F(g.values[0])}`;return`Op\u021Biune invalid\u0103: a\u0219teptat una dintre ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Prea mare: a\u0219teptat ca ${g.origin??"valoarea"} ${j.verb} ${I}${g.maximum.toString()} ${j.unit??"elemente"}`;return`Prea mare: a\u0219teptat ca ${g.origin??"valoarea"} s\u0103 fie ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Prea mic: a\u0219teptat ca ${g.origin} ${j.verb} ${I}${g.minimum.toString()} ${j.unit}`;return`Prea mic: a\u0219teptat ca ${g.origin} s\u0103 fie ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`\u0218ir invalid: trebuie s\u0103 \xEEnceap\u0103 cu "${I.prefix}"`;if(I.format==="ends_with")return`\u0218ir invalid: trebuie s\u0103 se termine cu "${I.suffix}"`;if(I.format==="includes")return`\u0218ir invalid: trebuie s\u0103 includ\u0103 "${I.includes}"`;if(I.format==="regex")return`\u0218ir invalid: trebuie s\u0103 se potriveasc\u0103 cu modelul ${I.pattern}`;return`Format invalid: ${D[I.format]??g.format}`}case"not_multiple_of":return`Num\u0103r invalid: trebuie s\u0103 fie multiplu de ${g.divisor}`;case"unrecognized_keys":return`Chei nerecunoscute: ${B(g.keys,", ")}`;case"invalid_key":return`Cheie invalid\u0103 \xEEn ${g.origin}`;case"invalid_union":return"Intrare invalid\u0103";case"invalid_element":return`Valoare invalid\u0103 \xEEn ${g.origin}`;default:return"Intrare invalid\u0103"}}};var x5=f(()=>{c()});function y5(_,$,D,U){let g=Math.abs(_),I=g%10,j=g%100;if(j>=11&&j<=19)return U;if(I===1)return $;if(I>=2&&I<=4)return D;return U}function nA(){return{localeError:cK()}}var cK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"\u0447\u0438\u0441\u043B\u043E",array:"\u043C\u0430\u0441\u0441\u0438\u0432"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C instanceof ${g.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${N}`;return`\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${I}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${N}`}case"invalid_value":if(g.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 ${F(g.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 ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j){let N=Number(g.maximum),O=y5(N,j.unit.one,j.unit.few,j.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 ${g.origin??"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${I}${g.maximum.toString()} ${O}`}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 ${g.origin??"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j){let N=Number(g.minimum),O=y5(N,j.unit.one,j.unit.few,j.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 ${g.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${I}${g.minimum.toString()} ${O}`}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 ${g.origin} \u0431\u0443\u0434\u0435\u0442 ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;return`\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${D[I.format]??g.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 ${g.divisor}`;case"unrecognized_keys":return`\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${g.keys.length>1?"\u044B\u0435":"\u044B\u0439"} \u043A\u043B\u044E\u0447${g.keys.length>1?"\u0438":""}: ${B(g.keys,", ")}`;case"invalid_key":return`\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${g.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 ${g.origin}`;default:return"\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435"}}};var h5=f(()=>{c()});function dA(){return{localeError:nK()}}var nK=()=>{let _={string:{unit:"znakov",verb:"imeti"},file:{unit:"bajtov",verb:"imeti"},array:{unit:"elementov",verb:"imeti"},set:{unit:"elementov",verb:"imeti"}};function $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"\u0161tevilo",array:"tabela"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Neveljaven vnos: pri\u010Dakovano instanceof ${g.expected}, prejeto ${N}`;return`Neveljaven vnos: pri\u010Dakovano ${I}, prejeto ${N}`}case"invalid_value":if(g.values.length===1)return`Neveljaven vnos: pri\u010Dakovano ${F(g.values[0])}`;return`Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Preveliko: pri\u010Dakovano, da bo ${g.origin??"vrednost"} imelo ${I}${g.maximum.toString()} ${j.unit??"elementov"}`;return`Preveliko: pri\u010Dakovano, da bo ${g.origin??"vrednost"} ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Premajhno: pri\u010Dakovano, da bo ${g.origin} imelo ${I}${g.minimum.toString()} ${j.unit}`;return`Premajhno: pri\u010Dakovano, da bo ${g.origin} ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Neveljaven niz: mora se za\u010Deti z "${I.prefix}"`;if(I.format==="ends_with")return`Neveljaven niz: mora se kon\u010Dati z "${I.suffix}"`;if(I.format==="includes")return`Neveljaven niz: mora vsebovati "${I.includes}"`;if(I.format==="regex")return`Neveljaven niz: mora ustrezati vzorcu ${I.pattern}`;return`Neveljaven ${D[I.format]??g.format}`}case"not_multiple_of":return`Neveljavno \u0161tevilo: mora biti ve\u010Dkratnik ${g.divisor}`;case"unrecognized_keys":return`Neprepoznan${g.keys.length>1?"i klju\u010Di":" klju\u010D"}: ${B(g.keys,", ")}`;case"invalid_key":return`Neveljaven klju\u010D v ${g.origin}`;case"invalid_union":return"Neveljaven vnos";case"invalid_element":return`Neveljavna vrednost v ${g.origin}`;default:return"Neveljaven vnos"}}};var c5=f(()=>{c()});function mA(){return{localeError:dK()}}var dK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"antal",array:"lista"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Ogiltig inmatning: f\xF6rv\xE4ntat instanceof ${g.expected}, fick ${N}`;return`Ogiltig inmatning: f\xF6rv\xE4ntat ${I}, fick ${N}`}case"invalid_value":if(g.values.length===1)return`Ogiltig inmatning: f\xF6rv\xE4ntat ${F(g.values[0])}`;return`Ogiltigt val: f\xF6rv\xE4ntade en av ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`F\xF6r stor(t): f\xF6rv\xE4ntade ${g.origin??"v\xE4rdet"} att ha ${I}${g.maximum.toString()} ${j.unit??"element"}`;return`F\xF6r stor(t): f\xF6rv\xE4ntat ${g.origin??"v\xE4rdet"} att ha ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`F\xF6r lite(t): f\xF6rv\xE4ntade ${g.origin??"v\xE4rdet"} att ha ${I}${g.minimum.toString()} ${j.unit}`;return`F\xF6r lite(t): f\xF6rv\xE4ntade ${g.origin??"v\xE4rdet"} att ha ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Ogiltig str\xE4ng: m\xE5ste b\xF6rja med "${I.prefix}"`;if(I.format==="ends_with")return`Ogiltig str\xE4ng: m\xE5ste sluta med "${I.suffix}"`;if(I.format==="includes")return`Ogiltig str\xE4ng: m\xE5ste inneh\xE5lla "${I.includes}"`;if(I.format==="regex")return`Ogiltig str\xE4ng: m\xE5ste matcha m\xF6nstret "${I.pattern}"`;return`Ogiltig(t) ${D[I.format]??g.format}`}case"not_multiple_of":return`Ogiltigt tal: m\xE5ste vara en multipel av ${g.divisor}`;case"unrecognized_keys":return`${g.keys.length>1?"Ok\xE4nda nycklar":"Ok\xE4nd nyckel"}: ${B(g.keys,", ")}`;case"invalid_key":return`Ogiltig nyckel i ${g.origin??"v\xE4rdet"}`;case"invalid_union":return"Ogiltig input";case"invalid_element":return`Ogiltigt v\xE4rde i ${g.origin??"v\xE4rdet"}`;default:return"Ogiltig input"}}};var n5=f(()=>{c()});function iA(){return{localeError:mK()}}var mK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"\u0B8E\u0BA3\u0BCD",array:"\u0B85\u0BA3\u0BBF",null:"\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.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 ${g.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${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 ${I}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${N}`}case"invalid_value":if(g.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 ${F(g.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 ${B(g.values,"|")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)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 ${g.origin??"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${I}${g.maximum.toString()} ${j.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 ${g.origin??"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${I}${g.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)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 ${g.origin} ${I}${g.minimum.toString()} ${j.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 ${g.origin} ${I}${g.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${I.prefix}" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;if(I.format==="ends_with")return`\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${I.suffix}" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;if(I.format==="includes")return`\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${I.includes}" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;if(I.format==="regex")return`\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${I.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 ${D[I.format]??g.format}`}case"not_multiple_of":return`\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${g.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${g.keys.length>1?"\u0B95\u0BB3\u0BCD":""}: ${B(g.keys,", ")}`;case"invalid_key":return`${g.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`${g.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"}}};var d5=f(()=>{c()});function lA(){return{localeError:iK()}}var iK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={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(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.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 ${g.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${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 ${I} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${N}`}case"invalid_value":if(g.values.length===1)return`\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${F(g.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 ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19":"\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32",j=$(g.origin);if(j)return`\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${g.origin??"\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${I} ${g.maximum.toString()} ${j.unit??"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23"}`;return`\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${g.origin??"\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${I} ${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?"\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22":"\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32",j=$(g.origin);if(j)return`\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${g.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${I} ${g.minimum.toString()} ${j.unit}`;return`\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${g.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${I} ${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`;if(I.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 ${I.pattern}`;return`\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${D[I.format]??g.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 ${g.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: ${B(g.keys,", ")}`;case"invalid_key":return`\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${g.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 ${g.origin}`;default:return"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07"}}};var m5=f(()=>{c()});function tA(){return{localeError:lK()}}var lK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Ge\xE7ersiz de\u011Fer: beklenen instanceof ${g.expected}, al\u0131nan ${N}`;return`Ge\xE7ersiz de\u011Fer: beklenen ${I}, al\u0131nan ${N}`}case"invalid_value":if(g.values.length===1)return`Ge\xE7ersiz de\u011Fer: beklenen ${F(g.values[0])}`;return`Ge\xE7ersiz se\xE7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`\xC7ok b\xFCy\xFCk: beklenen ${g.origin??"de\u011Fer"} ${I}${g.maximum.toString()} ${j.unit??"\xF6\u011Fe"}`;return`\xC7ok b\xFCy\xFCk: beklenen ${g.origin??"de\u011Fer"} ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`\xC7ok k\xFC\xE7\xFCk: beklenen ${g.origin} ${I}${g.minimum.toString()} ${j.unit}`;return`\xC7ok k\xFC\xE7\xFCk: beklenen ${g.origin} ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Ge\xE7ersiz metin: "${I.prefix}" ile ba\u015Flamal\u0131`;if(I.format==="ends_with")return`Ge\xE7ersiz metin: "${I.suffix}" ile bitmeli`;if(I.format==="includes")return`Ge\xE7ersiz metin: "${I.includes}" i\xE7ermeli`;if(I.format==="regex")return`Ge\xE7ersiz metin: ${I.pattern} desenine uymal\u0131`;return`Ge\xE7ersiz ${D[I.format]??g.format}`}case"not_multiple_of":return`Ge\xE7ersiz say\u0131: ${g.divisor} ile tam b\xF6l\xFCnebilmeli`;case"unrecognized_keys":return`Tan\u0131nmayan anahtar${g.keys.length>1?"lar":""}: ${B(g.keys,", ")}`;case"invalid_key":return`${g.origin} i\xE7inde ge\xE7ersiz anahtar`;case"invalid_union":return"Ge\xE7ersiz de\u011Fer";case"invalid_element":return`${g.origin} i\xE7inde ge\xE7ersiz de\u011Fer`;default:return"Ge\xE7ersiz de\u011Fer"}}};var i5=f(()=>{c()});function Jg(){return{localeError:tK()}}var tK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"\u0447\u0438\u0441\u043B\u043E",array:"\u043C\u0430\u0441\u0438\u0432"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.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 ${g.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${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 ${I}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${N}`}case"invalid_value":if(g.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 ${F(g.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 ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)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 ${g.origin??"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} ${j.verb} ${I}${g.maximum.toString()} ${j.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 ${g.origin??"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} \u0431\u0443\u0434\u0435 ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${g.origin} ${j.verb} ${I}${g.minimum.toString()} ${j.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 ${g.origin} \u0431\u0443\u0434\u0435 ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;return`\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${D[I.format]??g.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 ${g.divisor}`;case"unrecognized_keys":return`\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${g.keys.length>1?"\u0456":""}: ${B(g.keys,", ")}`;case"invalid_key":return`\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${g.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 ${g.origin}`;default:return"\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456"}}};var oA=f(()=>{c()});function pA(){return Jg()}var l5=f(()=>{oA()});function eA(){return{localeError:oK()}}var oK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"\u0646\u0645\u0628\u0631",array:"\u0622\u0631\u06D2",null:"\u0646\u0644"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: instanceof ${g.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${N} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;return`\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${I} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${N} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`}case"invalid_value":if(g.values.length===1)return`\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${F(g.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;return`\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${B(g.values,"|")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`\u0628\u06C1\u062A \u0628\u0691\u0627: ${g.origin??"\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u06D2 ${I}${g.maximum.toString()} ${j.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: ${g.origin??"\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u0627 ${I}${g.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${g.origin} \u06A9\u06D2 ${I}${g.minimum.toString()} ${j.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;return`\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${g.origin} \u06A9\u0627 ${I}${g.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${I.prefix}" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;if(I.format==="ends_with")return`\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${I.suffix}" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;if(I.format==="includes")return`\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${I.includes}" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;if(I.format==="regex")return`\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${I.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;return`\u063A\u0644\u0637 ${D[I.format]??g.format}`}case"not_multiple_of":return`\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${g.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${g.keys.length>1?"\u0632":""}: ${B(g.keys,"\u060C ")}`;case"invalid_key":return`${g.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`;case"invalid_union":return"\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679";case"invalid_element":return`${g.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`;default:return"\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679"}}};var t5=f(()=>{c()});function aA(){return{localeError:pK()}}var pK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"raqam",array:"massiv"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`Noto\u2018g\u2018ri kirish: kutilgan instanceof ${g.expected}, qabul qilingan ${N}`;return`Noto\u2018g\u2018ri kirish: kutilgan ${I}, qabul qilingan ${N}`}case"invalid_value":if(g.values.length===1)return`Noto\u2018g\u2018ri kirish: kutilgan ${F(g.values[0])}`;return`Noto\u2018g\u2018ri variant: quyidagilardan biri kutilgan ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Juda katta: kutilgan ${g.origin??"qiymat"} ${I}${g.maximum.toString()} ${j.unit} ${j.verb}`;return`Juda katta: kutilgan ${g.origin??"qiymat"} ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Juda kichik: kutilgan ${g.origin} ${I}${g.minimum.toString()} ${j.unit} ${j.verb}`;return`Juda kichik: kutilgan ${g.origin} ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Noto\u2018g\u2018ri satr: "${I.prefix}" bilan boshlanishi kerak`;if(I.format==="ends_with")return`Noto\u2018g\u2018ri satr: "${I.suffix}" bilan tugashi kerak`;if(I.format==="includes")return`Noto\u2018g\u2018ri satr: "${I.includes}" ni o\u2018z ichiga olishi kerak`;if(I.format==="regex")return`Noto\u2018g\u2018ri satr: ${I.pattern} shabloniga mos kelishi kerak`;return`Noto\u2018g\u2018ri ${D[I.format]??g.format}`}case"not_multiple_of":return`Noto\u2018g\u2018ri raqam: ${g.divisor} ning karralisi bo\u2018lishi kerak`;case"unrecognized_keys":return`Noma\u2019lum kalit${g.keys.length>1?"lar":""}: ${B(g.keys,", ")}`;case"invalid_key":return`${g.origin} dagi kalit noto\u2018g\u2018ri`;case"invalid_union":return"Noto\u2018g\u2018ri kirish";case"invalid_element":return`${g.origin} da noto\u2018g\u2018ri qiymat`;default:return"Noto\u2018g\u2018ri kirish"}}};var o5=f(()=>{c()});function sA(){return{localeError:eK()}}var eK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"s\u1ED1",array:"m\u1EA3ng"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i instanceof ${g.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${N}`;return`\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${I}, nh\u1EADn \u0111\u01B0\u1EE3c ${N}`}case"invalid_value":if(g.values.length===1)return`\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${F(g.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 ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${g.origin??"gi\xE1 tr\u1ECB"} ${j.verb} ${I}${g.maximum.toString()} ${j.unit??"ph\u1EA7n t\u1EED"}`;return`Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${g.origin??"gi\xE1 tr\u1ECB"} ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${g.origin} ${j.verb} ${I}${g.minimum.toString()} ${j.unit}`;return`Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${g.origin} ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng "${I.prefix}"`;if(I.format==="ends_with")return`Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\xFAc b\u1EB1ng "${I.suffix}"`;if(I.format==="includes")return`Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m "${I.includes}"`;if(I.format==="regex")return`Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${I.pattern}`;return`${D[I.format]??g.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 ${g.divisor}`;case"unrecognized_keys":return`Kh\xF3a kh\xF4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${B(g.keys,", ")}`;case"invalid_key":return`Kh\xF3a kh\xF4ng h\u1EE3p l\u1EC7 trong ${g.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 ${g.origin}`;default:return"\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7"}}};var p5=f(()=>{c()});function _L(){return{localeError:aK()}}var aK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"\u6570\u5B57",array:"\u6570\u7EC4",null:"\u7A7A\u503C(null)"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B instanceof ${g.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${N}`;return`\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${I}\uFF0C\u5B9E\u9645\u63A5\u6536 ${N}`}case"invalid_value":if(g.values.length===1)return`\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${F(g.values[0])}`;return`\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${g.origin??"\u503C"} ${I}${g.maximum.toString()} ${j.unit??"\u4E2A\u5143\u7D20"}`;return`\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${g.origin??"\u503C"} ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${g.origin} ${I}${g.minimum.toString()} ${j.unit}`;return`\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${g.origin} ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${I.prefix}" \u5F00\u5934`;if(I.format==="ends_with")return`\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${I.suffix}" \u7ED3\u5C3E`;if(I.format==="includes")return`\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B "${I.includes}"`;if(I.format==="regex")return`\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${I.pattern}`;return`\u65E0\u6548${D[I.format]??g.format}`}case"not_multiple_of":return`\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${g.divisor} \u7684\u500D\u6570`;case"unrecognized_keys":return`\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${B(g.keys,", ")}`;case"invalid_key":return`${g.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`;case"invalid_union":return"\u65E0\u6548\u8F93\u5165";case"invalid_element":return`${g.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`;default:return"\u65E0\u6548\u8F93\u5165"}}};var e5=f(()=>{c()});function $L(){return{localeError:sK()}}var sK=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA instanceof ${g.expected}\uFF0C\u4F46\u6536\u5230 ${N}`;return`\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${I}\uFF0C\u4F46\u6536\u5230 ${N}`}case"invalid_value":if(g.values.length===1)return`\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${F(g.values[0])}`;return`\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${g.origin??"\u503C"} \u61C9\u70BA ${I}${g.maximum.toString()} ${j.unit??"\u500B\u5143\u7D20"}`;return`\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${g.origin??"\u503C"} \u61C9\u70BA ${I}${g.maximum.toString()}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${g.origin} \u61C9\u70BA ${I}${g.minimum.toString()} ${j.unit}`;return`\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${g.origin} \u61C9\u70BA ${I}${g.minimum.toString()}`}case"invalid_format":{let I=g;if(I.format==="starts_with")return`\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${I.prefix}" \u958B\u982D`;if(I.format==="ends_with")return`\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${I.suffix}" \u7D50\u5C3E`;if(I.format==="includes")return`\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B "${I.includes}"`;if(I.format==="regex")return`\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${I.pattern}`;return`\u7121\u6548\u7684 ${D[I.format]??g.format}`}case"not_multiple_of":return`\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${g.divisor} \u7684\u500D\u6578`;case"unrecognized_keys":return`\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${g.keys.length>1?"\u5011":""}\uFF1A${B(g.keys,"\u3001")}`;case"invalid_key":return`${g.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`;case"invalid_union":return"\u7121\u6548\u7684\u8F38\u5165\u503C";case"invalid_element":return`${g.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`;default:return"\u7121\u6548\u7684\u8F38\u5165\u503C"}}};var a5=f(()=>{c()});function DL(){return{localeError:_F()}}var _F=()=>{let _={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 $(g){return _[g]??null}let D={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"},U={nan:"NaN",number:"n\u1ECD\u0301mb\xE0",array:"akop\u1ECD"};return(g)=>{switch(g.code){case"invalid_type":{let I=U[g.expected]??g.expected,j=M(g.input),N=U[j]??j;if(/^[A-Z]/.test(g.expected))return`\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi instanceof ${g.expected}, \xE0m\u1ECD\u0300 a r\xED ${N}`;return`\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi ${I}, \xE0m\u1ECD\u0300 a r\xED ${N}`}case"invalid_value":if(g.values.length===1)return`\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi ${F(g.values[0])}`;return`\xC0\u1E63\xE0y\xE0n a\u1E63\xEC\u1E63e: yan \u1ECD\u0300kan l\xE1ra ${B(g.values,"|")}`;case"too_big":{let I=g.inclusive?"<=":"<",j=$(g.origin);if(j)return`T\xF3 p\u1ECD\u0300 j\xF9: a n\xED l\xE1ti j\u1EB9\u0301 p\xE9 ${g.origin??"iye"} ${j.verb} ${I}${g.maximum} ${j.unit}`;return`T\xF3 p\u1ECD\u0300 j\xF9: a n\xED l\xE1ti j\u1EB9\u0301 ${I}${g.maximum}`}case"too_small":{let I=g.inclusive?">=":">",j=$(g.origin);if(j)return`K\xE9r\xE9 ju: a n\xED l\xE1ti j\u1EB9\u0301 p\xE9 ${g.origin} ${j.verb} ${I}${g.minimum} ${j.unit}`;return`K\xE9r\xE9 ju: a n\xED l\xE1ti j\u1EB9\u0301 ${I}${g.minimum}`}case"invalid_format":{let I=g;if(I.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 "${I.prefix}"`;if(I.format==="ends_with")return`\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 par\xED p\u1EB9\u0300l\xFA "${I.suffix}"`;if(I.format==="includes")return`\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 n\xED "${I.includes}"`;if(I.format==="regex")return`\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\xE1 \xE0p\u1EB9\u1EB9r\u1EB9 mu ${I.pattern}`;return`A\u1E63\xEC\u1E63e: ${D[I.format]??g.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 ${g.divisor}`;case"unrecognized_keys":return`B\u1ECDt\xECn\xEC \xE0\xECm\u1ECD\u0300: ${B(g.keys,", ")}`;case"invalid_key":return`B\u1ECDt\xECn\xEC a\u1E63\xEC\u1E63e n\xEDn\xFA ${g.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 ${g.origin}`;default:return"\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e"}}};var s5=f(()=>{c()});var w0={};v$(w0,{zhTW:()=>$L,zhCN:()=>_L,yo:()=>DL,vi:()=>sA,uz:()=>aA,ur:()=>eA,uk:()=>Jg,ua:()=>pA,tr:()=>tA,th:()=>lA,ta:()=>iA,sv:()=>mA,sl:()=>dA,ru:()=>nA,ro:()=>cA,pt:()=>hA,ps:()=>xA,pl:()=>yA,ota:()=>uA,no:()=>wA,nl:()=>fA,ms:()=>rA,mk:()=>vA,lt:()=>CA,ko:()=>kA,km:()=>Ag,kh:()=>HA,ka:()=>ZA,ja:()=>MA,it:()=>FA,is:()=>KA,id:()=>VA,hy:()=>BA,hu:()=>qA,hr:()=>TA,he:()=>QA,frCA:()=>YA,fr:()=>GA,fi:()=>RA,fa:()=>XA,es:()=>WA,eo:()=>SA,en:()=>Og,el:()=>PA,de:()=>JA,da:()=>LA,cs:()=>AA,ca:()=>OA,bg:()=>EA,be:()=>NA,az:()=>jA,ar:()=>IA});var gL=f(()=>{$5();D5();U5();I5();j5();N5();E5();O5();A5();zA();L5();J5();P5();z5();S5();W5();X5();R5();G5();Q5();T5();q5();B5();V5();K5();F5();bA();M5();b5();H5();k5();C5();v5();r5();f5();w5();u5();x5();h5();c5();n5();d5();m5();i5();l5();oA();t5();o5();p5();e5();a5();s5()});class UL{constructor(){this._map=new WeakMap,this._idmap=new Map}add(_,...$){let D=$[0];if(this._map.set(_,D),D&&typeof D==="object"&&"id"in D)this._idmap.set(D.id,_);return this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(_){let $=this._map.get(_);if($&&typeof $==="object"&&"id"in $)this._idmap.delete($.id);return this._map.delete(_),this}get(_){let $=_._zod.parent;if($){let D={...this.get($)??{}};delete D.id;let U={...D,...this._map.get(_)};return Object.keys(U).length?U:void 0}return this._map.get(_)}has(_){return this._map.has(_)}}function Pg(){return new UL}var _R,oI,pI,w_;var zg=f(()=>{oI=Symbol("ZodOutput"),pI=Symbol("ZodInput");(_R=globalThis).__zod_globalRegistry??(_R.__zod_globalRegistry=Pg());w_=globalThis.__zod_globalRegistry});function IL(_,$){return new _({type:"string",...C($)})}function jL(_,$){return new _({type:"string",coerce:!0,...C($)})}function eI(_,$){return new _({type:"string",format:"email",check:"string_format",abort:!1,...C($)})}function Sg(_,$){return new _({type:"string",format:"guid",check:"string_format",abort:!1,...C($)})}function aI(_,$){return new _({type:"string",format:"uuid",check:"string_format",abort:!1,...C($)})}function sI(_,$){return new _({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...C($)})}function _1(_,$){return new _({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...C($)})}function $1(_,$){return new _({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...C($)})}function Wg(_,$){return new _({type:"string",format:"url",check:"string_format",abort:!1,...C($)})}function D1(_,$){return new _({type:"string",format:"emoji",check:"string_format",abort:!1,...C($)})}function g1(_,$){return new _({type:"string",format:"nanoid",check:"string_format",abort:!1,...C($)})}function U1(_,$){return new _({type:"string",format:"cuid",check:"string_format",abort:!1,...C($)})}function I1(_,$){return new _({type:"string",format:"cuid2",check:"string_format",abort:!1,...C($)})}function j1(_,$){return new _({type:"string",format:"ulid",check:"string_format",abort:!1,...C($)})}function N1(_,$){return new _({type:"string",format:"xid",check:"string_format",abort:!1,...C($)})}function E1(_,$){return new _({type:"string",format:"ksuid",check:"string_format",abort:!1,...C($)})}function O1(_,$){return new _({type:"string",format:"ipv4",check:"string_format",abort:!1,...C($)})}function A1(_,$){return new _({type:"string",format:"ipv6",check:"string_format",abort:!1,...C($)})}function NL(_,$){return new _({type:"string",format:"mac",check:"string_format",abort:!1,...C($)})}function L1(_,$){return new _({type:"string",format:"cidrv4",check:"string_format",abort:!1,...C($)})}function J1(_,$){return new _({type:"string",format:"cidrv6",check:"string_format",abort:!1,...C($)})}function P1(_,$){return new _({type:"string",format:"base64",check:"string_format",abort:!1,...C($)})}function z1(_,$){return new _({type:"string",format:"base64url",check:"string_format",abort:!1,...C($)})}function S1(_,$){return new _({type:"string",format:"e164",check:"string_format",abort:!1,...C($)})}function W1(_,$){return new _({type:"string",format:"jwt",check:"string_format",abort:!1,...C($)})}function EL(_,$){return new _({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...C($)})}function OL(_,$){return new _({type:"string",format:"date",check:"string_format",...C($)})}function AL(_,$){return new _({type:"string",format:"time",check:"string_format",precision:null,...C($)})}function LL(_,$){return new _({type:"string",format:"duration",check:"string_format",...C($)})}function JL(_,$){return new _({type:"number",checks:[],...C($)})}function PL(_,$){return new _({type:"number",coerce:!0,checks:[],...C($)})}function zL(_,$){return new _({type:"number",check:"number_format",abort:!1,format:"safeint",...C($)})}function SL(_,$){return new _({type:"number",check:"number_format",abort:!1,format:"float32",...C($)})}function WL(_,$){return new _({type:"number",check:"number_format",abort:!1,format:"float64",...C($)})}function XL(_,$){return new _({type:"number",check:"number_format",abort:!1,format:"int32",...C($)})}function RL(_,$){return new _({type:"number",check:"number_format",abort:!1,format:"uint32",...C($)})}function GL(_,$){return new _({type:"boolean",...C($)})}function YL(_,$){return new _({type:"boolean",coerce:!0,...C($)})}function QL(_,$){return new _({type:"bigint",...C($)})}function TL(_,$){return new _({type:"bigint",coerce:!0,...C($)})}function qL(_,$){return new _({type:"bigint",check:"bigint_format",abort:!1,format:"int64",...C($)})}function BL(_,$){return new _({type:"bigint",check:"bigint_format",abort:!1,format:"uint64",...C($)})}function VL(_,$){return new _({type:"symbol",...C($)})}function KL(_,$){return new _({type:"undefined",...C($)})}function FL(_,$){return new _({type:"null",...C($)})}function ML(_){return new _({type:"any"})}function ZL(_){return new _({type:"unknown"})}function bL(_,$){return new _({type:"never",...C($)})}function HL(_,$){return new _({type:"void",...C($)})}function kL(_,$){return new _({type:"date",...C($)})}function CL(_,$){return new _({type:"date",coerce:!0,...C($)})}function vL(_,$){return new _({type:"nan",...C($)})}function Q$(_,$){return new fI({check:"less_than",...C($),value:_,inclusive:!1})}function D$(_,$){return new fI({check:"less_than",...C($),value:_,inclusive:!0})}function T$(_,$){return new wI({check:"greater_than",...C($),value:_,inclusive:!1})}function h_(_,$){return new wI({check:"greater_than",...C($),value:_,inclusive:!0})}function Xg(_){return T$(0,_)}function Rg(_){return Q$(0,_)}function Gg(_){return D$(0,_)}function Yg(_){return h_(0,_)}function U6(_,$){return new M2({check:"multiple_of",...C($),value:_})}function I6(_,$){return new H2({check:"max_size",...C($),maximum:_})}function q$(_,$){return new k2({check:"min_size",...C($),minimum:_})}function k6(_,$){return new C2({check:"size_equals",...C($),size:_})}function C6(_,$){return new v2({check:"max_length",...C($),maximum:_})}function y$(_,$){return new r2({check:"min_length",...C($),minimum:_})}function v6(_,$){return new f2({check:"length_equals",...C($),length:_})}function W4(_,$){return new w2({check:"string_format",format:"regex",...C($),pattern:_})}function X4(_){return new u2({check:"string_format",format:"lowercase",...C(_)})}function R4(_){return new x2({check:"string_format",format:"uppercase",...C(_)})}function G4(_,$){return new y2({check:"string_format",format:"includes",...C($),includes:_})}function Y4(_,$){return new h2({check:"string_format",format:"starts_with",...C($),prefix:_})}function Q4(_,$){return new c2({check:"string_format",format:"ends_with",...C($),suffix:_})}function Qg(_,$,D){return new n2({check:"property",property:_,schema:$,...C(D)})}function T4(_,$){return new d2({check:"mime_type",mime:_,...C($)})}function z$(_){return new m2({check:"overwrite",tx:_})}function q4(_){return z$(($)=>$.normalize(_))}function B4(){return z$((_)=>_.trim())}function V4(){return z$((_)=>_.toLowerCase())}function K4(){return z$((_)=>_.toUpperCase())}function F4(){return z$((_)=>hE(_))}function rL(_,$,D){return new _({type:"array",element:$,...C(D)})}function DF(_,$,D){return new _({type:"union",options:$,...C(D)})}function gF(_,$,D){return new _({type:"union",options:$,inclusive:!1,...C(D)})}function UF(_,$,D,U){return new _({type:"union",options:D,discriminator:$,...C(U)})}function IF(_,$,D){return new _({type:"intersection",left:$,right:D})}function jF(_,$,D,U){let g=D instanceof l;return new _({type:"tuple",items:$,rest:g?D:null,...C(g?U:D)})}function NF(_,$,D,U){return new _({type:"record",keyType:$,valueType:D,...C(U)})}function EF(_,$,D,U){return new _({type:"map",keyType:$,valueType:D,...C(U)})}function OF(_,$,D){return new _({type:"set",valueType:$,...C(D)})}function AF(_,$,D){let U=Array.isArray($)?Object.fromEntries($.map((g)=>[g,g])):$;return new _({type:"enum",entries:U,...C(D)})}function LF(_,$,D){return new _({type:"enum",entries:$,...C(D)})}function JF(_,$,D){return new _({type:"literal",values:Array.isArray($)?$:[$],...C(D)})}function fL(_,$){return new _({type:"file",...C($)})}function PF(_,$){return new _({type:"transform",transform:$})}function zF(_,$){return new _({type:"optional",innerType:$})}function SF(_,$){return new _({type:"nullable",innerType:$})}function WF(_,$,D){return new _({type:"default",innerType:$,get defaultValue(){return typeof D==="function"?D():nE(D)}})}function XF(_,$,D){return new _({type:"nonoptional",innerType:$,...C(D)})}function RF(_,$){return new _({type:"success",innerType:$})}function GF(_,$,D){return new _({type:"catch",innerType:$,catchValue:typeof D==="function"?D:()=>D})}function YF(_,$,D){return new _({type:"pipe",in:$,out:D})}function QF(_,$){return new _({type:"readonly",innerType:$})}function TF(_,$,D){return new _({type:"template_literal",parts:$,...C(D)})}function qF(_,$){return new _({type:"lazy",getter:$})}function BF(_,$){return new _({type:"promise",innerType:$})}function wL(_,$,D){let U=C(D);return U.abort??(U.abort=!0),new _({type:"custom",check:"custom",fn:$,...U})}function uL(_,$,D){return new _({type:"custom",check:"custom",fn:$,...C(D)})}function xL(_,$){let D=$R((U)=>{return U.addIssue=(g)=>{if(typeof g==="string")U.issues.push(M0(g,U.value,D._zod.def));else{let I=g;if(I.fatal)I.continue=!1;I.code??(I.code="custom"),I.input??(I.input=U.value),I.inst??(I.inst=D),I.continue??(I.continue=!D._zod.def.abort),U.issues.push(M0(I))}},_(U.value,U)},$);return D}function $R(_,$){let D=new Y_({check:"custom",...C($)});return D._zod.check=_,D}function yL(_){let $=new Y_({check:"describe"});return $._zod.onattach=[(D)=>{let U=w_.get(D)??{};w_.add(D,{...U,description:_})}],$._zod.check=()=>{},$}function hL(_){let $=new Y_({check:"meta"});return $._zod.onattach=[(D)=>{let U=w_.get(D)??{};w_.add(D,{...U,..._})}],$._zod.check=()=>{},$}function cL(_,$){let D=C($),U=D.truthy??["true","1","yes","on","y","enabled"],g=D.falsy??["false","0","no","off","n","disabled"];if(D.case!=="sensitive")U=U.map((J)=>typeof J==="string"?J.toLowerCase():J),g=g.map((J)=>typeof J==="string"?J.toLowerCase():J);let I=new Set(U),j=new Set(g),N=_.Codec??Eg,O=_.Boolean??jg,L=new(_.String??S4)({type:"string",error:D.error}),z=new O({type:"boolean",error:D.error}),W=new N({type:"pipe",in:L,out:z,transform:(J,P)=>{let S=J;if(D.case!=="sensitive")S=S.toLowerCase();if(I.has(S))return!0;else if(j.has(S))return!1;else return P.issues.push({code:"invalid_value",expected:"stringbool",values:[...I,...j],input:P.value,inst:W,continue:!1}),{}},reverseTransform:(J,P)=>{if(J===!0)return U[0]||"true";else return g[0]||"false"},error:D.error});return W}function u0(_,$,D,U={}){let g=C(U),I={...C(U),check:"string_format",type:"string",format:$,fn:typeof D==="function"?D:(N)=>D.test(N),...g};if(D instanceof RegExp)I.pattern=D;return new _(I)}var X1;var DR=f(()=>{uI();zg();UA();c();X1={Any:null,Minute:-1,Second:0,Millisecond:3,Microsecond:6}});function r6(_){let $=_?.target??"draft-2020-12";if($==="draft-4")$="draft-04";if($==="draft-7")$="draft-07";return{processors:_.processors??{},metadataRegistry:_?.metadata??w_,target:$,unrepresentable:_?.unrepresentable??"throw",override:_?.override??(()=>{}),io:_?.io??"output",counter:0,seen:new Map,cycles:_?.cycles??"ref",reused:_?.reused??"inline",external:_?.external??void 0}}function A_(_,$,D={path:[],schemaPath:[]}){var U;let g=_._zod.def,I=$.seen.get(_);if(I){if(I.count++,D.schemaPath.includes(_))I.cycle=D.path;return I.schema}let j={schema:{},count:1,cycle:void 0,path:D.path};$.seen.set(_,j);let N=_._zod.toJSONSchema?.();if(N)j.schema=N;else{let L={...D,schemaPath:[...D.schemaPath,_],path:D.path};if(_._zod.processJSONSchema)_._zod.processJSONSchema($,j.schema,L);else{let W=j.schema,J=$.processors[g.type];if(!J)throw Error(`[toJSONSchema]: Non-representable type encountered: ${g.type}`);J(_,$,W,L)}let z=_._zod.parent;if(z){if(!j.ref)j.ref=z;A_(z,$,L),$.seen.get(z).isParent=!0}}let O=$.metadataRegistry.get(_);if(O)Object.assign(j.schema,O);if($.io==="input"&&t_(_))delete j.schema.examples,delete j.schema.default;if($.io==="input"&&"_prefault"in j.schema)(U=j.schema).default??(U.default=j.schema._prefault);return delete j.schema._prefault,$.seen.get(_).schema}function f6(_,$){let D=_.seen.get($);if(!D)throw Error("Unprocessed schema. This is a bug in Zod.");let U=new Map;for(let j of _.seen.entries()){let N=_.metadataRegistry.get(j[0])?.id;if(N){let O=U.get(N);if(O&&O!==j[0])throw Error(`Duplicate schema id "${N}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);U.set(N,j[0])}}let g=(j)=>{let N=_.target==="draft-2020-12"?"$defs":"definitions";if(_.external){let z=_.external.registry.get(j[0])?.id,W=_.external.uri??((P)=>P);if(z)return{ref:W(z)};let J=j[1].defId??j[1].schema.id??`schema${_.counter++}`;return j[1].defId=J,{defId:J,ref:`${W("__shared")}#/${N}/${J}`}}if(j[1]===D)return{ref:"#"};let A=`${"#"}/${N}/`,L=j[1].schema.id??`__schema${_.counter++}`;return{defId:L,ref:A+L}},I=(j)=>{if(j[1].schema.$ref)return;let N=j[1],{ref:O,defId:A}=g(j);if(N.def={...N.schema},A)N.defId=A;let L=N.schema;for(let z in L)delete L[z];L.$ref=O};if(_.cycles==="throw")for(let j of _.seen.entries()){let N=j[1];if(N.cycle)throw Error(`Cycle detected: #/${N.cycle?.join("/")}/ + `)}S.write("payload.value = newResult;"),S.write("return payload;");let G=S.compile();return(B,Q)=>G(z,B,Q)},I,j=Wg,E=!Pg.jitless,O=E&&lN.value,P=$.catchall,W;_._zod.parse=(z,S)=>{W??(W=U.value);let L=z.value;if(!j(L))return z.issues.push({expected:"object",code:"invalid_type",input:L,inst:_}),z;if(E&&O&&S?.async===!1&&S.jitless!==!0){if(!I)I=D($.shape);if(z=I(z,S),!P)return z;return UG([],L,z,S,W,_)}return g(z,S)}});jD=Y("$ZodUnion",(_,$)=>{l.init(_,$),$_(_._zod,"optin",()=>$.options.some((U)=>U._zod.optin==="optional")?"optional":void 0),$_(_._zod,"optout",()=>$.options.some((U)=>U._zod.optout==="optional")?"optional":void 0),$_(_._zod,"values",()=>{if($.options.every((U)=>U._zod.values))return new Set($.options.flatMap((U)=>Array.from(U._zod.values)));return}),$_(_._zod,"pattern",()=>{if($.options.every((U)=>U._zod.pattern)){let U=$.options.map((D)=>D._zod.pattern);return new RegExp(`^(${U.map((D)=>e0(D.source)).join("|")})$`)}return});let g=$.options.length===1?$.options[0]._zod.run:null;_._zod.parse=(U,D)=>{if(g)return g(U,D);let I=!1,j=[];for(let E of $.options){let A=E._zod.run({value:U.value,issues:[]},D);if(A instanceof Promise)j.push(A),I=!0;else{if(A.issues.length===0)return A;j.push(A)}}if(!I)return hR(j,U,_,D);return Promise.all(j).then((E)=>{return hR(E,U,_,D)})}});fA=Y("$ZodXor",(_,$)=>{jD.init(_,$),$.inclusive=!1;let g=$.options.length===1?$.options[0]._zod.run:null;_._zod.parse=(U,D)=>{if(g)return g(U,D);let I=!1,j=[];for(let E of $.options){let A=E._zod.run({value:U.value,issues:[]},D);if(A instanceof Promise)j.push(A),I=!0;else j.push(A)}if(!I)return nR(j,U,_,D);return Promise.all(j).then((E)=>{return nR(E,U,_,D)})}}),xA=Y("$ZodDiscriminatedUnion",(_,$)=>{$.inclusive=!1,jD.init(_,$);let g=_._zod.parse;$_(_._zod,"propValues",()=>{let D={};for(let I of $.options){let j=I._zod.propValues;if(!j||Object.keys(j).length===0)throw Error(`Invalid discriminated union option at index "${$.options.indexOf(I)}"`);for(let[E,A]of Object.entries(j)){if(!D[E])D[E]=new Set;for(let O of A)D[E].add(O)}}return D});let U=V4(()=>{let D=$.options,I=new Map;for(let j of D){let E=j._zod.propValues?.[$.discriminator];if(!E||E.size===0)throw Error(`Invalid discriminated union option at index "${$.options.indexOf(j)}"`);for(let A of E){if(I.has(A))throw Error(`Duplicate discriminator value "${String(A)}"`);I.set(A,j)}}return I});_._zod.parse=(D,I)=>{let j=D.value;if(!Wg(j))return D.issues.push({code:"invalid_type",expected:"object",input:j,inst:_}),D;let E=U.value.get(j?.[$.discriminator]);if(E)return E._zod.run(D,I);if($.unionFallback||I.direction==="backward")return g(D,I);return D.issues.push({code:"invalid_union",errors:[],note:"No matching discriminator",discriminator:$.discriminator,options:Array.from(U.value.keys()),input:j,path:[$.discriminator],inst:_}),D}}),yA=Y("$ZodIntersection",(_,$)=>{l.init(_,$),_._zod.parse=(g,U)=>{let D=g.value,I=$.left._zod.run({value:D,issues:[]},U),j=$.right._zod.run({value:D,issues:[]},U);if(I instanceof Promise||j instanceof Promise)return Promise.all([I,j]).then(([A,O])=>{return dR(g,A,O)});return dR(g,I,j)}});mI=Y("$ZodTuple",(_,$)=>{l.init(_,$);let g=$.items;_._zod.parse=(U,D)=>{let I=U.value;if(!Array.isArray(I))return U.issues.push({input:I,inst:_,expected:"tuple",code:"invalid_type"}),U;U.value=[];let j=[],E=mR(g,"optin"),A=mR(g,"optout");if(!$.rest){if(I.lengthg.length)U.issues.push({code:"too_big",maximum:g.length,inclusive:!0,input:I,inst:_,origin:"array"})}let O=Array(g.length);for(let P=0;P{O[P]=z}));else O[P]=W}if($.rest){let P=g.length-1,W=I.slice(g.length);for(let z of W){P++;let S=$.rest._zod.run({value:z,issues:[]},D);if(S instanceof Promise)j.push(S.then((L)=>iR(L,U,P)));else iR(S,U,P)}}if(j.length)return Promise.all(j).then(()=>lR(O,U,g,I,A));return lR(O,U,g,I,A)}});cA=Y("$ZodRecord",(_,$)=>{l.init(_,$),_._zod.parse=(g,U)=>{let D=g.value;if(!Z6(D))return g.issues.push({expected:"record",code:"invalid_type",input:D,inst:_}),g;let I=[],j=$.keyType._zod.values;if(j){g.value={};let E=new Set;for(let O of j)if(typeof O==="string"||typeof O==="number"||typeof O==="symbol"){E.add(typeof O==="number"?O.toString():O);let P=$.keyType._zod.run({value:O,issues:[]},U);if(P instanceof Promise)throw Error("Async schemas not supported in object keys currently");if(P.issues.length){g.issues.push({code:"invalid_key",origin:"record",issues:P.issues.map((S)=>m_(S,U,F_())),input:O,path:[O],inst:_});continue}let W=P.value,z=$.valueType._zod.run({value:D[O],issues:[]},U);if(z instanceof Promise)I.push(z.then((S)=>{if(S.issues.length)g.issues.push(...e_(O,S.issues));g.value[W]=S.value}));else{if(z.issues.length)g.issues.push(...e_(O,z.issues));g.value[W]=z.value}}let A;for(let O in D)if(!E.has(O))A=A??[],A.push(O);if(A&&A.length>0)g.issues.push({code:"unrecognized_keys",input:D,inst:_,keys:A})}else{g.value={};for(let E of Reflect.ownKeys(D)){if(E==="__proto__")continue;if(!Object.prototype.propertyIsEnumerable.call(D,E))continue;let A=$.keyType._zod.run({value:E,issues:[]},U);if(A instanceof Promise)throw Error("Async schemas not supported in object keys currently");if(typeof E==="string"&&gD.test(E)&&A.issues.length){let W=$.keyType._zod.run({value:Number(E),issues:[]},U);if(W instanceof Promise)throw Error("Async schemas not supported in object keys currently");if(W.issues.length===0)A=W}if(A.issues.length){if($.mode==="loose")g.value[E]=D[E];else g.issues.push({code:"invalid_key",origin:"record",issues:A.issues.map((W)=>m_(W,U,F_())),input:E,path:[E],inst:_});continue}let P=$.valueType._zod.run({value:D[E],issues:[]},U);if(P instanceof Promise)I.push(P.then((W)=>{if(W.issues.length)g.issues.push(...e_(E,W.issues));g.value[A.value]=W.value}));else{if(P.issues.length)g.issues.push(...e_(E,P.issues));g.value[A.value]=P.value}}}if(I.length)return Promise.all(I).then(()=>g);return g}}),hA=Y("$ZodMap",(_,$)=>{l.init(_,$),_._zod.parse=(g,U)=>{let D=g.value;if(!(D instanceof Map))return g.issues.push({expected:"map",code:"invalid_type",input:D,inst:_}),g;let I=[];g.value=new Map;for(let[j,E]of D){let A=$.keyType._zod.run({value:j,issues:[]},U),O=$.valueType._zod.run({value:E,issues:[]},U);if(A instanceof Promise||O instanceof Promise)I.push(Promise.all([A,O]).then(([P,W])=>{tR(P,W,g,j,D,_,U)}));else tR(A,O,g,j,D,_,U)}if(I.length)return Promise.all(I).then(()=>g);return g}});nA=Y("$ZodSet",(_,$)=>{l.init(_,$),_._zod.parse=(g,U)=>{let D=g.value;if(!(D instanceof Set))return g.issues.push({input:D,inst:_,expected:"set",code:"invalid_type"}),g;let I=[];g.value=new Set;for(let j of D){let E=$.valueType._zod.run({value:j,issues:[]},U);if(E instanceof Promise)I.push(E.then((A)=>oR(A,g)));else oR(E,g)}if(I.length)return Promise.all(I).then(()=>g);return g}});dA=Y("$ZodEnum",(_,$)=>{l.init(_,$);let g=p0($.entries),U=new Set(g);_._zod.values=U,_._zod.pattern=new RegExp(`^(${g.filter((D)=>a0.has(typeof D)).map((D)=>typeof D==="string"?S$(D):D.toString()).join("|")})$`),_._zod.parse=(D,I)=>{let j=D.value;if(U.has(j))return D;return D.issues.push({code:"invalid_value",values:g,input:j,inst:_}),D}}),mA=Y("$ZodLiteral",(_,$)=>{if(l.init(_,$),$.values.length===0)throw Error("Cannot create literal schema with no valid values");let g=new Set($.values);_._zod.values=g,_._zod.pattern=new RegExp(`^(${$.values.map((U)=>typeof U==="string"?S$(U):U?S$(U.toString()):String(U)).join("|")})$`),_._zod.parse=(U,D)=>{let I=U.value;if(g.has(I))return U;return U.issues.push({code:"invalid_value",values:$.values,input:I,inst:_}),U}}),iA=Y("$ZodFile",(_,$)=>{l.init(_,$),_._zod.parse=(g,U)=>{let D=g.value;if(D instanceof File)return g;return g.issues.push({expected:"file",code:"invalid_type",input:D,inst:_}),g}}),lA=Y("$ZodTransform",(_,$)=>{l.init(_,$),_._zod.optin="optional",_._zod.parse=(g,U)=>{if(U.direction==="backward")throw new Sg(_.constructor.name);let D=$.transform(g.value,g);if(U.async)return(D instanceof Promise?D:Promise.resolve(D)).then((j)=>{return g.value=j,g.fallback=!0,g});if(D instanceof Promise)throw new f$;return g.value=D,g.fallback=!0,g}});iI=Y("$ZodOptional",(_,$)=>{l.init(_,$),_._zod.optin="optional",_._zod.optout="optional",$_(_._zod,"values",()=>{return $.innerType._zod.values?new Set([...$.innerType._zod.values,void 0]):void 0}),$_(_._zod,"pattern",()=>{let g=$.innerType._zod.pattern;return g?new RegExp(`^(${e0(g.source)})?$`):void 0}),_._zod.parse=(g,U)=>{if($.innerType._zod.optin==="optional"){let D=g.value,I=$.innerType._zod.run(g,U);if(I instanceof Promise)return I.then((j)=>pR(j,D));return pR(I,D)}if(g.value===void 0)return g;return $.innerType._zod.run(g,U)}}),tA=Y("$ZodExactOptional",(_,$)=>{iI.init(_,$),$_(_._zod,"values",()=>$.innerType._zod.values),$_(_._zod,"pattern",()=>$.innerType._zod.pattern),_._zod.parse=(g,U)=>{return $.innerType._zod.run(g,U)}}),oA=Y("$ZodNullable",(_,$)=>{l.init(_,$),$_(_._zod,"optin",()=>$.innerType._zod.optin),$_(_._zod,"optout",()=>$.innerType._zod.optout),$_(_._zod,"pattern",()=>{let g=$.innerType._zod.pattern;return g?new RegExp(`^(${e0(g.source)}|null)$`):void 0}),$_(_._zod,"values",()=>{return $.innerType._zod.values?new Set([...$.innerType._zod.values,null]):void 0}),_._zod.parse=(g,U)=>{if(g.value===null)return g;return $.innerType._zod.run(g,U)}}),pA=Y("$ZodDefault",(_,$)=>{l.init(_,$),_._zod.optin="optional",$_(_._zod,"values",()=>$.innerType._zod.values),_._zod.parse=(g,U)=>{if(U.direction==="backward")return $.innerType._zod.run(g,U);if(g.value===void 0)return g.value=$.defaultValue,g;let D=$.innerType._zod.run(g,U);if(D instanceof Promise)return D.then((I)=>eR(I,$));return eR(D,$)}});eA=Y("$ZodPrefault",(_,$)=>{l.init(_,$),_._zod.optin="optional",$_(_._zod,"values",()=>$.innerType._zod.values),_._zod.parse=(g,U)=>{if(U.direction==="backward")return $.innerType._zod.run(g,U);if(g.value===void 0)g.value=$.defaultValue;return $.innerType._zod.run(g,U)}}),aA=Y("$ZodNonOptional",(_,$)=>{l.init(_,$),$_(_._zod,"values",()=>{let g=$.innerType._zod.values;return g?new Set([...g].filter((U)=>U!==void 0)):void 0}),_._zod.parse=(g,U)=>{let D=$.innerType._zod.run(g,U);if(D instanceof Promise)return D.then((I)=>aR(I,_));return aR(D,_)}});sA=Y("$ZodSuccess",(_,$)=>{l.init(_,$),_._zod.parse=(g,U)=>{if(U.direction==="backward")throw new Sg("ZodSuccess");let D=$.innerType._zod.run(g,U);if(D instanceof Promise)return D.then((I)=>{return g.value=I.issues.length===0,g});return g.value=D.issues.length===0,g}}),_O=Y("$ZodCatch",(_,$)=>{l.init(_,$),_._zod.optin="optional",$_(_._zod,"optout",()=>$.innerType._zod.optout),$_(_._zod,"values",()=>$.innerType._zod.values),_._zod.parse=(g,U)=>{if(U.direction==="backward")return $.innerType._zod.run(g,U);let D=$.innerType._zod.run(g,U);if(D instanceof Promise)return D.then((I)=>{if(g.value=I.value,I.issues.length)g.value=$.catchValue({...g,error:{issues:I.issues.map((j)=>m_(j,U,F_()))},input:g.value}),g.issues=[],g.fallback=!0;return g});if(g.value=D.value,D.issues.length)g.value=$.catchValue({...g,error:{issues:D.issues.map((I)=>m_(I,U,F_()))},input:g.value}),g.issues=[],g.fallback=!0;return g}}),$O=Y("$ZodNaN",(_,$)=>{l.init(_,$),_._zod.parse=(g,U)=>{if(typeof g.value!=="number"||!Number.isNaN(g.value))return g.issues.push({input:g.value,inst:_,expected:"nan",code:"invalid_type"}),g;return g}}),lI=Y("$ZodPipe",(_,$)=>{l.init(_,$),$_(_._zod,"values",()=>$.in._zod.values),$_(_._zod,"optin",()=>$.in._zod.optin),$_(_._zod,"optout",()=>$.out._zod.optout),$_(_._zod,"propValues",()=>$.in._zod.propValues),_._zod.parse=(g,U)=>{if(U.direction==="backward"){let I=$.out._zod.run(g,U);if(I instanceof Promise)return I.then((j)=>xI(j,$.in,U));return xI(I,$.in,U)}let D=$.in._zod.run(g,U);if(D instanceof Promise)return D.then((I)=>xI(I,$.out,U));return xI(D,$.out,U)}});ED=Y("$ZodCodec",(_,$)=>{l.init(_,$),$_(_._zod,"values",()=>$.in._zod.values),$_(_._zod,"optin",()=>$.in._zod.optin),$_(_._zod,"optout",()=>$.out._zod.optout),$_(_._zod,"propValues",()=>$.in._zod.propValues),_._zod.parse=(g,U)=>{if((U.direction||"forward")==="forward"){let I=$.in._zod.run(g,U);if(I instanceof Promise)return I.then((j)=>yI(j,$,U));return yI(I,$,U)}else{let I=$.out._zod.run(g,U);if(I instanceof Promise)return I.then((j)=>yI(j,$,U));return yI(I,$,U)}}});gO=Y("$ZodPreprocess",(_,$)=>{lI.init(_,$)}),DO=Y("$ZodReadonly",(_,$)=>{l.init(_,$),$_(_._zod,"propValues",()=>$.innerType._zod.propValues),$_(_._zod,"values",()=>$.innerType._zod.values),$_(_._zod,"optin",()=>$.innerType?._zod?.optin),$_(_._zod,"optout",()=>$.innerType?._zod?.optout),_._zod.parse=(g,U)=>{if(U.direction==="backward")return $.innerType._zod.run(g,U);let D=$.innerType._zod.run(g,U);if(D instanceof Promise)return D.then(sR);return sR(D)}});UO=Y("$ZodTemplateLiteral",(_,$)=>{l.init(_,$);let g=[];for(let U of $.parts)if(typeof U==="object"&&U!==null){if(!U._zod.pattern)throw Error(`Invalid template literal part, no pattern found: ${[...U._zod.traits].shift()}`);let D=U._zod.pattern instanceof RegExp?U._zod.pattern.source:U._zod.pattern;if(!D)throw Error(`Invalid template literal part: ${U._zod.traits}`);let I=D.startsWith("^")?1:0,j=D.endsWith("$")?D.length-1:D.length;g.push(D.slice(I,j))}else if(U===null||oN.has(typeof U))g.push(S$(`${U}`));else throw Error(`Invalid template literal part: ${U}`);_._zod.pattern=new RegExp(`^${g.join("")}$`),_._zod.parse=(U,D)=>{if(typeof U.value!=="string")return U.issues.push({input:U.value,inst:_,expected:"string",code:"invalid_type"}),U;if(_._zod.pattern.lastIndex=0,!_._zod.pattern.test(U.value))return U.issues.push({input:U.value,inst:_,code:"invalid_format",format:$.format??"template_literal",pattern:_._zod.pattern.source}),U;return U}}),IO=Y("$ZodFunction",(_,$)=>{return l.init(_,$),_._def=$,_._zod.def=$,_.implement=(g)=>{if(typeof g!=="function")throw Error("implement() must be called with a function");return function(...U){let D=_._def.input?KI(_._def.input,U):U,I=Reflect.apply(g,this,D);if(_._def.output)return KI(_._def.output,I);return I}},_.implementAsync=(g)=>{if(typeof g!=="function")throw Error("implementAsync() must be called with a function");return async function(...U){let D=_._def.input?await qI(_._def.input,U):U,I=await Reflect.apply(g,this,D);if(_._def.output)return await qI(_._def.output,I);return I}},_._zod.parse=(g,U)=>{if(typeof g.value!=="function")return g.issues.push({code:"invalid_type",expected:"function",input:g.value,inst:_}),g;if(_._def.output&&_._def.output._zod.def.type==="promise")g.value=_.implementAsync(g.value);else g.value=_.implement(g.value);return g},_.input=(...g)=>{let U=_.constructor;if(Array.isArray(g[0]))return new U({type:"function",input:new mI({type:"tuple",items:g[0],rest:g[1]}),output:_._def.output});return new U({type:"function",input:g[0],output:_._def.output})},_.output=(g)=>{return new _.constructor({type:"function",input:_._def.input,output:g})},_}),jO=Y("$ZodPromise",(_,$)=>{l.init(_,$),_._zod.parse=(g,U)=>{return Promise.resolve(g.value).then((D)=>$.innerType._zod.run({value:D,issues:[]},U))}}),EO=Y("$ZodLazy",(_,$)=>{l.init(_,$),$_(_._zod,"innerType",()=>{let g=$;if(!g._cachedInner)g._cachedInner=$.getter();return g._cachedInner}),$_(_._zod,"pattern",()=>_._zod.innerType?._zod?.pattern),$_(_._zod,"propValues",()=>_._zod.innerType?._zod?.propValues),$_(_._zod,"optin",()=>_._zod.innerType?._zod?.optin??void 0),$_(_._zod,"optout",()=>_._zod.innerType?._zod?.optout??void 0),_._zod.parse=(g,U)=>{return _._zod.innerType._zod.run(g,U)}}),NO=Y("$ZodCustom",(_,$)=>{G_.init(_,$),l.init(_,$),_._zod.parse=(g,U)=>{return g},_._zod.check=(g)=>{let U=g.value,D=$.fn(U);if(D instanceof Promise)return D.then((I)=>_G(I,g,U,_));_G(D,g,U,_);return}})});function OO(){return{localeError:JV()}}var JV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.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 ${D.expected}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${E}`;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 ${I}\u060C \u0648\u0644\u0643\u0646 \u062A\u0645 \u0625\u062F\u062E\u0627\u0644 ${E}`}case"invalid_value":if(D.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 ${r(D.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: ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return` \u0623\u0643\u0628\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0623\u0646 \u062A\u0643\u0648\u0646 ${D.origin??"\u0627\u0644\u0642\u064A\u0645\u0629"} ${I} ${D.maximum.toString()} ${j.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 ${D.origin??"\u0627\u0644\u0642\u064A\u0645\u0629"} ${I} ${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${D.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${I} ${D.minimum.toString()} ${j.unit}`;return`\u0623\u0635\u063A\u0631 \u0645\u0646 \u0627\u0644\u0644\u0627\u0632\u0645: \u064A\u0641\u062A\u0631\u0636 \u0644\u0640 ${D.origin} \u0623\u0646 \u064A\u0643\u0648\u0646 ${I} ${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.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 "${D.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;return`${g[I.format]??D.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 ${D.divisor}`;case"unrecognized_keys":return`\u0645\u0639\u0631\u0641${D.keys.length>1?"\u0627\u062A":""} \u063A\u0631\u064A\u0628${D.keys.length>1?"\u0629":""}: ${q(D.keys,"\u060C ")}`;case"invalid_key":return`\u0645\u0639\u0631\u0641 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644 \u0641\u064A ${D.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 ${D.origin}`;default:return"\u0645\u062F\u062E\u0644 \u063A\u064A\u0631 \u0645\u0642\u0628\u0648\u0644"}}};var jG=w(()=>{h()});function PO(){return{localeError:zV()}}var zV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n instanceof ${D.expected}, daxil olan ${E}`;return`Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${I}, daxil olan ${E}`}case"invalid_value":if(D.values.length===1)return`Yanl\u0131\u015F d\u0259y\u0259r: g\xF6zl\u0259nil\u0259n ${r(D.values[0])}`;return`Yanl\u0131\u015F se\xE7im: a\u015Fa\u011F\u0131dak\u0131lardan biri olmal\u0131d\u0131r: ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${D.origin??"d\u0259y\u0259r"} ${I}${D.maximum.toString()} ${j.unit??"element"}`;return`\xC7ox b\xF6y\xFCk: g\xF6zl\u0259nil\u0259n ${D.origin??"d\u0259y\u0259r"} ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${D.origin} ${I}${D.minimum.toString()} ${j.unit}`;return`\xC7ox ki\xE7ik: g\xF6zl\u0259nil\u0259n ${D.origin} ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Yanl\u0131\u015F m\u0259tn: "${I.prefix}" il\u0259 ba\u015Flamal\u0131d\u0131r`;if(I.format==="ends_with")return`Yanl\u0131\u015F m\u0259tn: "${I.suffix}" il\u0259 bitm\u0259lidir`;if(I.format==="includes")return`Yanl\u0131\u015F m\u0259tn: "${I.includes}" daxil olmal\u0131d\u0131r`;if(I.format==="regex")return`Yanl\u0131\u015F m\u0259tn: ${I.pattern} \u015Fablonuna uy\u011Fun olmal\u0131d\u0131r`;return`Yanl\u0131\u015F ${g[I.format]??D.format}`}case"not_multiple_of":return`Yanl\u0131\u015F \u0259d\u0259d: ${D.divisor} il\u0259 b\xF6l\xFCn\u0259 bil\u0259n olmal\u0131d\u0131r`;case"unrecognized_keys":return`Tan\u0131nmayan a\xE7ar${D.keys.length>1?"lar":""}: ${q(D.keys,", ")}`;case"invalid_key":return`${D.origin} daxilind\u0259 yanl\u0131\u015F a\xE7ar`;case"invalid_union":return"Yanl\u0131\u015F d\u0259y\u0259r";case"invalid_element":return`${D.origin} daxilind\u0259 yanl\u0131\u015F d\u0259y\u0259r`;default:return"Yanl\u0131\u015F d\u0259y\u0259r"}}};var EG=w(()=>{h()});function NG(_,$,g,U){let D=Math.abs(_),I=D%10,j=D%100;if(j>=11&&j<=19)return U;if(I===1)return $;if(I>=2&&I<=4)return g;return U}function SO(){return{localeError:RV()}}var RV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"\u043B\u0456\u043A",array:"\u043C\u0430\u0441\u0456\u045E"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.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 ${D.expected}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${E}`;return`\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434: \u0447\u0430\u043A\u0430\u045E\u0441\u044F ${I}, \u0430\u0442\u0440\u044B\u043C\u0430\u043D\u0430 ${E}`}case"invalid_value":if(D.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 ${r(D.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 ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j){let E=Number(D.maximum),A=NG(E,j.unit.one,j.unit.few,j.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 ${D.origin??"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${j.verb} ${I}${D.maximum.toString()} ${A}`}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 ${D.origin??"\u0437\u043D\u0430\u0447\u044D\u043D\u043D\u0435"} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j){let E=Number(D.minimum),A=NG(E,j.unit.one,j.unit.few,j.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 ${D.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 ${j.verb} ${I}${D.minimum.toString()} ${A}`}return`\u0417\u0430\u043D\u0430\u0434\u0442\u0430 \u043C\u0430\u043B\u044B: \u0447\u0430\u043A\u0430\u043B\u0430\u0441\u044F, \u0448\u0442\u043E ${D.origin} \u043F\u0430\u0432\u0456\u043D\u043D\u0430 \u0431\u044B\u0446\u044C ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;return`\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B ${g[I.format]??D.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 ${D.divisor}`;case"unrecognized_keys":return`\u041D\u0435\u0440\u0430\u0441\u043F\u0430\u0437\u043D\u0430\u043D\u044B ${D.keys.length>1?"\u043A\u043B\u044E\u0447\u044B":"\u043A\u043B\u044E\u0447"}: ${q(D.keys,", ")}`;case"invalid_key":return`\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u043A\u043B\u044E\u0447 \u0443 ${D.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 ${D.origin}`;default:return"\u041D\u044F\u043F\u0440\u0430\u0432\u0456\u043B\u044C\u043D\u044B \u045E\u0432\u043E\u0434"}}};var AG=w(()=>{h()});function LO(){return{localeError:GV()}}var GV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"\u0447\u0438\u0441\u043B\u043E",array:"\u043C\u0430\u0441\u0438\u0432"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D instanceof ${D.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${E}`;return`\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${I}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D ${E}`}case"invalid_value":if(D.values.length===1)return`\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434: \u043E\u0447\u0430\u043A\u0432\u0430\u043D ${r(D.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 ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`\u0422\u0432\u044A\u0440\u0434\u0435 \u0433\u043E\u043B\u044F\u043C\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${D.origin??"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442"} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${I}${D.maximum.toString()} ${j.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 ${D.origin??"\u0441\u0442\u043E\u0439\u043D\u043E\u0441\u0442"} \u0434\u0430 \u0431\u044A\u0434\u0435 ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${D.origin} \u0434\u0430 \u0441\u044A\u0434\u044A\u0440\u0436\u0430 ${I}${D.minimum.toString()} ${j.unit}`;return`\u0422\u0432\u044A\u0440\u0434\u0435 \u043C\u0430\u043B\u043A\u043E: \u043E\u0447\u0430\u043A\u0432\u0430 \u0441\u0435 ${D.origin} \u0434\u0430 \u0431\u044A\u0434\u0435 ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;let j="\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D";if(I.format==="emoji")j="\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E";if(I.format==="datetime")j="\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E";if(I.format==="date")j="\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430";if(I.format==="time")j="\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E";if(I.format==="duration")j="\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u0430";return`${j} ${g[I.format]??D.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 ${D.divisor}`;case"unrecognized_keys":return`\u041D\u0435\u0440\u0430\u0437\u043F\u043E\u0437\u043D\u0430\u0442${D.keys.length>1?"\u0438":""} \u043A\u043B\u044E\u0447${D.keys.length>1?"\u043E\u0432\u0435":""}: ${q(D.keys,", ")}`;case"invalid_key":return`\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u043A\u043B\u044E\u0447 \u0432 ${D.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 ${D.origin}`;default:return"\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u0435\u043D \u0432\u0445\u043E\u0434"}}};var OG=w(()=>{h()});function WO(){return{localeError:XV()}}var XV=()=>{let _={string:{unit:"car\xE0cters",verb:"contenir"},file:{unit:"bytes",verb:"contenir"},array:{unit:"elements",verb:"contenir"},set:{unit:"elements",verb:"contenir"}};function $(D){return _[D]??null}let g={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"},U={nan:"NaN"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Tipus inv\xE0lid: s'esperava instanceof ${D.expected}, s'ha rebut ${E}`;return`Tipus inv\xE0lid: s'esperava ${I}, s'ha rebut ${E}`}case"invalid_value":if(D.values.length===1)return`Valor inv\xE0lid: s'esperava ${r(D.values[0])}`;return`Opci\xF3 inv\xE0lida: s'esperava una de ${q(D.values," o ")}`;case"too_big":{let I=D.inclusive?"com a m\xE0xim":"menys de",j=$(D.origin);if(j)return`Massa gran: s'esperava que ${D.origin??"el valor"} contingu\xE9s ${I} ${D.maximum.toString()} ${j.unit??"elements"}`;return`Massa gran: s'esperava que ${D.origin??"el valor"} fos ${I} ${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?"com a m\xEDnim":"m\xE9s de",j=$(D.origin);if(j)return`Massa petit: s'esperava que ${D.origin} contingu\xE9s ${I} ${D.minimum.toString()} ${j.unit}`;return`Massa petit: s'esperava que ${D.origin} fos ${I} ${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Format inv\xE0lid: ha de comen\xE7ar amb "${I.prefix}"`;if(I.format==="ends_with")return`Format inv\xE0lid: ha d'acabar amb "${I.suffix}"`;if(I.format==="includes")return`Format inv\xE0lid: ha d'incloure "${I.includes}"`;if(I.format==="regex")return`Format inv\xE0lid: ha de coincidir amb el patr\xF3 ${I.pattern}`;return`Format inv\xE0lid per a ${g[I.format]??D.format}`}case"not_multiple_of":return`N\xFAmero inv\xE0lid: ha de ser m\xFAltiple de ${D.divisor}`;case"unrecognized_keys":return`Clau${D.keys.length>1?"s":""} no reconeguda${D.keys.length>1?"s":""}: ${q(D.keys,", ")}`;case"invalid_key":return`Clau inv\xE0lida a ${D.origin}`;case"invalid_union":return"Entrada inv\xE0lida";case"invalid_element":return`Element inv\xE0lid a ${D.origin}`;default:return"Entrada inv\xE0lida"}}};var PG=w(()=>{h()});function JO(){return{localeError:YV()}}var YV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"\u010D\xEDslo",string:"\u0159et\u011Bzec",function:"funkce",array:"pole"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no instanceof ${D.expected}, obdr\u017Eeno ${E}`;return`Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${I}, obdr\u017Eeno ${E}`}case"invalid_value":if(D.values.length===1)return`Neplatn\xFD vstup: o\u010Dek\xE1v\xE1no ${r(D.values[0])}`;return`Neplatn\xE1 mo\u017Enost: o\u010Dek\xE1v\xE1na jedna z hodnot ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${D.origin??"hodnota"} mus\xED m\xEDt ${I}${D.maximum.toString()} ${j.unit??"prvk\u016F"}`;return`Hodnota je p\u0159\xEDli\u0161 velk\xE1: ${D.origin??"hodnota"} mus\xED b\xFDt ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${D.origin??"hodnota"} mus\xED m\xEDt ${I}${D.minimum.toString()} ${j.unit??"prvk\u016F"}`;return`Hodnota je p\u0159\xEDli\u0161 mal\xE1: ${D.origin??"hodnota"} mus\xED b\xFDt ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Neplatn\xFD \u0159et\u011Bzec: mus\xED za\u010D\xEDnat na "${I.prefix}"`;if(I.format==="ends_with")return`Neplatn\xFD \u0159et\u011Bzec: mus\xED kon\u010Dit na "${I.suffix}"`;if(I.format==="includes")return`Neplatn\xFD \u0159et\u011Bzec: mus\xED obsahovat "${I.includes}"`;if(I.format==="regex")return`Neplatn\xFD \u0159et\u011Bzec: mus\xED odpov\xEDdat vzoru ${I.pattern}`;return`Neplatn\xFD form\xE1t ${g[I.format]??D.format}`}case"not_multiple_of":return`Neplatn\xE9 \u010D\xEDslo: mus\xED b\xFDt n\xE1sobkem ${D.divisor}`;case"unrecognized_keys":return`Nezn\xE1m\xE9 kl\xED\u010De: ${q(D.keys,", ")}`;case"invalid_key":return`Neplatn\xFD kl\xED\u010D v ${D.origin}`;case"invalid_union":return"Neplatn\xFD vstup";case"invalid_element":return`Neplatn\xE1 hodnota v ${D.origin}`;default:return"Neplatn\xFD vstup"}}};var SG=w(()=>{h()});function zO(){return{localeError:QV()}}var QV=()=>{let _={string:{unit:"tegn",verb:"havde"},file:{unit:"bytes",verb:"havde"},array:{unit:"elementer",verb:"indeholdt"},set:{unit:"elementer",verb:"indeholdt"}};function $(D){return _[D]??null}let g={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"},U={nan:"NaN",string:"streng",number:"tal",boolean:"boolean",array:"liste",object:"objekt",set:"s\xE6t",file:"fil"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Ugyldigt input: forventede instanceof ${D.expected}, fik ${E}`;return`Ugyldigt input: forventede ${I}, fik ${E}`}case"invalid_value":if(D.values.length===1)return`Ugyldig v\xE6rdi: forventede ${r(D.values[0])}`;return`Ugyldigt valg: forventede en af f\xF8lgende ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin),E=U[D.origin]??D.origin;if(j)return`For stor: forventede ${E??"value"} ${j.verb} ${I} ${D.maximum.toString()} ${j.unit??"elementer"}`;return`For stor: forventede ${E??"value"} havde ${I} ${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin),E=U[D.origin]??D.origin;if(j)return`For lille: forventede ${E} ${j.verb} ${I} ${D.minimum.toString()} ${j.unit}`;return`For lille: forventede ${E} havde ${I} ${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Ugyldig streng: skal starte med "${I.prefix}"`;if(I.format==="ends_with")return`Ugyldig streng: skal ende med "${I.suffix}"`;if(I.format==="includes")return`Ugyldig streng: skal indeholde "${I.includes}"`;if(I.format==="regex")return`Ugyldig streng: skal matche m\xF8nsteret ${I.pattern}`;return`Ugyldig ${g[I.format]??D.format}`}case"not_multiple_of":return`Ugyldigt tal: skal v\xE6re deleligt med ${D.divisor}`;case"unrecognized_keys":return`${D.keys.length>1?"Ukendte n\xF8gler":"Ukendt n\xF8gle"}: ${q(D.keys,", ")}`;case"invalid_key":return`Ugyldig n\xF8gle i ${D.origin}`;case"invalid_union":return"Ugyldigt input: matcher ingen af de tilladte typer";case"invalid_element":return`Ugyldig v\xE6rdi i ${D.origin}`;default:return"Ugyldigt input"}}};var LG=w(()=>{h()});function RO(){return{localeError:TV()}}var TV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"Zahl",array:"Array"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Ung\xFCltige Eingabe: erwartet instanceof ${D.expected}, erhalten ${E}`;return`Ung\xFCltige Eingabe: erwartet ${I}, erhalten ${E}`}case"invalid_value":if(D.values.length===1)return`Ung\xFCltige Eingabe: erwartet ${r(D.values[0])}`;return`Ung\xFCltige Option: erwartet eine von ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Zu gro\xDF: erwartet, dass ${D.origin??"Wert"} ${I}${D.maximum.toString()} ${j.unit??"Elemente"} hat`;return`Zu gro\xDF: erwartet, dass ${D.origin??"Wert"} ${I}${D.maximum.toString()} ist`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Zu klein: erwartet, dass ${D.origin} ${I}${D.minimum.toString()} ${j.unit} hat`;return`Zu klein: erwartet, dass ${D.origin} ${I}${D.minimum.toString()} ist`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Ung\xFCltiger String: muss mit "${I.prefix}" beginnen`;if(I.format==="ends_with")return`Ung\xFCltiger String: muss mit "${I.suffix}" enden`;if(I.format==="includes")return`Ung\xFCltiger String: muss "${I.includes}" enthalten`;if(I.format==="regex")return`Ung\xFCltiger String: muss dem Muster ${I.pattern} entsprechen`;return`Ung\xFCltig: ${g[I.format]??D.format}`}case"not_multiple_of":return`Ung\xFCltige Zahl: muss ein Vielfaches von ${D.divisor} sein`;case"unrecognized_keys":return`${D.keys.length>1?"Unbekannte Schl\xFCssel":"Unbekannter Schl\xFCssel"}: ${q(D.keys,", ")}`;case"invalid_key":return`Ung\xFCltiger Schl\xFCssel in ${D.origin}`;case"invalid_union":return"Ung\xFCltige Eingabe";case"invalid_element":return`Ung\xFCltiger Wert in ${D.origin}`;default:return"Ung\xFCltige Eingabe"}}};var WG=w(()=>{h()});function GO(){return{localeError:KV()}}var KV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(typeof D.expected==="string"&&/^[A-Z]/.test(D.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 ${D.expected}, \u03BB\u03AE\u03C6\u03B8\u03B7\u03BA\u03B5 ${E}`;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 ${I}, \u03BB\u03AE\u03C6\u03B8\u03B7\u03BA\u03B5 ${E}`}case"invalid_value":if(D.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 ${r(D.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 ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`\u03A0\u03BF\u03BB\u03CD \u03BC\u03B5\u03B3\u03AC\u03BB\u03BF: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${D.origin??"\u03C4\u03B9\u03BC\u03AE"} \u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9 ${I}${D.maximum.toString()} ${j.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 ${D.origin??"\u03C4\u03B9\u03BC\u03AE"} \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`\u03A0\u03BF\u03BB\u03CD \u03BC\u03B9\u03BA\u03C1\u03CC: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${D.origin} \u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9 ${I}${D.minimum.toString()} ${j.unit}`;return`\u03A0\u03BF\u03BB\u03CD \u03BC\u03B9\u03BA\u03C1\u03CC: \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03C4\u03B1\u03BD ${D.origin} \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;return`\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF: ${g[I.format]??D.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 ${D.divisor}`;case"unrecognized_keys":return`\u0386\u03B3\u03BD\u03C9\u03C3\u03C4${D.keys.length>1?"\u03B1":"\u03BF"} \u03BA\u03BB\u03B5\u03B9\u03B4${D.keys.length>1?"\u03B9\u03AC":"\u03AF"}: ${q(D.keys,", ")}`;case"invalid_key":return`\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03BF \u03BA\u03BB\u03B5\u03B9\u03B4\u03AF \u03C3\u03C4\u03BF ${D.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 ${D.origin}`;default:return"\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B5\u03AF\u03C3\u03BF\u03B4\u03BF\u03C2"}}};var JG=w(()=>{h()});function ND(){return{localeError:qV()}}var qV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;return`Invalid input: expected ${I}, received ${E}`}case"invalid_value":if(D.values.length===1)return`Invalid input: expected ${r(D.values[0])}`;return`Invalid option: expected one of ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Too big: expected ${D.origin??"value"} to have ${I}${D.maximum.toString()} ${j.unit??"elements"}`;return`Too big: expected ${D.origin??"value"} to be ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Too small: expected ${D.origin} to have ${I}${D.minimum.toString()} ${j.unit}`;return`Too small: expected ${D.origin} to be ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Invalid string: must start with "${I.prefix}"`;if(I.format==="ends_with")return`Invalid string: must end with "${I.suffix}"`;if(I.format==="includes")return`Invalid string: must include "${I.includes}"`;if(I.format==="regex")return`Invalid string: must match pattern ${I.pattern}`;return`Invalid ${g[I.format]??D.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${D.divisor}`;case"unrecognized_keys":return`Unrecognized key${D.keys.length>1?"s":""}: ${q(D.keys,", ")}`;case"invalid_key":return`Invalid key in ${D.origin}`;case"invalid_union":if(D.options&&Array.isArray(D.options)&&D.options.length>0)return`Invalid discriminator value. Expected ${D.options.map((j)=>`'${j}'`).join(" | ")}`;return"Invalid input";case"invalid_element":return`Invalid value in ${D.origin}`;default:return"Invalid input"}}};var XO=w(()=>{h()});function YO(){return{localeError:BV()}}var BV=()=>{let _={string:{unit:"karaktrojn",verb:"havi"},file:{unit:"bajtojn",verb:"havi"},array:{unit:"elementojn",verb:"havi"},set:{unit:"elementojn",verb:"havi"}};function $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"nombro",array:"tabelo",null:"senvalora"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Nevalida enigo: atendi\u011Dis instanceof ${D.expected}, ricevi\u011Dis ${E}`;return`Nevalida enigo: atendi\u011Dis ${I}, ricevi\u011Dis ${E}`}case"invalid_value":if(D.values.length===1)return`Nevalida enigo: atendi\u011Dis ${r(D.values[0])}`;return`Nevalida opcio: atendi\u011Dis unu el ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Tro granda: atendi\u011Dis ke ${D.origin??"valoro"} havu ${I}${D.maximum.toString()} ${j.unit??"elementojn"}`;return`Tro granda: atendi\u011Dis ke ${D.origin??"valoro"} havu ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Tro malgranda: atendi\u011Dis ke ${D.origin} havu ${I}${D.minimum.toString()} ${j.unit}`;return`Tro malgranda: atendi\u011Dis ke ${D.origin} estu ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Nevalida karaktraro: devas komenci\u011Di per "${I.prefix}"`;if(I.format==="ends_with")return`Nevalida karaktraro: devas fini\u011Di per "${I.suffix}"`;if(I.format==="includes")return`Nevalida karaktraro: devas inkluzivi "${I.includes}"`;if(I.format==="regex")return`Nevalida karaktraro: devas kongrui kun la modelo ${I.pattern}`;return`Nevalida ${g[I.format]??D.format}`}case"not_multiple_of":return`Nevalida nombro: devas esti oblo de ${D.divisor}`;case"unrecognized_keys":return`Nekonata${D.keys.length>1?"j":""} \u015Dlosilo${D.keys.length>1?"j":""}: ${q(D.keys,", ")}`;case"invalid_key":return`Nevalida \u015Dlosilo en ${D.origin}`;case"invalid_union":return"Nevalida enigo";case"invalid_element":return`Nevalida valoro en ${D.origin}`;default:return"Nevalida enigo"}}};var zG=w(()=>{h()});function QO(){return{localeError:VV()}}var VV=()=>{let _={string:{unit:"caracteres",verb:"tener"},file:{unit:"bytes",verb:"tener"},array:{unit:"elementos",verb:"tener"},set:{unit:"elementos",verb:"tener"}};function $(D){return _[D]??null}let g={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"},U={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(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Entrada inv\xE1lida: se esperaba instanceof ${D.expected}, recibido ${E}`;return`Entrada inv\xE1lida: se esperaba ${I}, recibido ${E}`}case"invalid_value":if(D.values.length===1)return`Entrada inv\xE1lida: se esperaba ${r(D.values[0])}`;return`Opci\xF3n inv\xE1lida: se esperaba una de ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin),E=U[D.origin]??D.origin;if(j)return`Demasiado grande: se esperaba que ${E??"valor"} tuviera ${I}${D.maximum.toString()} ${j.unit??"elementos"}`;return`Demasiado grande: se esperaba que ${E??"valor"} fuera ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin),E=U[D.origin]??D.origin;if(j)return`Demasiado peque\xF1o: se esperaba que ${E} tuviera ${I}${D.minimum.toString()} ${j.unit}`;return`Demasiado peque\xF1o: se esperaba que ${E} fuera ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Cadena inv\xE1lida: debe comenzar con "${I.prefix}"`;if(I.format==="ends_with")return`Cadena inv\xE1lida: debe terminar en "${I.suffix}"`;if(I.format==="includes")return`Cadena inv\xE1lida: debe incluir "${I.includes}"`;if(I.format==="regex")return`Cadena inv\xE1lida: debe coincidir con el patr\xF3n ${I.pattern}`;return`Inv\xE1lido ${g[I.format]??D.format}`}case"not_multiple_of":return`N\xFAmero inv\xE1lido: debe ser m\xFAltiplo de ${D.divisor}`;case"unrecognized_keys":return`Llave${D.keys.length>1?"s":""} desconocida${D.keys.length>1?"s":""}: ${q(D.keys,", ")}`;case"invalid_key":return`Llave inv\xE1lida en ${U[D.origin]??D.origin}`;case"invalid_union":return"Entrada inv\xE1lida";case"invalid_element":return`Valor inv\xE1lido en ${U[D.origin]??D.origin}`;default:return"Entrada inv\xE1lida"}}};var RG=w(()=>{h()});function TO(){return{localeError:FV()}}var FV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"\u0639\u062F\u062F",array:"\u0622\u0631\u0627\u06CC\u0647"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A instanceof ${D.expected} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${E} \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 ${I} \u0645\u06CC\u200C\u0628\u0648\u062F\u060C ${E} \u062F\u0631\u06CC\u0627\u0641\u062A \u0634\u062F`}case"invalid_value":if(D.values.length===1)return`\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0645\u06CC\u200C\u0628\u0627\u06CC\u0633\u062A ${r(D.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 ${q(D.values,"|")} \u0645\u06CC\u200C\u0628\u0648\u062F`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${D.origin??"\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${I}${D.maximum.toString()} ${j.unit??"\u0639\u0646\u0635\u0631"} \u0628\u0627\u0634\u062F`;return`\u062E\u06CC\u0644\u06CC \u0628\u0632\u0631\u06AF: ${D.origin??"\u0645\u0642\u062F\u0627\u0631"} \u0628\u0627\u06CC\u062F ${I}${D.maximum.toString()} \u0628\u0627\u0634\u062F`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${D.origin} \u0628\u0627\u06CC\u062F ${I}${D.minimum.toString()} ${j.unit} \u0628\u0627\u0634\u062F`;return`\u062E\u06CC\u0644\u06CC \u06A9\u0648\u0686\u06A9: ${D.origin} \u0628\u0627\u06CC\u062F ${I}${D.minimum.toString()} \u0628\u0627\u0634\u062F`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${I.prefix}" \u0634\u0631\u0648\u0639 \u0634\u0648\u062F`;if(I.format==="ends_with")return`\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0628\u0627 "${I.suffix}" \u062A\u0645\u0627\u0645 \u0634\u0648\u062F`;if(I.format==="includes")return`\u0631\u0634\u062A\u0647 \u0646\u0627\u0645\u0639\u062A\u0628\u0631: \u0628\u0627\u06CC\u062F \u0634\u0627\u0645\u0644 "${I.includes}" \u0628\u0627\u0634\u062F`;if(I.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 ${I.pattern} \u0645\u0637\u0627\u0628\u0642\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F`;return`${g[I.format]??D.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 ${D.divisor} \u0628\u0627\u0634\u062F`;case"unrecognized_keys":return`\u06A9\u0644\u06CC\u062F${D.keys.length>1?"\u0647\u0627\u06CC":""} \u0646\u0627\u0634\u0646\u0627\u0633: ${q(D.keys,", ")}`;case"invalid_key":return`\u06A9\u0644\u06CC\u062F \u0646\u0627\u0634\u0646\u0627\u0633 \u062F\u0631 ${D.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 ${D.origin}`;default:return"\u0648\u0631\u0648\u062F\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631"}}};var GG=w(()=>{h()});function KO(){return{localeError:rV()}}var rV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Virheellinen tyyppi: odotettiin instanceof ${D.expected}, oli ${E}`;return`Virheellinen tyyppi: odotettiin ${I}, oli ${E}`}case"invalid_value":if(D.values.length===1)return`Virheellinen sy\xF6te: t\xE4ytyy olla ${r(D.values[0])}`;return`Virheellinen valinta: t\xE4ytyy olla yksi seuraavista: ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Liian suuri: ${j.subject} t\xE4ytyy olla ${I}${D.maximum.toString()} ${j.unit}`.trim();return`Liian suuri: arvon t\xE4ytyy olla ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Liian pieni: ${j.subject} t\xE4ytyy olla ${I}${D.minimum.toString()} ${j.unit}`.trim();return`Liian pieni: arvon t\xE4ytyy olla ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Virheellinen sy\xF6te: t\xE4ytyy alkaa "${I.prefix}"`;if(I.format==="ends_with")return`Virheellinen sy\xF6te: t\xE4ytyy loppua "${I.suffix}"`;if(I.format==="includes")return`Virheellinen sy\xF6te: t\xE4ytyy sis\xE4lt\xE4\xE4 "${I.includes}"`;if(I.format==="regex")return`Virheellinen sy\xF6te: t\xE4ytyy vastata s\xE4\xE4nn\xF6llist\xE4 lauseketta ${I.pattern}`;return`Virheellinen ${g[I.format]??D.format}`}case"not_multiple_of":return`Virheellinen luku: t\xE4ytyy olla luvun ${D.divisor} monikerta`;case"unrecognized_keys":return`${D.keys.length>1?"Tuntemattomat avaimet":"Tuntematon avain"}: ${q(D.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"}}};var XG=w(()=>{h()});function qO(){return{localeError:bV()}}var bV=()=>{let _={string:{unit:"caract\xE8res",verb:"avoir"},file:{unit:"octets",verb:"avoir"},array:{unit:"\xE9l\xE9ments",verb:"avoir"},set:{unit:"\xE9l\xE9ments",verb:"avoir"}};function $(D){return _[D]??null}let g={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"},U={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(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Entr\xE9e invalide : instanceof ${D.expected} attendu, ${E} re\xE7u`;return`Entr\xE9e invalide : ${I} attendu, ${E} re\xE7u`}case"invalid_value":if(D.values.length===1)return`Entr\xE9e invalide : ${r(D.values[0])} attendu`;return`Option invalide : une valeur parmi ${q(D.values,"|")} attendue`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Trop grand : ${U[D.origin]??"valeur"} doit ${j.verb} ${I}${D.maximum.toString()} ${j.unit??"\xE9l\xE9ment(s)"}`;return`Trop grand : ${U[D.origin]??"valeur"} doit \xEAtre ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Trop petit : ${U[D.origin]??"valeur"} doit ${j.verb} ${I}${D.minimum.toString()} ${j.unit}`;return`Trop petit : ${U[D.origin]??"valeur"} doit \xEAtre ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Cha\xEEne invalide : doit commencer par "${I.prefix}"`;if(I.format==="ends_with")return`Cha\xEEne invalide : doit se terminer par "${I.suffix}"`;if(I.format==="includes")return`Cha\xEEne invalide : doit inclure "${I.includes}"`;if(I.format==="regex")return`Cha\xEEne invalide : doit correspondre au mod\xE8le ${I.pattern}`;return`${g[I.format]??D.format} invalide`}case"not_multiple_of":return`Nombre invalide : doit \xEAtre un multiple de ${D.divisor}`;case"unrecognized_keys":return`Cl\xE9${D.keys.length>1?"s":""} non reconnue${D.keys.length>1?"s":""} : ${q(D.keys,", ")}`;case"invalid_key":return`Cl\xE9 invalide dans ${D.origin}`;case"invalid_union":return"Entr\xE9e invalide";case"invalid_element":return`Valeur invalide dans ${D.origin}`;default:return"Entr\xE9e invalide"}}};var YG=w(()=>{h()});function BO(){return{localeError:MV()}}var MV=()=>{let _={string:{unit:"caract\xE8res",verb:"avoir"},file:{unit:"octets",verb:"avoir"},array:{unit:"\xE9l\xE9ments",verb:"avoir"},set:{unit:"\xE9l\xE9ments",verb:"avoir"}};function $(D){return _[D]??null}let g={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"},U={nan:"NaN"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Entr\xE9e invalide : attendu instanceof ${D.expected}, re\xE7u ${E}`;return`Entr\xE9e invalide : attendu ${I}, re\xE7u ${E}`}case"invalid_value":if(D.values.length===1)return`Entr\xE9e invalide : attendu ${r(D.values[0])}`;return`Option invalide : attendu l'une des valeurs suivantes ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"\u2264":"<",j=$(D.origin);if(j)return`Trop grand : attendu que ${D.origin??"la valeur"} ait ${I}${D.maximum.toString()} ${j.unit}`;return`Trop grand : attendu que ${D.origin??"la valeur"} soit ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?"\u2265":">",j=$(D.origin);if(j)return`Trop petit : attendu que ${D.origin} ait ${I}${D.minimum.toString()} ${j.unit}`;return`Trop petit : attendu que ${D.origin} soit ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Cha\xEEne invalide : doit commencer par "${I.prefix}"`;if(I.format==="ends_with")return`Cha\xEEne invalide : doit se terminer par "${I.suffix}"`;if(I.format==="includes")return`Cha\xEEne invalide : doit inclure "${I.includes}"`;if(I.format==="regex")return`Cha\xEEne invalide : doit correspondre au motif ${I.pattern}`;return`${g[I.format]??D.format} invalide`}case"not_multiple_of":return`Nombre invalide : doit \xEAtre un multiple de ${D.divisor}`;case"unrecognized_keys":return`Cl\xE9${D.keys.length>1?"s":""} non reconnue${D.keys.length>1?"s":""} : ${q(D.keys,", ")}`;case"invalid_key":return`Cl\xE9 invalide dans ${D.origin}`;case"invalid_union":return"Entr\xE9e invalide";case"invalid_element":return`Valeur invalide dans ${D.origin}`;default:return"Entr\xE9e invalide"}}};var QG=w(()=>{h()});function VO(){return{localeError:ZV()}}var ZV=()=>{let _={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"}},$={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"}},g=(O)=>O?_[O]:void 0,U=(O)=>{let P=g(O);if(P)return P.label;return O??_.unknown.label},D=(O)=>`\u05D4${U(O)}`,I=(O)=>{return(g(O)?.gender??"m")==="f"?"\u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05D9\u05D5\u05EA":"\u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA"},j=(O)=>{if(!O)return null;return $[O]??null},E={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"}},A={nan:"NaN"};return(O)=>{switch(O.code){case"invalid_type":{let P=O.expected,W=A[P??""]??U(P),z=b(O.input),S=A[z]??_[z]?.label??z;if(/^[A-Z]/.test(O.expected))return`\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA instanceof ${O.expected}, \u05D4\u05EA\u05E7\u05D1\u05DC ${S}`;return`\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF: \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${W}, \u05D4\u05EA\u05E7\u05D1\u05DC ${S}`}case"invalid_value":{if(O.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 ${r(O.values[0])}`;let P=O.values.map((S)=>r(S));if(O.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 ${P[0]} \u05D0\u05D5 ${P[1]}`;let W=P[P.length-1];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 ${P.slice(0,-1).join(", ")} \u05D0\u05D5 ${W}`}case"too_big":{let P=j(O.origin),W=D(O.origin??"value");if(O.origin==="string")return`${P?.longLabel??"\u05D0\u05E8\u05D5\u05DA"} \u05DE\u05D3\u05D9: ${W} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${O.maximum.toString()} ${P?.unit??""} ${O.inclusive?"\u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA":"\u05DC\u05DB\u05DC \u05D4\u05D9\u05D5\u05EA\u05E8"}`.trim();if(O.origin==="number"){let L=O.inclusive?`\u05E7\u05D8\u05DF \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${O.maximum}`:`\u05E7\u05D8\u05DF \u05DE-${O.maximum}`;return`\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${W} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${L}`}if(O.origin==="array"||O.origin==="set"){let L=O.origin==="set"?"\u05E6\u05E8\u05D9\u05DB\u05D4":"\u05E6\u05E8\u05D9\u05DA",J=O.inclusive?`${O.maximum} ${P?.unit??""} \u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA`:`\u05E4\u05D7\u05D5\u05EA \u05DE-${O.maximum} ${P?.unit??""}`;return`\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${W} ${L} \u05DC\u05D4\u05DB\u05D9\u05DC ${J}`.trim()}let z=O.inclusive?"<=":"<",S=I(O.origin??"value");if(P?.unit)return`${P.longLabel} \u05DE\u05D3\u05D9: ${W} ${S} ${z}${O.maximum.toString()} ${P.unit}`;return`${P?.longLabel??"\u05D2\u05D3\u05D5\u05DC"} \u05DE\u05D3\u05D9: ${W} ${S} ${z}${O.maximum.toString()}`}case"too_small":{let P=j(O.origin),W=D(O.origin??"value");if(O.origin==="string")return`${P?.shortLabel??"\u05E7\u05E6\u05E8"} \u05DE\u05D3\u05D9: ${W} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${O.minimum.toString()} ${P?.unit??""} ${O.inclusive?"\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8":"\u05DC\u05E4\u05D7\u05D5\u05EA"}`.trim();if(O.origin==="number"){let L=O.inclusive?`\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${O.minimum}`:`\u05D2\u05D3\u05D5\u05DC \u05DE-${O.minimum}`;return`\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${W} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${L}`}if(O.origin==="array"||O.origin==="set"){let L=O.origin==="set"?"\u05E6\u05E8\u05D9\u05DB\u05D4":"\u05E6\u05E8\u05D9\u05DA";if(O.minimum===1&&O.inclusive){let R=O.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: ${W} ${L} \u05DC\u05D4\u05DB\u05D9\u05DC ${R}`}let J=O.inclusive?`${O.minimum} ${P?.unit??""} \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8`:`\u05D9\u05D5\u05EA\u05E8 \u05DE-${O.minimum} ${P?.unit??""}`;return`\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${W} ${L} \u05DC\u05D4\u05DB\u05D9\u05DC ${J}`.trim()}let z=O.inclusive?">=":">",S=I(O.origin??"value");if(P?.unit)return`${P.shortLabel} \u05DE\u05D3\u05D9: ${W} ${S} ${z}${O.minimum.toString()} ${P.unit}`;return`${P?.shortLabel??"\u05E7\u05D8\u05DF"} \u05DE\u05D3\u05D9: ${W} ${S} ${z}${O.minimum.toString()}`}case"invalid_format":{let P=O;if(P.format==="starts_with")return`\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05EA\u05D7\u05D9\u05DC \u05D1 "${P.prefix}"`;if(P.format==="ends_with")return`\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05D4\u05E1\u05EA\u05D9\u05D9\u05DD \u05D1 "${P.suffix}"`;if(P.format==="includes")return`\u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D7\u05D9\u05D9\u05D1\u05EA \u05DC\u05DB\u05DC\u05D5\u05DC "${P.includes}"`;if(P.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 ${P.pattern}`;let W=E[P.format],z=W?.label??P.format,L=(W?.gender??"m")==="f"?"\u05EA\u05E7\u05D9\u05E0\u05D4":"\u05EA\u05E7\u05D9\u05DF";return`${z} \u05DC\u05D0 ${L}`}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 ${O.divisor}`;case"unrecognized_keys":return`\u05DE\u05E4\u05EA\u05D7${O.keys.length>1?"\u05D5\u05EA":""} \u05DC\u05D0 \u05DE\u05D6\u05D5\u05D4${O.keys.length>1?"\u05D9\u05DD":"\u05D4"}: ${q(O.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":return`\u05E2\u05E8\u05DA \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1${D(O.origin??"array")}`;default:return"\u05E7\u05DC\u05D8 \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF"}}};var TG=w(()=>{h()});function FO(){return{localeError:HV()}}var HV=()=>{let _={string:{unit:"znakova",verb:"imati"},file:{unit:"bajtova",verb:"imati"},array:{unit:"stavki",verb:"imati"},set:{unit:"stavki",verb:"imati"}};function $(D){return _[D]??null}let g={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"},U={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(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Neispravan unos: o\u010Dekuje se instanceof ${D.expected}, a primljeno je ${E}`;return`Neispravan unos: o\u010Dekuje se ${I}, a primljeno je ${E}`}case"invalid_value":if(D.values.length===1)return`Neispravna vrijednost: o\u010Dekivano ${r(D.values[0])}`;return`Neispravna opcija: o\u010Dekivano jedno od ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin),E=U[D.origin]??D.origin;if(j)return`Preveliko: o\u010Dekivano da ${E??"vrijednost"} ima ${I}${D.maximum.toString()} ${j.unit??"elemenata"}`;return`Preveliko: o\u010Dekivano da ${E??"vrijednost"} bude ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin),E=U[D.origin]??D.origin;if(j)return`Premalo: o\u010Dekivano da ${E} ima ${I}${D.minimum.toString()} ${j.unit}`;return`Premalo: o\u010Dekivano da ${E} bude ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Neispravan tekst: mora zapo\u010Dinjati s "${I.prefix}"`;if(I.format==="ends_with")return`Neispravan tekst: mora zavr\u0161avati s "${I.suffix}"`;if(I.format==="includes")return`Neispravan tekst: mora sadr\u017Eavati "${I.includes}"`;if(I.format==="regex")return`Neispravan tekst: mora odgovarati uzorku ${I.pattern}`;return`Neispravna ${g[I.format]??D.format}`}case"not_multiple_of":return`Neispravan broj: mora biti vi\u0161ekratnik od ${D.divisor}`;case"unrecognized_keys":return`Neprepoznat${D.keys.length>1?"i klju\u010Devi":" klju\u010D"}: ${q(D.keys,", ")}`;case"invalid_key":return`Neispravan klju\u010D u ${U[D.origin]??D.origin}`;case"invalid_union":return"Neispravan unos";case"invalid_element":return`Neispravna vrijednost u ${U[D.origin]??D.origin}`;default:return"Neispravan unos"}}};var KG=w(()=>{h()});function rO(){return{localeError:kV()}}var kV=()=>{let _={string:{unit:"karakter",verb:"legyen"},file:{unit:"byte",verb:"legyen"},array:{unit:"elem",verb:"legyen"},set:{unit:"elem",verb:"legyen"}};function $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"sz\xE1m",array:"t\xF6mb"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k instanceof ${D.expected}, a kapott \xE9rt\xE9k ${E}`;return`\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${I}, a kapott \xE9rt\xE9k ${E}`}case"invalid_value":if(D.values.length===1)return`\xC9rv\xE9nytelen bemenet: a v\xE1rt \xE9rt\xE9k ${r(D.values[0])}`;return`\xC9rv\xE9nytelen opci\xF3: valamelyik \xE9rt\xE9k v\xE1rt ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`T\xFAl nagy: ${D.origin??"\xE9rt\xE9k"} m\xE9rete t\xFAl nagy ${I}${D.maximum.toString()} ${j.unit??"elem"}`;return`T\xFAl nagy: a bemeneti \xE9rt\xE9k ${D.origin??"\xE9rt\xE9k"} t\xFAl nagy: ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${D.origin} m\xE9rete t\xFAl kicsi ${I}${D.minimum.toString()} ${j.unit}`;return`T\xFAl kicsi: a bemeneti \xE9rt\xE9k ${D.origin} t\xFAl kicsi ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`\xC9rv\xE9nytelen string: "${I.prefix}" \xE9rt\xE9kkel kell kezd\u0151dnie`;if(I.format==="ends_with")return`\xC9rv\xE9nytelen string: "${I.suffix}" \xE9rt\xE9kkel kell v\xE9gz\u0151dnie`;if(I.format==="includes")return`\xC9rv\xE9nytelen string: "${I.includes}" \xE9rt\xE9ket kell tartalmaznia`;if(I.format==="regex")return`\xC9rv\xE9nytelen string: ${I.pattern} mint\xE1nak kell megfelelnie`;return`\xC9rv\xE9nytelen ${g[I.format]??D.format}`}case"not_multiple_of":return`\xC9rv\xE9nytelen sz\xE1m: ${D.divisor} t\xF6bbsz\xF6r\xF6s\xE9nek kell lennie`;case"unrecognized_keys":return`Ismeretlen kulcs${D.keys.length>1?"s":""}: ${q(D.keys,", ")}`;case"invalid_key":return`\xC9rv\xE9nytelen kulcs ${D.origin}`;case"invalid_union":return"\xC9rv\xE9nytelen bemenet";case"invalid_element":return`\xC9rv\xE9nytelen \xE9rt\xE9k: ${D.origin}`;default:return"\xC9rv\xE9nytelen bemenet"}}};var qG=w(()=>{h()});function BG(_,$,g){return Math.abs(_)===1?$:g}function v4(_){if(!_)return"";let $=["\u0561","\u0565","\u0568","\u056B","\u0578","\u0578\u0582","\u0585"],g=_[_.length-1];return _+($.includes(g)?"\u0576":"\u0568")}function bO(){return{localeError:CV()}}var CV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"\u0569\u056B\u057E",array:"\u0566\u0561\u0576\u0563\u057E\u0561\u056E"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.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 ${D.expected}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${E}`;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 ${I}, \u057D\u057F\u0561\u0581\u057E\u0565\u056C \u0567 ${E}`}case"invalid_value":if(D.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 ${r(D.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 ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j){let E=Number(D.maximum),A=BG(E,j.unit.one,j.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 ${v4(D.origin??"\u0561\u0580\u056A\u0565\u0584")} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${I}${D.maximum.toString()} ${A}`}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 ${v4(D.origin??"\u0561\u0580\u056A\u0565\u0584")} \u056C\u056B\u0576\u056B ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j){let E=Number(D.minimum),A=BG(E,j.unit.one,j.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 ${v4(D.origin)} \u056F\u0578\u0582\u0576\u0565\u0576\u0561 ${I}${D.minimum.toString()} ${A}`}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 ${v4(D.origin)} \u056C\u056B\u0576\u056B ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u057D\u056F\u057D\u057E\u056B "${I.prefix}"-\u0578\u057E`;if(I.format==="ends_with")return`\u054D\u056D\u0561\u056C \u057F\u0578\u0572\u2024 \u057A\u0565\u057F\u0584 \u0567 \u0561\u057E\u0561\u0580\u057F\u057E\u056B "${I.suffix}"-\u0578\u057E`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern} \u0571\u0587\u0561\u0579\u0561\u0583\u056B\u0576`;return`\u054D\u056D\u0561\u056C ${g[I.format]??D.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 ${D.divisor}-\u056B`;case"unrecognized_keys":return`\u0549\u0573\u0561\u0576\u0561\u0579\u057E\u0561\u056E \u0562\u0561\u0576\u0561\u056C\u056B${D.keys.length>1?"\u0576\u0565\u0580":""}. ${q(D.keys,", ")}`;case"invalid_key":return`\u054D\u056D\u0561\u056C \u0562\u0561\u0576\u0561\u056C\u056B ${v4(D.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 ${v4(D.origin)}-\u0578\u0582\u0574`;default:return"\u054D\u056D\u0561\u056C \u0574\u0578\u0582\u057F\u0584\u0561\u0563\u0580\u0578\u0582\u0574"}}};var VG=w(()=>{h()});function MO(){return{localeError:vV()}}var vV=()=>{let _={string:{unit:"karakter",verb:"memiliki"},file:{unit:"byte",verb:"memiliki"},array:{unit:"item",verb:"memiliki"},set:{unit:"item",verb:"memiliki"}};function $(D){return _[D]??null}let g={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"},U={nan:"NaN"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Input tidak valid: diharapkan instanceof ${D.expected}, diterima ${E}`;return`Input tidak valid: diharapkan ${I}, diterima ${E}`}case"invalid_value":if(D.values.length===1)return`Input tidak valid: diharapkan ${r(D.values[0])}`;return`Pilihan tidak valid: diharapkan salah satu dari ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Terlalu besar: diharapkan ${D.origin??"value"} memiliki ${I}${D.maximum.toString()} ${j.unit??"elemen"}`;return`Terlalu besar: diharapkan ${D.origin??"value"} menjadi ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Terlalu kecil: diharapkan ${D.origin} memiliki ${I}${D.minimum.toString()} ${j.unit}`;return`Terlalu kecil: diharapkan ${D.origin} menjadi ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`String tidak valid: harus dimulai dengan "${I.prefix}"`;if(I.format==="ends_with")return`String tidak valid: harus berakhir dengan "${I.suffix}"`;if(I.format==="includes")return`String tidak valid: harus menyertakan "${I.includes}"`;if(I.format==="regex")return`String tidak valid: harus sesuai pola ${I.pattern}`;return`${g[I.format]??D.format} tidak valid`}case"not_multiple_of":return`Angka tidak valid: harus kelipatan dari ${D.divisor}`;case"unrecognized_keys":return`Kunci tidak dikenali ${D.keys.length>1?"s":""}: ${q(D.keys,", ")}`;case"invalid_key":return`Kunci tidak valid di ${D.origin}`;case"invalid_union":return"Input tidak valid";case"invalid_element":return`Nilai tidak valid di ${D.origin}`;default:return"Input tidak valid"}}};var FG=w(()=>{h()});function ZO(){return{localeError:wV()}}var wV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"n\xFAmer",array:"fylki"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Rangt gildi: \xDE\xFA sl\xF3st inn ${E} \xFEar sem \xE1 a\xF0 vera instanceof ${D.expected}`;return`Rangt gildi: \xDE\xFA sl\xF3st inn ${E} \xFEar sem \xE1 a\xF0 vera ${I}`}case"invalid_value":if(D.values.length===1)return`Rangt gildi: gert r\xE1\xF0 fyrir ${r(D.values[0])}`;return`\xD3gilt val: m\xE1 vera eitt af eftirfarandi ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Of st\xF3rt: gert er r\xE1\xF0 fyrir a\xF0 ${D.origin??"gildi"} hafi ${I}${D.maximum.toString()} ${j.unit??"hluti"}`;return`Of st\xF3rt: gert er r\xE1\xF0 fyrir a\xF0 ${D.origin??"gildi"} s\xE9 ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Of l\xEDti\xF0: gert er r\xE1\xF0 fyrir a\xF0 ${D.origin} hafi ${I}${D.minimum.toString()} ${j.unit}`;return`Of l\xEDti\xF0: gert er r\xE1\xF0 fyrir a\xF0 ${D.origin} s\xE9 ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`\xD3gildur strengur: ver\xF0ur a\xF0 byrja \xE1 "${I.prefix}"`;if(I.format==="ends_with")return`\xD3gildur strengur: ver\xF0ur a\xF0 enda \xE1 "${I.suffix}"`;if(I.format==="includes")return`\xD3gildur strengur: ver\xF0ur a\xF0 innihalda "${I.includes}"`;if(I.format==="regex")return`\xD3gildur strengur: ver\xF0ur a\xF0 fylgja mynstri ${I.pattern}`;return`Rangt ${g[I.format]??D.format}`}case"not_multiple_of":return`R\xF6ng tala: ver\xF0ur a\xF0 vera margfeldi af ${D.divisor}`;case"unrecognized_keys":return`\xD3\xFEekkt ${D.keys.length>1?"ir lyklar":"ur lykill"}: ${q(D.keys,", ")}`;case"invalid_key":return`Rangur lykill \xED ${D.origin}`;case"invalid_union":return"Rangt gildi";case"invalid_element":return`Rangt gildi \xED ${D.origin}`;default:return"Rangt gildi"}}};var rG=w(()=>{h()});function HO(){return{localeError:uV()}}var uV=()=>{let _={string:{unit:"caratteri",verb:"avere"},file:{unit:"byte",verb:"avere"},array:{unit:"elementi",verb:"avere"},set:{unit:"elementi",verb:"avere"}};function $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"numero",array:"vettore"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Input non valido: atteso instanceof ${D.expected}, ricevuto ${E}`;return`Input non valido: atteso ${I}, ricevuto ${E}`}case"invalid_value":if(D.values.length===1)return`Input non valido: atteso ${r(D.values[0])}`;return`Opzione non valida: atteso uno tra ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Troppo grande: ${D.origin??"valore"} deve avere ${I}${D.maximum.toString()} ${j.unit??"elementi"}`;return`Troppo grande: ${D.origin??"valore"} deve essere ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Troppo piccolo: ${D.origin} deve avere ${I}${D.minimum.toString()} ${j.unit}`;return`Troppo piccolo: ${D.origin} deve essere ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Stringa non valida: deve iniziare con "${I.prefix}"`;if(I.format==="ends_with")return`Stringa non valida: deve terminare con "${I.suffix}"`;if(I.format==="includes")return`Stringa non valida: deve includere "${I.includes}"`;if(I.format==="regex")return`Stringa non valida: deve corrispondere al pattern ${I.pattern}`;return`Input non valido: ${g[I.format]??D.format}`}case"not_multiple_of":return`Numero non valido: deve essere un multiplo di ${D.divisor}`;case"unrecognized_keys":return`Chiav${D.keys.length>1?"i":"e"} non riconosciut${D.keys.length>1?"e":"a"}: ${q(D.keys,", ")}`;case"invalid_key":return`Chiave non valida in ${D.origin}`;case"invalid_union":return"Input non valido";case"invalid_element":return`Valore non valido in ${D.origin}`;default:return"Input non valido"}}};var bG=w(()=>{h()});function kO(){return{localeError:fV()}}var fV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"\u6570\u5024",array:"\u914D\u5217"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`\u7121\u52B9\u306A\u5165\u529B: instanceof ${D.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${E}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;return`\u7121\u52B9\u306A\u5165\u529B: ${I}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${E}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`}case"invalid_value":if(D.values.length===1)return`\u7121\u52B9\u306A\u5165\u529B: ${r(D.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`;return`\u7121\u52B9\u306A\u9078\u629E: ${q(D.values,"\u3001")}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;case"too_big":{let I=D.inclusive?"\u4EE5\u4E0B\u3067\u3042\u308B":"\u3088\u308A\u5C0F\u3055\u3044",j=$(D.origin);if(j)return`\u5927\u304D\u3059\u304E\u308B\u5024: ${D.origin??"\u5024"}\u306F${D.maximum.toString()}${j.unit??"\u8981\u7D20"}${I}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;return`\u5927\u304D\u3059\u304E\u308B\u5024: ${D.origin??"\u5024"}\u306F${D.maximum.toString()}${I}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`}case"too_small":{let I=D.inclusive?"\u4EE5\u4E0A\u3067\u3042\u308B":"\u3088\u308A\u5927\u304D\u3044",j=$(D.origin);if(j)return`\u5C0F\u3055\u3059\u304E\u308B\u5024: ${D.origin}\u306F${D.minimum.toString()}${j.unit}${I}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;return`\u5C0F\u3055\u3059\u304E\u308B\u5024: ${D.origin}\u306F${D.minimum.toString()}${I}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`\u7121\u52B9\u306A\u6587\u5B57\u5217: "${I.prefix}"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;if(I.format==="ends_with")return`\u7121\u52B9\u306A\u6587\u5B57\u5217: "${I.suffix}"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;if(I.format==="includes")return`\u7121\u52B9\u306A\u6587\u5B57\u5217: "${I.includes}"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;if(I.format==="regex")return`\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${I.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;return`\u7121\u52B9\u306A${g[I.format]??D.format}`}case"not_multiple_of":return`\u7121\u52B9\u306A\u6570\u5024: ${D.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${D.keys.length>1?"\u7FA4":""}: ${q(D.keys,"\u3001")}`;case"invalid_key":return`${D.origin}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`;case"invalid_union":return"\u7121\u52B9\u306A\u5165\u529B";case"invalid_element":return`${D.origin}\u5185\u306E\u7121\u52B9\u306A\u5024`;default:return"\u7121\u52B9\u306A\u5165\u529B"}}};var MG=w(()=>{h()});function CO(){return{localeError:xV()}}var xV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={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(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.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 ${D.expected}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${E}`;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 ${I}, \u10DB\u10D8\u10E6\u10D4\u10D1\u10E3\u10DA\u10D8 ${E}`}case"invalid_value":if(D.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 ${r(D.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 ${q(D.values,"|")}-\u10D3\u10D0\u10DC`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`\u10D6\u10D4\u10D3\u10DB\u10D4\u10E2\u10D0\u10D3 \u10D3\u10D8\u10D3\u10D8: \u10DB\u10DD\u10E1\u10D0\u10DA\u10DD\u10D3\u10DC\u10D4\u10DA\u10D8 ${D.origin??"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0"} ${j.verb} ${I}${D.maximum.toString()} ${j.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 ${D.origin??"\u10DB\u10DC\u10D8\u10E8\u10D5\u10DC\u10D4\u10DA\u10DD\u10D1\u10D0"} \u10D8\u10E7\u10DD\u10E1 ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)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 ${D.origin} ${j.verb} ${I}${D.minimum.toString()} ${j.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 ${D.origin} \u10D8\u10E7\u10DD\u10E1 ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.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 "${I.prefix}"-\u10D8\u10D7`;if(I.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 "${I.suffix}"-\u10D8\u10D7`;if(I.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 "${I.includes}"-\u10E1`;if(I.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 ${I.pattern}`;return`\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 ${g[I.format]??D.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 ${D.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${D.keys.length>1?"\u10D4\u10D1\u10D8":"\u10D8"}: ${q(D.keys,", ")}`;case"invalid_key":return`\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10D2\u10D0\u10E1\u10D0\u10E6\u10D4\u10D1\u10D8 ${D.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 ${D.origin}-\u10E8\u10D8`;default:return"\u10D0\u10E0\u10D0\u10E1\u10EC\u10DD\u10E0\u10D8 \u10E8\u10D4\u10E7\u10D5\u10D0\u10DC\u10D0"}}};var ZG=w(()=>{h()});function AD(){return{localeError:yV()}}var yV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={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(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.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 ${D.expected} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${E}`;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 ${I} \u1794\u17C9\u17BB\u1793\u17D2\u178F\u17C2\u1791\u1791\u17BD\u179B\u1794\u17B6\u1793 ${E}`}case"invalid_value":if(D.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 ${r(D.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 ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${D.origin??"\u178F\u1798\u17D2\u179B\u17C3"} ${I} ${D.maximum.toString()} ${j.unit??"\u1792\u17B6\u178F\u17BB"}`;return`\u1792\u17C6\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${D.origin??"\u178F\u1798\u17D2\u179B\u17C3"} ${I} ${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${D.origin} ${I} ${D.minimum.toString()} ${j.unit}`;return`\u178F\u17BC\u1785\u1796\u17C1\u1780\u17D6 \u178F\u17D2\u179A\u17BC\u179C\u1780\u17B6\u179A ${D.origin} ${I} ${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;return`\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C\u17D6 ${g[I.format]??D.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 ${D.divisor}`;case"unrecognized_keys":return`\u179A\u1780\u1783\u17BE\u1789\u179F\u17C4\u1798\u17B7\u1793\u179F\u17D2\u1782\u17B6\u179B\u17CB\u17D6 ${q(D.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 ${D.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 ${D.origin}`;default:return"\u1791\u17B7\u1793\u17D2\u1793\u1793\u17D0\u1799\u1798\u17B7\u1793\u178F\u17D2\u179A\u17B9\u1798\u178F\u17D2\u179A\u17BC\u179C"}}};var vO=w(()=>{h()});function wO(){return AD()}var HG=w(()=>{vO()});function uO(){return{localeError:cV()}}var cV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 instanceof ${D.expected}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${E}\uC785\uB2C8\uB2E4`;return`\uC798\uBABB\uB41C \uC785\uB825: \uC608\uC0C1 \uD0C0\uC785\uC740 ${I}, \uBC1B\uC740 \uD0C0\uC785\uC740 ${E}\uC785\uB2C8\uB2E4`}case"invalid_value":if(D.values.length===1)return`\uC798\uBABB\uB41C \uC785\uB825: \uAC12\uC740 ${r(D.values[0])} \uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4`;return`\uC798\uBABB\uB41C \uC635\uC158: ${q(D.values,"\uB610\uB294 ")} \uC911 \uD558\uB098\uC5EC\uC57C \uD569\uB2C8\uB2E4`;case"too_big":{let I=D.inclusive?"\uC774\uD558":"\uBBF8\uB9CC",j=I==="\uBBF8\uB9CC"?"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4":"\uC5EC\uC57C \uD569\uB2C8\uB2E4",E=$(D.origin),A=E?.unit??"\uC694\uC18C";if(E)return`${D.origin??"\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${D.maximum.toString()}${A} ${I}${j}`;return`${D.origin??"\uAC12"}\uC774 \uB108\uBB34 \uD07D\uB2C8\uB2E4: ${D.maximum.toString()} ${I}${j}`}case"too_small":{let I=D.inclusive?"\uC774\uC0C1":"\uCD08\uACFC",j=I==="\uC774\uC0C1"?"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4":"\uC5EC\uC57C \uD569\uB2C8\uB2E4",E=$(D.origin),A=E?.unit??"\uC694\uC18C";if(E)return`${D.origin??"\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${D.minimum.toString()}${A} ${I}${j}`;return`${D.origin??"\uAC12"}\uC774 \uB108\uBB34 \uC791\uC2B5\uB2C8\uB2E4: ${D.minimum.toString()} ${I}${j}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${I.prefix}"(\uC73C)\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4`;if(I.format==="ends_with")return`\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${I.suffix}"(\uC73C)\uB85C \uB05D\uB098\uC57C \uD569\uB2C8\uB2E4`;if(I.format==="includes")return`\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: "${I.includes}"\uC744(\uB97C) \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4`;if(I.format==="regex")return`\uC798\uBABB\uB41C \uBB38\uC790\uC5F4: \uC815\uADDC\uC2DD ${I.pattern} \uD328\uD134\uACFC \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4`;return`\uC798\uBABB\uB41C ${g[I.format]??D.format}`}case"not_multiple_of":return`\uC798\uBABB\uB41C \uC22B\uC790: ${D.divisor}\uC758 \uBC30\uC218\uC5EC\uC57C \uD569\uB2C8\uB2E4`;case"unrecognized_keys":return`\uC778\uC2DD\uD560 \uC218 \uC5C6\uB294 \uD0A4: ${q(D.keys,", ")}`;case"invalid_key":return`\uC798\uBABB\uB41C \uD0A4: ${D.origin}`;case"invalid_union":return"\uC798\uBABB\uB41C \uC785\uB825";case"invalid_element":return`\uC798\uBABB\uB41C \uAC12: ${D.origin}`;default:return"\uC798\uBABB\uB41C \uC785\uB825"}}};var kG=w(()=>{h()});function CG(_){let $=Math.abs(_),g=$%10,U=$%100;if(U>=11&&U<=19||g===0)return"many";if(g===1)return"one";return"few"}function fO(){return{localeError:hV()}}var OD=(_)=>{return _.charAt(0).toUpperCase()+_.slice(1)},hV=()=>{let _={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 $(D,I,j,E){let A=_[D]??null;if(A===null)return A;return{unit:A.unit[I],verb:A.verb[E][j?"inclusive":"notInclusive"]}}let g={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"},U={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(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Gautas tipas ${E}, o tik\u0117tasi - instanceof ${D.expected}`;return`Gautas tipas ${E}, o tik\u0117tasi - ${I}`}case"invalid_value":if(D.values.length===1)return`Privalo b\u016Bti ${r(D.values[0])}`;return`Privalo b\u016Bti vienas i\u0161 ${q(D.values,"|")} pasirinkim\u0173`;case"too_big":{let I=U[D.origin]??D.origin,j=$(D.origin,CG(Number(D.maximum)),D.inclusive??!1,"smaller");if(j?.verb)return`${OD(I??D.origin??"reik\u0161m\u0117")} ${j.verb} ${D.maximum.toString()} ${j.unit??"element\u0173"}`;let E=D.inclusive?"ne didesnis kaip":"ma\u017Eesnis kaip";return`${OD(I??D.origin??"reik\u0161m\u0117")} turi b\u016Bti ${E} ${D.maximum.toString()} ${j?.unit}`}case"too_small":{let I=U[D.origin]??D.origin,j=$(D.origin,CG(Number(D.minimum)),D.inclusive??!1,"bigger");if(j?.verb)return`${OD(I??D.origin??"reik\u0161m\u0117")} ${j.verb} ${D.minimum.toString()} ${j.unit??"element\u0173"}`;let E=D.inclusive?"ne ma\u017Eesnis kaip":"didesnis kaip";return`${OD(I??D.origin??"reik\u0161m\u0117")} turi b\u016Bti ${E} ${D.minimum.toString()} ${j?.unit}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Eilut\u0117 privalo prasid\u0117ti "${I.prefix}"`;if(I.format==="ends_with")return`Eilut\u0117 privalo pasibaigti "${I.suffix}"`;if(I.format==="includes")return`Eilut\u0117 privalo \u012Ftraukti "${I.includes}"`;if(I.format==="regex")return`Eilut\u0117 privalo atitikti ${I.pattern}`;return`Neteisingas ${g[I.format]??D.format}`}case"not_multiple_of":return`Skai\u010Dius privalo b\u016Bti ${D.divisor} kartotinis.`;case"unrecognized_keys":return`Neatpa\u017Eint${D.keys.length>1?"i":"as"} rakt${D.keys.length>1?"ai":"as"}: ${q(D.keys,", ")}`;case"invalid_key":return"Rastas klaidingas raktas";case"invalid_union":return"Klaidinga \u012Fvestis";case"invalid_element":{let I=U[D.origin]??D.origin;return`${OD(I??D.origin??"reik\u0161m\u0117")} turi klaiding\u0105 \u012Fvest\u012F`}default:return"Klaidinga \u012Fvestis"}}};var vG=w(()=>{h()});function xO(){return{localeError:nV()}}var nV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"\u0431\u0440\u043E\u0458",array:"\u043D\u0438\u0437\u0430"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 instanceof ${D.expected}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${E}`;return`\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${I}, \u043F\u0440\u0438\u043C\u0435\u043D\u043E ${E}`}case"invalid_value":if(D.values.length===1)return`Invalid input: expected ${r(D.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 ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u0433\u043E\u043B\u0435\u043C: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${D.origin??"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0438\u043C\u0430 ${I}${D.maximum.toString()} ${j.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 ${D.origin??"\u0432\u0440\u0435\u0434\u043D\u043E\u0441\u0442\u0430"} \u0434\u0430 \u0431\u0438\u0434\u0435 ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${D.origin} \u0434\u0430 \u0438\u043C\u0430 ${I}${D.minimum.toString()} ${j.unit}`;return`\u041F\u0440\u0435\u043C\u043D\u043E\u0433\u0443 \u043C\u0430\u043B: \u0441\u0435 \u043E\u0447\u0435\u043A\u0443\u0432\u0430 ${D.origin} \u0434\u0430 \u0431\u0438\u0434\u0435 ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;return`Invalid ${g[I.format]??D.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 ${D.divisor}`;case"unrecognized_keys":return`${D.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"}: ${q(D.keys,", ")}`;case"invalid_key":return`\u0413\u0440\u0435\u0448\u0435\u043D \u043A\u043B\u0443\u0447 \u0432\u043E ${D.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 ${D.origin}`;default:return"\u0413\u0440\u0435\u0448\u0435\u043D \u0432\u043D\u0435\u0441"}}};var wG=w(()=>{h()});function yO(){return{localeError:dV()}}var dV=()=>{let _={string:{unit:"aksara",verb:"mempunyai"},file:{unit:"bait",verb:"mempunyai"},array:{unit:"elemen",verb:"mempunyai"},set:{unit:"elemen",verb:"mempunyai"}};function $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"nombor"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Input tidak sah: dijangka instanceof ${D.expected}, diterima ${E}`;return`Input tidak sah: dijangka ${I}, diterima ${E}`}case"invalid_value":if(D.values.length===1)return`Input tidak sah: dijangka ${r(D.values[0])}`;return`Pilihan tidak sah: dijangka salah satu daripada ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Terlalu besar: dijangka ${D.origin??"nilai"} ${j.verb} ${I}${D.maximum.toString()} ${j.unit??"elemen"}`;return`Terlalu besar: dijangka ${D.origin??"nilai"} adalah ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Terlalu kecil: dijangka ${D.origin} ${j.verb} ${I}${D.minimum.toString()} ${j.unit}`;return`Terlalu kecil: dijangka ${D.origin} adalah ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`String tidak sah: mesti bermula dengan "${I.prefix}"`;if(I.format==="ends_with")return`String tidak sah: mesti berakhir dengan "${I.suffix}"`;if(I.format==="includes")return`String tidak sah: mesti mengandungi "${I.includes}"`;if(I.format==="regex")return`String tidak sah: mesti sepadan dengan corak ${I.pattern}`;return`${g[I.format]??D.format} tidak sah`}case"not_multiple_of":return`Nombor tidak sah: perlu gandaan ${D.divisor}`;case"unrecognized_keys":return`Kunci tidak dikenali: ${q(D.keys,", ")}`;case"invalid_key":return`Kunci tidak sah dalam ${D.origin}`;case"invalid_union":return"Input tidak sah";case"invalid_element":return`Nilai tidak sah dalam ${D.origin}`;default:return"Input tidak sah"}}};var uG=w(()=>{h()});function cO(){return{localeError:mV()}}var mV=()=>{let _={string:{unit:"tekens",verb:"heeft"},file:{unit:"bytes",verb:"heeft"},array:{unit:"elementen",verb:"heeft"},set:{unit:"elementen",verb:"heeft"}};function $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"getal"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Ongeldige invoer: verwacht instanceof ${D.expected}, ontving ${E}`;return`Ongeldige invoer: verwacht ${I}, ontving ${E}`}case"invalid_value":if(D.values.length===1)return`Ongeldige invoer: verwacht ${r(D.values[0])}`;return`Ongeldige optie: verwacht \xE9\xE9n van ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin),E=D.origin==="date"?"laat":D.origin==="string"?"lang":"groot";if(j)return`Te ${E}: verwacht dat ${D.origin??"waarde"} ${I}${D.maximum.toString()} ${j.unit??"elementen"} ${j.verb}`;return`Te ${E}: verwacht dat ${D.origin??"waarde"} ${I}${D.maximum.toString()} is`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin),E=D.origin==="date"?"vroeg":D.origin==="string"?"kort":"klein";if(j)return`Te ${E}: verwacht dat ${D.origin} ${I}${D.minimum.toString()} ${j.unit} ${j.verb}`;return`Te ${E}: verwacht dat ${D.origin} ${I}${D.minimum.toString()} is`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Ongeldige tekst: moet met "${I.prefix}" beginnen`;if(I.format==="ends_with")return`Ongeldige tekst: moet op "${I.suffix}" eindigen`;if(I.format==="includes")return`Ongeldige tekst: moet "${I.includes}" bevatten`;if(I.format==="regex")return`Ongeldige tekst: moet overeenkomen met patroon ${I.pattern}`;return`Ongeldig: ${g[I.format]??D.format}`}case"not_multiple_of":return`Ongeldig getal: moet een veelvoud van ${D.divisor} zijn`;case"unrecognized_keys":return`Onbekende key${D.keys.length>1?"s":""}: ${q(D.keys,", ")}`;case"invalid_key":return`Ongeldige key in ${D.origin}`;case"invalid_union":return"Ongeldige invoer";case"invalid_element":return`Ongeldige waarde in ${D.origin}`;default:return"Ongeldige invoer"}}};var fG=w(()=>{h()});function hO(){return{localeError:iV()}}var iV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"tall",array:"liste"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Ugyldig input: forventet instanceof ${D.expected}, fikk ${E}`;return`Ugyldig input: forventet ${I}, fikk ${E}`}case"invalid_value":if(D.values.length===1)return`Ugyldig verdi: forventet ${r(D.values[0])}`;return`Ugyldig valg: forventet en av ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`For stor(t): forventet ${D.origin??"value"} til \xE5 ha ${I}${D.maximum.toString()} ${j.unit??"elementer"}`;return`For stor(t): forventet ${D.origin??"value"} til \xE5 ha ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`For lite(n): forventet ${D.origin} til \xE5 ha ${I}${D.minimum.toString()} ${j.unit}`;return`For lite(n): forventet ${D.origin} til \xE5 ha ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Ugyldig streng: m\xE5 starte med "${I.prefix}"`;if(I.format==="ends_with")return`Ugyldig streng: m\xE5 ende med "${I.suffix}"`;if(I.format==="includes")return`Ugyldig streng: m\xE5 inneholde "${I.includes}"`;if(I.format==="regex")return`Ugyldig streng: m\xE5 matche m\xF8nsteret ${I.pattern}`;return`Ugyldig ${g[I.format]??D.format}`}case"not_multiple_of":return`Ugyldig tall: m\xE5 v\xE6re et multiplum av ${D.divisor}`;case"unrecognized_keys":return`${D.keys.length>1?"Ukjente n\xF8kler":"Ukjent n\xF8kkel"}: ${q(D.keys,", ")}`;case"invalid_key":return`Ugyldig n\xF8kkel i ${D.origin}`;case"invalid_union":return"Ugyldig input";case"invalid_element":return`Ugyldig verdi i ${D.origin}`;default:return"Ugyldig input"}}};var xG=w(()=>{h()});function nO(){return{localeError:lV()}}var lV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"numara",array:"saf",null:"gayb"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`F\xE2sit giren: umulan instanceof ${D.expected}, al\u0131nan ${E}`;return`F\xE2sit giren: umulan ${I}, al\u0131nan ${E}`}case"invalid_value":if(D.values.length===1)return`F\xE2sit giren: umulan ${r(D.values[0])}`;return`F\xE2sit tercih: m\xFBteberler ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Fazla b\xFCy\xFCk: ${D.origin??"value"}, ${I}${D.maximum.toString()} ${j.unit??"elements"} sahip olmal\u0131yd\u0131.`;return`Fazla b\xFCy\xFCk: ${D.origin??"value"}, ${I}${D.maximum.toString()} olmal\u0131yd\u0131.`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Fazla k\xFC\xE7\xFCk: ${D.origin}, ${I}${D.minimum.toString()} ${j.unit} sahip olmal\u0131yd\u0131.`;return`Fazla k\xFC\xE7\xFCk: ${D.origin}, ${I}${D.minimum.toString()} olmal\u0131yd\u0131.`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`F\xE2sit metin: "${I.prefix}" ile ba\u015Flamal\u0131.`;if(I.format==="ends_with")return`F\xE2sit metin: "${I.suffix}" ile bitmeli.`;if(I.format==="includes")return`F\xE2sit metin: "${I.includes}" ihtiv\xE2 etmeli.`;if(I.format==="regex")return`F\xE2sit metin: ${I.pattern} nak\u015F\u0131na uymal\u0131.`;return`F\xE2sit ${g[I.format]??D.format}`}case"not_multiple_of":return`F\xE2sit say\u0131: ${D.divisor} kat\u0131 olmal\u0131yd\u0131.`;case"unrecognized_keys":return`Tan\u0131nmayan anahtar ${D.keys.length>1?"s":""}: ${q(D.keys,", ")}`;case"invalid_key":return`${D.origin} i\xE7in tan\u0131nmayan anahtar var.`;case"invalid_union":return"Giren tan\u0131namad\u0131.";case"invalid_element":return`${D.origin} i\xE7in tan\u0131nmayan k\u0131ymet var.`;default:return"K\u0131ymet tan\u0131namad\u0131."}}};var yG=w(()=>{h()});function dO(){return{localeError:tV()}}var tV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"\u0639\u062F\u062F",array:"\u0627\u0631\u06D0"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F instanceof ${D.expected} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${E} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`;return`\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${I} \u0648\u0627\u06CC, \u0645\u06AB\u0631 ${E} \u062A\u0631\u0644\u0627\u0633\u0647 \u0634\u0648`}case"invalid_value":if(D.values.length===1)return`\u0646\u0627\u0633\u0645 \u0648\u0631\u0648\u062F\u064A: \u0628\u0627\u06CC\u062F ${r(D.values[0])} \u0648\u0627\u06CC`;return`\u0646\u0627\u0633\u0645 \u0627\u0646\u062A\u062E\u0627\u0628: \u0628\u0627\u06CC\u062F \u06CC\u0648 \u0644\u0647 ${q(D.values,"|")} \u0685\u062E\u0647 \u0648\u0627\u06CC`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${D.origin??"\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${I}${D.maximum.toString()} ${j.unit??"\u0639\u0646\u0635\u0631\u0648\u0646\u0647"} \u0648\u0644\u0631\u064A`;return`\u0689\u06CC\u0631 \u0644\u0648\u06CC: ${D.origin??"\u0627\u0631\u0632\u069A\u062A"} \u0628\u0627\u06CC\u062F ${I}${D.maximum.toString()} \u0648\u064A`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${D.origin} \u0628\u0627\u06CC\u062F ${I}${D.minimum.toString()} ${j.unit} \u0648\u0644\u0631\u064A`;return`\u0689\u06CC\u0631 \u06A9\u0648\u0686\u0646\u06CC: ${D.origin} \u0628\u0627\u06CC\u062F ${I}${D.minimum.toString()} \u0648\u064A`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${I.prefix}" \u0633\u0631\u0647 \u067E\u06CC\u0644 \u0634\u064A`;if(I.format==="ends_with")return`\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F "${I.suffix}" \u0633\u0631\u0647 \u067E\u0627\u06CC \u062A\u0647 \u0648\u0631\u0633\u064A\u0696\u064A`;if(I.format==="includes")return`\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F "${I.includes}" \u0648\u0644\u0631\u064A`;if(I.format==="regex")return`\u0646\u0627\u0633\u0645 \u0645\u062A\u0646: \u0628\u0627\u06CC\u062F \u062F ${I.pattern} \u0633\u0631\u0647 \u0645\u0637\u0627\u0628\u0642\u062A \u0648\u0644\u0631\u064A`;return`${g[I.format]??D.format} \u0646\u0627\u0633\u0645 \u062F\u06CC`}case"not_multiple_of":return`\u0646\u0627\u0633\u0645 \u0639\u062F\u062F: \u0628\u0627\u06CC\u062F \u062F ${D.divisor} \u0645\u0636\u0631\u0628 \u0648\u064A`;case"unrecognized_keys":return`\u0646\u0627\u0633\u0645 ${D.keys.length>1?"\u06A9\u0644\u06CC\u0689\u0648\u0646\u0647":"\u06A9\u0644\u06CC\u0689"}: ${q(D.keys,", ")}`;case"invalid_key":return`\u0646\u0627\u0633\u0645 \u06A9\u0644\u06CC\u0689 \u067E\u0647 ${D.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 ${D.origin} \u06A9\u06D0`;default:return"\u0646\u0627\u0633\u0645\u0647 \u0648\u0631\u0648\u062F\u064A"}}};var cG=w(()=>{h()});function mO(){return{localeError:oV()}}var oV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"liczba",array:"tablica"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano instanceof ${D.expected}, otrzymano ${E}`;return`Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${I}, otrzymano ${E}`}case"invalid_value":if(D.values.length===1)return`Nieprawid\u0142owe dane wej\u015Bciowe: oczekiwano ${r(D.values[0])}`;return`Nieprawid\u0142owa opcja: oczekiwano jednej z warto\u015Bci ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Za du\u017Ca warto\u015B\u0107: oczekiwano, \u017Ce ${D.origin??"warto\u015B\u0107"} b\u0119dzie mie\u0107 ${I}${D.maximum.toString()} ${j.unit??"element\xF3w"}`;return`Zbyt du\u017C(y/a/e): oczekiwano, \u017Ce ${D.origin??"warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Za ma\u0142a warto\u015B\u0107: oczekiwano, \u017Ce ${D.origin??"warto\u015B\u0107"} b\u0119dzie mie\u0107 ${I}${D.minimum.toString()} ${j.unit??"element\xF3w"}`;return`Zbyt ma\u0142(y/a/e): oczekiwano, \u017Ce ${D.origin??"warto\u015B\u0107"} b\u0119dzie wynosi\u0107 ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zaczyna\u0107 si\u0119 od "${I.prefix}"`;if(I.format==="ends_with")return`Nieprawid\u0142owy ci\u0105g znak\xF3w: musi ko\u0144czy\u0107 si\u0119 na "${I.suffix}"`;if(I.format==="includes")return`Nieprawid\u0142owy ci\u0105g znak\xF3w: musi zawiera\u0107 "${I.includes}"`;if(I.format==="regex")return`Nieprawid\u0142owy ci\u0105g znak\xF3w: musi odpowiada\u0107 wzorcowi ${I.pattern}`;return`Nieprawid\u0142ow(y/a/e) ${g[I.format]??D.format}`}case"not_multiple_of":return`Nieprawid\u0142owa liczba: musi by\u0107 wielokrotno\u015Bci\u0105 ${D.divisor}`;case"unrecognized_keys":return`Nierozpoznane klucze${D.keys.length>1?"s":""}: ${q(D.keys,", ")}`;case"invalid_key":return`Nieprawid\u0142owy klucz w ${D.origin}`;case"invalid_union":return"Nieprawid\u0142owe dane wej\u015Bciowe";case"invalid_element":return`Nieprawid\u0142owa warto\u015B\u0107 w ${D.origin}`;default:return"Nieprawid\u0142owe dane wej\u015Bciowe"}}};var hG=w(()=>{h()});function iO(){return{localeError:pV()}}var pV=()=>{let _={string:{unit:"caracteres",verb:"ter"},file:{unit:"bytes",verb:"ter"},array:{unit:"itens",verb:"ter"},set:{unit:"itens",verb:"ter"}};function $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"n\xFAmero",null:"nulo"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Tipo inv\xE1lido: esperado instanceof ${D.expected}, recebido ${E}`;return`Tipo inv\xE1lido: esperado ${I}, recebido ${E}`}case"invalid_value":if(D.values.length===1)return`Entrada inv\xE1lida: esperado ${r(D.values[0])}`;return`Op\xE7\xE3o inv\xE1lida: esperada uma das ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Muito grande: esperado que ${D.origin??"valor"} tivesse ${I}${D.maximum.toString()} ${j.unit??"elementos"}`;return`Muito grande: esperado que ${D.origin??"valor"} fosse ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Muito pequeno: esperado que ${D.origin} tivesse ${I}${D.minimum.toString()} ${j.unit}`;return`Muito pequeno: esperado que ${D.origin} fosse ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Texto inv\xE1lido: deve come\xE7ar com "${I.prefix}"`;if(I.format==="ends_with")return`Texto inv\xE1lido: deve terminar com "${I.suffix}"`;if(I.format==="includes")return`Texto inv\xE1lido: deve incluir "${I.includes}"`;if(I.format==="regex")return`Texto inv\xE1lido: deve corresponder ao padr\xE3o ${I.pattern}`;return`${g[I.format]??D.format} inv\xE1lido`}case"not_multiple_of":return`N\xFAmero inv\xE1lido: deve ser m\xFAltiplo de ${D.divisor}`;case"unrecognized_keys":return`Chave${D.keys.length>1?"s":""} desconhecida${D.keys.length>1?"s":""}: ${q(D.keys,", ")}`;case"invalid_key":return`Chave inv\xE1lida em ${D.origin}`;case"invalid_union":return"Entrada inv\xE1lida";case"invalid_element":return`Valor inv\xE1lido em ${D.origin}`;default:return"Campo inv\xE1lido"}}};var nG=w(()=>{h()});function lO(){return{localeError:eV()}}var eV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={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(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;return`Intrare invalid\u0103: a\u0219teptat ${I}, primit ${E}`}case"invalid_value":if(D.values.length===1)return`Intrare invalid\u0103: a\u0219teptat ${r(D.values[0])}`;return`Op\u021Biune invalid\u0103: a\u0219teptat una dintre ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Prea mare: a\u0219teptat ca ${D.origin??"valoarea"} ${j.verb} ${I}${D.maximum.toString()} ${j.unit??"elemente"}`;return`Prea mare: a\u0219teptat ca ${D.origin??"valoarea"} s\u0103 fie ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Prea mic: a\u0219teptat ca ${D.origin} ${j.verb} ${I}${D.minimum.toString()} ${j.unit}`;return`Prea mic: a\u0219teptat ca ${D.origin} s\u0103 fie ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`\u0218ir invalid: trebuie s\u0103 \xEEnceap\u0103 cu "${I.prefix}"`;if(I.format==="ends_with")return`\u0218ir invalid: trebuie s\u0103 se termine cu "${I.suffix}"`;if(I.format==="includes")return`\u0218ir invalid: trebuie s\u0103 includ\u0103 "${I.includes}"`;if(I.format==="regex")return`\u0218ir invalid: trebuie s\u0103 se potriveasc\u0103 cu modelul ${I.pattern}`;return`Format invalid: ${g[I.format]??D.format}`}case"not_multiple_of":return`Num\u0103r invalid: trebuie s\u0103 fie multiplu de ${D.divisor}`;case"unrecognized_keys":return`Chei nerecunoscute: ${q(D.keys,", ")}`;case"invalid_key":return`Cheie invalid\u0103 \xEEn ${D.origin}`;case"invalid_union":return"Intrare invalid\u0103";case"invalid_element":return`Valoare invalid\u0103 \xEEn ${D.origin}`;default:return"Intrare invalid\u0103"}}};var dG=w(()=>{h()});function mG(_,$,g,U){let D=Math.abs(_),I=D%10,j=D%100;if(j>=11&&j<=19)return U;if(I===1)return $;if(I>=2&&I<=4)return g;return U}function tO(){return{localeError:aV()}}var aV=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"\u0447\u0438\u0441\u043B\u043E",array:"\u043C\u0430\u0441\u0441\u0438\u0432"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C instanceof ${D.expected}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${E}`;return`\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0432\u0432\u043E\u0434: \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C ${I}, \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E ${E}`}case"invalid_value":if(D.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 ${r(D.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 ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j){let E=Number(D.maximum),A=mG(E,j.unit.one,j.unit.few,j.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 ${D.origin??"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${I}${D.maximum.toString()} ${A}`}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 ${D.origin??"\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435"} \u0431\u0443\u0434\u0435\u0442 ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j){let E=Number(D.minimum),A=mG(E,j.unit.one,j.unit.few,j.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 ${D.origin} \u0431\u0443\u0434\u0435\u0442 \u0438\u043C\u0435\u0442\u044C ${I}${D.minimum.toString()} ${A}`}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 ${D.origin} \u0431\u0443\u0434\u0435\u0442 ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;return`\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 ${g[I.format]??D.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 ${D.divisor}`;case"unrecognized_keys":return`\u041D\u0435\u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u043D\u043D${D.keys.length>1?"\u044B\u0435":"\u044B\u0439"} \u043A\u043B\u044E\u0447${D.keys.length>1?"\u0438":""}: ${q(D.keys,", ")}`;case"invalid_key":return`\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u043A\u043B\u044E\u0447 \u0432 ${D.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 ${D.origin}`;default:return"\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0435 \u0432\u0445\u043E\u0434\u043D\u044B\u0435 \u0434\u0430\u043D\u043D\u044B\u0435"}}};var iG=w(()=>{h()});function oO(){return{localeError:sV()}}var sV=()=>{let _={string:{unit:"znakov",verb:"imeti"},file:{unit:"bajtov",verb:"imeti"},array:{unit:"elementov",verb:"imeti"},set:{unit:"elementov",verb:"imeti"}};function $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"\u0161tevilo",array:"tabela"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Neveljaven vnos: pri\u010Dakovano instanceof ${D.expected}, prejeto ${E}`;return`Neveljaven vnos: pri\u010Dakovano ${I}, prejeto ${E}`}case"invalid_value":if(D.values.length===1)return`Neveljaven vnos: pri\u010Dakovano ${r(D.values[0])}`;return`Neveljavna mo\u017Enost: pri\u010Dakovano eno izmed ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Preveliko: pri\u010Dakovano, da bo ${D.origin??"vrednost"} imelo ${I}${D.maximum.toString()} ${j.unit??"elementov"}`;return`Preveliko: pri\u010Dakovano, da bo ${D.origin??"vrednost"} ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Premajhno: pri\u010Dakovano, da bo ${D.origin} imelo ${I}${D.minimum.toString()} ${j.unit}`;return`Premajhno: pri\u010Dakovano, da bo ${D.origin} ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Neveljaven niz: mora se za\u010Deti z "${I.prefix}"`;if(I.format==="ends_with")return`Neveljaven niz: mora se kon\u010Dati z "${I.suffix}"`;if(I.format==="includes")return`Neveljaven niz: mora vsebovati "${I.includes}"`;if(I.format==="regex")return`Neveljaven niz: mora ustrezati vzorcu ${I.pattern}`;return`Neveljaven ${g[I.format]??D.format}`}case"not_multiple_of":return`Neveljavno \u0161tevilo: mora biti ve\u010Dkratnik ${D.divisor}`;case"unrecognized_keys":return`Neprepoznan${D.keys.length>1?"i klju\u010Di":" klju\u010D"}: ${q(D.keys,", ")}`;case"invalid_key":return`Neveljaven klju\u010D v ${D.origin}`;case"invalid_union":return"Neveljaven vnos";case"invalid_element":return`Neveljavna vrednost v ${D.origin}`;default:return"Neveljaven vnos"}}};var lG=w(()=>{h()});function pO(){return{localeError:_F()}}var _F=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"antal",array:"lista"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Ogiltig inmatning: f\xF6rv\xE4ntat instanceof ${D.expected}, fick ${E}`;return`Ogiltig inmatning: f\xF6rv\xE4ntat ${I}, fick ${E}`}case"invalid_value":if(D.values.length===1)return`Ogiltig inmatning: f\xF6rv\xE4ntat ${r(D.values[0])}`;return`Ogiltigt val: f\xF6rv\xE4ntade en av ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`F\xF6r stor(t): f\xF6rv\xE4ntade ${D.origin??"v\xE4rdet"} att ha ${I}${D.maximum.toString()} ${j.unit??"element"}`;return`F\xF6r stor(t): f\xF6rv\xE4ntat ${D.origin??"v\xE4rdet"} att ha ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`F\xF6r lite(t): f\xF6rv\xE4ntade ${D.origin??"v\xE4rdet"} att ha ${I}${D.minimum.toString()} ${j.unit}`;return`F\xF6r lite(t): f\xF6rv\xE4ntade ${D.origin??"v\xE4rdet"} att ha ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Ogiltig str\xE4ng: m\xE5ste b\xF6rja med "${I.prefix}"`;if(I.format==="ends_with")return`Ogiltig str\xE4ng: m\xE5ste sluta med "${I.suffix}"`;if(I.format==="includes")return`Ogiltig str\xE4ng: m\xE5ste inneh\xE5lla "${I.includes}"`;if(I.format==="regex")return`Ogiltig str\xE4ng: m\xE5ste matcha m\xF6nstret "${I.pattern}"`;return`Ogiltig(t) ${g[I.format]??D.format}`}case"not_multiple_of":return`Ogiltigt tal: m\xE5ste vara en multipel av ${D.divisor}`;case"unrecognized_keys":return`${D.keys.length>1?"Ok\xE4nda nycklar":"Ok\xE4nd nyckel"}: ${q(D.keys,", ")}`;case"invalid_key":return`Ogiltig nyckel i ${D.origin??"v\xE4rdet"}`;case"invalid_union":return"Ogiltig input";case"invalid_element":return`Ogiltigt v\xE4rde i ${D.origin??"v\xE4rdet"}`;default:return"Ogiltig input"}}};var tG=w(()=>{h()});function eO(){return{localeError:$F()}}var $F=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"\u0B8E\u0BA3\u0BCD",array:"\u0B85\u0BA3\u0BBF",null:"\u0BB5\u0BC6\u0BB1\u0BC1\u0BAE\u0BC8"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.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 ${D.expected}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${E}`;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 ${I}, \u0BAA\u0BC6\u0BB1\u0BAA\u0BCD\u0BAA\u0B9F\u0BCD\u0B9F\u0BA4\u0BC1 ${E}`}case"invalid_value":if(D.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 ${r(D.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 ${q(D.values,"|")} \u0B87\u0BB2\u0BCD \u0B92\u0BA9\u0BCD\u0BB1\u0BC1`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)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 ${D.origin??"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${I}${D.maximum.toString()} ${j.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 ${D.origin??"\u0BAE\u0BA4\u0BBF\u0BAA\u0BCD\u0BAA\u0BC1"} ${I}${D.maximum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)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 ${D.origin} ${I}${D.minimum.toString()} ${j.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 ${D.origin} ${I}${D.minimum.toString()} \u0B86\u0B95 \u0B87\u0BB0\u0BC1\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${I.prefix}" \u0B87\u0BB2\u0BCD \u0BA4\u0BCA\u0B9F\u0B99\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;if(I.format==="ends_with")return`\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${I.suffix}" \u0B87\u0BB2\u0BCD \u0BAE\u0BC1\u0B9F\u0BBF\u0BB5\u0B9F\u0BC8\u0BAF \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;if(I.format==="includes")return`\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: "${I.includes}" \u0B90 \u0B89\u0BB3\u0BCD\u0BB3\u0B9F\u0B95\u0BCD\u0B95 \u0BB5\u0BC7\u0BA3\u0BCD\u0B9F\u0BC1\u0BAE\u0BCD`;if(I.format==="regex")return`\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B9A\u0BB0\u0BAE\u0BCD: ${I.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 ${g[I.format]??D.format}`}case"not_multiple_of":return`\u0BA4\u0BB5\u0BB1\u0BBE\u0BA9 \u0B8E\u0BA3\u0BCD: ${D.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${D.keys.length>1?"\u0B95\u0BB3\u0BCD":""}: ${q(D.keys,", ")}`;case"invalid_key":return`${D.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`${D.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"}}};var oG=w(()=>{h()});function aO(){return{localeError:gF()}}var gF=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={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(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.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 ${D.expected} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${E}`;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 ${I} \u0E41\u0E15\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A ${E}`}case"invalid_value":if(D.values.length===1)return`\u0E04\u0E48\u0E32\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: \u0E04\u0E27\u0E23\u0E40\u0E1B\u0E47\u0E19 ${r(D.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 ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19":"\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32",j=$(D.origin);if(j)return`\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${D.origin??"\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${I} ${D.maximum.toString()} ${j.unit??"\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23"}`;return`\u0E40\u0E01\u0E34\u0E19\u0E01\u0E33\u0E2B\u0E19\u0E14: ${D.origin??"\u0E04\u0E48\u0E32"} \u0E04\u0E27\u0E23\u0E21\u0E35${I} ${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?"\u0E2D\u0E22\u0E48\u0E32\u0E07\u0E19\u0E49\u0E2D\u0E22":"\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32",j=$(D.origin);if(j)return`\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${D.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${I} ${D.minimum.toString()} ${j.unit}`;return`\u0E19\u0E49\u0E2D\u0E22\u0E01\u0E27\u0E48\u0E32\u0E01\u0E33\u0E2B\u0E19\u0E14: ${D.origin} \u0E04\u0E27\u0E23\u0E21\u0E35${I} ${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}" \u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21`;if(I.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 ${I.pattern}`;return`\u0E23\u0E39\u0E1B\u0E41\u0E1A\u0E1A\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07: ${g[I.format]??D.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 ${D.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: ${q(D.keys,", ")}`;case"invalid_key":return`\u0E04\u0E35\u0E22\u0E4C\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E19 ${D.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 ${D.origin}`;default:return"\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07"}}};var pG=w(()=>{h()});function sO(){return{localeError:DF()}}var DF=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Ge\xE7ersiz de\u011Fer: beklenen instanceof ${D.expected}, al\u0131nan ${E}`;return`Ge\xE7ersiz de\u011Fer: beklenen ${I}, al\u0131nan ${E}`}case"invalid_value":if(D.values.length===1)return`Ge\xE7ersiz de\u011Fer: beklenen ${r(D.values[0])}`;return`Ge\xE7ersiz se\xE7enek: a\u015Fa\u011F\u0131dakilerden biri olmal\u0131: ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`\xC7ok b\xFCy\xFCk: beklenen ${D.origin??"de\u011Fer"} ${I}${D.maximum.toString()} ${j.unit??"\xF6\u011Fe"}`;return`\xC7ok b\xFCy\xFCk: beklenen ${D.origin??"de\u011Fer"} ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`\xC7ok k\xFC\xE7\xFCk: beklenen ${D.origin} ${I}${D.minimum.toString()} ${j.unit}`;return`\xC7ok k\xFC\xE7\xFCk: beklenen ${D.origin} ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Ge\xE7ersiz metin: "${I.prefix}" ile ba\u015Flamal\u0131`;if(I.format==="ends_with")return`Ge\xE7ersiz metin: "${I.suffix}" ile bitmeli`;if(I.format==="includes")return`Ge\xE7ersiz metin: "${I.includes}" i\xE7ermeli`;if(I.format==="regex")return`Ge\xE7ersiz metin: ${I.pattern} desenine uymal\u0131`;return`Ge\xE7ersiz ${g[I.format]??D.format}`}case"not_multiple_of":return`Ge\xE7ersiz say\u0131: ${D.divisor} ile tam b\xF6l\xFCnebilmeli`;case"unrecognized_keys":return`Tan\u0131nmayan anahtar${D.keys.length>1?"lar":""}: ${q(D.keys,", ")}`;case"invalid_key":return`${D.origin} i\xE7inde ge\xE7ersiz anahtar`;case"invalid_union":return"Ge\xE7ersiz de\u011Fer";case"invalid_element":return`${D.origin} i\xE7inde ge\xE7ersiz de\u011Fer`;default:return"Ge\xE7ersiz de\u011Fer"}}};var eG=w(()=>{h()});function PD(){return{localeError:UF()}}var UF=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"\u0447\u0438\u0441\u043B\u043E",array:"\u043C\u0430\u0441\u0438\u0432"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.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 ${D.expected}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${E}`;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 ${I}, \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043E ${E}`}case"invalid_value":if(D.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 ${r(D.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 ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)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 ${D.origin??"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} ${j.verb} ${I}${D.maximum.toString()} ${j.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 ${D.origin??"\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F"} \u0431\u0443\u0434\u0435 ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`\u0417\u0430\u043D\u0430\u0434\u0442\u043E \u043C\u0430\u043B\u0435: \u043E\u0447\u0456\u043A\u0443\u0454\u0442\u044C\u0441\u044F, \u0449\u043E ${D.origin} ${j.verb} ${I}${D.minimum.toString()} ${j.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 ${D.origin} \u0431\u0443\u0434\u0435 ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.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 "${I.prefix}"`;if(I.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 "${I.suffix}"`;if(I.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 "${I.includes}"`;if(I.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 ${I.pattern}`;return`\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 ${g[I.format]??D.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 ${D.divisor}`;case"unrecognized_keys":return`\u041D\u0435\u0440\u043E\u0437\u043F\u0456\u0437\u043D\u0430\u043D\u0438\u0439 \u043A\u043B\u044E\u0447${D.keys.length>1?"\u0456":""}: ${q(D.keys,", ")}`;case"invalid_key":return`\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0443 ${D.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 ${D.origin}`;default:return"\u041D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0432\u0445\u0456\u0434\u043D\u0456 \u0434\u0430\u043D\u0456"}}};var _P=w(()=>{h()});function $P(){return PD()}var aG=w(()=>{_P()});function gP(){return{localeError:IF()}}var IF=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"\u0646\u0645\u0628\u0631",array:"\u0622\u0631\u06D2",null:"\u0646\u0644"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: instanceof ${D.expected} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${E} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`;return`\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${I} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627\u060C ${E} \u0645\u0648\u0635\u0648\u0644 \u06C1\u0648\u0627`}case"invalid_value":if(D.values.length===1)return`\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679: ${r(D.values[0])} \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;return`\u063A\u0644\u0637 \u0622\u067E\u0634\u0646: ${q(D.values,"|")} \u0645\u06CC\u06BA \u0633\u06D2 \u0627\u06CC\u06A9 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`\u0628\u06C1\u062A \u0628\u0691\u0627: ${D.origin??"\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u06D2 ${I}${D.maximum.toString()} ${j.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: ${D.origin??"\u0648\u06CC\u0644\u06CC\u0648"} \u06A9\u0627 ${I}${D.maximum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${D.origin} \u06A9\u06D2 ${I}${D.minimum.toString()} ${j.unit} \u06C1\u0648\u0646\u06D2 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u06D2`;return`\u0628\u06C1\u062A \u0686\u06BE\u0648\u0679\u0627: ${D.origin} \u06A9\u0627 ${I}${D.minimum.toString()} \u06C1\u0648\u0646\u0627 \u0645\u062A\u0648\u0642\u0639 \u062A\u06BE\u0627`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${I.prefix}" \u0633\u06D2 \u0634\u0631\u0648\u0639 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;if(I.format==="ends_with")return`\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${I.suffix}" \u067E\u0631 \u062E\u062A\u0645 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;if(I.format==="includes")return`\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: "${I.includes}" \u0634\u0627\u0645\u0644 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;if(I.format==="regex")return`\u063A\u0644\u0637 \u0633\u0679\u0631\u0646\u06AF: \u067E\u06CC\u0679\u0631\u0646 ${I.pattern} \u0633\u06D2 \u0645\u06CC\u0686 \u06C1\u0648\u0646\u0627 \u0686\u0627\u06C1\u06CC\u06D2`;return`\u063A\u0644\u0637 ${g[I.format]??D.format}`}case"not_multiple_of":return`\u063A\u0644\u0637 \u0646\u0645\u0628\u0631: ${D.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${D.keys.length>1?"\u0632":""}: ${q(D.keys,"\u060C ")}`;case"invalid_key":return`${D.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u06A9\u06CC`;case"invalid_union":return"\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679";case"invalid_element":return`${D.origin} \u0645\u06CC\u06BA \u063A\u0644\u0637 \u0648\u06CC\u0644\u06CC\u0648`;default:return"\u063A\u0644\u0637 \u0627\u0646 \u067E\u0679"}}};var sG=w(()=>{h()});function DP(){return{localeError:jF()}}var jF=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"raqam",array:"massiv"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`Noto\u2018g\u2018ri kirish: kutilgan instanceof ${D.expected}, qabul qilingan ${E}`;return`Noto\u2018g\u2018ri kirish: kutilgan ${I}, qabul qilingan ${E}`}case"invalid_value":if(D.values.length===1)return`Noto\u2018g\u2018ri kirish: kutilgan ${r(D.values[0])}`;return`Noto\u2018g\u2018ri variant: quyidagilardan biri kutilgan ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Juda katta: kutilgan ${D.origin??"qiymat"} ${I}${D.maximum.toString()} ${j.unit} ${j.verb}`;return`Juda katta: kutilgan ${D.origin??"qiymat"} ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Juda kichik: kutilgan ${D.origin} ${I}${D.minimum.toString()} ${j.unit} ${j.verb}`;return`Juda kichik: kutilgan ${D.origin} ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Noto\u2018g\u2018ri satr: "${I.prefix}" bilan boshlanishi kerak`;if(I.format==="ends_with")return`Noto\u2018g\u2018ri satr: "${I.suffix}" bilan tugashi kerak`;if(I.format==="includes")return`Noto\u2018g\u2018ri satr: "${I.includes}" ni o\u2018z ichiga olishi kerak`;if(I.format==="regex")return`Noto\u2018g\u2018ri satr: ${I.pattern} shabloniga mos kelishi kerak`;return`Noto\u2018g\u2018ri ${g[I.format]??D.format}`}case"not_multiple_of":return`Noto\u2018g\u2018ri raqam: ${D.divisor} ning karralisi bo\u2018lishi kerak`;case"unrecognized_keys":return`Noma\u2019lum kalit${D.keys.length>1?"lar":""}: ${q(D.keys,", ")}`;case"invalid_key":return`${D.origin} dagi kalit noto\u2018g\u2018ri`;case"invalid_union":return"Noto\u2018g\u2018ri kirish";case"invalid_element":return`${D.origin} da noto\u2018g\u2018ri qiymat`;default:return"Noto\u2018g\u2018ri kirish"}}};var _X=w(()=>{h()});function UP(){return{localeError:EF()}}var EF=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"s\u1ED1",array:"m\u1EA3ng"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i instanceof ${D.expected}, nh\u1EADn \u0111\u01B0\u1EE3c ${E}`;return`\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${I}, nh\u1EADn \u0111\u01B0\u1EE3c ${E}`}case"invalid_value":if(D.values.length===1)return`\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7: mong \u0111\u1EE3i ${r(D.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 ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${D.origin??"gi\xE1 tr\u1ECB"} ${j.verb} ${I}${D.maximum.toString()} ${j.unit??"ph\u1EA7n t\u1EED"}`;return`Qu\xE1 l\u1EDBn: mong \u0111\u1EE3i ${D.origin??"gi\xE1 tr\u1ECB"} ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${D.origin} ${j.verb} ${I}${D.minimum.toString()} ${j.unit}`;return`Qu\xE1 nh\u1ECF: mong \u0111\u1EE3i ${D.origin} ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i b\u1EAFt \u0111\u1EA7u b\u1EB1ng "${I.prefix}"`;if(I.format==="ends_with")return`Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i k\u1EBFt th\xFAc b\u1EB1ng "${I.suffix}"`;if(I.format==="includes")return`Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i bao g\u1ED3m "${I.includes}"`;if(I.format==="regex")return`Chu\u1ED7i kh\xF4ng h\u1EE3p l\u1EC7: ph\u1EA3i kh\u1EDBp v\u1EDBi m\u1EABu ${I.pattern}`;return`${g[I.format]??D.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 ${D.divisor}`;case"unrecognized_keys":return`Kh\xF3a kh\xF4ng \u0111\u01B0\u1EE3c nh\u1EADn d\u1EA1ng: ${q(D.keys,", ")}`;case"invalid_key":return`Kh\xF3a kh\xF4ng h\u1EE3p l\u1EC7 trong ${D.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 ${D.origin}`;default:return"\u0110\u1EA7u v\xE0o kh\xF4ng h\u1EE3p l\u1EC7"}}};var $X=w(()=>{h()});function IP(){return{localeError:NF()}}var NF=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"\u6570\u5B57",array:"\u6570\u7EC4",null:"\u7A7A\u503C(null)"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B instanceof ${D.expected}\uFF0C\u5B9E\u9645\u63A5\u6536 ${E}`;return`\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${I}\uFF0C\u5B9E\u9645\u63A5\u6536 ${E}`}case"invalid_value":if(D.values.length===1)return`\u65E0\u6548\u8F93\u5165\uFF1A\u671F\u671B ${r(D.values[0])}`;return`\u65E0\u6548\u9009\u9879\uFF1A\u671F\u671B\u4EE5\u4E0B\u4E4B\u4E00 ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${D.origin??"\u503C"} ${I}${D.maximum.toString()} ${j.unit??"\u4E2A\u5143\u7D20"}`;return`\u6570\u503C\u8FC7\u5927\uFF1A\u671F\u671B ${D.origin??"\u503C"} ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${D.origin} ${I}${D.minimum.toString()} ${j.unit}`;return`\u6570\u503C\u8FC7\u5C0F\uFF1A\u671F\u671B ${D.origin} ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${I.prefix}" \u5F00\u5934`;if(I.format==="ends_with")return`\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u4EE5 "${I.suffix}" \u7ED3\u5C3E`;if(I.format==="includes")return`\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u5305\u542B "${I.includes}"`;if(I.format==="regex")return`\u65E0\u6548\u5B57\u7B26\u4E32\uFF1A\u5FC5\u987B\u6EE1\u8DB3\u6B63\u5219\u8868\u8FBE\u5F0F ${I.pattern}`;return`\u65E0\u6548${g[I.format]??D.format}`}case"not_multiple_of":return`\u65E0\u6548\u6570\u5B57\uFF1A\u5FC5\u987B\u662F ${D.divisor} \u7684\u500D\u6570`;case"unrecognized_keys":return`\u51FA\u73B0\u672A\u77E5\u7684\u952E(key): ${q(D.keys,", ")}`;case"invalid_key":return`${D.origin} \u4E2D\u7684\u952E(key)\u65E0\u6548`;case"invalid_union":return"\u65E0\u6548\u8F93\u5165";case"invalid_element":return`${D.origin} \u4E2D\u5305\u542B\u65E0\u6548\u503C(value)`;default:return"\u65E0\u6548\u8F93\u5165"}}};var gX=w(()=>{h()});function jP(){return{localeError:AF()}}var AF=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA instanceof ${D.expected}\uFF0C\u4F46\u6536\u5230 ${E}`;return`\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${I}\uFF0C\u4F46\u6536\u5230 ${E}`}case"invalid_value":if(D.values.length===1)return`\u7121\u6548\u7684\u8F38\u5165\u503C\uFF1A\u9810\u671F\u70BA ${r(D.values[0])}`;return`\u7121\u6548\u7684\u9078\u9805\uFF1A\u9810\u671F\u70BA\u4EE5\u4E0B\u5176\u4E2D\u4E4B\u4E00 ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${D.origin??"\u503C"} \u61C9\u70BA ${I}${D.maximum.toString()} ${j.unit??"\u500B\u5143\u7D20"}`;return`\u6578\u503C\u904E\u5927\uFF1A\u9810\u671F ${D.origin??"\u503C"} \u61C9\u70BA ${I}${D.maximum.toString()}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${D.origin} \u61C9\u70BA ${I}${D.minimum.toString()} ${j.unit}`;return`\u6578\u503C\u904E\u5C0F\uFF1A\u9810\u671F ${D.origin} \u61C9\u70BA ${I}${D.minimum.toString()}`}case"invalid_format":{let I=D;if(I.format==="starts_with")return`\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${I.prefix}" \u958B\u982D`;if(I.format==="ends_with")return`\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u4EE5 "${I.suffix}" \u7D50\u5C3E`;if(I.format==="includes")return`\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u5305\u542B "${I.includes}"`;if(I.format==="regex")return`\u7121\u6548\u7684\u5B57\u4E32\uFF1A\u5FC5\u9808\u7B26\u5408\u683C\u5F0F ${I.pattern}`;return`\u7121\u6548\u7684 ${g[I.format]??D.format}`}case"not_multiple_of":return`\u7121\u6548\u7684\u6578\u5B57\uFF1A\u5FC5\u9808\u70BA ${D.divisor} \u7684\u500D\u6578`;case"unrecognized_keys":return`\u7121\u6CD5\u8B58\u5225\u7684\u9375\u503C${D.keys.length>1?"\u5011":""}\uFF1A${q(D.keys,"\u3001")}`;case"invalid_key":return`${D.origin} \u4E2D\u6709\u7121\u6548\u7684\u9375\u503C`;case"invalid_union":return"\u7121\u6548\u7684\u8F38\u5165\u503C";case"invalid_element":return`${D.origin} \u4E2D\u6709\u7121\u6548\u7684\u503C`;default:return"\u7121\u6548\u7684\u8F38\u5165\u503C"}}};var DX=w(()=>{h()});function EP(){return{localeError:OF()}}var OF=()=>{let _={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 $(D){return _[D]??null}let g={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"},U={nan:"NaN",number:"n\u1ECD\u0301mb\xE0",array:"akop\u1ECD"};return(D)=>{switch(D.code){case"invalid_type":{let I=U[D.expected]??D.expected,j=b(D.input),E=U[j]??j;if(/^[A-Z]/.test(D.expected))return`\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi instanceof ${D.expected}, \xE0m\u1ECD\u0300 a r\xED ${E}`;return`\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi ${I}, \xE0m\u1ECD\u0300 a r\xED ${E}`}case"invalid_value":if(D.values.length===1)return`\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e: a n\xED l\xE1ti fi ${r(D.values[0])}`;return`\xC0\u1E63\xE0y\xE0n a\u1E63\xEC\u1E63e: yan \u1ECD\u0300kan l\xE1ra ${q(D.values,"|")}`;case"too_big":{let I=D.inclusive?"<=":"<",j=$(D.origin);if(j)return`T\xF3 p\u1ECD\u0300 j\xF9: a n\xED l\xE1ti j\u1EB9\u0301 p\xE9 ${D.origin??"iye"} ${j.verb} ${I}${D.maximum} ${j.unit}`;return`T\xF3 p\u1ECD\u0300 j\xF9: a n\xED l\xE1ti j\u1EB9\u0301 ${I}${D.maximum}`}case"too_small":{let I=D.inclusive?">=":">",j=$(D.origin);if(j)return`K\xE9r\xE9 ju: a n\xED l\xE1ti j\u1EB9\u0301 p\xE9 ${D.origin} ${j.verb} ${I}${D.minimum} ${j.unit}`;return`K\xE9r\xE9 ju: a n\xED l\xE1ti j\u1EB9\u0301 ${I}${D.minimum}`}case"invalid_format":{let I=D;if(I.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 "${I.prefix}"`;if(I.format==="ends_with")return`\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 par\xED p\u1EB9\u0300l\xFA "${I.suffix}"`;if(I.format==="includes")return`\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 n\xED "${I.includes}"`;if(I.format==="regex")return`\u1ECC\u0300r\u1ECD\u0300 a\u1E63\xEC\u1E63e: gb\u1ECD\u0301d\u1ECD\u0300 b\xE1 \xE0p\u1EB9\u1EB9r\u1EB9 mu ${I.pattern}`;return`A\u1E63\xEC\u1E63e: ${g[I.format]??D.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 ${D.divisor}`;case"unrecognized_keys":return`B\u1ECDt\xECn\xEC \xE0\xECm\u1ECD\u0300: ${q(D.keys,", ")}`;case"invalid_key":return`B\u1ECDt\xECn\xEC a\u1E63\xEC\u1E63e n\xEDn\xFA ${D.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 ${D.origin}`;default:return"\xCCb\xE1w\u1ECDl\xE9 a\u1E63\xEC\u1E63e"}}};var UX=w(()=>{h()});var w4={};k$(w4,{zhTW:()=>jP,zhCN:()=>IP,yo:()=>EP,vi:()=>UP,uz:()=>DP,ur:()=>gP,uk:()=>PD,ua:()=>$P,tr:()=>sO,th:()=>aO,ta:()=>eO,sv:()=>pO,sl:()=>oO,ru:()=>tO,ro:()=>lO,pt:()=>iO,ps:()=>dO,pl:()=>mO,ota:()=>nO,no:()=>hO,nl:()=>cO,ms:()=>yO,mk:()=>xO,lt:()=>fO,ko:()=>uO,km:()=>AD,kh:()=>wO,ka:()=>CO,ja:()=>kO,it:()=>HO,is:()=>ZO,id:()=>MO,hy:()=>bO,hu:()=>rO,hr:()=>FO,he:()=>VO,frCA:()=>BO,fr:()=>qO,fi:()=>KO,fa:()=>TO,es:()=>QO,eo:()=>YO,en:()=>ND,el:()=>GO,de:()=>RO,da:()=>zO,cs:()=>JO,ca:()=>WO,bg:()=>LO,be:()=>SO,az:()=>PO,ar:()=>OO});var NP=w(()=>{jG();EG();AG();OG();PG();SG();LG();WG();JG();XO();zG();RG();GG();XG();YG();QG();TG();KG();qG();VG();FG();rG();bG();MG();ZG();HG();vO();kG();vG();wG();uG();fG();xG();yG();cG();hG();nG();dG();iG();lG();tG();oG();pG();eG();aG();_P();sG();_X();$X();gX();DX();UX()});class AP{constructor(){this._map=new WeakMap,this._idmap=new Map}add(_,...$){let g=$[0];if(this._map.set(_,g),g&&typeof g==="object"&&"id"in g)this._idmap.set(g.id,_);return this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(_){let $=this._map.get(_);if($&&typeof $==="object"&&"id"in $)this._idmap.delete($.id);return this._map.delete(_),this}get(_){let $=_._zod.parent;if($){let g={...this.get($)??{}};delete g.id;let U={...g,...this._map.get(_)};return Object.keys(U).length?U:void 0}return this._map.get(_)}has(_){return this._map.has(_)}}function SD(){return new AP}var IX,tI,oI,v_;var LD=w(()=>{tI=Symbol("ZodOutput"),oI=Symbol("ZodInput");(IX=globalThis).__zod_globalRegistry??(IX.__zod_globalRegistry=SD());v_=globalThis.__zod_globalRegistry});function OP(_,$){return new _({type:"string",...k($)})}function PP(_,$){return new _({type:"string",coerce:!0,...k($)})}function pI(_,$){return new _({type:"string",format:"email",check:"string_format",abort:!1,...k($)})}function WD(_,$){return new _({type:"string",format:"guid",check:"string_format",abort:!1,...k($)})}function eI(_,$){return new _({type:"string",format:"uuid",check:"string_format",abort:!1,...k($)})}function aI(_,$){return new _({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...k($)})}function sI(_,$){return new _({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...k($)})}function _1(_,$){return new _({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...k($)})}function JD(_,$){return new _({type:"string",format:"url",check:"string_format",abort:!1,...k($)})}function $1(_,$){return new _({type:"string",format:"emoji",check:"string_format",abort:!1,...k($)})}function g1(_,$){return new _({type:"string",format:"nanoid",check:"string_format",abort:!1,...k($)})}function D1(_,$){return new _({type:"string",format:"cuid",check:"string_format",abort:!1,...k($)})}function U1(_,$){return new _({type:"string",format:"cuid2",check:"string_format",abort:!1,...k($)})}function I1(_,$){return new _({type:"string",format:"ulid",check:"string_format",abort:!1,...k($)})}function j1(_,$){return new _({type:"string",format:"xid",check:"string_format",abort:!1,...k($)})}function E1(_,$){return new _({type:"string",format:"ksuid",check:"string_format",abort:!1,...k($)})}function N1(_,$){return new _({type:"string",format:"ipv4",check:"string_format",abort:!1,...k($)})}function A1(_,$){return new _({type:"string",format:"ipv6",check:"string_format",abort:!1,...k($)})}function SP(_,$){return new _({type:"string",format:"mac",check:"string_format",abort:!1,...k($)})}function O1(_,$){return new _({type:"string",format:"cidrv4",check:"string_format",abort:!1,...k($)})}function P1(_,$){return new _({type:"string",format:"cidrv6",check:"string_format",abort:!1,...k($)})}function S1(_,$){return new _({type:"string",format:"base64",check:"string_format",abort:!1,...k($)})}function L1(_,$){return new _({type:"string",format:"base64url",check:"string_format",abort:!1,...k($)})}function W1(_,$){return new _({type:"string",format:"e164",check:"string_format",abort:!1,...k($)})}function J1(_,$){return new _({type:"string",format:"jwt",check:"string_format",abort:!1,...k($)})}function LP(_,$){return new _({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...k($)})}function WP(_,$){return new _({type:"string",format:"date",check:"string_format",...k($)})}function JP(_,$){return new _({type:"string",format:"time",check:"string_format",precision:null,...k($)})}function zP(_,$){return new _({type:"string",format:"duration",check:"string_format",...k($)})}function RP(_,$){return new _({type:"number",checks:[],...k($)})}function GP(_,$){return new _({type:"number",coerce:!0,checks:[],...k($)})}function XP(_,$){return new _({type:"number",check:"number_format",abort:!1,format:"safeint",...k($)})}function YP(_,$){return new _({type:"number",check:"number_format",abort:!1,format:"float32",...k($)})}function QP(_,$){return new _({type:"number",check:"number_format",abort:!1,format:"float64",...k($)})}function TP(_,$){return new _({type:"number",check:"number_format",abort:!1,format:"int32",...k($)})}function KP(_,$){return new _({type:"number",check:"number_format",abort:!1,format:"uint32",...k($)})}function qP(_,$){return new _({type:"boolean",...k($)})}function BP(_,$){return new _({type:"boolean",coerce:!0,...k($)})}function VP(_,$){return new _({type:"bigint",...k($)})}function FP(_,$){return new _({type:"bigint",coerce:!0,...k($)})}function rP(_,$){return new _({type:"bigint",check:"bigint_format",abort:!1,format:"int64",...k($)})}function bP(_,$){return new _({type:"bigint",check:"bigint_format",abort:!1,format:"uint64",...k($)})}function MP(_,$){return new _({type:"symbol",...k($)})}function ZP(_,$){return new _({type:"undefined",...k($)})}function HP(_,$){return new _({type:"null",...k($)})}function kP(_){return new _({type:"any"})}function CP(_){return new _({type:"unknown"})}function vP(_,$){return new _({type:"never",...k($)})}function wP(_,$){return new _({type:"void",...k($)})}function uP(_,$){return new _({type:"date",...k($)})}function fP(_,$){return new _({type:"date",coerce:!0,...k($)})}function xP(_,$){return new _({type:"nan",...k($)})}function Y$(_,$){return new vI({check:"less_than",...k($),value:_,inclusive:!1})}function _$(_,$){return new vI({check:"less_than",...k($),value:_,inclusive:!0})}function Q$(_,$){return new wI({check:"greater_than",...k($),value:_,inclusive:!1})}function x_(_,$){return new wI({check:"greater_than",...k($),value:_,inclusive:!0})}function zD(_){return Q$(0,_)}function RD(_){return Y$(0,_)}function GD(_){return _$(0,_)}function XD(_){return x_(0,_)}function j6(_,$){return new k2({check:"multiple_of",...k($),value:_})}function E6(_,$){return new w2({check:"max_size",...k($),maximum:_})}function T$(_,$){return new u2({check:"min_size",...k($),minimum:_})}function k6(_,$){return new f2({check:"size_equals",...k($),size:_})}function C6(_,$){return new x2({check:"max_length",...k($),maximum:_})}function x$(_,$){return new y2({check:"min_length",...k($),minimum:_})}function v6(_,$){return new c2({check:"length_equals",...k($),length:_})}function Rg(_,$){return new h2({check:"string_format",format:"regex",...k($),pattern:_})}function Gg(_){return new n2({check:"string_format",format:"lowercase",...k(_)})}function Xg(_){return new d2({check:"string_format",format:"uppercase",...k(_)})}function Yg(_,$){return new m2({check:"string_format",format:"includes",...k($),includes:_})}function Qg(_,$){return new i2({check:"string_format",format:"starts_with",...k($),prefix:_})}function Tg(_,$){return new l2({check:"string_format",format:"ends_with",...k($),suffix:_})}function YD(_,$,g){return new t2({check:"property",property:_,schema:$,...k(g)})}function Kg(_,$){return new o2({check:"mime_type",mime:_,...k($)})}function L$(_){return new p2({check:"overwrite",tx:_})}function qg(_){return L$(($)=>$.normalize(_))}function Bg(){return L$((_)=>_.trim())}function Vg(){return L$((_)=>_.toLowerCase())}function Fg(){return L$((_)=>_.toUpperCase())}function rg(){return L$((_)=>iN(_))}function yP(_,$,g){return new _({type:"array",element:$,...k(g)})}function SF(_,$,g){return new _({type:"union",options:$,...k(g)})}function LF(_,$,g){return new _({type:"union",options:$,inclusive:!1,...k(g)})}function WF(_,$,g,U){return new _({type:"union",options:g,discriminator:$,...k(U)})}function JF(_,$,g){return new _({type:"intersection",left:$,right:g})}function zF(_,$,g,U){let D=g instanceof l;return new _({type:"tuple",items:$,rest:D?g:null,...k(D?U:g)})}function RF(_,$,g,U){return new _({type:"record",keyType:$,valueType:g,...k(U)})}function GF(_,$,g,U){return new _({type:"map",keyType:$,valueType:g,...k(U)})}function XF(_,$,g){return new _({type:"set",valueType:$,...k(g)})}function YF(_,$,g){let U=Array.isArray($)?Object.fromEntries($.map((D)=>[D,D])):$;return new _({type:"enum",entries:U,...k(g)})}function QF(_,$,g){return new _({type:"enum",entries:$,...k(g)})}function TF(_,$,g){return new _({type:"literal",values:Array.isArray($)?$:[$],...k(g)})}function cP(_,$){return new _({type:"file",...k($)})}function KF(_,$){return new _({type:"transform",transform:$})}function qF(_,$){return new _({type:"optional",innerType:$})}function BF(_,$){return new _({type:"nullable",innerType:$})}function VF(_,$,g){return new _({type:"default",innerType:$,get defaultValue(){return typeof g==="function"?g():tN(g)}})}function FF(_,$,g){return new _({type:"nonoptional",innerType:$,...k(g)})}function rF(_,$){return new _({type:"success",innerType:$})}function bF(_,$,g){return new _({type:"catch",innerType:$,catchValue:typeof g==="function"?g:()=>g})}function MF(_,$,g){return new _({type:"pipe",in:$,out:g})}function ZF(_,$){return new _({type:"readonly",innerType:$})}function HF(_,$,g){return new _({type:"template_literal",parts:$,...k(g)})}function kF(_,$){return new _({type:"lazy",getter:$})}function CF(_,$){return new _({type:"promise",innerType:$})}function hP(_,$,g){let U=k(g);return U.abort??(U.abort=!0),new _({type:"custom",check:"custom",fn:$,...U})}function nP(_,$,g){return new _({type:"custom",check:"custom",fn:$,...k(g)})}function dP(_,$){let g=jX((U)=>{return U.addIssue=(D)=>{if(typeof D==="string")U.issues.push(F4(D,U.value,g._zod.def));else{let I=D;if(I.fatal)I.continue=!1;I.code??(I.code="custom"),I.input??(I.input=U.value),I.inst??(I.inst=g),I.continue??(I.continue=!g._zod.def.abort),U.issues.push(F4(I))}},_(U.value,U)},$);return g}function jX(_,$){let g=new G_({check:"custom",...k($)});return g._zod.check=_,g}function mP(_){let $=new G_({check:"describe"});return $._zod.onattach=[(g)=>{let U=v_.get(g)??{};v_.add(g,{...U,description:_})}],$._zod.check=()=>{},$}function iP(_){let $=new G_({check:"meta"});return $._zod.onattach=[(g)=>{let U=v_.get(g)??{};v_.add(g,{...U,..._})}],$._zod.check=()=>{},$}function lP(_,$){let g=k($),U=g.truthy??["true","1","yes","on","y","enabled"],D=g.falsy??["false","0","no","off","n","disabled"];if(g.case!=="sensitive")U=U.map((S)=>typeof S==="string"?S.toLowerCase():S),D=D.map((S)=>typeof S==="string"?S.toLowerCase():S);let I=new Set(U),j=new Set(D),E=_.Codec??ED,A=_.Boolean??ID,P=new(_.String??zg)({type:"string",error:g.error}),W=new A({type:"boolean",error:g.error}),z=new E({type:"pipe",in:P,out:W,transform:(S,L)=>{let J=S;if(g.case!=="sensitive")J=J.toLowerCase();if(I.has(J))return!0;else if(j.has(J))return!1;else return L.issues.push({code:"invalid_value",expected:"stringbool",values:[...I,...j],input:L.value,inst:z,continue:!1}),{}},reverseTransform:(S,L)=>{if(S===!0)return U[0]||"true";else return D[0]||"false"},error:g.error});return z}function u4(_,$,g,U={}){let D=k(U),I={...k(U),check:"string_format",type:"string",format:$,fn:typeof g==="function"?g:(E)=>g.test(E),...D};if(g instanceof RegExp)I.pattern=g;return new _(I)}var z1;var EX=w(()=>{uI();LD();AO();h();z1={Any:null,Minute:-1,Second:0,Millisecond:3,Microsecond:6}});function w6(_){let $=_?.target??"draft-2020-12";if($==="draft-4")$="draft-04";if($==="draft-7")$="draft-07";return{processors:_.processors??{},metadataRegistry:_?.metadata??v_,target:$,unrepresentable:_?.unrepresentable??"throw",override:_?.override??(()=>{}),io:_?.io??"output",counter:0,seen:new Map,cycles:_?.cycles??"ref",reused:_?.reused??"inline",external:_?.external??void 0}}function O_(_,$,g={path:[],schemaPath:[]}){var U;let D=_._zod.def,I=$.seen.get(_);if(I){if(I.count++,g.schemaPath.includes(_))I.cycle=g.path;return I.schema}let j={schema:{},count:1,cycle:void 0,path:g.path};$.seen.set(_,j);let E=_._zod.toJSONSchema?.();if(E)j.schema=E;else{let P={...g,schemaPath:[...g.schemaPath,_],path:g.path};if(_._zod.processJSONSchema)_._zod.processJSONSchema($,j.schema,P);else{let z=j.schema,S=$.processors[D.type];if(!S)throw Error(`[toJSONSchema]: Non-representable type encountered: ${D.type}`);S(_,$,z,P)}let W=_._zod.parent;if(W){if(!j.ref)j.ref=W;O_(W,$,P),$.seen.get(W).isParent=!0}}let A=$.metadataRegistry.get(_);if(A)Object.assign(j.schema,A);if($.io==="input"&&i_(_))delete j.schema.examples,delete j.schema.default;if($.io==="input"&&"_prefault"in j.schema)(U=j.schema).default??(U.default=j.schema._prefault);return delete j.schema._prefault,$.seen.get(_).schema}function u6(_,$){let g=_.seen.get($);if(!g)throw Error("Unprocessed schema. This is a bug in Zod.");let U=new Map;for(let j of _.seen.entries()){let E=_.metadataRegistry.get(j[0])?.id;if(E){let A=U.get(E);if(A&&A!==j[0])throw Error(`Duplicate schema id "${E}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);U.set(E,j[0])}}let D=(j)=>{let E=_.target==="draft-2020-12"?"$defs":"definitions";if(_.external){let W=_.external.registry.get(j[0])?.id,z=_.external.uri??((L)=>L);if(W)return{ref:z(W)};let S=j[1].defId??j[1].schema.id??`schema${_.counter++}`;return j[1].defId=S,{defId:S,ref:`${z("__shared")}#/${E}/${S}`}}if(j[1]===g)return{ref:"#"};let O=`${"#"}/${E}/`,P=j[1].schema.id??`__schema${_.counter++}`;return{defId:P,ref:O+P}},I=(j)=>{if(j[1].schema.$ref)return;let E=j[1],{ref:A,defId:O}=D(j);if(E.def={...E.schema},O)E.defId=O;let P=E.schema;for(let W in P)delete P[W];P.$ref=A};if(_.cycles==="throw")for(let j of _.seen.entries()){let E=j[1];if(E.cycle)throw Error(`Cycle detected: #/${E.cycle?.join("/")}/ -Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let j of _.seen.entries()){let N=j[1];if($===j[0]){I(j);continue}if(_.external){let A=_.external.registry.get(j[0])?.id;if($!==j[0]&&A){I(j);continue}}if(_.metadataRegistry.get(j[0])?.id){I(j);continue}if(N.cycle){I(j);continue}if(N.count>1){if(_.reused==="ref"){I(j);continue}}}}function w6(_,$){let D=_.seen.get($);if(!D)throw Error("Unprocessed schema. This is a bug in Zod.");let U=(N)=>{let O=_.seen.get(N);if(O.ref===null)return;let A=O.def??O.schema,L={...A},z=O.ref;if(O.ref=null,z){U(z);let J=_.seen.get(z),P=J.schema;if(P.$ref&&(_.target==="draft-07"||_.target==="draft-04"||_.target==="openapi-3.0"))A.allOf=A.allOf??[],A.allOf.push(P);else Object.assign(A,P);if(Object.assign(A,L),N._zod.parent===z)for(let X in A){if(X==="$ref"||X==="allOf")continue;if(!(X in L))delete A[X]}if(P.$ref&&J.def)for(let X in A){if(X==="$ref"||X==="allOf")continue;if(X in J.def&&JSON.stringify(A[X])===JSON.stringify(J.def[X]))delete A[X]}}let W=N._zod.parent;if(W&&W!==z){U(W);let J=_.seen.get(W);if(J?.schema.$ref){if(A.$ref=J.schema.$ref,J.def)for(let P in A){if(P==="$ref"||P==="allOf")continue;if(P in J.def&&JSON.stringify(A[P])===JSON.stringify(J.def[P]))delete A[P]}}}_.override({zodSchema:N,jsonSchema:A,path:O.path??[]})};for(let N of[..._.seen.entries()].reverse())U(N[0]);let g={};if(_.target==="draft-2020-12")g.$schema="https://json-schema.org/draft/2020-12/schema";else if(_.target==="draft-07")g.$schema="http://json-schema.org/draft-07/schema#";else if(_.target==="draft-04")g.$schema="http://json-schema.org/draft-04/schema#";else if(_.target==="openapi-3.0");if(_.external?.uri){let N=_.external.registry.get($)?.id;if(!N)throw Error("Schema is missing an `id` property");g.$id=_.external.uri(N)}Object.assign(g,D.def??D.schema);let I=_.metadataRegistry.get($)?.id;if(I!==void 0&&g.id===I)delete g.id;let j=_.external?.defs??{};for(let N of _.seen.entries()){let O=N[1];if(O.def&&O.defId){if(O.def.id===O.defId)delete O.def.id;j[O.defId]=O.def}}if(_.external);else if(Object.keys(j).length>0)if(_.target==="draft-2020-12")g.$defs=j;else g.definitions=j;try{let N=JSON.parse(JSON.stringify(g));return Object.defineProperty(N,"~standard",{value:{...$["~standard"],jsonSchema:{input:x0($,"input",_.processors),output:x0($,"output",_.processors)}},enumerable:!1,writable:!1}),N}catch(N){throw Error("Error converting schema to JSON.")}}function t_(_,$){let D=$??{seen:new Set};if(D.seen.has(_))return!1;D.seen.add(_);let U=_._zod.def;if(U.type==="transform")return!0;if(U.type==="array")return t_(U.element,D);if(U.type==="set")return t_(U.valueType,D);if(U.type==="lazy")return t_(U.getter(),D);if(U.type==="promise"||U.type==="optional"||U.type==="nonoptional"||U.type==="nullable"||U.type==="readonly"||U.type==="default"||U.type==="prefault")return t_(U.innerType,D);if(U.type==="intersection")return t_(U.left,D)||t_(U.right,D);if(U.type==="record"||U.type==="map")return t_(U.keyType,D)||t_(U.valueType,D);if(U.type==="pipe"){if(_._zod.traits.has("$ZodCodec"))return!0;return t_(U.in,D)||t_(U.out,D)}if(U.type==="object"){for(let g in U.shape)if(t_(U.shape[g],D))return!0;return!1}if(U.type==="union"){for(let g of U.options)if(t_(g,D))return!0;return!1}if(U.type==="tuple"){for(let g of U.items)if(t_(g,D))return!0;if(U.rest&&t_(U.rest,D))return!0;return!1}return!1}var nL=(_,$={})=>(D)=>{let U=r6({...D,processors:$});return A_(_,U),f6(U,_),w6(U,_)},x0=(_,$,D={})=>(U)=>{let{libraryOptions:g,target:I}=U??{},j=r6({...g??{},target:I,io:$,processors:D});return A_(_,j),f6(j,_),w6(j,_)};var Tg=f(()=>{zg()});function qg(_,$){if("_idmap"in _){let U=_,g=r6({...$,processors:R1}),I={};for(let O of U._idmap.entries()){let[A,L]=O;A_(L,g)}let j={},N={registry:U,uri:$?.uri,defs:I};g.external=N;for(let O of U._idmap.entries()){let[A,L]=O;f6(g,L),j[A]=w6(g,L)}if(Object.keys(I).length>0){let O=g.target==="draft-2020-12"?"$defs":"definitions";j.__shared={[O]:I}}return{schemas:j}}let D=r6({...$,processors:R1});return A_(_,D),f6(D,_),w6(D,_)}var VF,dL=(_,$,D,U)=>{let g=D;g.type="string";let{minimum:I,maximum:j,format:N,patterns:O,contentEncoding:A}=_._zod.bag;if(typeof I==="number")g.minLength=I;if(typeof j==="number")g.maxLength=j;if(N){if(g.format=VF[N]??N,g.format==="")delete g.format;if(N==="time")delete g.format}if(A)g.contentEncoding=A;if(O&&O.size>0){let L=[...O];if(L.length===1)g.pattern=L[0].source;else if(L.length>1)g.allOf=[...L.map((z)=>({...$.target==="draft-07"||$.target==="draft-04"||$.target==="openapi-3.0"?{type:"string"}:{},pattern:z.source}))]}},mL=(_,$,D,U)=>{let g=D,{minimum:I,maximum:j,format:N,multipleOf:O,exclusiveMaximum:A,exclusiveMinimum:L}=_._zod.bag;if(typeof N==="string"&&N.includes("int"))g.type="integer";else g.type="number";let z=typeof L==="number"&&L>=(I??Number.NEGATIVE_INFINITY),W=typeof A==="number"&&A<=(j??Number.POSITIVE_INFINITY),J=$.target==="draft-04"||$.target==="openapi-3.0";if(z)if(J)g.minimum=L,g.exclusiveMinimum=!0;else g.exclusiveMinimum=L;else if(typeof I==="number")g.minimum=I;if(W)if(J)g.maximum=A,g.exclusiveMaximum=!0;else g.exclusiveMaximum=A;else if(typeof j==="number")g.maximum=j;if(typeof O==="number")g.multipleOf=O},iL=(_,$,D,U)=>{D.type="boolean"},lL=(_,$,D,U)=>{if($.unrepresentable==="throw")throw Error("BigInt cannot be represented in JSON Schema")},tL=(_,$,D,U)=>{if($.unrepresentable==="throw")throw Error("Symbols cannot be represented in JSON Schema")},oL=(_,$,D,U)=>{if($.target==="openapi-3.0")D.type="string",D.nullable=!0,D.enum=[null];else D.type="null"},pL=(_,$,D,U)=>{if($.unrepresentable==="throw")throw Error("Undefined cannot be represented in JSON Schema")},eL=(_,$,D,U)=>{if($.unrepresentable==="throw")throw Error("Void cannot be represented in JSON Schema")},aL=(_,$,D,U)=>{D.not={}},sL=(_,$,D,U)=>{},_J=(_,$,D,U)=>{},$J=(_,$,D,U)=>{if($.unrepresentable==="throw")throw Error("Date cannot be represented in JSON Schema")},DJ=(_,$,D,U)=>{let g=_._zod.def,I=eD(g.entries);if(I.every((j)=>typeof j==="number"))D.type="number";if(I.every((j)=>typeof j==="string"))D.type="string";D.enum=I},gJ=(_,$,D,U)=>{let g=_._zod.def,I=[];for(let j of g.values)if(j===void 0){if($.unrepresentable==="throw")throw Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof j==="bigint")if($.unrepresentable==="throw")throw Error("BigInt literals cannot be represented in JSON Schema");else I.push(Number(j));else I.push(j);if(I.length===0);else if(I.length===1){let j=I[0];if(D.type=j===null?"null":typeof j,$.target==="draft-04"||$.target==="openapi-3.0")D.enum=[j];else D.const=j}else{if(I.every((j)=>typeof j==="number"))D.type="number";if(I.every((j)=>typeof j==="string"))D.type="string";if(I.every((j)=>typeof j==="boolean"))D.type="boolean";if(I.every((j)=>j===null))D.type="null";D.enum=I}},UJ=(_,$,D,U)=>{if($.unrepresentable==="throw")throw Error("NaN cannot be represented in JSON Schema")},IJ=(_,$,D,U)=>{let g=D,I=_._zod.pattern;if(!I)throw Error("Pattern not found in template literal");g.type="string",g.pattern=I.source},jJ=(_,$,D,U)=>{let g=D,I={type:"string",format:"binary",contentEncoding:"binary"},{minimum:j,maximum:N,mime:O}=_._zod.bag;if(j!==void 0)I.minLength=j;if(N!==void 0)I.maxLength=N;if(O)if(O.length===1)I.contentMediaType=O[0],Object.assign(g,I);else Object.assign(g,I),g.anyOf=O.map((A)=>({contentMediaType:A}));else Object.assign(g,I)},NJ=(_,$,D,U)=>{D.type="boolean"},EJ=(_,$,D,U)=>{if($.unrepresentable==="throw")throw Error("Custom types cannot be represented in JSON Schema")},OJ=(_,$,D,U)=>{if($.unrepresentable==="throw")throw Error("Function types cannot be represented in JSON Schema")},AJ=(_,$,D,U)=>{if($.unrepresentable==="throw")throw Error("Transforms cannot be represented in JSON Schema")},LJ=(_,$,D,U)=>{if($.unrepresentable==="throw")throw Error("Map cannot be represented in JSON Schema")},JJ=(_,$,D,U)=>{if($.unrepresentable==="throw")throw Error("Set cannot be represented in JSON Schema")},PJ=(_,$,D,U)=>{let g=D,I=_._zod.def,{minimum:j,maximum:N}=_._zod.bag;if(typeof j==="number")g.minItems=j;if(typeof N==="number")g.maxItems=N;g.type="array",g.items=A_(I.element,$,{...U,path:[...U.path,"items"]})},zJ=(_,$,D,U)=>{let g=D,I=_._zod.def;g.type="object",g.properties={};let j=I.shape;for(let A in j)g.properties[A]=A_(j[A],$,{...U,path:[...U.path,"properties",A]});let N=new Set(Object.keys(j)),O=new Set([...N].filter((A)=>{let L=I.shape[A]._zod;if($.io==="input")return L.optin===void 0;else return L.optout===void 0}));if(O.size>0)g.required=Array.from(O);if(I.catchall?._zod.def.type==="never")g.additionalProperties=!1;else if(!I.catchall){if($.io==="output")g.additionalProperties=!1}else if(I.catchall)g.additionalProperties=A_(I.catchall,$,{...U,path:[...U.path,"additionalProperties"]})},G1=(_,$,D,U)=>{let g=_._zod.def,I=g.inclusive===!1,j=g.options.map((N,O)=>A_(N,$,{...U,path:[...U.path,I?"oneOf":"anyOf",O]}));if(I)D.oneOf=j;else D.anyOf=j},SJ=(_,$,D,U)=>{let g=_._zod.def,I=A_(g.left,$,{...U,path:[...U.path,"allOf",0]}),j=A_(g.right,$,{...U,path:[...U.path,"allOf",1]}),N=(A)=>("allOf"in A)&&Object.keys(A).length===1,O=[...N(I)?I.allOf:[I],...N(j)?j.allOf:[j]];D.allOf=O},WJ=(_,$,D,U)=>{let g=D,I=_._zod.def;g.type="array";let j=$.target==="draft-2020-12"?"prefixItems":"items",N=$.target==="draft-2020-12"?"items":$.target==="openapi-3.0"?"items":"additionalItems",O=I.items.map((W,J)=>A_(W,$,{...U,path:[...U.path,j,J]})),A=I.rest?A_(I.rest,$,{...U,path:[...U.path,N,...$.target==="openapi-3.0"?[I.items.length]:[]]}):null;if($.target==="draft-2020-12"){if(g.prefixItems=O,A)g.items=A}else if($.target==="openapi-3.0"){if(g.items={anyOf:O},A)g.items.anyOf.push(A);if(g.minItems=O.length,!A)g.maxItems=O.length}else if(g.items=O,A)g.additionalItems=A;let{minimum:L,maximum:z}=_._zod.bag;if(typeof L==="number")g.minItems=L;if(typeof z==="number")g.maxItems=z},XJ=(_,$,D,U)=>{let g=D,I=_._zod.def;g.type="object";let j=I.keyType,O=j._zod.bag?.patterns;if(I.mode==="loose"&&O&&O.size>0){let L=A_(I.valueType,$,{...U,path:[...U.path,"patternProperties","*"]});g.patternProperties={};for(let z of O)g.patternProperties[z.source]=L}else{if($.target==="draft-07"||$.target==="draft-2020-12")g.propertyNames=A_(I.keyType,$,{...U,path:[...U.path,"propertyNames"]});g.additionalProperties=A_(I.valueType,$,{...U,path:[...U.path,"additionalProperties"]})}let A=j._zod.values;if(A){let L=[...A].filter((z)=>typeof z==="string"||typeof z==="number");if(L.length>0)g.required=L}},RJ=(_,$,D,U)=>{let g=_._zod.def,I=A_(g.innerType,$,U),j=$.seen.get(_);if($.target==="openapi-3.0")j.ref=g.innerType,D.nullable=!0;else D.anyOf=[I,{type:"null"}]},GJ=(_,$,D,U)=>{let g=_._zod.def;A_(g.innerType,$,U);let I=$.seen.get(_);I.ref=g.innerType},YJ=(_,$,D,U)=>{let g=_._zod.def;A_(g.innerType,$,U);let I=$.seen.get(_);I.ref=g.innerType,D.default=JSON.parse(JSON.stringify(g.defaultValue))},QJ=(_,$,D,U)=>{let g=_._zod.def;A_(g.innerType,$,U);let I=$.seen.get(_);if(I.ref=g.innerType,$.io==="input")D._prefault=JSON.parse(JSON.stringify(g.defaultValue))},TJ=(_,$,D,U)=>{let g=_._zod.def;A_(g.innerType,$,U);let I=$.seen.get(_);I.ref=g.innerType;let j;try{j=g.catchValue(void 0)}catch{throw Error("Dynamic catch values are not supported in JSON Schema")}D.default=j},qJ=(_,$,D,U)=>{let g=_._zod.def,I=g.in._zod.traits.has("$ZodTransform"),j=$.io==="input"?I?g.out:g.in:g.out;A_(j,$,U);let N=$.seen.get(_);N.ref=j},BJ=(_,$,D,U)=>{let g=_._zod.def;A_(g.innerType,$,U);let I=$.seen.get(_);I.ref=g.innerType,D.readOnly=!0},VJ=(_,$,D,U)=>{let g=_._zod.def;A_(g.innerType,$,U);let I=$.seen.get(_);I.ref=g.innerType},Y1=(_,$,D,U)=>{let g=_._zod.def;A_(g.innerType,$,U);let I=$.seen.get(_);I.ref=g.innerType},KJ=(_,$,D,U)=>{let g=_._zod.innerType;A_(g,$,U);let I=$.seen.get(_);I.ref=g},R1;var Bg=f(()=>{Tg();c();VF={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},R1={string:dL,number:mL,boolean:iL,bigint:lL,symbol:tL,null:oL,undefined:pL,void:eL,never:aL,any:sL,unknown:_J,date:$J,enum:DJ,literal:gJ,nan:UJ,template_literal:IJ,file:jJ,success:NJ,custom:EJ,function:OJ,transform:AJ,map:LJ,set:JJ,array:PJ,object:zJ,union:G1,intersection:SJ,tuple:WJ,record:XJ,nullable:RJ,nonoptional:GJ,default:YJ,prefault:QJ,catch:TJ,pipe:qJ,readonly:BJ,promise:VJ,optional:Y1,lazy:KJ}});class FJ{get metadataRegistry(){return this.ctx.metadataRegistry}get target(){return this.ctx.target}get unrepresentable(){return this.ctx.unrepresentable}get override(){return this.ctx.override}get io(){return this.ctx.io}get counter(){return this.ctx.counter}set counter(_){this.ctx.counter=_}get seen(){return this.ctx.seen}constructor(_){let $=_?.target??"draft-2020-12";if($==="draft-4")$="draft-04";if($==="draft-7")$="draft-07";this.ctx=r6({processors:R1,target:$,..._?.metadata&&{metadata:_.metadata},..._?.unrepresentable&&{unrepresentable:_.unrepresentable},..._?.override&&{override:_.override},..._?.io&&{io:_.io}})}process(_,$={path:[],schemaPath:[]}){return A_(_,this.ctx,$)}emit(_,$){if($){if($.cycles)this.ctx.cycles=$.cycles;if($.reused)this.ctx.reused=$.reused;if($.external)this.ctx.external=$.external}f6(this.ctx,_);let D=w6(this.ctx,_),{"~standard":U,...g}=D;return g}}var gR=f(()=>{Bg();Tg()});var UR={};var IR=()=>{};var h$={};v$(h$,{version:()=>i2,util:()=>H,treeifyError:()=>TI,toJSONSchema:()=>qg,toDotPath:()=>ZX,safeParseAsync:()=>eE,safeParse:()=>pE,safeEncodeAsync:()=>MV,safeEncode:()=>KV,safeDecodeAsync:()=>ZV,safeDecode:()=>FV,registry:()=>Pg,regexes:()=>$$,process:()=>A_,prettifyError:()=>qI,parseAsync:()=>VI,parse:()=>BI,meta:()=>hL,locales:()=>w0,isValidJWT:()=>eX,isValidBase64URL:()=>pX,isValidBase64:()=>SO,initializeContext:()=>r6,globalRegistry:()=>w_,globalConfig:()=>A4,formatError:()=>b0,flattenError:()=>Z0,finalize:()=>w6,extractDefs:()=>f6,encodeAsync:()=>BV,encode:()=>TV,describe:()=>yL,decodeAsync:()=>VV,decode:()=>qV,createToJSONSchemaMethod:()=>nL,createStandardJSONSchemaMethod:()=>x0,config:()=>Z_,clone:()=>y_,_xor:()=>gF,_xid:()=>N1,_void:()=>HL,_uuidv7:()=>$1,_uuidv6:()=>_1,_uuidv4:()=>sI,_uuid:()=>aI,_url:()=>Wg,_uppercase:()=>R4,_unknown:()=>ZL,_union:()=>DF,_undefined:()=>KL,_ulid:()=>j1,_uint64:()=>BL,_uint32:()=>RL,_tuple:()=>jF,_trim:()=>B4,_transform:()=>PF,_toUpperCase:()=>K4,_toLowerCase:()=>V4,_templateLiteral:()=>TF,_symbol:()=>VL,_superRefine:()=>xL,_success:()=>RF,_stringbool:()=>cL,_stringFormat:()=>u0,_string:()=>IL,_startsWith:()=>Y4,_slugify:()=>F4,_size:()=>k6,_set:()=>OF,_safeParseAsync:()=>v0,_safeParse:()=>C0,_safeEncodeAsync:()=>kI,_safeEncode:()=>bI,_safeDecodeAsync:()=>CI,_safeDecode:()=>HI,_regex:()=>W4,_refine:()=>uL,_record:()=>NF,_readonly:()=>QF,_property:()=>Qg,_promise:()=>BF,_positive:()=>Xg,_pipe:()=>YF,_parseAsync:()=>k0,_parse:()=>H0,_overwrite:()=>z$,_optional:()=>zF,_number:()=>JL,_nullable:()=>SF,_null:()=>FL,_normalize:()=>q4,_nonpositive:()=>Gg,_nonoptional:()=>XF,_nonnegative:()=>Yg,_never:()=>bL,_negative:()=>Rg,_nativeEnum:()=>LF,_nanoid:()=>g1,_nan:()=>vL,_multipleOf:()=>U6,_minSize:()=>q$,_minLength:()=>y$,_min:()=>h_,_mime:()=>T4,_maxSize:()=>I6,_maxLength:()=>C6,_max:()=>D$,_map:()=>EF,_mac:()=>NL,_lte:()=>D$,_lt:()=>Q$,_lowercase:()=>X4,_literal:()=>JF,_length:()=>v6,_lazy:()=>qF,_ksuid:()=>E1,_jwt:()=>W1,_isoTime:()=>AL,_isoDuration:()=>LL,_isoDateTime:()=>EL,_isoDate:()=>OL,_ipv6:()=>A1,_ipv4:()=>O1,_intersection:()=>IF,_int64:()=>qL,_int32:()=>XL,_int:()=>zL,_includes:()=>G4,_guid:()=>Sg,_gte:()=>h_,_gt:()=>T$,_float64:()=>WL,_float32:()=>SL,_file:()=>fL,_enum:()=>AF,_endsWith:()=>Q4,_encodeAsync:()=>MI,_encode:()=>KI,_emoji:()=>D1,_email:()=>eI,_e164:()=>S1,_discriminatedUnion:()=>UF,_default:()=>WF,_decodeAsync:()=>ZI,_decode:()=>FI,_date:()=>kL,_custom:()=>wL,_cuid2:()=>I1,_cuid:()=>U1,_coercedString:()=>jL,_coercedNumber:()=>PL,_coercedDate:()=>CL,_coercedBoolean:()=>YL,_coercedBigint:()=>TL,_cidrv6:()=>J1,_cidrv4:()=>L1,_check:()=>$R,_catch:()=>GF,_boolean:()=>GL,_bigint:()=>QL,_base64url:()=>z1,_base64:()=>P1,_array:()=>rL,_any:()=>ML,TimePrecision:()=>X1,NEVER:()=>RI,JSONSchemaGenerator:()=>FJ,JSONSchema:()=>UR,Doc:()=>xI,$output:()=>oI,$input:()=>pI,$constructor:()=>Y,$brand:()=>GI,$ZodXor:()=>CO,$ZodXID:()=>UO,$ZodVoid:()=>ZO,$ZodUnknown:()=>FO,$ZodUnion:()=>Ng,$ZodUndefined:()=>BO,$ZodUUID:()=>p2,$ZodURL:()=>a2,$ZodULID:()=>gO,$ZodType:()=>l,$ZodTuple:()=>iI,$ZodTransform:()=>cO,$ZodTemplateLiteral:()=>sO,$ZodSymbol:()=>qO,$ZodSuccess:()=>tO,$ZodStringFormat:()=>R_,$ZodString:()=>S4,$ZodSet:()=>uO,$ZodRegistry:()=>UL,$ZodRecord:()=>fO,$ZodRealError:()=>_$,$ZodReadonly:()=>aO,$ZodPromise:()=>$A,$ZodPreprocess:()=>eO,$ZodPrefault:()=>iO,$ZodPipe:()=>tI,$ZodOptional:()=>lI,$ZodObjectJIT:()=>kO,$ZodObject:()=>_5,$ZodNumberFormat:()=>QO,$ZodNumber:()=>dI,$ZodNullable:()=>dO,$ZodNull:()=>VO,$ZodNonOptional:()=>lO,$ZodNever:()=>MO,$ZodNanoID:()=>_O,$ZodNaN:()=>pO,$ZodMap:()=>wO,$ZodMAC:()=>JO,$ZodLiteral:()=>yO,$ZodLazy:()=>DA,$ZodKSUID:()=>IO,$ZodJWT:()=>GO,$ZodIntersection:()=>rO,$ZodISOTime:()=>EO,$ZodISODuration:()=>OO,$ZodISODateTime:()=>jO,$ZodISODate:()=>NO,$ZodIPv6:()=>LO,$ZodIPv4:()=>AO,$ZodGUID:()=>o2,$ZodFunction:()=>_A,$ZodFile:()=>hO,$ZodExactOptional:()=>nO,$ZodError:()=>Dg,$ZodEnum:()=>xO,$ZodEncodeError:()=>L4,$ZodEmoji:()=>s2,$ZodEmail:()=>e2,$ZodE164:()=>RO,$ZodDiscriminatedUnion:()=>vO,$ZodDefault:()=>mO,$ZodDate:()=>bO,$ZodCustomStringFormat:()=>YO,$ZodCustom:()=>gA,$ZodCodec:()=>Eg,$ZodCheckUpperCase:()=>x2,$ZodCheckStringFormat:()=>r0,$ZodCheckStartsWith:()=>h2,$ZodCheckSizeEquals:()=>C2,$ZodCheckRegex:()=>w2,$ZodCheckProperty:()=>n2,$ZodCheckOverwrite:()=>m2,$ZodCheckNumberFormat:()=>Z2,$ZodCheckMultipleOf:()=>M2,$ZodCheckMinSize:()=>k2,$ZodCheckMinLength:()=>r2,$ZodCheckMimeType:()=>d2,$ZodCheckMaxSize:()=>H2,$ZodCheckMaxLength:()=>v2,$ZodCheckLowerCase:()=>u2,$ZodCheckLessThan:()=>fI,$ZodCheckLengthEquals:()=>f2,$ZodCheckIncludes:()=>y2,$ZodCheckGreaterThan:()=>wI,$ZodCheckEndsWith:()=>c2,$ZodCheckBigIntFormat:()=>b2,$ZodCheck:()=>Y_,$ZodCatch:()=>oO,$ZodCUID2:()=>DO,$ZodCUID:()=>$O,$ZodCIDRv6:()=>zO,$ZodCIDRv4:()=>PO,$ZodBoolean:()=>jg,$ZodBigIntFormat:()=>TO,$ZodBigInt:()=>mI,$ZodBase64URL:()=>XO,$ZodBase64:()=>WO,$ZodAsyncError:()=>x$,$ZodArray:()=>HO,$ZodAny:()=>KO});var N$=f(()=>{c();rI();gL();Bg();gR();IR();J4();aE();oE();UA();uI();l2();zg();DR();Tg()});var Q1={};v$(Q1,{uppercase:()=>R4,trim:()=>B4,toUpperCase:()=>K4,toLowerCase:()=>V4,startsWith:()=>Y4,slugify:()=>F4,size:()=>k6,regex:()=>W4,property:()=>Qg,positive:()=>Xg,overwrite:()=>z$,normalize:()=>q4,nonpositive:()=>Gg,nonnegative:()=>Yg,negative:()=>Rg,multipleOf:()=>U6,minSize:()=>q$,minLength:()=>y$,mime:()=>T4,maxSize:()=>I6,maxLength:()=>C6,lte:()=>D$,lt:()=>Q$,lowercase:()=>X4,length:()=>v6,includes:()=>G4,gte:()=>h_,gt:()=>T$,endsWith:()=>Q4});var T1=f(()=>{N$()});var M4={};v$(M4,{time:()=>bJ,duration:()=>HJ,datetime:()=>MJ,date:()=>ZJ,ZodISOTime:()=>Fg,ZodISODuration:()=>Mg,ZodISODateTime:()=>Vg,ZodISODate:()=>Kg});function MJ(_){return EL(Vg,_)}function ZJ(_){return OL(Kg,_)}function bJ(_){return AL(Fg,_)}function HJ(_){return LL(Mg,_)}var Vg,Kg,Fg,Mg;var Zg=f(()=>{N$();Hg();Vg=Y("ZodISODateTime",(_,$)=>{jO.init(_,$),z_.init(_,$)});Kg=Y("ZodISODate",(_,$)=>{NO.init(_,$),z_.init(_,$)});Fg=Y("ZodISOTime",(_,$)=>{EO.init(_,$),z_.init(_,$)});Mg=Y("ZodISODuration",(_,$)=>{OO.init(_,$),z_.init(_,$)})});var jR=(_,$)=>{Dg.init(_,$),_.name="ZodError",Object.defineProperties(_,{format:{value:(D)=>b0(_,D)},flatten:{value:(D)=>Z0(_,D)},addIssue:{value:(D)=>{_.issues.push(D),_.message=JSON.stringify(_.issues,K0,2)}},addIssues:{value:(D)=>{_.issues.push(...D),_.message=JSON.stringify(_.issues,K0,2)}},isEmpty:{get(){return _.issues.length===0}}})},NR,o_;var kJ=f(()=>{N$();N$();c();NR=Y("ZodError",jR),o_=Y("ZodError",jR,{Parent:Error})});var q1,B1,V1,K1,F1,M1,Z1,b1,H1,k1,C1,v1;var CJ=f(()=>{N$();kJ();q1=H0(o_),B1=k0(o_),V1=C0(o_),K1=v0(o_),F1=KI(o_),M1=FI(o_),Z1=MI(o_),b1=ZI(o_),H1=bI(o_),k1=HI(o_),C1=kI(o_),v1=CI(o_)});var bg={};v$(bg,{xor:()=>BP,xid:()=>lJ,void:()=>RP,uuidv7:()=>xJ,uuidv6:()=>uJ,uuidv4:()=>wJ,uuid:()=>fJ,url:()=>yJ,unknown:()=>u6,union:()=>_U,undefined:()=>WP,ulid:()=>iJ,uint64:()=>zP,uint32:()=>LP,tuple:()=>a1,transform:()=>DU,templateLiteral:()=>uP,symbol:()=>SP,superRefine:()=>Kj,success:()=>vP,stringbool:()=>iP,stringFormat:()=>UP,string:()=>y0,strictObject:()=>TP,set:()=>ZP,refine:()=>Vj,record:()=>s1,readonly:()=>Gj,promise:()=>xP,preprocess:()=>tP,prefault:()=>Lj,pipe:()=>Cg,partialRecord:()=>KP,optional:()=>c0,object:()=>QP,number:()=>f1,nullish:()=>CP,nullable:()=>n0,null:()=>h1,nonoptional:()=>Jj,never:()=>sg,nativeEnum:()=>bP,nanoid:()=>nJ,nan:()=>rP,meta:()=>dP,map:()=>MP,mac:()=>pJ,looseRecord:()=>FP,looseObject:()=>qP,literal:()=>HP,lazy:()=>Tj,ksuid:()=>tJ,keyof:()=>YP,jwt:()=>gP,json:()=>lP,ipv6:()=>eJ,ipv4:()=>oJ,invertCodec:()=>wP,intersection:()=>p1,int64:()=>PP,int32:()=>AP,int:()=>kg,instanceof:()=>mP,httpUrl:()=>hJ,hostname:()=>IP,hex:()=>jP,hash:()=>NP,guid:()=>rJ,function:()=>yP,float64:()=>OP,float32:()=>EP,file:()=>kP,exactOptional:()=>jj,enum:()=>$U,emoji:()=>cJ,email:()=>vJ,e164:()=>DP,discriminatedUnion:()=>VP,describe:()=>nP,date:()=>GP,custom:()=>cP,cuid2:()=>mJ,cuid:()=>dJ,codec:()=>fP,cidrv6:()=>sJ,cidrv4:()=>aJ,check:()=>hP,catch:()=>Sj,boolean:()=>w1,bigint:()=>JP,base64url:()=>$P,base64:()=>_P,array:()=>i0,any:()=>XP,_function:()=>yP,_default:()=>Oj,_ZodString:()=>rg,ZodXor:()=>l1,ZodXID:()=>cg,ZodVoid:()=>m1,ZodUnknown:()=>n1,ZodUnion:()=>t0,ZodUndefined:()=>x1,ZodUUID:()=>B$,ZodURL:()=>d0,ZodULID:()=>hg,ZodType:()=>o,ZodTuple:()=>e1,ZodTransform:()=>Uj,ZodTemplateLiteral:()=>Yj,ZodSymbol:()=>u1,ZodSuccess:()=>Pj,ZodStringFormat:()=>z_,ZodString:()=>H4,ZodSet:()=>$j,ZodRecord:()=>Z4,ZodReadonly:()=>Rj,ZodPromise:()=>qj,ZodPreprocess:()=>Xj,ZodPrefault:()=>Aj,ZodPipe:()=>o0,ZodOptional:()=>gU,ZodObject:()=>l0,ZodNumberFormat:()=>x6,ZodNumber:()=>C4,ZodNullable:()=>Nj,ZodNull:()=>y1,ZodNonOptional:()=>UU,ZodNever:()=>d1,ZodNanoID:()=>ug,ZodNaN:()=>Wj,ZodMap:()=>_j,ZodMAC:()=>r1,ZodLiteral:()=>Dj,ZodLazy:()=>Qj,ZodKSUID:()=>ng,ZodJWT:()=>eg,ZodIntersection:()=>o1,ZodIPv6:()=>mg,ZodIPv4:()=>dg,ZodGUID:()=>h0,ZodFunction:()=>Bj,ZodFile:()=>gj,ZodExactOptional:()=>Ij,ZodEnum:()=>b4,ZodEmoji:()=>wg,ZodEmail:()=>fg,ZodE164:()=>pg,ZodDiscriminatedUnion:()=>t1,ZodDefault:()=>Ej,ZodDate:()=>m0,ZodCustomStringFormat:()=>k4,ZodCustom:()=>e0,ZodCodec:()=>p0,ZodCatch:()=>zj,ZodCUID2:()=>yg,ZodCUID:()=>xg,ZodCIDRv6:()=>lg,ZodCIDRv4:()=>ig,ZodBoolean:()=>v4,ZodBigIntFormat:()=>ag,ZodBigInt:()=>r4,ZodBase64URL:()=>og,ZodBase64:()=>tg,ZodArray:()=>i1,ZodAny:()=>c1});function vg(_,$,D){let U=Object.getPrototypeOf(_),g=ER.get(U);if(!g)g=new Set,ER.set(U,g);if(g.has($))return;g.add($);for(let I in D){let j=D[I];Object.defineProperty(U,I,{configurable:!0,enumerable:!1,get(){let N=j.bind(this);return Object.defineProperty(this,I,{configurable:!0,writable:!0,enumerable:!0,value:N}),N},set(N){Object.defineProperty(this,I,{configurable:!0,writable:!0,enumerable:!0,value:N})}})}}function y0(_){return IL(H4,_)}function vJ(_){return eI(fg,_)}function rJ(_){return Sg(h0,_)}function fJ(_){return aI(B$,_)}function wJ(_){return sI(B$,_)}function uJ(_){return _1(B$,_)}function xJ(_){return $1(B$,_)}function yJ(_){return Wg(d0,_)}function hJ(_){return Wg(d0,{protocol:$$.httpProtocol,hostname:$$.domain,...H.normalizeParams(_)})}function cJ(_){return D1(wg,_)}function nJ(_){return g1(ug,_)}function dJ(_){return U1(xg,_)}function mJ(_){return I1(yg,_)}function iJ(_){return j1(hg,_)}function lJ(_){return N1(cg,_)}function tJ(_){return E1(ng,_)}function oJ(_){return O1(dg,_)}function pJ(_){return NL(r1,_)}function eJ(_){return A1(mg,_)}function aJ(_){return L1(ig,_)}function sJ(_){return J1(lg,_)}function _P(_){return P1(tg,_)}function $P(_){return z1(og,_)}function DP(_){return S1(pg,_)}function gP(_){return W1(eg,_)}function UP(_,$,D={}){return u0(k4,_,$,D)}function IP(_){return u0(k4,"hostname",$$.hostname,_)}function jP(_){return u0(k4,"hex",$$.hex,_)}function NP(_,$){let D=$?.enc??"hex",U=`${_}_${D}`,g=$$[U];if(!g)throw Error(`Unrecognized hash format: ${U}`);return u0(k4,U,g,$)}function f1(_){return JL(C4,_)}function kg(_){return zL(x6,_)}function EP(_){return SL(x6,_)}function OP(_){return WL(x6,_)}function AP(_){return XL(x6,_)}function LP(_){return RL(x6,_)}function w1(_){return GL(v4,_)}function JP(_){return QL(r4,_)}function PP(_){return qL(ag,_)}function zP(_){return BL(ag,_)}function SP(_){return VL(u1,_)}function WP(_){return KL(x1,_)}function h1(_){return FL(y1,_)}function XP(){return ML(c1)}function u6(){return ZL(n1)}function sg(_){return bL(d1,_)}function RP(_){return HL(m1,_)}function GP(_){return kL(m0,_)}function i0(_,$){return rL(i1,_,$)}function YP(_){let $=_._zod.def.shape;return $U(Object.keys($))}function QP(_,$){let D={type:"object",shape:_??{},...H.normalizeParams($)};return new l0(D)}function TP(_,$){return new l0({type:"object",shape:_,catchall:sg(),...H.normalizeParams($)})}function qP(_,$){return new l0({type:"object",shape:_,catchall:u6(),...H.normalizeParams($)})}function _U(_,$){return new t0({type:"union",options:_,...H.normalizeParams($)})}function BP(_,$){return new l1({type:"union",options:_,inclusive:!1,...H.normalizeParams($)})}function VP(_,$,D){return new t1({type:"union",options:$,discriminator:_,...H.normalizeParams(D)})}function p1(_,$){return new o1({type:"intersection",left:_,right:$})}function a1(_,$,D){let U=$ instanceof l,g=U?D:$;return new e1({type:"tuple",items:_,rest:U?$:null,...H.normalizeParams(g)})}function s1(_,$,D){if(!$||!$._zod)return new Z4({type:"record",keyType:y0(),valueType:_,...H.normalizeParams($)});return new Z4({type:"record",keyType:_,valueType:$,...H.normalizeParams(D)})}function KP(_,$,D){let U=y_(_);return U._zod.values=void 0,new Z4({type:"record",keyType:U,valueType:$,...H.normalizeParams(D)})}function FP(_,$,D){return new Z4({type:"record",keyType:_,valueType:$,mode:"loose",...H.normalizeParams(D)})}function MP(_,$,D){return new _j({type:"map",keyType:_,valueType:$,...H.normalizeParams(D)})}function ZP(_,$){return new $j({type:"set",valueType:_,...H.normalizeParams($)})}function $U(_,$){let D=Array.isArray(_)?Object.fromEntries(_.map((U)=>[U,U])):_;return new b4({type:"enum",entries:D,...H.normalizeParams($)})}function bP(_,$){return new b4({type:"enum",entries:_,...H.normalizeParams($)})}function HP(_,$){return new Dj({type:"literal",values:Array.isArray(_)?_:[_],...H.normalizeParams($)})}function kP(_){return fL(gj,_)}function DU(_){return new Uj({type:"transform",transform:_})}function c0(_){return new gU({type:"optional",innerType:_})}function jj(_){return new Ij({type:"optional",innerType:_})}function n0(_){return new Nj({type:"nullable",innerType:_})}function CP(_){return c0(n0(_))}function Oj(_,$){return new Ej({type:"default",innerType:_,get defaultValue(){return typeof $==="function"?$():H.shallowClone($)}})}function Lj(_,$){return new Aj({type:"prefault",innerType:_,get defaultValue(){return typeof $==="function"?$():H.shallowClone($)}})}function Jj(_,$){return new UU({type:"nonoptional",innerType:_,...H.normalizeParams($)})}function vP(_){return new Pj({type:"success",innerType:_})}function Sj(_,$){return new zj({type:"catch",innerType:_,catchValue:typeof $==="function"?$:()=>$})}function rP(_){return vL(Wj,_)}function Cg(_,$){return new o0({type:"pipe",in:_,out:$})}function fP(_,$,D){return new p0({type:"pipe",in:_,out:$,transform:D.decode,reverseTransform:D.encode})}function wP(_){let $=_._zod.def;return new p0({type:"pipe",in:$.out,out:$.in,transform:$.reverseTransform,reverseTransform:$.transform})}function Gj(_){return new Rj({type:"readonly",innerType:_})}function uP(_,$){return new Yj({type:"template_literal",parts:_,...H.normalizeParams($)})}function Tj(_){return new Qj({type:"lazy",getter:_})}function xP(_){return new qj({type:"promise",innerType:_})}function yP(_){return new Bj({type:"function",input:Array.isArray(_?.input)?a1(_?.input):_?.input??i0(u6()),output:_?.output??u6()})}function hP(_){let $=new Y_({check:"custom"});return $._zod.check=_,$}function cP(_,$){return wL(e0,_??(()=>!0),$)}function Vj(_,$={}){return uL(e0,_,$)}function Kj(_,$){return xL(_,$)}function mP(_,$={}){let D=new e0({type:"custom",check:"custom",fn:(U)=>U instanceof _,abort:!0,...H.normalizeParams($)});return D._zod.bag.Class=_,D._zod.check=(U)=>{if(!(U.value instanceof _))U.issues.push({code:"invalid_type",expected:_.name,input:U.value,inst:D,path:[...D._zod.def.path??[]]})},D}function lP(_){let $=Tj(()=>{return _U([y0(_),f1(),w1(),h1(),i0($),s1(y0(),$)])});return $}function tP(_,$){return new Xj({type:"pipe",in:DU(_),out:$})}var ER,o,rg,H4,z_,fg,h0,B$,d0,wg,ug,xg,yg,hg,cg,ng,dg,r1,mg,ig,lg,tg,og,pg,eg,k4,C4,x6,v4,r4,ag,u1,x1,y1,c1,n1,d1,m1,m0,i1,l0,t0,l1,t1,o1,e1,Z4,_j,$j,b4,Dj,gj,Uj,gU,Ij,Nj,Ej,Aj,UU,Pj,zj,Wj,o0,p0,Xj,Rj,Yj,Qj,qj,Bj,e0,nP,dP,iP=(..._)=>cL({Codec:p0,Boolean:v4,String:H4},..._);var Hg=f(()=>{N$();N$();Bg();Tg();T1();Zg();CJ();ER=new WeakMap;o=Y("ZodType",(_,$)=>{return l.init(_,$),Object.assign(_["~standard"],{jsonSchema:{input:x0(_,"input"),output:x0(_,"output")}}),_.toJSONSchema=nL(_,{}),_.def=$,_.type=$.type,Object.defineProperty(_,"_def",{value:$}),_.parse=(D,U)=>q1(_,D,U,{callee:_.parse}),_.safeParse=(D,U)=>V1(_,D,U),_.parseAsync=async(D,U)=>B1(_,D,U,{callee:_.parseAsync}),_.safeParseAsync=async(D,U)=>K1(_,D,U),_.spa=_.safeParseAsync,_.encode=(D,U)=>F1(_,D,U),_.decode=(D,U)=>M1(_,D,U),_.encodeAsync=async(D,U)=>Z1(_,D,U),_.decodeAsync=async(D,U)=>b1(_,D,U),_.safeEncode=(D,U)=>H1(_,D,U),_.safeDecode=(D,U)=>k1(_,D,U),_.safeEncodeAsync=async(D,U)=>C1(_,D,U),_.safeDecodeAsync=async(D,U)=>v1(_,D,U),vg(_,"ZodType",{check(...D){let U=this.def;return this.clone(H.mergeDefs(U,{checks:[...U.checks??[],...D.map((g)=>typeof g==="function"?{_zod:{check:g,def:{check:"custom"},onattach:[]}}:g)]}),{parent:!0})},with(...D){return this.check(...D)},clone(D,U){return y_(this,D,U)},brand(){return this},register(D,U){return D.add(this,U),this},refine(D,U){return this.check(Vj(D,U))},superRefine(D,U){return this.check(Kj(D,U))},overwrite(D){return this.check(z$(D))},optional(){return c0(this)},exactOptional(){return jj(this)},nullable(){return n0(this)},nullish(){return c0(n0(this))},nonoptional(D){return Jj(this,D)},array(){return i0(this)},or(D){return _U([this,D])},and(D){return p1(this,D)},transform(D){return Cg(this,DU(D))},default(D){return Oj(this,D)},prefault(D){return Lj(this,D)},catch(D){return Sj(this,D)},pipe(D){return Cg(this,D)},readonly(){return Gj(this)},describe(D){let U=this.clone();return w_.add(U,{description:D}),U},meta(...D){if(D.length===0)return w_.get(this);let U=this.clone();return w_.add(U,D[0]),U},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(D){return D(this)}}),Object.defineProperty(_,"description",{get(){return w_.get(_)?.description},configurable:!0}),_}),rg=Y("_ZodString",(_,$)=>{S4.init(_,$),o.init(_,$),_._zod.processJSONSchema=(U,g,I)=>dL(_,U,g,I);let D=_._zod.bag;_.format=D.format??null,_.minLength=D.minimum??null,_.maxLength=D.maximum??null,vg(_,"_ZodString",{regex(...U){return this.check(W4(...U))},includes(...U){return this.check(G4(...U))},startsWith(...U){return this.check(Y4(...U))},endsWith(...U){return this.check(Q4(...U))},min(...U){return this.check(y$(...U))},max(...U){return this.check(C6(...U))},length(...U){return this.check(v6(...U))},nonempty(...U){return this.check(y$(1,...U))},lowercase(U){return this.check(X4(U))},uppercase(U){return this.check(R4(U))},trim(){return this.check(B4())},normalize(...U){return this.check(q4(...U))},toLowerCase(){return this.check(V4())},toUpperCase(){return this.check(K4())},slugify(){return this.check(F4())}})}),H4=Y("ZodString",(_,$)=>{S4.init(_,$),rg.init(_,$),_.email=(D)=>_.check(eI(fg,D)),_.url=(D)=>_.check(Wg(d0,D)),_.jwt=(D)=>_.check(W1(eg,D)),_.emoji=(D)=>_.check(D1(wg,D)),_.guid=(D)=>_.check(Sg(h0,D)),_.uuid=(D)=>_.check(aI(B$,D)),_.uuidv4=(D)=>_.check(sI(B$,D)),_.uuidv6=(D)=>_.check(_1(B$,D)),_.uuidv7=(D)=>_.check($1(B$,D)),_.nanoid=(D)=>_.check(g1(ug,D)),_.guid=(D)=>_.check(Sg(h0,D)),_.cuid=(D)=>_.check(U1(xg,D)),_.cuid2=(D)=>_.check(I1(yg,D)),_.ulid=(D)=>_.check(j1(hg,D)),_.base64=(D)=>_.check(P1(tg,D)),_.base64url=(D)=>_.check(z1(og,D)),_.xid=(D)=>_.check(N1(cg,D)),_.ksuid=(D)=>_.check(E1(ng,D)),_.ipv4=(D)=>_.check(O1(dg,D)),_.ipv6=(D)=>_.check(A1(mg,D)),_.cidrv4=(D)=>_.check(L1(ig,D)),_.cidrv6=(D)=>_.check(J1(lg,D)),_.e164=(D)=>_.check(S1(pg,D)),_.datetime=(D)=>_.check(MJ(D)),_.date=(D)=>_.check(ZJ(D)),_.time=(D)=>_.check(bJ(D)),_.duration=(D)=>_.check(HJ(D))});z_=Y("ZodStringFormat",(_,$)=>{R_.init(_,$),rg.init(_,$)}),fg=Y("ZodEmail",(_,$)=>{e2.init(_,$),z_.init(_,$)});h0=Y("ZodGUID",(_,$)=>{o2.init(_,$),z_.init(_,$)});B$=Y("ZodUUID",(_,$)=>{p2.init(_,$),z_.init(_,$)});d0=Y("ZodURL",(_,$)=>{a2.init(_,$),z_.init(_,$)});wg=Y("ZodEmoji",(_,$)=>{s2.init(_,$),z_.init(_,$)});ug=Y("ZodNanoID",(_,$)=>{_O.init(_,$),z_.init(_,$)});xg=Y("ZodCUID",(_,$)=>{$O.init(_,$),z_.init(_,$)});yg=Y("ZodCUID2",(_,$)=>{DO.init(_,$),z_.init(_,$)});hg=Y("ZodULID",(_,$)=>{gO.init(_,$),z_.init(_,$)});cg=Y("ZodXID",(_,$)=>{UO.init(_,$),z_.init(_,$)});ng=Y("ZodKSUID",(_,$)=>{IO.init(_,$),z_.init(_,$)});dg=Y("ZodIPv4",(_,$)=>{AO.init(_,$),z_.init(_,$)});r1=Y("ZodMAC",(_,$)=>{JO.init(_,$),z_.init(_,$)});mg=Y("ZodIPv6",(_,$)=>{LO.init(_,$),z_.init(_,$)});ig=Y("ZodCIDRv4",(_,$)=>{PO.init(_,$),z_.init(_,$)});lg=Y("ZodCIDRv6",(_,$)=>{zO.init(_,$),z_.init(_,$)});tg=Y("ZodBase64",(_,$)=>{WO.init(_,$),z_.init(_,$)});og=Y("ZodBase64URL",(_,$)=>{XO.init(_,$),z_.init(_,$)});pg=Y("ZodE164",(_,$)=>{RO.init(_,$),z_.init(_,$)});eg=Y("ZodJWT",(_,$)=>{GO.init(_,$),z_.init(_,$)});k4=Y("ZodCustomStringFormat",(_,$)=>{YO.init(_,$),z_.init(_,$)});C4=Y("ZodNumber",(_,$)=>{dI.init(_,$),o.init(_,$),_._zod.processJSONSchema=(U,g,I)=>mL(_,U,g,I),vg(_,"ZodNumber",{gt(U,g){return this.check(T$(U,g))},gte(U,g){return this.check(h_(U,g))},min(U,g){return this.check(h_(U,g))},lt(U,g){return this.check(Q$(U,g))},lte(U,g){return this.check(D$(U,g))},max(U,g){return this.check(D$(U,g))},int(U){return this.check(kg(U))},safe(U){return this.check(kg(U))},positive(U){return this.check(T$(0,U))},nonnegative(U){return this.check(h_(0,U))},negative(U){return this.check(Q$(0,U))},nonpositive(U){return this.check(D$(0,U))},multipleOf(U,g){return this.check(U6(U,g))},step(U,g){return this.check(U6(U,g))},finite(){return this}});let D=_._zod.bag;_.minValue=Math.max(D.minimum??Number.NEGATIVE_INFINITY,D.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,_.maxValue=Math.min(D.maximum??Number.POSITIVE_INFINITY,D.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,_.isInt=(D.format??"").includes("int")||Number.isSafeInteger(D.multipleOf??0.5),_.isFinite=!0,_.format=D.format??null});x6=Y("ZodNumberFormat",(_,$)=>{QO.init(_,$),C4.init(_,$)});v4=Y("ZodBoolean",(_,$)=>{jg.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>iL(_,D,U,g)});r4=Y("ZodBigInt",(_,$)=>{mI.init(_,$),o.init(_,$),_._zod.processJSONSchema=(U,g,I)=>lL(_,U,g,I),_.gte=(U,g)=>_.check(h_(U,g)),_.min=(U,g)=>_.check(h_(U,g)),_.gt=(U,g)=>_.check(T$(U,g)),_.gte=(U,g)=>_.check(h_(U,g)),_.min=(U,g)=>_.check(h_(U,g)),_.lt=(U,g)=>_.check(Q$(U,g)),_.lte=(U,g)=>_.check(D$(U,g)),_.max=(U,g)=>_.check(D$(U,g)),_.positive=(U)=>_.check(T$(BigInt(0),U)),_.negative=(U)=>_.check(Q$(BigInt(0),U)),_.nonpositive=(U)=>_.check(D$(BigInt(0),U)),_.nonnegative=(U)=>_.check(h_(BigInt(0),U)),_.multipleOf=(U,g)=>_.check(U6(U,g));let D=_._zod.bag;_.minValue=D.minimum??null,_.maxValue=D.maximum??null,_.format=D.format??null});ag=Y("ZodBigIntFormat",(_,$)=>{TO.init(_,$),r4.init(_,$)});u1=Y("ZodSymbol",(_,$)=>{qO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>tL(_,D,U,g)});x1=Y("ZodUndefined",(_,$)=>{BO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>pL(_,D,U,g)});y1=Y("ZodNull",(_,$)=>{VO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>oL(_,D,U,g)});c1=Y("ZodAny",(_,$)=>{KO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>sL(_,D,U,g)});n1=Y("ZodUnknown",(_,$)=>{FO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>_J(_,D,U,g)});d1=Y("ZodNever",(_,$)=>{MO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>aL(_,D,U,g)});m1=Y("ZodVoid",(_,$)=>{ZO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>eL(_,D,U,g)});m0=Y("ZodDate",(_,$)=>{bO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(U,g,I)=>$J(_,U,g,I),_.min=(U,g)=>_.check(h_(U,g)),_.max=(U,g)=>_.check(D$(U,g));let D=_._zod.bag;_.minDate=D.minimum?new Date(D.minimum):null,_.maxDate=D.maximum?new Date(D.maximum):null});i1=Y("ZodArray",(_,$)=>{HO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>PJ(_,D,U,g),_.element=$.element,vg(_,"ZodArray",{min(D,U){return this.check(y$(D,U))},nonempty(D){return this.check(y$(1,D))},max(D,U){return this.check(C6(D,U))},length(D,U){return this.check(v6(D,U))},unwrap(){return this.element}})});l0=Y("ZodObject",(_,$)=>{kO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>zJ(_,D,U,g),H.defineLazy(_,"shape",()=>{return $.shape}),vg(_,"ZodObject",{keyof(){return $U(Object.keys(this._zod.def.shape))},catchall(D){return this.clone({...this._zod.def,catchall:D})},passthrough(){return this.clone({...this._zod.def,catchall:u6()})},loose(){return this.clone({...this._zod.def,catchall:u6()})},strict(){return this.clone({...this._zod.def,catchall:sg()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(D){return H.extend(this,D)},safeExtend(D){return H.safeExtend(this,D)},merge(D){return H.merge(this,D)},pick(D){return H.pick(this,D)},omit(D){return H.omit(this,D)},partial(...D){return H.partial(gU,this,D[0])},required(...D){return H.required(UU,this,D[0])}})});t0=Y("ZodUnion",(_,$)=>{Ng.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>G1(_,D,U,g),_.options=$.options});l1=Y("ZodXor",(_,$)=>{t0.init(_,$),CO.init(_,$),_._zod.processJSONSchema=(D,U,g)=>G1(_,D,U,g),_.options=$.options});t1=Y("ZodDiscriminatedUnion",(_,$)=>{t0.init(_,$),vO.init(_,$)});o1=Y("ZodIntersection",(_,$)=>{rO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>SJ(_,D,U,g)});e1=Y("ZodTuple",(_,$)=>{iI.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>WJ(_,D,U,g),_.rest=(D)=>_.clone({..._._zod.def,rest:D})});Z4=Y("ZodRecord",(_,$)=>{fO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>XJ(_,D,U,g),_.keyType=$.keyType,_.valueType=$.valueType});_j=Y("ZodMap",(_,$)=>{wO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>LJ(_,D,U,g),_.keyType=$.keyType,_.valueType=$.valueType,_.min=(...D)=>_.check(q$(...D)),_.nonempty=(D)=>_.check(q$(1,D)),_.max=(...D)=>_.check(I6(...D)),_.size=(...D)=>_.check(k6(...D))});$j=Y("ZodSet",(_,$)=>{uO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>JJ(_,D,U,g),_.min=(...D)=>_.check(q$(...D)),_.nonempty=(D)=>_.check(q$(1,D)),_.max=(...D)=>_.check(I6(...D)),_.size=(...D)=>_.check(k6(...D))});b4=Y("ZodEnum",(_,$)=>{xO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(U,g,I)=>DJ(_,U,g,I),_.enum=$.entries,_.options=Object.values($.entries);let D=new Set(Object.keys($.entries));_.extract=(U,g)=>{let I={};for(let j of U)if(D.has(j))I[j]=$.entries[j];else throw Error(`Key ${j} not found in enum`);return new b4({...$,checks:[],...H.normalizeParams(g),entries:I})},_.exclude=(U,g)=>{let I={...$.entries};for(let j of U)if(D.has(j))delete I[j];else throw Error(`Key ${j} not found in enum`);return new b4({...$,checks:[],...H.normalizeParams(g),entries:I})}});Dj=Y("ZodLiteral",(_,$)=>{yO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>gJ(_,D,U,g),_.values=new Set($.values),Object.defineProperty(_,"value",{get(){if($.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return $.values[0]}})});gj=Y("ZodFile",(_,$)=>{hO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>jJ(_,D,U,g),_.min=(D,U)=>_.check(q$(D,U)),_.max=(D,U)=>_.check(I6(D,U)),_.mime=(D,U)=>_.check(T4(Array.isArray(D)?D:[D],U))});Uj=Y("ZodTransform",(_,$)=>{cO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>AJ(_,D,U,g),_._zod.parse=(D,U)=>{if(U.direction==="backward")throw new L4(_.constructor.name);D.addIssue=(I)=>{if(typeof I==="string")D.issues.push(H.issue(I,D.value,$));else{let j=I;if(j.fatal)j.continue=!1;j.code??(j.code="custom"),j.input??(j.input=D.value),j.inst??(j.inst=_),D.issues.push(H.issue(j))}};let g=$.transform(D.value,D);if(g instanceof Promise)return g.then((I)=>{return D.value=I,D.fallback=!0,D});return D.value=g,D.fallback=!0,D}});gU=Y("ZodOptional",(_,$)=>{lI.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>Y1(_,D,U,g),_.unwrap=()=>_._zod.def.innerType});Ij=Y("ZodExactOptional",(_,$)=>{nO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>Y1(_,D,U,g),_.unwrap=()=>_._zod.def.innerType});Nj=Y("ZodNullable",(_,$)=>{dO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>RJ(_,D,U,g),_.unwrap=()=>_._zod.def.innerType});Ej=Y("ZodDefault",(_,$)=>{mO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>YJ(_,D,U,g),_.unwrap=()=>_._zod.def.innerType,_.removeDefault=_.unwrap});Aj=Y("ZodPrefault",(_,$)=>{iO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>QJ(_,D,U,g),_.unwrap=()=>_._zod.def.innerType});UU=Y("ZodNonOptional",(_,$)=>{lO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>GJ(_,D,U,g),_.unwrap=()=>_._zod.def.innerType});Pj=Y("ZodSuccess",(_,$)=>{tO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>NJ(_,D,U,g),_.unwrap=()=>_._zod.def.innerType});zj=Y("ZodCatch",(_,$)=>{oO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>TJ(_,D,U,g),_.unwrap=()=>_._zod.def.innerType,_.removeCatch=_.unwrap});Wj=Y("ZodNaN",(_,$)=>{pO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>UJ(_,D,U,g)});o0=Y("ZodPipe",(_,$)=>{tI.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>qJ(_,D,U,g),_.in=$.in,_.out=$.out});p0=Y("ZodCodec",(_,$)=>{o0.init(_,$),Eg.init(_,$)});Xj=Y("ZodPreprocess",(_,$)=>{o0.init(_,$),eO.init(_,$)}),Rj=Y("ZodReadonly",(_,$)=>{aO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>BJ(_,D,U,g),_.unwrap=()=>_._zod.def.innerType});Yj=Y("ZodTemplateLiteral",(_,$)=>{sO.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>IJ(_,D,U,g)});Qj=Y("ZodLazy",(_,$)=>{DA.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>KJ(_,D,U,g),_.unwrap=()=>_._zod.def.getter()});qj=Y("ZodPromise",(_,$)=>{$A.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>VJ(_,D,U,g),_.unwrap=()=>_._zod.def.innerType});Bj=Y("ZodFunction",(_,$)=>{_A.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>OJ(_,D,U,g)});e0=Y("ZodCustom",(_,$)=>{gA.init(_,$),o.init(_,$),_._zod.processJSONSchema=(D,U,g)=>EJ(_,D,U,g)});nP=yL,dP=hL});function AR(_){Z_({customError:_})}function LR(){return Z_().customError}var OR,Fj;var JR=f(()=>{N$();OR={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(_){})(Fj||(Fj={}))});function ZF(_,$){let D=_.$schema;if(D==="https://json-schema.org/draft/2020-12/schema")return"draft-2020-12";if(D==="http://json-schema.org/draft-07/schema#")return"draft-7";if(D==="http://json-schema.org/draft-04/schema#")return"draft-4";return $??"draft-2020-12"}function bF(_,$){if(!_.startsWith("#"))throw Error("External $ref is not supported, only local refs (#/...) are allowed");let D=_.slice(1).split("/").filter(Boolean);if(D.length===0)return $.rootSchema;let U=$.version==="draft-2020-12"?"$defs":"definitions";if(D[0]===U){let g=D[1];if(!g||!$.defs[g])throw Error(`Reference not found: ${_}`);return $.defs[g]}throw Error(`Reference not found: ${_}`)}function PR(_,$){if(_.not!==void 0){if(typeof _.not==="object"&&Object.keys(_.not).length===0)return w.never();throw Error("not is not supported in Zod (except { not: {} } for never)")}if(_.unevaluatedItems!==void 0)throw Error("unevaluatedItems is not supported");if(_.unevaluatedProperties!==void 0)throw Error("unevaluatedProperties is not supported");if(_.if!==void 0||_.then!==void 0||_.else!==void 0)throw Error("Conditional schemas (if/then/else) are not supported");if(_.dependentSchemas!==void 0||_.dependentRequired!==void 0)throw Error("dependentSchemas and dependentRequired are not supported");if(_.$ref){let g=_.$ref;if($.refs.has(g))return $.refs.get(g);if($.processing.has(g))return w.lazy(()=>{if(!$.refs.has(g))throw Error(`Circular reference not resolved: ${g}`);return $.refs.get(g)});$.processing.add(g);let I=bF(g,$),j=c_(I,$);return $.refs.set(g,j),$.processing.delete(g),j}if(_.enum!==void 0){let g=_.enum;if($.version==="openapi-3.0"&&_.nullable===!0&&g.length===1&&g[0]===null)return w.null();if(g.length===0)return w.never();if(g.length===1)return w.literal(g[0]);if(g.every((j)=>typeof j==="string"))return w.enum(g);let I=g.map((j)=>w.literal(j));if(I.length<2)return I[0];return w.union([I[0],I[1],...I.slice(2)])}if(_.const!==void 0)return w.literal(_.const);let D=_.type;if(Array.isArray(D)){let g=D.map((I)=>{let j={..._,type:I};return PR(j,$)});if(g.length===0)return w.never();if(g.length===1)return g[0];return w.union(g)}if(!D)return w.any();let U;switch(D){case"string":{let g=w.string();if(_.format){let I=_.format;if(I==="email")g=g.check(w.email());else if(I==="uri"||I==="uri-reference")g=g.check(w.url());else if(I==="uuid"||I==="guid")g=g.check(w.uuid());else if(I==="date-time")g=g.check(w.iso.datetime());else if(I==="date")g=g.check(w.iso.date());else if(I==="time")g=g.check(w.iso.time());else if(I==="duration")g=g.check(w.iso.duration());else if(I==="ipv4")g=g.check(w.ipv4());else if(I==="ipv6")g=g.check(w.ipv6());else if(I==="mac")g=g.check(w.mac());else if(I==="cidr")g=g.check(w.cidrv4());else if(I==="cidr-v6")g=g.check(w.cidrv6());else if(I==="base64")g=g.check(w.base64());else if(I==="base64url")g=g.check(w.base64url());else if(I==="e164")g=g.check(w.e164());else if(I==="jwt")g=g.check(w.jwt());else if(I==="emoji")g=g.check(w.emoji());else if(I==="nanoid")g=g.check(w.nanoid());else if(I==="cuid")g=g.check(w.cuid());else if(I==="cuid2")g=g.check(w.cuid2());else if(I==="ulid")g=g.check(w.ulid());else if(I==="xid")g=g.check(w.xid());else if(I==="ksuid")g=g.check(w.ksuid())}if(typeof _.minLength==="number")g=g.min(_.minLength);if(typeof _.maxLength==="number")g=g.max(_.maxLength);if(_.pattern)g=g.regex(new RegExp(_.pattern));U=g;break}case"number":case"integer":{let g=D==="integer"?w.number().int():w.number();if(typeof _.minimum==="number")g=g.min(_.minimum);if(typeof _.maximum==="number")g=g.max(_.maximum);if(typeof _.exclusiveMinimum==="number")g=g.gt(_.exclusiveMinimum);else if(_.exclusiveMinimum===!0&&typeof _.minimum==="number")g=g.gt(_.minimum);if(typeof _.exclusiveMaximum==="number")g=g.lt(_.exclusiveMaximum);else if(_.exclusiveMaximum===!0&&typeof _.maximum==="number")g=g.lt(_.maximum);if(typeof _.multipleOf==="number")g=g.multipleOf(_.multipleOf);U=g;break}case"boolean":{U=w.boolean();break}case"null":{U=w.null();break}case"object":{let g={},I=_.properties||{},j=new Set(_.required||[]);for(let[O,A]of Object.entries(I)){let L=c_(A,$);g[O]=j.has(O)?L:L.optional()}if(_.propertyNames){let O=c_(_.propertyNames,$),A=_.additionalProperties&&typeof _.additionalProperties==="object"?c_(_.additionalProperties,$):w.any();if(Object.keys(g).length===0){U=w.record(O,A);break}let L=w.object(g).passthrough(),z=w.looseRecord(O,A);U=w.intersection(L,z);break}if(_.patternProperties){let O=_.patternProperties,A=Object.keys(O),L=[];for(let W of A){let J=c_(O[W],$),P=w.string().regex(new RegExp(W));L.push(w.looseRecord(P,J))}let z=[];if(Object.keys(g).length>0)z.push(w.object(g).passthrough());if(z.push(...L),z.length===0)U=w.object({}).passthrough();else if(z.length===1)U=z[0];else{let W=w.intersection(z[0],z[1]);for(let J=2;Jc_(O,$)),N=I&&typeof I==="object"&&!Array.isArray(I)?c_(I,$):void 0;if(N)U=w.tuple(j).rest(N);else U=w.tuple(j);if(typeof _.minItems==="number")U=U.check(w.minLength(_.minItems));if(typeof _.maxItems==="number")U=U.check(w.maxLength(_.maxItems))}else if(Array.isArray(I)){let j=I.map((O)=>c_(O,$)),N=_.additionalItems&&typeof _.additionalItems==="object"?c_(_.additionalItems,$):void 0;if(N)U=w.tuple(j).rest(N);else U=w.tuple(j);if(typeof _.minItems==="number")U=U.check(w.minLength(_.minItems));if(typeof _.maxItems==="number")U=U.check(w.maxLength(_.maxItems))}else if(I!==void 0){let j=c_(I,$),N=w.array(j);if(typeof _.minItems==="number")N=N.min(_.minItems);if(typeof _.maxItems==="number")N=N.max(_.maxItems);U=N}else U=w.array(w.any());break}default:throw Error(`Unsupported type: ${D}`)}return U}function c_(_,$){if(typeof _==="boolean")return _?w.any():w.never();let D=PR(_,$),U=_.type||_.enum!==void 0||_.const!==void 0;if(_.anyOf&&Array.isArray(_.anyOf)){let N=_.anyOf.map((A)=>c_(A,$)),O=w.union(N);D=U?w.intersection(D,O):O}if(_.oneOf&&Array.isArray(_.oneOf)){let N=_.oneOf.map((A)=>c_(A,$)),O=w.xor(N);D=U?w.intersection(D,O):O}if(_.allOf&&Array.isArray(_.allOf))if(_.allOf.length===0)D=U?D:w.any();else{let N=U?D:c_(_.allOf[0],$),O=U?0:1;for(let A=O;A<_.allOf.length;A++)N=w.intersection(N,c_(_.allOf[A],$));D=N}if(_.nullable===!0&&$.version==="openapi-3.0")D=w.nullable(D);if(_.readOnly===!0)D=w.readonly(D);if(_.default!==void 0)D=D.default(_.default);let g={},I=["$id","id","$comment","$anchor","$vocabulary","$dynamicRef","$dynamicAnchor"];for(let N of I)if(N in _)g[N]=_[N];let j=["contentEncoding","contentMediaType","contentSchema"];for(let N of j)if(N in _)g[N]=_[N];for(let N of Object.keys(_))if(!MF.has(N))g[N]=_[N];if(Object.keys(g).length>0)$.registry.add(D,g);if(_.description)D=D.describe(_.description);return D}function oP(_,$){if(typeof _==="boolean")return _?w.any():w.never();let D;try{D=JSON.parse(JSON.stringify(_))}catch{throw Error("fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas")}let U=ZF(D,$?.defaultTarget),g=D.$defs||D.definitions||{},I={version:U,defs:g,refs:new Map,processing:new Set,rootSchema:D,registry:$?.registry??w_};return c_(D,I)}var w,MF;var zR=f(()=>{zg();T1();Zg();Hg();w={...bg,...Q1,iso:M4},MF=new Set(["$schema","$ref","$defs","definitions","$id","id","$comment","$anchor","$vocabulary","$dynamicRef","$dynamicAnchor","type","enum","const","anyOf","oneOf","allOf","not","properties","required","additionalProperties","patternProperties","propertyNames","minProperties","maxProperties","items","prefixItems","additionalItems","minItems","maxItems","uniqueItems","contains","minContains","maxContains","minLength","maxLength","pattern","format","minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf","description","default","contentEncoding","contentMediaType","contentSchema","unevaluatedItems","unevaluatedProperties","if","then","else","dependentSchemas","dependentRequired","nullable","readOnly"])});var Mj={};v$(Mj,{string:()=>HF,number:()=>kF,date:()=>rF,boolean:()=>CF,bigint:()=>vF});function HF(_){return jL(H4,_)}function kF(_){return PL(C4,_)}function CF(_){return YL(v4,_)}function vF(_){return TL(r4,_)}function rF(_){return CL(m0,_)}var SR=f(()=>{N$();Hg()});var Zj={};v$(Zj,{xor:()=>BP,xid:()=>lJ,void:()=>RP,uuidv7:()=>xJ,uuidv6:()=>uJ,uuidv4:()=>wJ,uuid:()=>fJ,util:()=>H,url:()=>yJ,uppercase:()=>R4,unknown:()=>u6,union:()=>_U,undefined:()=>WP,ulid:()=>iJ,uint64:()=>zP,uint32:()=>LP,tuple:()=>a1,trim:()=>B4,treeifyError:()=>TI,transform:()=>DU,toUpperCase:()=>K4,toLowerCase:()=>V4,toJSONSchema:()=>qg,templateLiteral:()=>uP,symbol:()=>SP,superRefine:()=>Kj,success:()=>vP,stringbool:()=>iP,stringFormat:()=>UP,string:()=>y0,strictObject:()=>TP,startsWith:()=>Y4,slugify:()=>F4,size:()=>k6,setErrorMap:()=>AR,set:()=>ZP,safeParseAsync:()=>K1,safeParse:()=>V1,safeEncodeAsync:()=>C1,safeEncode:()=>H1,safeDecodeAsync:()=>v1,safeDecode:()=>k1,registry:()=>Pg,regexes:()=>$$,regex:()=>W4,refine:()=>Vj,record:()=>s1,readonly:()=>Gj,property:()=>Qg,promise:()=>xP,prettifyError:()=>qI,preprocess:()=>tP,prefault:()=>Lj,positive:()=>Xg,pipe:()=>Cg,partialRecord:()=>KP,parseAsync:()=>B1,parse:()=>q1,overwrite:()=>z$,optional:()=>c0,object:()=>QP,number:()=>f1,nullish:()=>CP,nullable:()=>n0,null:()=>h1,normalize:()=>q4,nonpositive:()=>Gg,nonoptional:()=>Jj,nonnegative:()=>Yg,never:()=>sg,negative:()=>Rg,nativeEnum:()=>bP,nanoid:()=>nJ,nan:()=>rP,multipleOf:()=>U6,minSize:()=>q$,minLength:()=>y$,mime:()=>T4,meta:()=>dP,maxSize:()=>I6,maxLength:()=>C6,map:()=>MP,mac:()=>pJ,lte:()=>D$,lt:()=>Q$,lowercase:()=>X4,looseRecord:()=>FP,looseObject:()=>qP,locales:()=>w0,literal:()=>HP,length:()=>v6,lazy:()=>Tj,ksuid:()=>tJ,keyof:()=>YP,jwt:()=>gP,json:()=>lP,iso:()=>M4,ipv6:()=>eJ,ipv4:()=>oJ,invertCodec:()=>wP,intersection:()=>p1,int64:()=>PP,int32:()=>AP,int:()=>kg,instanceof:()=>mP,includes:()=>G4,httpUrl:()=>hJ,hostname:()=>IP,hex:()=>jP,hash:()=>NP,guid:()=>rJ,gte:()=>h_,gt:()=>T$,globalRegistry:()=>w_,getErrorMap:()=>LR,function:()=>yP,fromJSONSchema:()=>oP,formatError:()=>b0,float64:()=>OP,float32:()=>EP,flattenError:()=>Z0,file:()=>kP,exactOptional:()=>jj,enum:()=>$U,endsWith:()=>Q4,encodeAsync:()=>Z1,encode:()=>F1,emoji:()=>cJ,email:()=>vJ,e164:()=>DP,discriminatedUnion:()=>VP,describe:()=>nP,decodeAsync:()=>b1,decode:()=>M1,date:()=>GP,custom:()=>cP,cuid2:()=>mJ,cuid:()=>dJ,core:()=>h$,config:()=>Z_,coerce:()=>Mj,codec:()=>fP,clone:()=>y_,cidrv6:()=>sJ,cidrv4:()=>aJ,check:()=>hP,catch:()=>Sj,boolean:()=>w1,bigint:()=>JP,base64url:()=>$P,base64:()=>_P,array:()=>i0,any:()=>XP,_function:()=>yP,_default:()=>Oj,_ZodString:()=>rg,ZodXor:()=>l1,ZodXID:()=>cg,ZodVoid:()=>m1,ZodUnknown:()=>n1,ZodUnion:()=>t0,ZodUndefined:()=>x1,ZodUUID:()=>B$,ZodURL:()=>d0,ZodULID:()=>hg,ZodType:()=>o,ZodTuple:()=>e1,ZodTransform:()=>Uj,ZodTemplateLiteral:()=>Yj,ZodSymbol:()=>u1,ZodSuccess:()=>Pj,ZodStringFormat:()=>z_,ZodString:()=>H4,ZodSet:()=>$j,ZodRecord:()=>Z4,ZodRealError:()=>o_,ZodReadonly:()=>Rj,ZodPromise:()=>qj,ZodPreprocess:()=>Xj,ZodPrefault:()=>Aj,ZodPipe:()=>o0,ZodOptional:()=>gU,ZodObject:()=>l0,ZodNumberFormat:()=>x6,ZodNumber:()=>C4,ZodNullable:()=>Nj,ZodNull:()=>y1,ZodNonOptional:()=>UU,ZodNever:()=>d1,ZodNanoID:()=>ug,ZodNaN:()=>Wj,ZodMap:()=>_j,ZodMAC:()=>r1,ZodLiteral:()=>Dj,ZodLazy:()=>Qj,ZodKSUID:()=>ng,ZodJWT:()=>eg,ZodIssueCode:()=>OR,ZodIntersection:()=>o1,ZodISOTime:()=>Fg,ZodISODuration:()=>Mg,ZodISODateTime:()=>Vg,ZodISODate:()=>Kg,ZodIPv6:()=>mg,ZodIPv4:()=>dg,ZodGUID:()=>h0,ZodFunction:()=>Bj,ZodFirstPartyTypeKind:()=>Fj,ZodFile:()=>gj,ZodExactOptional:()=>Ij,ZodError:()=>NR,ZodEnum:()=>b4,ZodEmoji:()=>wg,ZodEmail:()=>fg,ZodE164:()=>pg,ZodDiscriminatedUnion:()=>t1,ZodDefault:()=>Ej,ZodDate:()=>m0,ZodCustomStringFormat:()=>k4,ZodCustom:()=>e0,ZodCodec:()=>p0,ZodCatch:()=>zj,ZodCUID2:()=>yg,ZodCUID:()=>xg,ZodCIDRv6:()=>lg,ZodCIDRv4:()=>ig,ZodBoolean:()=>v4,ZodBigIntFormat:()=>ag,ZodBigInt:()=>r4,ZodBase64URL:()=>og,ZodBase64:()=>tg,ZodArray:()=>i1,ZodAny:()=>c1,TimePrecision:()=>X1,NEVER:()=>RI,$output:()=>oI,$input:()=>pI,$brand:()=>GI});var pP=f(()=>{N$();N$();zA();N$();Bg();zR();gL();Zg();Zg();SR();Hg();T1();kJ();CJ();JR();Z_(Og())});var WR={};v$(WR,{z:()=>Zj,xor:()=>BP,xid:()=>lJ,void:()=>RP,uuidv7:()=>xJ,uuidv6:()=>uJ,uuidv4:()=>wJ,uuid:()=>fJ,util:()=>H,url:()=>yJ,uppercase:()=>R4,unknown:()=>u6,union:()=>_U,undefined:()=>WP,ulid:()=>iJ,uint64:()=>zP,uint32:()=>LP,tuple:()=>a1,trim:()=>B4,treeifyError:()=>TI,transform:()=>DU,toUpperCase:()=>K4,toLowerCase:()=>V4,toJSONSchema:()=>qg,templateLiteral:()=>uP,symbol:()=>SP,superRefine:()=>Kj,success:()=>vP,stringbool:()=>iP,stringFormat:()=>UP,string:()=>y0,strictObject:()=>TP,startsWith:()=>Y4,slugify:()=>F4,size:()=>k6,setErrorMap:()=>AR,set:()=>ZP,safeParseAsync:()=>K1,safeParse:()=>V1,safeEncodeAsync:()=>C1,safeEncode:()=>H1,safeDecodeAsync:()=>v1,safeDecode:()=>k1,registry:()=>Pg,regexes:()=>$$,regex:()=>W4,refine:()=>Vj,record:()=>s1,readonly:()=>Gj,property:()=>Qg,promise:()=>xP,prettifyError:()=>qI,preprocess:()=>tP,prefault:()=>Lj,positive:()=>Xg,pipe:()=>Cg,partialRecord:()=>KP,parseAsync:()=>B1,parse:()=>q1,overwrite:()=>z$,optional:()=>c0,object:()=>QP,number:()=>f1,nullish:()=>CP,nullable:()=>n0,null:()=>h1,normalize:()=>q4,nonpositive:()=>Gg,nonoptional:()=>Jj,nonnegative:()=>Yg,never:()=>sg,negative:()=>Rg,nativeEnum:()=>bP,nanoid:()=>nJ,nan:()=>rP,multipleOf:()=>U6,minSize:()=>q$,minLength:()=>y$,mime:()=>T4,meta:()=>dP,maxSize:()=>I6,maxLength:()=>C6,map:()=>MP,mac:()=>pJ,lte:()=>D$,lt:()=>Q$,lowercase:()=>X4,looseRecord:()=>FP,looseObject:()=>qP,locales:()=>w0,literal:()=>HP,length:()=>v6,lazy:()=>Tj,ksuid:()=>tJ,keyof:()=>YP,jwt:()=>gP,json:()=>lP,iso:()=>M4,ipv6:()=>eJ,ipv4:()=>oJ,invertCodec:()=>wP,intersection:()=>p1,int64:()=>PP,int32:()=>AP,int:()=>kg,instanceof:()=>mP,includes:()=>G4,httpUrl:()=>hJ,hostname:()=>IP,hex:()=>jP,hash:()=>NP,guid:()=>rJ,gte:()=>h_,gt:()=>T$,globalRegistry:()=>w_,getErrorMap:()=>LR,function:()=>yP,fromJSONSchema:()=>oP,formatError:()=>b0,float64:()=>OP,float32:()=>EP,flattenError:()=>Z0,file:()=>kP,exactOptional:()=>jj,enum:()=>$U,endsWith:()=>Q4,encodeAsync:()=>Z1,encode:()=>F1,emoji:()=>cJ,email:()=>vJ,e164:()=>DP,discriminatedUnion:()=>VP,describe:()=>nP,default:()=>fF,decodeAsync:()=>b1,decode:()=>M1,date:()=>GP,custom:()=>cP,cuid2:()=>mJ,cuid:()=>dJ,core:()=>h$,config:()=>Z_,coerce:()=>Mj,codec:()=>fP,clone:()=>y_,cidrv6:()=>sJ,cidrv4:()=>aJ,check:()=>hP,catch:()=>Sj,boolean:()=>w1,bigint:()=>JP,base64url:()=>$P,base64:()=>_P,array:()=>i0,any:()=>XP,_function:()=>yP,_default:()=>Oj,_ZodString:()=>rg,ZodXor:()=>l1,ZodXID:()=>cg,ZodVoid:()=>m1,ZodUnknown:()=>n1,ZodUnion:()=>t0,ZodUndefined:()=>x1,ZodUUID:()=>B$,ZodURL:()=>d0,ZodULID:()=>hg,ZodType:()=>o,ZodTuple:()=>e1,ZodTransform:()=>Uj,ZodTemplateLiteral:()=>Yj,ZodSymbol:()=>u1,ZodSuccess:()=>Pj,ZodStringFormat:()=>z_,ZodString:()=>H4,ZodSet:()=>$j,ZodRecord:()=>Z4,ZodRealError:()=>o_,ZodReadonly:()=>Rj,ZodPromise:()=>qj,ZodPreprocess:()=>Xj,ZodPrefault:()=>Aj,ZodPipe:()=>o0,ZodOptional:()=>gU,ZodObject:()=>l0,ZodNumberFormat:()=>x6,ZodNumber:()=>C4,ZodNullable:()=>Nj,ZodNull:()=>y1,ZodNonOptional:()=>UU,ZodNever:()=>d1,ZodNanoID:()=>ug,ZodNaN:()=>Wj,ZodMap:()=>_j,ZodMAC:()=>r1,ZodLiteral:()=>Dj,ZodLazy:()=>Qj,ZodKSUID:()=>ng,ZodJWT:()=>eg,ZodIssueCode:()=>OR,ZodIntersection:()=>o1,ZodISOTime:()=>Fg,ZodISODuration:()=>Mg,ZodISODateTime:()=>Vg,ZodISODate:()=>Kg,ZodIPv6:()=>mg,ZodIPv4:()=>dg,ZodGUID:()=>h0,ZodFunction:()=>Bj,ZodFirstPartyTypeKind:()=>Fj,ZodFile:()=>gj,ZodExactOptional:()=>Ij,ZodError:()=>NR,ZodEnum:()=>b4,ZodEmoji:()=>wg,ZodEmail:()=>fg,ZodE164:()=>pg,ZodDiscriminatedUnion:()=>t1,ZodDefault:()=>Ej,ZodDate:()=>m0,ZodCustomStringFormat:()=>k4,ZodCustom:()=>e0,ZodCodec:()=>p0,ZodCatch:()=>zj,ZodCUID2:()=>yg,ZodCUID:()=>xg,ZodCIDRv6:()=>lg,ZodCIDRv4:()=>ig,ZodBoolean:()=>v4,ZodBigIntFormat:()=>ag,ZodBigInt:()=>r4,ZodBase64URL:()=>og,ZodBase64:()=>tg,ZodArray:()=>i1,ZodAny:()=>c1,TimePrecision:()=>X1,NEVER:()=>RI,$output:()=>oI,$input:()=>pI,$brand:()=>GI});var fF;var XR=f(()=>{pP();pP();fF=Zj});var VU=e6((Mv)=>{class p3 extends Error{constructor(_,$,D){super(D);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=$,this.exitCode=_,this.nestedError=void 0}}class U8 extends p3{constructor(_){super(1,"commander.invalidArgument",_);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}Mv.CommanderError=p3;Mv.InvalidArgumentError=U8});var SN=e6((Cv)=>{var{InvalidArgumentError:Hv}=VU();class I8{constructor(_,$){switch(this.description=$||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,_[0]){case"<":this.required=!0,this._name=_.slice(1,-1);break;case"[":this.required=!1,this._name=_.slice(1,-1);break;default:this.required=!0,this._name=_;break}if(this._name.length>3&&this._name.slice(-3)==="...")this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_concatValue(_,$){if($===this.defaultValue||!Array.isArray($))return[_];return $.concat(_)}default(_,$){return this.defaultValue=_,this.defaultValueDescription=$,this}argParser(_){return this.parseArg=_,this}choices(_){return this.argChoices=_.slice(),this.parseArg=($,D)=>{if(!this.argChoices.includes($))throw new Hv(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._concatValue($,D);return $},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function kv(_){let $=_.name()+(_.variadic===!0?"...":"");return _.required?"<"+$+">":"["+$+"]"}Cv.Argument=I8;Cv.humanReadableArgName=kv});var e3=e6((wv)=>{var{humanReadableArgName:fv}=SN();class j8{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(_){this.helpWidth=this.helpWidth??_.helpWidth??80}visibleCommands(_){let $=_.commands.filter((U)=>!U._hidden),D=_._getHelpCommand();if(D&&!D._hidden)$.push(D);if(this.sortSubcommands)$.sort((U,g)=>{return U.name().localeCompare(g.name())});return $}compareOptions(_,$){let D=(U)=>{return U.short?U.short.replace(/^-/,""):U.long.replace(/^--/,"")};return D(_).localeCompare(D($))}visibleOptions(_){let $=_.options.filter((U)=>!U.hidden),D=_._getHelpOption();if(D&&!D.hidden){let U=D.short&&_._findOption(D.short),g=D.long&&_._findOption(D.long);if(!U&&!g)$.push(D);else if(D.long&&!g)$.push(_.createOption(D.long,D.description));else if(D.short&&!U)$.push(_.createOption(D.short,D.description))}if(this.sortOptions)$.sort(this.compareOptions);return $}visibleGlobalOptions(_){if(!this.showGlobalOptions)return[];let $=[];for(let D=_.parent;D;D=D.parent){let U=D.options.filter((g)=>!g.hidden);$.push(...U)}if(this.sortOptions)$.sort(this.compareOptions);return $}visibleArguments(_){if(_._argsDescription)_.registeredArguments.forEach(($)=>{$.description=$.description||_._argsDescription[$.name()]||""});if(_.registeredArguments.find(($)=>$.description))return _.registeredArguments;return[]}subcommandTerm(_){let $=_.registeredArguments.map((D)=>fv(D)).join(" ");return _._name+(_._aliases[0]?"|"+_._aliases[0]:"")+(_.options.length?" [options]":"")+($?" "+$:"")}optionTerm(_){return _.flags}argumentTerm(_){return _.name()}longestSubcommandTermLength(_,$){return $.visibleCommands(_).reduce((D,U)=>{return Math.max(D,this.displayWidth($.styleSubcommandTerm($.subcommandTerm(U))))},0)}longestOptionTermLength(_,$){return $.visibleOptions(_).reduce((D,U)=>{return Math.max(D,this.displayWidth($.styleOptionTerm($.optionTerm(U))))},0)}longestGlobalOptionTermLength(_,$){return $.visibleGlobalOptions(_).reduce((D,U)=>{return Math.max(D,this.displayWidth($.styleOptionTerm($.optionTerm(U))))},0)}longestArgumentTermLength(_,$){return $.visibleArguments(_).reduce((D,U)=>{return Math.max(D,this.displayWidth($.styleArgumentTerm($.argumentTerm(U))))},0)}commandUsage(_){let $=_._name;if(_._aliases[0])$=$+"|"+_._aliases[0];let D="";for(let U=_.parent;U;U=U.parent)D=U.name()+" "+D;return D+$+" "+_.usage()}commandDescription(_){return _.description()}subcommandDescription(_){return _.summary()||_.description()}optionDescription(_){let $=[];if(_.argChoices)$.push(`choices: ${_.argChoices.map((D)=>JSON.stringify(D)).join(", ")}`);if(_.defaultValue!==void 0){if(_.required||_.optional||_.isBoolean()&&typeof _.defaultValue==="boolean")$.push(`default: ${_.defaultValueDescription||JSON.stringify(_.defaultValue)}`)}if(_.presetArg!==void 0&&_.optional)$.push(`preset: ${JSON.stringify(_.presetArg)}`);if(_.envVar!==void 0)$.push(`env: ${_.envVar}`);if($.length>0)return`${_.description} (${$.join(", ")})`;return _.description}argumentDescription(_){let $=[];if(_.argChoices)$.push(`choices: ${_.argChoices.map((D)=>JSON.stringify(D)).join(", ")}`);if(_.defaultValue!==void 0)$.push(`default: ${_.defaultValueDescription||JSON.stringify(_.defaultValue)}`);if($.length>0){let D=`(${$.join(", ")})`;if(_.description)return`${_.description} ${D}`;return D}return _.description}formatHelp(_,$){let D=$.padWidth(_,$),U=$.helpWidth??80;function g(L,z){return $.formatItem(L,D,z,$)}let I=[`${$.styleTitle("Usage:")} ${$.styleUsage($.commandUsage(_))}`,""],j=$.commandDescription(_);if(j.length>0)I=I.concat([$.boxWrap($.styleCommandDescription(j),U),""]);let N=$.visibleArguments(_).map((L)=>{return g($.styleArgumentTerm($.argumentTerm(L)),$.styleArgumentDescription($.argumentDescription(L)))});if(N.length>0)I=I.concat([$.styleTitle("Arguments:"),...N,""]);let O=$.visibleOptions(_).map((L)=>{return g($.styleOptionTerm($.optionTerm(L)),$.styleOptionDescription($.optionDescription(L)))});if(O.length>0)I=I.concat([$.styleTitle("Options:"),...O,""]);if($.showGlobalOptions){let L=$.visibleGlobalOptions(_).map((z)=>{return g($.styleOptionTerm($.optionTerm(z)),$.styleOptionDescription($.optionDescription(z)))});if(L.length>0)I=I.concat([$.styleTitle("Global Options:"),...L,""])}let A=$.visibleCommands(_).map((L)=>{return g($.styleSubcommandTerm($.subcommandTerm(L)),$.styleSubcommandDescription($.subcommandDescription(L)))});if(A.length>0)I=I.concat([$.styleTitle("Commands:"),...A,""]);return I.join(` -`)}displayWidth(_){return N8(_).length}styleTitle(_){return _}styleUsage(_){return _.split(" ").map(($)=>{if($==="[options]")return this.styleOptionText($);if($==="[command]")return this.styleSubcommandText($);if($[0]==="["||$[0]==="<")return this.styleArgumentText($);return this.styleCommandText($)}).join(" ")}styleCommandDescription(_){return this.styleDescriptionText(_)}styleOptionDescription(_){return this.styleDescriptionText(_)}styleSubcommandDescription(_){return this.styleDescriptionText(_)}styleArgumentDescription(_){return this.styleDescriptionText(_)}styleDescriptionText(_){return _}styleOptionTerm(_){return this.styleOptionText(_)}styleSubcommandTerm(_){return _.split(" ").map(($)=>{if($==="[options]")return this.styleOptionText($);if($[0]==="["||$[0]==="<")return this.styleArgumentText($);return this.styleSubcommandText($)}).join(" ")}styleArgumentTerm(_){return this.styleArgumentText(_)}styleOptionText(_){return _}styleArgumentText(_){return _}styleSubcommandText(_){return _}styleCommandText(_){return _}padWidth(_,$){return Math.max($.longestOptionTermLength(_,$),$.longestGlobalOptionTermLength(_,$),$.longestSubcommandTermLength(_,$),$.longestArgumentTermLength(_,$))}preformatted(_){return/\n[^\S\r\n]/.test(_)}formatItem(_,$,D,U){let I=" ".repeat(2);if(!D)return I+_;let j=_.padEnd($+_.length-U.displayWidth(_)),N=2,A=(this.helpWidth??80)-$-N-2,L;if(A{let j=I.match(U);if(j===null){g.push("");return}let N=[j.shift()],O=this.displayWidth(N[0]);j.forEach((A)=>{let L=this.displayWidth(A);if(O+L<=$){N.push(A),O+=L;return}g.push(N.join(""));let z=A.trimStart();N=[z],O=this.displayWidth(z)}),g.push(N.join(""))}),g.join(` -`)}}function N8(_){let $=/\x1b\[\d*(;\d*)*m/g;return _.replace($,"")}wv.Help=j8;wv.stripColor=N8});var a3=e6((cv)=>{var{InvalidArgumentError:yv}=VU();class O8{constructor(_,$){this.flags=_,this.description=$||"",this.required=_.includes("<"),this.optional=_.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(_),this.mandatory=!1;let D=hv(_);if(this.short=D.shortFlag,this.long=D.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(_,$){return this.defaultValue=_,this.defaultValueDescription=$,this}preset(_){return this.presetArg=_,this}conflicts(_){return this.conflictsWith=this.conflictsWith.concat(_),this}implies(_){let $=_;if(typeof _==="string")$={[_]:!0};return this.implied=Object.assign(this.implied||{},$),this}env(_){return this.envVar=_,this}argParser(_){return this.parseArg=_,this}makeOptionMandatory(_=!0){return this.mandatory=!!_,this}hideHelp(_=!0){return this.hidden=!!_,this}_concatValue(_,$){if($===this.defaultValue||!Array.isArray($))return[_];return $.concat(_)}choices(_){return this.argChoices=_.slice(),this.parseArg=($,D)=>{if(!this.argChoices.includes($))throw new yv(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._concatValue($,D);return $},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return E8(this.name().replace(/^no-/,""));return E8(this.name())}is(_){return this.short===_||this.long===_}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class A8{constructor(_){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,_.forEach(($)=>{if($.negate)this.negativeOptions.set($.attributeName(),$);else this.positiveOptions.set($.attributeName(),$)}),this.negativeOptions.forEach(($,D)=>{if(this.positiveOptions.has(D))this.dualOptions.add(D)})}valueFromOption(_,$){let D=$.attributeName();if(!this.dualOptions.has(D))return!0;let U=this.negativeOptions.get(D).presetArg,g=U!==void 0?U:!1;return $.negate===(g===_)}}function E8(_){return _.split("-").reduce(($,D)=>{return $+D[0].toUpperCase()+D.slice(1)})}function hv(_){let $,D,U=/^-[^-]$/,g=/^--[^-]/,I=_.split(/[ |,]+/).concat("guard");if(U.test(I[0]))$=I.shift();if(g.test(I[0]))D=I.shift();if(!$&&U.test(I[0]))$=I.shift();if(!$&&g.test(I[0]))$=D,D=I.shift();if(I[0].startsWith("-")){let j=I[0],N=`option creation failed due to '${j}' in option flags '${_}'`;if(/^-[^-][^-]/.test(j))throw Error(`${N} +Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let j of _.seen.entries()){let E=j[1];if($===j[0]){I(j);continue}if(_.external){let O=_.external.registry.get(j[0])?.id;if($!==j[0]&&O){I(j);continue}}if(_.metadataRegistry.get(j[0])?.id){I(j);continue}if(E.cycle){I(j);continue}if(E.count>1){if(_.reused==="ref"){I(j);continue}}}}function f6(_,$){let g=_.seen.get($);if(!g)throw Error("Unprocessed schema. This is a bug in Zod.");let U=(E)=>{let A=_.seen.get(E);if(A.ref===null)return;let O=A.def??A.schema,P={...O},W=A.ref;if(A.ref=null,W){U(W);let S=_.seen.get(W),L=S.schema;if(L.$ref&&(_.target==="draft-07"||_.target==="draft-04"||_.target==="openapi-3.0"))O.allOf=O.allOf??[],O.allOf.push(L);else Object.assign(O,L);if(Object.assign(O,P),E._zod.parent===W)for(let R in O){if(R==="$ref"||R==="allOf")continue;if(!(R in P))delete O[R]}if(L.$ref&&S.def)for(let R in O){if(R==="$ref"||R==="allOf")continue;if(R in S.def&&JSON.stringify(O[R])===JSON.stringify(S.def[R]))delete O[R]}}let z=E._zod.parent;if(z&&z!==W){U(z);let S=_.seen.get(z);if(S?.schema.$ref){if(O.$ref=S.schema.$ref,S.def)for(let L in O){if(L==="$ref"||L==="allOf")continue;if(L in S.def&&JSON.stringify(O[L])===JSON.stringify(S.def[L]))delete O[L]}}}_.override({zodSchema:E,jsonSchema:O,path:A.path??[]})};for(let E of[..._.seen.entries()].reverse())U(E[0]);let D={};if(_.target==="draft-2020-12")D.$schema="https://json-schema.org/draft/2020-12/schema";else if(_.target==="draft-07")D.$schema="http://json-schema.org/draft-07/schema#";else if(_.target==="draft-04")D.$schema="http://json-schema.org/draft-04/schema#";else if(_.target==="openapi-3.0");if(_.external?.uri){let E=_.external.registry.get($)?.id;if(!E)throw Error("Schema is missing an `id` property");D.$id=_.external.uri(E)}Object.assign(D,g.def??g.schema);let I=_.metadataRegistry.get($)?.id;if(I!==void 0&&D.id===I)delete D.id;let j=_.external?.defs??{};for(let E of _.seen.entries()){let A=E[1];if(A.def&&A.defId){if(A.def.id===A.defId)delete A.def.id;j[A.defId]=A.def}}if(_.external);else if(Object.keys(j).length>0)if(_.target==="draft-2020-12")D.$defs=j;else D.definitions=j;try{let E=JSON.parse(JSON.stringify(D));return Object.defineProperty(E,"~standard",{value:{...$["~standard"],jsonSchema:{input:f4($,"input",_.processors),output:f4($,"output",_.processors)}},enumerable:!1,writable:!1}),E}catch(E){throw Error("Error converting schema to JSON.")}}function i_(_,$){let g=$??{seen:new Set};if(g.seen.has(_))return!1;g.seen.add(_);let U=_._zod.def;if(U.type==="transform")return!0;if(U.type==="array")return i_(U.element,g);if(U.type==="set")return i_(U.valueType,g);if(U.type==="lazy")return i_(U.getter(),g);if(U.type==="promise"||U.type==="optional"||U.type==="nonoptional"||U.type==="nullable"||U.type==="readonly"||U.type==="default"||U.type==="prefault")return i_(U.innerType,g);if(U.type==="intersection")return i_(U.left,g)||i_(U.right,g);if(U.type==="record"||U.type==="map")return i_(U.keyType,g)||i_(U.valueType,g);if(U.type==="pipe"){if(_._zod.traits.has("$ZodCodec"))return!0;return i_(U.in,g)||i_(U.out,g)}if(U.type==="object"){for(let D in U.shape)if(i_(U.shape[D],g))return!0;return!1}if(U.type==="union"){for(let D of U.options)if(i_(D,g))return!0;return!1}if(U.type==="tuple"){for(let D of U.items)if(i_(D,g))return!0;if(U.rest&&i_(U.rest,g))return!0;return!1}return!1}var tP=(_,$={})=>(g)=>{let U=w6({...g,processors:$});return O_(_,U),u6(U,_),f6(U,_)},f4=(_,$,g={})=>(U)=>{let{libraryOptions:D,target:I}=U??{},j=w6({...D??{},target:I,io:$,processors:g});return O_(_,j),u6(j,_),f6(j,_)};var QD=w(()=>{LD()});function TD(_,$){if("_idmap"in _){let U=_,D=w6({...$,processors:R1}),I={};for(let A of U._idmap.entries()){let[O,P]=A;O_(P,D)}let j={},E={registry:U,uri:$?.uri,defs:I};D.external=E;for(let A of U._idmap.entries()){let[O,P]=A;u6(D,P),j[O]=f6(D,P)}if(Object.keys(I).length>0){let A=D.target==="draft-2020-12"?"$defs":"definitions";j.__shared={[A]:I}}return{schemas:j}}let g=w6({...$,processors:R1});return O_(_,g),u6(g,_),f6(g,_)}var vF,oP=(_,$,g,U)=>{let D=g;D.type="string";let{minimum:I,maximum:j,format:E,patterns:A,contentEncoding:O}=_._zod.bag;if(typeof I==="number")D.minLength=I;if(typeof j==="number")D.maxLength=j;if(E){if(D.format=vF[E]??E,D.format==="")delete D.format;if(E==="time")delete D.format}if(O)D.contentEncoding=O;if(A&&A.size>0){let P=[...A];if(P.length===1)D.pattern=P[0].source;else if(P.length>1)D.allOf=[...P.map((W)=>({...$.target==="draft-07"||$.target==="draft-04"||$.target==="openapi-3.0"?{type:"string"}:{},pattern:W.source}))]}},pP=(_,$,g,U)=>{let D=g,{minimum:I,maximum:j,format:E,multipleOf:A,exclusiveMaximum:O,exclusiveMinimum:P}=_._zod.bag;if(typeof E==="string"&&E.includes("int"))D.type="integer";else D.type="number";let W=typeof P==="number"&&P>=(I??Number.NEGATIVE_INFINITY),z=typeof O==="number"&&O<=(j??Number.POSITIVE_INFINITY),S=$.target==="draft-04"||$.target==="openapi-3.0";if(W)if(S)D.minimum=P,D.exclusiveMinimum=!0;else D.exclusiveMinimum=P;else if(typeof I==="number")D.minimum=I;if(z)if(S)D.maximum=O,D.exclusiveMaximum=!0;else D.exclusiveMaximum=O;else if(typeof j==="number")D.maximum=j;if(typeof A==="number")D.multipleOf=A},eP=(_,$,g,U)=>{g.type="boolean"},aP=(_,$,g,U)=>{if($.unrepresentable==="throw")throw Error("BigInt cannot be represented in JSON Schema")},sP=(_,$,g,U)=>{if($.unrepresentable==="throw")throw Error("Symbols cannot be represented in JSON Schema")},_S=(_,$,g,U)=>{if($.target==="openapi-3.0")g.type="string",g.nullable=!0,g.enum=[null];else g.type="null"},$S=(_,$,g,U)=>{if($.unrepresentable==="throw")throw Error("Undefined cannot be represented in JSON Schema")},gS=(_,$,g,U)=>{if($.unrepresentable==="throw")throw Error("Void cannot be represented in JSON Schema")},DS=(_,$,g,U)=>{g.not={}},US=(_,$,g,U)=>{},IS=(_,$,g,U)=>{},jS=(_,$,g,U)=>{if($.unrepresentable==="throw")throw Error("Date cannot be represented in JSON Schema")},ES=(_,$,g,U)=>{let D=_._zod.def,I=p0(D.entries);if(I.every((j)=>typeof j==="number"))g.type="number";if(I.every((j)=>typeof j==="string"))g.type="string";g.enum=I},NS=(_,$,g,U)=>{let D=_._zod.def,I=[];for(let j of D.values)if(j===void 0){if($.unrepresentable==="throw")throw Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof j==="bigint")if($.unrepresentable==="throw")throw Error("BigInt literals cannot be represented in JSON Schema");else I.push(Number(j));else I.push(j);if(I.length===0);else if(I.length===1){let j=I[0];if(g.type=j===null?"null":typeof j,$.target==="draft-04"||$.target==="openapi-3.0")g.enum=[j];else g.const=j}else{if(I.every((j)=>typeof j==="number"))g.type="number";if(I.every((j)=>typeof j==="string"))g.type="string";if(I.every((j)=>typeof j==="boolean"))g.type="boolean";if(I.every((j)=>j===null))g.type="null";g.enum=I}},AS=(_,$,g,U)=>{if($.unrepresentable==="throw")throw Error("NaN cannot be represented in JSON Schema")},OS=(_,$,g,U)=>{let D=g,I=_._zod.pattern;if(!I)throw Error("Pattern not found in template literal");D.type="string",D.pattern=I.source},PS=(_,$,g,U)=>{let D=g,I={type:"string",format:"binary",contentEncoding:"binary"},{minimum:j,maximum:E,mime:A}=_._zod.bag;if(j!==void 0)I.minLength=j;if(E!==void 0)I.maxLength=E;if(A)if(A.length===1)I.contentMediaType=A[0],Object.assign(D,I);else Object.assign(D,I),D.anyOf=A.map((O)=>({contentMediaType:O}));else Object.assign(D,I)},SS=(_,$,g,U)=>{g.type="boolean"},LS=(_,$,g,U)=>{if($.unrepresentable==="throw")throw Error("Custom types cannot be represented in JSON Schema")},WS=(_,$,g,U)=>{if($.unrepresentable==="throw")throw Error("Function types cannot be represented in JSON Schema")},JS=(_,$,g,U)=>{if($.unrepresentable==="throw")throw Error("Transforms cannot be represented in JSON Schema")},zS=(_,$,g,U)=>{if($.unrepresentable==="throw")throw Error("Map cannot be represented in JSON Schema")},RS=(_,$,g,U)=>{if($.unrepresentable==="throw")throw Error("Set cannot be represented in JSON Schema")},GS=(_,$,g,U)=>{let D=g,I=_._zod.def,{minimum:j,maximum:E}=_._zod.bag;if(typeof j==="number")D.minItems=j;if(typeof E==="number")D.maxItems=E;D.type="array",D.items=O_(I.element,$,{...U,path:[...U.path,"items"]})},XS=(_,$,g,U)=>{let D=g,I=_._zod.def;D.type="object",D.properties={};let j=I.shape;for(let O in j)D.properties[O]=O_(j[O],$,{...U,path:[...U.path,"properties",O]});let E=new Set(Object.keys(j)),A=new Set([...E].filter((O)=>{let P=I.shape[O]._zod;if($.io==="input")return P.optin===void 0;else return P.optout===void 0}));if(A.size>0)D.required=Array.from(A);if(I.catchall?._zod.def.type==="never")D.additionalProperties=!1;else if(!I.catchall){if($.io==="output")D.additionalProperties=!1}else if(I.catchall)D.additionalProperties=O_(I.catchall,$,{...U,path:[...U.path,"additionalProperties"]})},G1=(_,$,g,U)=>{let D=_._zod.def,I=D.inclusive===!1,j=D.options.map((E,A)=>O_(E,$,{...U,path:[...U.path,I?"oneOf":"anyOf",A]}));if(I)g.oneOf=j;else g.anyOf=j},YS=(_,$,g,U)=>{let D=_._zod.def,I=O_(D.left,$,{...U,path:[...U.path,"allOf",0]}),j=O_(D.right,$,{...U,path:[...U.path,"allOf",1]}),E=(O)=>("allOf"in O)&&Object.keys(O).length===1,A=[...E(I)?I.allOf:[I],...E(j)?j.allOf:[j]];g.allOf=A},QS=(_,$,g,U)=>{let D=g,I=_._zod.def;D.type="array";let j=$.target==="draft-2020-12"?"prefixItems":"items",E=$.target==="draft-2020-12"?"items":$.target==="openapi-3.0"?"items":"additionalItems",A=I.items.map((z,S)=>O_(z,$,{...U,path:[...U.path,j,S]})),O=I.rest?O_(I.rest,$,{...U,path:[...U.path,E,...$.target==="openapi-3.0"?[I.items.length]:[]]}):null;if($.target==="draft-2020-12"){if(D.prefixItems=A,O)D.items=O}else if($.target==="openapi-3.0"){if(D.items={anyOf:A},O)D.items.anyOf.push(O);if(D.minItems=A.length,!O)D.maxItems=A.length}else if(D.items=A,O)D.additionalItems=O;let{minimum:P,maximum:W}=_._zod.bag;if(typeof P==="number")D.minItems=P;if(typeof W==="number")D.maxItems=W},TS=(_,$,g,U)=>{let D=g,I=_._zod.def;D.type="object";let j=I.keyType,A=j._zod.bag?.patterns;if(I.mode==="loose"&&A&&A.size>0){let P=O_(I.valueType,$,{...U,path:[...U.path,"patternProperties","*"]});D.patternProperties={};for(let W of A)D.patternProperties[W.source]=P}else{if($.target==="draft-07"||$.target==="draft-2020-12")D.propertyNames=O_(I.keyType,$,{...U,path:[...U.path,"propertyNames"]});D.additionalProperties=O_(I.valueType,$,{...U,path:[...U.path,"additionalProperties"]})}let O=j._zod.values;if(O){let P=[...O].filter((W)=>typeof W==="string"||typeof W==="number");if(P.length>0)D.required=P}},KS=(_,$,g,U)=>{let D=_._zod.def,I=O_(D.innerType,$,U),j=$.seen.get(_);if($.target==="openapi-3.0")j.ref=D.innerType,g.nullable=!0;else g.anyOf=[I,{type:"null"}]},qS=(_,$,g,U)=>{let D=_._zod.def;O_(D.innerType,$,U);let I=$.seen.get(_);I.ref=D.innerType},BS=(_,$,g,U)=>{let D=_._zod.def;O_(D.innerType,$,U);let I=$.seen.get(_);I.ref=D.innerType,g.default=JSON.parse(JSON.stringify(D.defaultValue))},VS=(_,$,g,U)=>{let D=_._zod.def;O_(D.innerType,$,U);let I=$.seen.get(_);if(I.ref=D.innerType,$.io==="input")g._prefault=JSON.parse(JSON.stringify(D.defaultValue))},FS=(_,$,g,U)=>{let D=_._zod.def;O_(D.innerType,$,U);let I=$.seen.get(_);I.ref=D.innerType;let j;try{j=D.catchValue(void 0)}catch{throw Error("Dynamic catch values are not supported in JSON Schema")}g.default=j},rS=(_,$,g,U)=>{let D=_._zod.def,I=D.in._zod.traits.has("$ZodTransform"),j=$.io==="input"?I?D.out:D.in:D.out;O_(j,$,U);let E=$.seen.get(_);E.ref=j},bS=(_,$,g,U)=>{let D=_._zod.def;O_(D.innerType,$,U);let I=$.seen.get(_);I.ref=D.innerType,g.readOnly=!0},MS=(_,$,g,U)=>{let D=_._zod.def;O_(D.innerType,$,U);let I=$.seen.get(_);I.ref=D.innerType},X1=(_,$,g,U)=>{let D=_._zod.def;O_(D.innerType,$,U);let I=$.seen.get(_);I.ref=D.innerType},ZS=(_,$,g,U)=>{let D=_._zod.innerType;O_(D,$,U);let I=$.seen.get(_);I.ref=D},R1;var KD=w(()=>{QD();h();vF={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},R1={string:oP,number:pP,boolean:eP,bigint:aP,symbol:sP,null:_S,undefined:$S,void:gS,never:DS,any:US,unknown:IS,date:jS,enum:ES,literal:NS,nan:AS,template_literal:OS,file:PS,success:SS,custom:LS,function:WS,transform:JS,map:zS,set:RS,array:GS,object:XS,union:G1,intersection:YS,tuple:QS,record:TS,nullable:KS,nonoptional:qS,default:BS,prefault:VS,catch:FS,pipe:rS,readonly:bS,promise:MS,optional:X1,lazy:ZS}});class HS{get metadataRegistry(){return this.ctx.metadataRegistry}get target(){return this.ctx.target}get unrepresentable(){return this.ctx.unrepresentable}get override(){return this.ctx.override}get io(){return this.ctx.io}get counter(){return this.ctx.counter}set counter(_){this.ctx.counter=_}get seen(){return this.ctx.seen}constructor(_){let $=_?.target??"draft-2020-12";if($==="draft-4")$="draft-04";if($==="draft-7")$="draft-07";this.ctx=w6({processors:R1,target:$,..._?.metadata&&{metadata:_.metadata},..._?.unrepresentable&&{unrepresentable:_.unrepresentable},..._?.override&&{override:_.override},..._?.io&&{io:_.io}})}process(_,$={path:[],schemaPath:[]}){return O_(_,this.ctx,$)}emit(_,$){if($){if($.cycles)this.ctx.cycles=$.cycles;if($.reused)this.ctx.reused=$.reused;if($.external)this.ctx.external=$.external}u6(this.ctx,_);let g=f6(this.ctx,_),{"~standard":U,...D}=g;return D}}var NX=w(()=>{KD();QD()});var AX={};var OX=()=>{};var y$={};k$(y$,{version:()=>e2,util:()=>Z,treeifyError:()=>QI,toJSONSchema:()=>TD,toDotPath:()=>CR,safeParseAsync:()=>g2,safeParse:()=>$2,safeEncodeAsync:()=>fB,safeEncode:()=>wB,safeDecodeAsync:()=>xB,safeDecode:()=>uB,registry:()=>SD,regexes:()=>s_,process:()=>O_,prettifyError:()=>TI,parseAsync:()=>qI,parse:()=>KI,meta:()=>iP,locales:()=>w4,isValidJWT:()=>gG,isValidBase64URL:()=>$G,isValidBase64:()=>YA,initializeContext:()=>w6,globalRegistry:()=>v_,globalConfig:()=>Pg,formatError:()=>b4,flattenError:()=>r4,finalize:()=>f6,extractDefs:()=>u6,encodeAsync:()=>CB,encode:()=>HB,describe:()=>mP,decodeAsync:()=>vB,decode:()=>kB,createToJSONSchemaMethod:()=>tP,createStandardJSONSchemaMethod:()=>f4,config:()=>F_,clone:()=>f_,_xor:()=>LF,_xid:()=>j1,_void:()=>wP,_uuidv7:()=>_1,_uuidv6:()=>sI,_uuidv4:()=>aI,_uuid:()=>eI,_url:()=>JD,_uppercase:()=>Xg,_unknown:()=>CP,_union:()=>SF,_undefined:()=>ZP,_ulid:()=>I1,_uint64:()=>bP,_uint32:()=>KP,_tuple:()=>zF,_trim:()=>Bg,_transform:()=>KF,_toUpperCase:()=>Fg,_toLowerCase:()=>Vg,_templateLiteral:()=>HF,_symbol:()=>MP,_superRefine:()=>dP,_success:()=>rF,_stringbool:()=>lP,_stringFormat:()=>u4,_string:()=>OP,_startsWith:()=>Qg,_slugify:()=>rg,_size:()=>k6,_set:()=>XF,_safeParseAsync:()=>k4,_safeParse:()=>H4,_safeEncodeAsync:()=>ZI,_safeEncode:()=>bI,_safeDecodeAsync:()=>HI,_safeDecode:()=>MI,_regex:()=>Rg,_refine:()=>nP,_record:()=>RF,_readonly:()=>ZF,_property:()=>YD,_promise:()=>CF,_positive:()=>zD,_pipe:()=>MF,_parseAsync:()=>Z4,_parse:()=>M4,_overwrite:()=>L$,_optional:()=>qF,_number:()=>RP,_nullable:()=>BF,_null:()=>HP,_normalize:()=>qg,_nonpositive:()=>GD,_nonoptional:()=>FF,_nonnegative:()=>XD,_never:()=>vP,_negative:()=>RD,_nativeEnum:()=>QF,_nanoid:()=>g1,_nan:()=>xP,_multipleOf:()=>j6,_minSize:()=>T$,_minLength:()=>x$,_min:()=>x_,_mime:()=>Kg,_maxSize:()=>E6,_maxLength:()=>C6,_max:()=>_$,_map:()=>GF,_mac:()=>SP,_lte:()=>_$,_lt:()=>Y$,_lowercase:()=>Gg,_literal:()=>TF,_length:()=>v6,_lazy:()=>kF,_ksuid:()=>E1,_jwt:()=>J1,_isoTime:()=>JP,_isoDuration:()=>zP,_isoDateTime:()=>LP,_isoDate:()=>WP,_ipv6:()=>A1,_ipv4:()=>N1,_intersection:()=>JF,_int64:()=>rP,_int32:()=>TP,_int:()=>XP,_includes:()=>Yg,_guid:()=>WD,_gte:()=>x_,_gt:()=>Q$,_float64:()=>QP,_float32:()=>YP,_file:()=>cP,_enum:()=>YF,_endsWith:()=>Tg,_encodeAsync:()=>FI,_encode:()=>BI,_emoji:()=>$1,_email:()=>pI,_e164:()=>W1,_discriminatedUnion:()=>WF,_default:()=>VF,_decodeAsync:()=>rI,_decode:()=>VI,_date:()=>uP,_custom:()=>hP,_cuid2:()=>U1,_cuid:()=>D1,_coercedString:()=>PP,_coercedNumber:()=>GP,_coercedDate:()=>fP,_coercedBoolean:()=>BP,_coercedBigint:()=>FP,_cidrv6:()=>P1,_cidrv4:()=>O1,_check:()=>jX,_catch:()=>bF,_boolean:()=>qP,_bigint:()=>VP,_base64url:()=>L1,_base64:()=>S1,_array:()=>yP,_any:()=>kP,TimePrecision:()=>z1,NEVER:()=>RI,JSONSchemaGenerator:()=>HS,JSONSchema:()=>AX,Doc:()=>fI,$output:()=>tI,$input:()=>oI,$constructor:()=>Y,$brand:()=>GI,$ZodXor:()=>fA,$ZodXID:()=>AA,$ZodVoid:()=>CA,$ZodUnknown:()=>HA,$ZodUnion:()=>jD,$ZodUndefined:()=>bA,$ZodUUID:()=>$A,$ZodURL:()=>DA,$ZodULID:()=>NA,$ZodType:()=>l,$ZodTuple:()=>mI,$ZodTransform:()=>lA,$ZodTemplateLiteral:()=>UO,$ZodSymbol:()=>rA,$ZodSuccess:()=>sA,$ZodStringFormat:()=>R_,$ZodString:()=>zg,$ZodSet:()=>nA,$ZodRegistry:()=>AP,$ZodRecord:()=>cA,$ZodRealError:()=>a_,$ZodReadonly:()=>DO,$ZodPromise:()=>jO,$ZodPreprocess:()=>gO,$ZodPrefault:()=>eA,$ZodPipe:()=>lI,$ZodOptional:()=>iI,$ZodObjectJIT:()=>uA,$ZodObject:()=>IG,$ZodNumberFormat:()=>VA,$ZodNumber:()=>nI,$ZodNullable:()=>oA,$ZodNull:()=>MA,$ZodNonOptional:()=>aA,$ZodNever:()=>kA,$ZodNanoID:()=>IA,$ZodNaN:()=>$O,$ZodMap:()=>hA,$ZodMAC:()=>RA,$ZodLiteral:()=>mA,$ZodLazy:()=>EO,$ZodKSUID:()=>OA,$ZodJWT:()=>qA,$ZodIntersection:()=>yA,$ZodISOTime:()=>LA,$ZodISODuration:()=>WA,$ZodISODateTime:()=>PA,$ZodISODate:()=>SA,$ZodIPv6:()=>zA,$ZodIPv4:()=>JA,$ZodGUID:()=>_A,$ZodFunction:()=>IO,$ZodFile:()=>iA,$ZodExactOptional:()=>tA,$ZodError:()=>$D,$ZodEnum:()=>dA,$ZodEncodeError:()=>Sg,$ZodEmoji:()=>UA,$ZodEmail:()=>gA,$ZodE164:()=>KA,$ZodDiscriminatedUnion:()=>xA,$ZodDefault:()=>pA,$ZodDate:()=>vA,$ZodCustomStringFormat:()=>BA,$ZodCustom:()=>NO,$ZodCodec:()=>ED,$ZodCheckUpperCase:()=>d2,$ZodCheckStringFormat:()=>C4,$ZodCheckStartsWith:()=>i2,$ZodCheckSizeEquals:()=>f2,$ZodCheckRegex:()=>h2,$ZodCheckProperty:()=>t2,$ZodCheckOverwrite:()=>p2,$ZodCheckNumberFormat:()=>C2,$ZodCheckMultipleOf:()=>k2,$ZodCheckMinSize:()=>u2,$ZodCheckMinLength:()=>y2,$ZodCheckMimeType:()=>o2,$ZodCheckMaxSize:()=>w2,$ZodCheckMaxLength:()=>x2,$ZodCheckLowerCase:()=>n2,$ZodCheckLessThan:()=>vI,$ZodCheckLengthEquals:()=>c2,$ZodCheckIncludes:()=>m2,$ZodCheckGreaterThan:()=>wI,$ZodCheckEndsWith:()=>l2,$ZodCheckBigIntFormat:()=>v2,$ZodCheck:()=>G_,$ZodCatch:()=>_O,$ZodCUID2:()=>EA,$ZodCUID:()=>jA,$ZodCIDRv6:()=>XA,$ZodCIDRv4:()=>GA,$ZodBoolean:()=>ID,$ZodBigIntFormat:()=>FA,$ZodBigInt:()=>dI,$ZodBase64URL:()=>TA,$ZodBase64:()=>QA,$ZodAsyncError:()=>f$,$ZodArray:()=>wA,$ZodAny:()=>ZA});var j$=w(()=>{h();CI();NP();KD();NX();OX();Lg();D2();_2();AO();uI();a2();LD();EX();QD()});var Y1={};k$(Y1,{uppercase:()=>Xg,trim:()=>Bg,toUpperCase:()=>Fg,toLowerCase:()=>Vg,startsWith:()=>Qg,slugify:()=>rg,size:()=>k6,regex:()=>Rg,property:()=>YD,positive:()=>zD,overwrite:()=>L$,normalize:()=>qg,nonpositive:()=>GD,nonnegative:()=>XD,negative:()=>RD,multipleOf:()=>j6,minSize:()=>T$,minLength:()=>x$,mime:()=>Kg,maxSize:()=>E6,maxLength:()=>C6,lte:()=>_$,lt:()=>Y$,lowercase:()=>Gg,length:()=>v6,includes:()=>Yg,gte:()=>x_,gt:()=>Q$,endsWith:()=>Tg});var Q1=w(()=>{j$()});var bg={};k$(bg,{time:()=>vS,duration:()=>wS,datetime:()=>kS,date:()=>CS,ZodISOTime:()=>VD,ZodISODuration:()=>FD,ZodISODateTime:()=>qD,ZodISODate:()=>BD});function kS(_){return LP(qD,_)}function CS(_){return WP(BD,_)}function vS(_){return JP(VD,_)}function wS(_){return zP(FD,_)}var qD,BD,VD,FD;var rD=w(()=>{j$();MD();qD=Y("ZodISODateTime",(_,$)=>{PA.init(_,$),L_.init(_,$)});BD=Y("ZodISODate",(_,$)=>{SA.init(_,$),L_.init(_,$)});VD=Y("ZodISOTime",(_,$)=>{LA.init(_,$),L_.init(_,$)});FD=Y("ZodISODuration",(_,$)=>{WA.init(_,$),L_.init(_,$)})});var PX=(_,$)=>{$D.init(_,$),_.name="ZodError",Object.defineProperties(_,{format:{value:(g)=>b4(_,g)},flatten:{value:(g)=>r4(_,g)},addIssue:{value:(g)=>{_.issues.push(g),_.message=JSON.stringify(_.issues,B4,2)}},addIssues:{value:(g)=>{_.issues.push(...g),_.message=JSON.stringify(_.issues,B4,2)}},isEmpty:{get(){return _.issues.length===0}}})},SX,l_;var uS=w(()=>{j$();j$();h();SX=Y("ZodError",PX),l_=Y("ZodError",PX,{Parent:Error})});var T1,K1,q1,B1,V1,F1,r1,b1,M1,Z1,H1,k1;var fS=w(()=>{j$();uS();T1=M4(l_),K1=Z4(l_),q1=H4(l_),B1=k4(l_),V1=BI(l_),F1=VI(l_),r1=FI(l_),b1=rI(l_),M1=bI(l_),Z1=MI(l_),H1=ZI(l_),k1=HI(l_)});var bD={};k$(bD,{xor:()=>bL,xid:()=>aS,void:()=>KL,uuidv7:()=>dS,uuidv6:()=>nS,uuidv4:()=>hS,uuid:()=>cS,url:()=>mS,unknown:()=>x6,union:()=>sD,undefined:()=>QL,ulid:()=>eS,uint64:()=>XL,uint32:()=>zL,tuple:()=>e1,transform:()=>$U,templateLiteral:()=>nL,symbol:()=>YL,superRefine:()=>Bj,success:()=>xL,stringbool:()=>eL,stringFormat:()=>AL,string:()=>x4,strictObject:()=>FL,set:()=>CL,refine:()=>qj,record:()=>a1,readonly:()=>Gj,promise:()=>dL,preprocess:()=>sL,prefault:()=>Oj,pipe:()=>HD,partialRecord:()=>ZL,optional:()=>c4,object:()=>VL,number:()=>v1,nullish:()=>fL,nullable:()=>h4,null:()=>y1,nonoptional:()=>Pj,never:()=>aD,nativeEnum:()=>vL,nanoid:()=>tS,nan:()=>yL,meta:()=>oL,map:()=>kL,mac:()=>$L,looseRecord:()=>HL,looseObject:()=>rL,literal:()=>wL,lazy:()=>Qj,ksuid:()=>sS,keyof:()=>BL,jwt:()=>NL,json:()=>aL,ipv6:()=>gL,ipv4:()=>_L,invertCodec:()=>hL,intersection:()=>o1,int64:()=>GL,int32:()=>JL,int:()=>ZD,instanceof:()=>pL,httpUrl:()=>iS,hostname:()=>OL,hex:()=>PL,hash:()=>SL,guid:()=>yS,function:()=>mL,float64:()=>WL,float32:()=>LL,file:()=>uL,exactOptional:()=>Ij,enum:()=>_U,emoji:()=>lS,email:()=>xS,e164:()=>EL,discriminatedUnion:()=>ML,describe:()=>tL,date:()=>qL,custom:()=>lL,cuid2:()=>pS,cuid:()=>oS,codec:()=>cL,cidrv6:()=>UL,cidrv4:()=>DL,check:()=>iL,catch:()=>Wj,boolean:()=>w1,bigint:()=>RL,base64url:()=>jL,base64:()=>IL,array:()=>m4,any:()=>TL,_function:()=>mL,_default:()=>Nj,_ZodString:()=>CD,ZodXor:()=>i1,ZodXID:()=>cD,ZodVoid:()=>d1,ZodUnknown:()=>h1,ZodUnion:()=>l4,ZodUndefined:()=>f1,ZodUUID:()=>K$,ZodURL:()=>n4,ZodULID:()=>yD,ZodType:()=>e,ZodTuple:()=>p1,ZodTransform:()=>Dj,ZodTemplateLiteral:()=>Xj,ZodSymbol:()=>u1,ZodSuccess:()=>Sj,ZodStringFormat:()=>L_,ZodString:()=>Hg,ZodSet:()=>_j,ZodRecord:()=>Mg,ZodReadonly:()=>Rj,ZodPromise:()=>Tj,ZodPreprocess:()=>zj,ZodPrefault:()=>Aj,ZodPipe:()=>t4,ZodOptional:()=>gU,ZodObject:()=>i4,ZodNumberFormat:()=>y6,ZodNumber:()=>Cg,ZodNullable:()=>jj,ZodNull:()=>x1,ZodNonOptional:()=>DU,ZodNever:()=>n1,ZodNanoID:()=>uD,ZodNaN:()=>Jj,ZodMap:()=>s1,ZodMAC:()=>C1,ZodLiteral:()=>$j,ZodLazy:()=>Yj,ZodKSUID:()=>hD,ZodJWT:()=>pD,ZodIntersection:()=>t1,ZodIPv6:()=>dD,ZodIPv4:()=>nD,ZodGUID:()=>y4,ZodFunction:()=>Kj,ZodFile:()=>gj,ZodExactOptional:()=>Uj,ZodEnum:()=>Zg,ZodEmoji:()=>wD,ZodEmail:()=>vD,ZodE164:()=>oD,ZodDiscriminatedUnion:()=>l1,ZodDefault:()=>Ej,ZodDate:()=>d4,ZodCustomStringFormat:()=>kg,ZodCustom:()=>p4,ZodCodec:()=>o4,ZodCatch:()=>Lj,ZodCUID2:()=>xD,ZodCUID:()=>fD,ZodCIDRv6:()=>iD,ZodCIDRv4:()=>mD,ZodBoolean:()=>vg,ZodBigIntFormat:()=>eD,ZodBigInt:()=>wg,ZodBase64URL:()=>tD,ZodBase64:()=>lD,ZodArray:()=>m1,ZodAny:()=>c1});function kD(_,$,g){let U=Object.getPrototypeOf(_),D=LX.get(U);if(!D)D=new Set,LX.set(U,D);if(D.has($))return;D.add($);for(let I in g){let j=g[I];Object.defineProperty(U,I,{configurable:!0,enumerable:!1,get(){let E=j.bind(this);return Object.defineProperty(this,I,{configurable:!0,writable:!0,enumerable:!0,value:E}),E},set(E){Object.defineProperty(this,I,{configurable:!0,writable:!0,enumerable:!0,value:E})}})}}function x4(_){return OP(Hg,_)}function xS(_){return pI(vD,_)}function yS(_){return WD(y4,_)}function cS(_){return eI(K$,_)}function hS(_){return aI(K$,_)}function nS(_){return sI(K$,_)}function dS(_){return _1(K$,_)}function mS(_){return JD(n4,_)}function iS(_){return JD(n4,{protocol:s_.httpProtocol,hostname:s_.domain,...Z.normalizeParams(_)})}function lS(_){return $1(wD,_)}function tS(_){return g1(uD,_)}function oS(_){return D1(fD,_)}function pS(_){return U1(xD,_)}function eS(_){return I1(yD,_)}function aS(_){return j1(cD,_)}function sS(_){return E1(hD,_)}function _L(_){return N1(nD,_)}function $L(_){return SP(C1,_)}function gL(_){return A1(dD,_)}function DL(_){return O1(mD,_)}function UL(_){return P1(iD,_)}function IL(_){return S1(lD,_)}function jL(_){return L1(tD,_)}function EL(_){return W1(oD,_)}function NL(_){return J1(pD,_)}function AL(_,$,g={}){return u4(kg,_,$,g)}function OL(_){return u4(kg,"hostname",s_.hostname,_)}function PL(_){return u4(kg,"hex",s_.hex,_)}function SL(_,$){let g=$?.enc??"hex",U=`${_}_${g}`,D=s_[U];if(!D)throw Error(`Unrecognized hash format: ${U}`);return u4(kg,U,D,$)}function v1(_){return RP(Cg,_)}function ZD(_){return XP(y6,_)}function LL(_){return YP(y6,_)}function WL(_){return QP(y6,_)}function JL(_){return TP(y6,_)}function zL(_){return KP(y6,_)}function w1(_){return qP(vg,_)}function RL(_){return VP(wg,_)}function GL(_){return rP(eD,_)}function XL(_){return bP(eD,_)}function YL(_){return MP(u1,_)}function QL(_){return ZP(f1,_)}function y1(_){return HP(x1,_)}function TL(){return kP(c1)}function x6(){return CP(h1)}function aD(_){return vP(n1,_)}function KL(_){return wP(d1,_)}function qL(_){return uP(d4,_)}function m4(_,$){return yP(m1,_,$)}function BL(_){let $=_._zod.def.shape;return _U(Object.keys($))}function VL(_,$){let g={type:"object",shape:_??{},...Z.normalizeParams($)};return new i4(g)}function FL(_,$){return new i4({type:"object",shape:_,catchall:aD(),...Z.normalizeParams($)})}function rL(_,$){return new i4({type:"object",shape:_,catchall:x6(),...Z.normalizeParams($)})}function sD(_,$){return new l4({type:"union",options:_,...Z.normalizeParams($)})}function bL(_,$){return new i1({type:"union",options:_,inclusive:!1,...Z.normalizeParams($)})}function ML(_,$,g){return new l1({type:"union",options:$,discriminator:_,...Z.normalizeParams(g)})}function o1(_,$){return new t1({type:"intersection",left:_,right:$})}function e1(_,$,g){let U=$ instanceof l,D=U?g:$;return new p1({type:"tuple",items:_,rest:U?$:null,...Z.normalizeParams(D)})}function a1(_,$,g){if(!$||!$._zod)return new Mg({type:"record",keyType:x4(),valueType:_,...Z.normalizeParams($)});return new Mg({type:"record",keyType:_,valueType:$,...Z.normalizeParams(g)})}function ZL(_,$,g){let U=f_(_);return U._zod.values=void 0,new Mg({type:"record",keyType:U,valueType:$,...Z.normalizeParams(g)})}function HL(_,$,g){return new Mg({type:"record",keyType:_,valueType:$,mode:"loose",...Z.normalizeParams(g)})}function kL(_,$,g){return new s1({type:"map",keyType:_,valueType:$,...Z.normalizeParams(g)})}function CL(_,$){return new _j({type:"set",valueType:_,...Z.normalizeParams($)})}function _U(_,$){let g=Array.isArray(_)?Object.fromEntries(_.map((U)=>[U,U])):_;return new Zg({type:"enum",entries:g,...Z.normalizeParams($)})}function vL(_,$){return new Zg({type:"enum",entries:_,...Z.normalizeParams($)})}function wL(_,$){return new $j({type:"literal",values:Array.isArray(_)?_:[_],...Z.normalizeParams($)})}function uL(_){return cP(gj,_)}function $U(_){return new Dj({type:"transform",transform:_})}function c4(_){return new gU({type:"optional",innerType:_})}function Ij(_){return new Uj({type:"optional",innerType:_})}function h4(_){return new jj({type:"nullable",innerType:_})}function fL(_){return c4(h4(_))}function Nj(_,$){return new Ej({type:"default",innerType:_,get defaultValue(){return typeof $==="function"?$():Z.shallowClone($)}})}function Oj(_,$){return new Aj({type:"prefault",innerType:_,get defaultValue(){return typeof $==="function"?$():Z.shallowClone($)}})}function Pj(_,$){return new DU({type:"nonoptional",innerType:_,...Z.normalizeParams($)})}function xL(_){return new Sj({type:"success",innerType:_})}function Wj(_,$){return new Lj({type:"catch",innerType:_,catchValue:typeof $==="function"?$:()=>$})}function yL(_){return xP(Jj,_)}function HD(_,$){return new t4({type:"pipe",in:_,out:$})}function cL(_,$,g){return new o4({type:"pipe",in:_,out:$,transform:g.decode,reverseTransform:g.encode})}function hL(_){let $=_._zod.def;return new o4({type:"pipe",in:$.out,out:$.in,transform:$.reverseTransform,reverseTransform:$.transform})}function Gj(_){return new Rj({type:"readonly",innerType:_})}function nL(_,$){return new Xj({type:"template_literal",parts:_,...Z.normalizeParams($)})}function Qj(_){return new Yj({type:"lazy",getter:_})}function dL(_){return new Tj({type:"promise",innerType:_})}function mL(_){return new Kj({type:"function",input:Array.isArray(_?.input)?e1(_?.input):_?.input??m4(x6()),output:_?.output??x6()})}function iL(_){let $=new G_({check:"custom"});return $._zod.check=_,$}function lL(_,$){return hP(p4,_??(()=>!0),$)}function qj(_,$={}){return nP(p4,_,$)}function Bj(_,$){return dP(_,$)}function pL(_,$={}){let g=new p4({type:"custom",check:"custom",fn:(U)=>U instanceof _,abort:!0,...Z.normalizeParams($)});return g._zod.bag.Class=_,g._zod.check=(U)=>{if(!(U.value instanceof _))U.issues.push({code:"invalid_type",expected:_.name,input:U.value,inst:g,path:[...g._zod.def.path??[]]})},g}function aL(_){let $=Qj(()=>{return sD([x4(_),v1(),w1(),y1(),m4($),a1(x4(),$)])});return $}function sL(_,$){return new zj({type:"pipe",in:$U(_),out:$})}var LX,e,CD,Hg,L_,vD,y4,K$,n4,wD,uD,fD,xD,yD,cD,hD,nD,C1,dD,mD,iD,lD,tD,oD,pD,kg,Cg,y6,vg,wg,eD,u1,f1,x1,c1,h1,n1,d1,d4,m1,i4,l4,i1,l1,t1,p1,Mg,s1,_j,Zg,$j,gj,Dj,gU,Uj,jj,Ej,Aj,DU,Sj,Lj,Jj,t4,o4,zj,Rj,Xj,Yj,Tj,Kj,p4,tL,oL,eL=(..._)=>lP({Codec:o4,Boolean:vg,String:Hg},..._);var MD=w(()=>{j$();j$();KD();QD();Q1();rD();fS();LX=new WeakMap;e=Y("ZodType",(_,$)=>{return l.init(_,$),Object.assign(_["~standard"],{jsonSchema:{input:f4(_,"input"),output:f4(_,"output")}}),_.toJSONSchema=tP(_,{}),_.def=$,_.type=$.type,Object.defineProperty(_,"_def",{value:$}),_.parse=(g,U)=>T1(_,g,U,{callee:_.parse}),_.safeParse=(g,U)=>q1(_,g,U),_.parseAsync=async(g,U)=>K1(_,g,U,{callee:_.parseAsync}),_.safeParseAsync=async(g,U)=>B1(_,g,U),_.spa=_.safeParseAsync,_.encode=(g,U)=>V1(_,g,U),_.decode=(g,U)=>F1(_,g,U),_.encodeAsync=async(g,U)=>r1(_,g,U),_.decodeAsync=async(g,U)=>b1(_,g,U),_.safeEncode=(g,U)=>M1(_,g,U),_.safeDecode=(g,U)=>Z1(_,g,U),_.safeEncodeAsync=async(g,U)=>H1(_,g,U),_.safeDecodeAsync=async(g,U)=>k1(_,g,U),kD(_,"ZodType",{check(...g){let U=this.def;return this.clone(Z.mergeDefs(U,{checks:[...U.checks??[],...g.map((D)=>typeof D==="function"?{_zod:{check:D,def:{check:"custom"},onattach:[]}}:D)]}),{parent:!0})},with(...g){return this.check(...g)},clone(g,U){return f_(this,g,U)},brand(){return this},register(g,U){return g.add(this,U),this},refine(g,U){return this.check(qj(g,U))},superRefine(g,U){return this.check(Bj(g,U))},overwrite(g){return this.check(L$(g))},optional(){return c4(this)},exactOptional(){return Ij(this)},nullable(){return h4(this)},nullish(){return c4(h4(this))},nonoptional(g){return Pj(this,g)},array(){return m4(this)},or(g){return sD([this,g])},and(g){return o1(this,g)},transform(g){return HD(this,$U(g))},default(g){return Nj(this,g)},prefault(g){return Oj(this,g)},catch(g){return Wj(this,g)},pipe(g){return HD(this,g)},readonly(){return Gj(this)},describe(g){let U=this.clone();return v_.add(U,{description:g}),U},meta(...g){if(g.length===0)return v_.get(this);let U=this.clone();return v_.add(U,g[0]),U},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(g){return g(this)}}),Object.defineProperty(_,"description",{get(){return v_.get(_)?.description},configurable:!0}),_}),CD=Y("_ZodString",(_,$)=>{zg.init(_,$),e.init(_,$),_._zod.processJSONSchema=(U,D,I)=>oP(_,U,D,I);let g=_._zod.bag;_.format=g.format??null,_.minLength=g.minimum??null,_.maxLength=g.maximum??null,kD(_,"_ZodString",{regex(...U){return this.check(Rg(...U))},includes(...U){return this.check(Yg(...U))},startsWith(...U){return this.check(Qg(...U))},endsWith(...U){return this.check(Tg(...U))},min(...U){return this.check(x$(...U))},max(...U){return this.check(C6(...U))},length(...U){return this.check(v6(...U))},nonempty(...U){return this.check(x$(1,...U))},lowercase(U){return this.check(Gg(U))},uppercase(U){return this.check(Xg(U))},trim(){return this.check(Bg())},normalize(...U){return this.check(qg(...U))},toLowerCase(){return this.check(Vg())},toUpperCase(){return this.check(Fg())},slugify(){return this.check(rg())}})}),Hg=Y("ZodString",(_,$)=>{zg.init(_,$),CD.init(_,$),_.email=(g)=>_.check(pI(vD,g)),_.url=(g)=>_.check(JD(n4,g)),_.jwt=(g)=>_.check(J1(pD,g)),_.emoji=(g)=>_.check($1(wD,g)),_.guid=(g)=>_.check(WD(y4,g)),_.uuid=(g)=>_.check(eI(K$,g)),_.uuidv4=(g)=>_.check(aI(K$,g)),_.uuidv6=(g)=>_.check(sI(K$,g)),_.uuidv7=(g)=>_.check(_1(K$,g)),_.nanoid=(g)=>_.check(g1(uD,g)),_.guid=(g)=>_.check(WD(y4,g)),_.cuid=(g)=>_.check(D1(fD,g)),_.cuid2=(g)=>_.check(U1(xD,g)),_.ulid=(g)=>_.check(I1(yD,g)),_.base64=(g)=>_.check(S1(lD,g)),_.base64url=(g)=>_.check(L1(tD,g)),_.xid=(g)=>_.check(j1(cD,g)),_.ksuid=(g)=>_.check(E1(hD,g)),_.ipv4=(g)=>_.check(N1(nD,g)),_.ipv6=(g)=>_.check(A1(dD,g)),_.cidrv4=(g)=>_.check(O1(mD,g)),_.cidrv6=(g)=>_.check(P1(iD,g)),_.e164=(g)=>_.check(W1(oD,g)),_.datetime=(g)=>_.check(kS(g)),_.date=(g)=>_.check(CS(g)),_.time=(g)=>_.check(vS(g)),_.duration=(g)=>_.check(wS(g))});L_=Y("ZodStringFormat",(_,$)=>{R_.init(_,$),CD.init(_,$)}),vD=Y("ZodEmail",(_,$)=>{gA.init(_,$),L_.init(_,$)});y4=Y("ZodGUID",(_,$)=>{_A.init(_,$),L_.init(_,$)});K$=Y("ZodUUID",(_,$)=>{$A.init(_,$),L_.init(_,$)});n4=Y("ZodURL",(_,$)=>{DA.init(_,$),L_.init(_,$)});wD=Y("ZodEmoji",(_,$)=>{UA.init(_,$),L_.init(_,$)});uD=Y("ZodNanoID",(_,$)=>{IA.init(_,$),L_.init(_,$)});fD=Y("ZodCUID",(_,$)=>{jA.init(_,$),L_.init(_,$)});xD=Y("ZodCUID2",(_,$)=>{EA.init(_,$),L_.init(_,$)});yD=Y("ZodULID",(_,$)=>{NA.init(_,$),L_.init(_,$)});cD=Y("ZodXID",(_,$)=>{AA.init(_,$),L_.init(_,$)});hD=Y("ZodKSUID",(_,$)=>{OA.init(_,$),L_.init(_,$)});nD=Y("ZodIPv4",(_,$)=>{JA.init(_,$),L_.init(_,$)});C1=Y("ZodMAC",(_,$)=>{RA.init(_,$),L_.init(_,$)});dD=Y("ZodIPv6",(_,$)=>{zA.init(_,$),L_.init(_,$)});mD=Y("ZodCIDRv4",(_,$)=>{GA.init(_,$),L_.init(_,$)});iD=Y("ZodCIDRv6",(_,$)=>{XA.init(_,$),L_.init(_,$)});lD=Y("ZodBase64",(_,$)=>{QA.init(_,$),L_.init(_,$)});tD=Y("ZodBase64URL",(_,$)=>{TA.init(_,$),L_.init(_,$)});oD=Y("ZodE164",(_,$)=>{KA.init(_,$),L_.init(_,$)});pD=Y("ZodJWT",(_,$)=>{qA.init(_,$),L_.init(_,$)});kg=Y("ZodCustomStringFormat",(_,$)=>{BA.init(_,$),L_.init(_,$)});Cg=Y("ZodNumber",(_,$)=>{nI.init(_,$),e.init(_,$),_._zod.processJSONSchema=(U,D,I)=>pP(_,U,D,I),kD(_,"ZodNumber",{gt(U,D){return this.check(Q$(U,D))},gte(U,D){return this.check(x_(U,D))},min(U,D){return this.check(x_(U,D))},lt(U,D){return this.check(Y$(U,D))},lte(U,D){return this.check(_$(U,D))},max(U,D){return this.check(_$(U,D))},int(U){return this.check(ZD(U))},safe(U){return this.check(ZD(U))},positive(U){return this.check(Q$(0,U))},nonnegative(U){return this.check(x_(0,U))},negative(U){return this.check(Y$(0,U))},nonpositive(U){return this.check(_$(0,U))},multipleOf(U,D){return this.check(j6(U,D))},step(U,D){return this.check(j6(U,D))},finite(){return this}});let g=_._zod.bag;_.minValue=Math.max(g.minimum??Number.NEGATIVE_INFINITY,g.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,_.maxValue=Math.min(g.maximum??Number.POSITIVE_INFINITY,g.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,_.isInt=(g.format??"").includes("int")||Number.isSafeInteger(g.multipleOf??0.5),_.isFinite=!0,_.format=g.format??null});y6=Y("ZodNumberFormat",(_,$)=>{VA.init(_,$),Cg.init(_,$)});vg=Y("ZodBoolean",(_,$)=>{ID.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>eP(_,g,U,D)});wg=Y("ZodBigInt",(_,$)=>{dI.init(_,$),e.init(_,$),_._zod.processJSONSchema=(U,D,I)=>aP(_,U,D,I),_.gte=(U,D)=>_.check(x_(U,D)),_.min=(U,D)=>_.check(x_(U,D)),_.gt=(U,D)=>_.check(Q$(U,D)),_.gte=(U,D)=>_.check(x_(U,D)),_.min=(U,D)=>_.check(x_(U,D)),_.lt=(U,D)=>_.check(Y$(U,D)),_.lte=(U,D)=>_.check(_$(U,D)),_.max=(U,D)=>_.check(_$(U,D)),_.positive=(U)=>_.check(Q$(BigInt(0),U)),_.negative=(U)=>_.check(Y$(BigInt(0),U)),_.nonpositive=(U)=>_.check(_$(BigInt(0),U)),_.nonnegative=(U)=>_.check(x_(BigInt(0),U)),_.multipleOf=(U,D)=>_.check(j6(U,D));let g=_._zod.bag;_.minValue=g.minimum??null,_.maxValue=g.maximum??null,_.format=g.format??null});eD=Y("ZodBigIntFormat",(_,$)=>{FA.init(_,$),wg.init(_,$)});u1=Y("ZodSymbol",(_,$)=>{rA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>sP(_,g,U,D)});f1=Y("ZodUndefined",(_,$)=>{bA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>$S(_,g,U,D)});x1=Y("ZodNull",(_,$)=>{MA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>_S(_,g,U,D)});c1=Y("ZodAny",(_,$)=>{ZA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>US(_,g,U,D)});h1=Y("ZodUnknown",(_,$)=>{HA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>IS(_,g,U,D)});n1=Y("ZodNever",(_,$)=>{kA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>DS(_,g,U,D)});d1=Y("ZodVoid",(_,$)=>{CA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>gS(_,g,U,D)});d4=Y("ZodDate",(_,$)=>{vA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(U,D,I)=>jS(_,U,D,I),_.min=(U,D)=>_.check(x_(U,D)),_.max=(U,D)=>_.check(_$(U,D));let g=_._zod.bag;_.minDate=g.minimum?new Date(g.minimum):null,_.maxDate=g.maximum?new Date(g.maximum):null});m1=Y("ZodArray",(_,$)=>{wA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>GS(_,g,U,D),_.element=$.element,kD(_,"ZodArray",{min(g,U){return this.check(x$(g,U))},nonempty(g){return this.check(x$(1,g))},max(g,U){return this.check(C6(g,U))},length(g,U){return this.check(v6(g,U))},unwrap(){return this.element}})});i4=Y("ZodObject",(_,$)=>{uA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>XS(_,g,U,D),Z.defineLazy(_,"shape",()=>{return $.shape}),kD(_,"ZodObject",{keyof(){return _U(Object.keys(this._zod.def.shape))},catchall(g){return this.clone({...this._zod.def,catchall:g})},passthrough(){return this.clone({...this._zod.def,catchall:x6()})},loose(){return this.clone({...this._zod.def,catchall:x6()})},strict(){return this.clone({...this._zod.def,catchall:aD()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(g){return Z.extend(this,g)},safeExtend(g){return Z.safeExtend(this,g)},merge(g){return Z.merge(this,g)},pick(g){return Z.pick(this,g)},omit(g){return Z.omit(this,g)},partial(...g){return Z.partial(gU,this,g[0])},required(...g){return Z.required(DU,this,g[0])}})});l4=Y("ZodUnion",(_,$)=>{jD.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>G1(_,g,U,D),_.options=$.options});i1=Y("ZodXor",(_,$)=>{l4.init(_,$),fA.init(_,$),_._zod.processJSONSchema=(g,U,D)=>G1(_,g,U,D),_.options=$.options});l1=Y("ZodDiscriminatedUnion",(_,$)=>{l4.init(_,$),xA.init(_,$)});t1=Y("ZodIntersection",(_,$)=>{yA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>YS(_,g,U,D)});p1=Y("ZodTuple",(_,$)=>{mI.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>QS(_,g,U,D),_.rest=(g)=>_.clone({..._._zod.def,rest:g})});Mg=Y("ZodRecord",(_,$)=>{cA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>TS(_,g,U,D),_.keyType=$.keyType,_.valueType=$.valueType});s1=Y("ZodMap",(_,$)=>{hA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>zS(_,g,U,D),_.keyType=$.keyType,_.valueType=$.valueType,_.min=(...g)=>_.check(T$(...g)),_.nonempty=(g)=>_.check(T$(1,g)),_.max=(...g)=>_.check(E6(...g)),_.size=(...g)=>_.check(k6(...g))});_j=Y("ZodSet",(_,$)=>{nA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>RS(_,g,U,D),_.min=(...g)=>_.check(T$(...g)),_.nonempty=(g)=>_.check(T$(1,g)),_.max=(...g)=>_.check(E6(...g)),_.size=(...g)=>_.check(k6(...g))});Zg=Y("ZodEnum",(_,$)=>{dA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(U,D,I)=>ES(_,U,D,I),_.enum=$.entries,_.options=Object.values($.entries);let g=new Set(Object.keys($.entries));_.extract=(U,D)=>{let I={};for(let j of U)if(g.has(j))I[j]=$.entries[j];else throw Error(`Key ${j} not found in enum`);return new Zg({...$,checks:[],...Z.normalizeParams(D),entries:I})},_.exclude=(U,D)=>{let I={...$.entries};for(let j of U)if(g.has(j))delete I[j];else throw Error(`Key ${j} not found in enum`);return new Zg({...$,checks:[],...Z.normalizeParams(D),entries:I})}});$j=Y("ZodLiteral",(_,$)=>{mA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>NS(_,g,U,D),_.values=new Set($.values),Object.defineProperty(_,"value",{get(){if($.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return $.values[0]}})});gj=Y("ZodFile",(_,$)=>{iA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>PS(_,g,U,D),_.min=(g,U)=>_.check(T$(g,U)),_.max=(g,U)=>_.check(E6(g,U)),_.mime=(g,U)=>_.check(Kg(Array.isArray(g)?g:[g],U))});Dj=Y("ZodTransform",(_,$)=>{lA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>JS(_,g,U,D),_._zod.parse=(g,U)=>{if(U.direction==="backward")throw new Sg(_.constructor.name);g.addIssue=(I)=>{if(typeof I==="string")g.issues.push(Z.issue(I,g.value,$));else{let j=I;if(j.fatal)j.continue=!1;j.code??(j.code="custom"),j.input??(j.input=g.value),j.inst??(j.inst=_),g.issues.push(Z.issue(j))}};let D=$.transform(g.value,g);if(D instanceof Promise)return D.then((I)=>{return g.value=I,g.fallback=!0,g});return g.value=D,g.fallback=!0,g}});gU=Y("ZodOptional",(_,$)=>{iI.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>X1(_,g,U,D),_.unwrap=()=>_._zod.def.innerType});Uj=Y("ZodExactOptional",(_,$)=>{tA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>X1(_,g,U,D),_.unwrap=()=>_._zod.def.innerType});jj=Y("ZodNullable",(_,$)=>{oA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>KS(_,g,U,D),_.unwrap=()=>_._zod.def.innerType});Ej=Y("ZodDefault",(_,$)=>{pA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>BS(_,g,U,D),_.unwrap=()=>_._zod.def.innerType,_.removeDefault=_.unwrap});Aj=Y("ZodPrefault",(_,$)=>{eA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>VS(_,g,U,D),_.unwrap=()=>_._zod.def.innerType});DU=Y("ZodNonOptional",(_,$)=>{aA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>qS(_,g,U,D),_.unwrap=()=>_._zod.def.innerType});Sj=Y("ZodSuccess",(_,$)=>{sA.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>SS(_,g,U,D),_.unwrap=()=>_._zod.def.innerType});Lj=Y("ZodCatch",(_,$)=>{_O.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>FS(_,g,U,D),_.unwrap=()=>_._zod.def.innerType,_.removeCatch=_.unwrap});Jj=Y("ZodNaN",(_,$)=>{$O.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>AS(_,g,U,D)});t4=Y("ZodPipe",(_,$)=>{lI.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>rS(_,g,U,D),_.in=$.in,_.out=$.out});o4=Y("ZodCodec",(_,$)=>{t4.init(_,$),ED.init(_,$)});zj=Y("ZodPreprocess",(_,$)=>{t4.init(_,$),gO.init(_,$)}),Rj=Y("ZodReadonly",(_,$)=>{DO.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>bS(_,g,U,D),_.unwrap=()=>_._zod.def.innerType});Xj=Y("ZodTemplateLiteral",(_,$)=>{UO.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>OS(_,g,U,D)});Yj=Y("ZodLazy",(_,$)=>{EO.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>ZS(_,g,U,D),_.unwrap=()=>_._zod.def.getter()});Tj=Y("ZodPromise",(_,$)=>{jO.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>MS(_,g,U,D),_.unwrap=()=>_._zod.def.innerType});Kj=Y("ZodFunction",(_,$)=>{IO.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>WS(_,g,U,D)});p4=Y("ZodCustom",(_,$)=>{NO.init(_,$),e.init(_,$),_._zod.processJSONSchema=(g,U,D)=>LS(_,g,U,D)});tL=mP,oL=iP});function JX(_){F_({customError:_})}function zX(){return F_().customError}var WX,Vj;var RX=w(()=>{j$();WX={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(_){})(Vj||(Vj={}))});function xF(_,$){let g=_.$schema;if(g==="https://json-schema.org/draft/2020-12/schema")return"draft-2020-12";if(g==="http://json-schema.org/draft-07/schema#")return"draft-7";if(g==="http://json-schema.org/draft-04/schema#")return"draft-4";return $??"draft-2020-12"}function yF(_,$){if(!_.startsWith("#"))throw Error("External $ref is not supported, only local refs (#/...) are allowed");let g=_.slice(1).split("/").filter(Boolean);if(g.length===0)return $.rootSchema;let U=$.version==="draft-2020-12"?"$defs":"definitions";if(g[0]===U){let D=g[1];if(!D||!$.defs[D])throw Error(`Reference not found: ${_}`);return $.defs[D]}throw Error(`Reference not found: ${_}`)}function GX(_,$){if(_.not!==void 0){if(typeof _.not==="object"&&Object.keys(_.not).length===0)return u.never();throw Error("not is not supported in Zod (except { not: {} } for never)")}if(_.unevaluatedItems!==void 0)throw Error("unevaluatedItems is not supported");if(_.unevaluatedProperties!==void 0)throw Error("unevaluatedProperties is not supported");if(_.if!==void 0||_.then!==void 0||_.else!==void 0)throw Error("Conditional schemas (if/then/else) are not supported");if(_.dependentSchemas!==void 0||_.dependentRequired!==void 0)throw Error("dependentSchemas and dependentRequired are not supported");if(_.$ref){let D=_.$ref;if($.refs.has(D))return $.refs.get(D);if($.processing.has(D))return u.lazy(()=>{if(!$.refs.has(D))throw Error(`Circular reference not resolved: ${D}`);return $.refs.get(D)});$.processing.add(D);let I=yF(D,$),j=y_(I,$);return $.refs.set(D,j),$.processing.delete(D),j}if(_.enum!==void 0){let D=_.enum;if($.version==="openapi-3.0"&&_.nullable===!0&&D.length===1&&D[0]===null)return u.null();if(D.length===0)return u.never();if(D.length===1)return u.literal(D[0]);if(D.every((j)=>typeof j==="string"))return u.enum(D);let I=D.map((j)=>u.literal(j));if(I.length<2)return I[0];return u.union([I[0],I[1],...I.slice(2)])}if(_.const!==void 0)return u.literal(_.const);let g=_.type;if(Array.isArray(g)){let D=g.map((I)=>{let j={..._,type:I};return GX(j,$)});if(D.length===0)return u.never();if(D.length===1)return D[0];return u.union(D)}if(!g)return u.any();let U;switch(g){case"string":{let D=u.string();if(_.format){let I=_.format;if(I==="email")D=D.check(u.email());else if(I==="uri"||I==="uri-reference")D=D.check(u.url());else if(I==="uuid"||I==="guid")D=D.check(u.uuid());else if(I==="date-time")D=D.check(u.iso.datetime());else if(I==="date")D=D.check(u.iso.date());else if(I==="time")D=D.check(u.iso.time());else if(I==="duration")D=D.check(u.iso.duration());else if(I==="ipv4")D=D.check(u.ipv4());else if(I==="ipv6")D=D.check(u.ipv6());else if(I==="mac")D=D.check(u.mac());else if(I==="cidr")D=D.check(u.cidrv4());else if(I==="cidr-v6")D=D.check(u.cidrv6());else if(I==="base64")D=D.check(u.base64());else if(I==="base64url")D=D.check(u.base64url());else if(I==="e164")D=D.check(u.e164());else if(I==="jwt")D=D.check(u.jwt());else if(I==="emoji")D=D.check(u.emoji());else if(I==="nanoid")D=D.check(u.nanoid());else if(I==="cuid")D=D.check(u.cuid());else if(I==="cuid2")D=D.check(u.cuid2());else if(I==="ulid")D=D.check(u.ulid());else if(I==="xid")D=D.check(u.xid());else if(I==="ksuid")D=D.check(u.ksuid())}if(typeof _.minLength==="number")D=D.min(_.minLength);if(typeof _.maxLength==="number")D=D.max(_.maxLength);if(_.pattern)D=D.regex(new RegExp(_.pattern));U=D;break}case"number":case"integer":{let D=g==="integer"?u.number().int():u.number();if(typeof _.minimum==="number")D=D.min(_.minimum);if(typeof _.maximum==="number")D=D.max(_.maximum);if(typeof _.exclusiveMinimum==="number")D=D.gt(_.exclusiveMinimum);else if(_.exclusiveMinimum===!0&&typeof _.minimum==="number")D=D.gt(_.minimum);if(typeof _.exclusiveMaximum==="number")D=D.lt(_.exclusiveMaximum);else if(_.exclusiveMaximum===!0&&typeof _.maximum==="number")D=D.lt(_.maximum);if(typeof _.multipleOf==="number")D=D.multipleOf(_.multipleOf);U=D;break}case"boolean":{U=u.boolean();break}case"null":{U=u.null();break}case"object":{let D={},I=_.properties||{},j=new Set(_.required||[]);for(let[A,O]of Object.entries(I)){let P=y_(O,$);D[A]=j.has(A)?P:P.optional()}if(_.propertyNames){let A=y_(_.propertyNames,$),O=_.additionalProperties&&typeof _.additionalProperties==="object"?y_(_.additionalProperties,$):u.any();if(Object.keys(D).length===0){U=u.record(A,O);break}let P=u.object(D).passthrough(),W=u.looseRecord(A,O);U=u.intersection(P,W);break}if(_.patternProperties){let A=_.patternProperties,O=Object.keys(A),P=[];for(let z of O){let S=y_(A[z],$),L=u.string().regex(new RegExp(z));P.push(u.looseRecord(L,S))}let W=[];if(Object.keys(D).length>0)W.push(u.object(D).passthrough());if(W.push(...P),W.length===0)U=u.object({}).passthrough();else if(W.length===1)U=W[0];else{let z=u.intersection(W[0],W[1]);for(let S=2;Sy_(A,$)),E=I&&typeof I==="object"&&!Array.isArray(I)?y_(I,$):void 0;if(E)U=u.tuple(j).rest(E);else U=u.tuple(j);if(typeof _.minItems==="number")U=U.check(u.minLength(_.minItems));if(typeof _.maxItems==="number")U=U.check(u.maxLength(_.maxItems))}else if(Array.isArray(I)){let j=I.map((A)=>y_(A,$)),E=_.additionalItems&&typeof _.additionalItems==="object"?y_(_.additionalItems,$):void 0;if(E)U=u.tuple(j).rest(E);else U=u.tuple(j);if(typeof _.minItems==="number")U=U.check(u.minLength(_.minItems));if(typeof _.maxItems==="number")U=U.check(u.maxLength(_.maxItems))}else if(I!==void 0){let j=y_(I,$),E=u.array(j);if(typeof _.minItems==="number")E=E.min(_.minItems);if(typeof _.maxItems==="number")E=E.max(_.maxItems);U=E}else U=u.array(u.any());break}default:throw Error(`Unsupported type: ${g}`)}return U}function y_(_,$){if(typeof _==="boolean")return _?u.any():u.never();let g=GX(_,$),U=_.type||_.enum!==void 0||_.const!==void 0;if(_.anyOf&&Array.isArray(_.anyOf)){let E=_.anyOf.map((O)=>y_(O,$)),A=u.union(E);g=U?u.intersection(g,A):A}if(_.oneOf&&Array.isArray(_.oneOf)){let E=_.oneOf.map((O)=>y_(O,$)),A=u.xor(E);g=U?u.intersection(g,A):A}if(_.allOf&&Array.isArray(_.allOf))if(_.allOf.length===0)g=U?g:u.any();else{let E=U?g:y_(_.allOf[0],$),A=U?0:1;for(let O=A;O<_.allOf.length;O++)E=u.intersection(E,y_(_.allOf[O],$));g=E}if(_.nullable===!0&&$.version==="openapi-3.0")g=u.nullable(g);if(_.readOnly===!0)g=u.readonly(g);if(_.default!==void 0)g=g.default(_.default);let D={},I=["$id","id","$comment","$anchor","$vocabulary","$dynamicRef","$dynamicAnchor"];for(let E of I)if(E in _)D[E]=_[E];let j=["contentEncoding","contentMediaType","contentSchema"];for(let E of j)if(E in _)D[E]=_[E];for(let E of Object.keys(_))if(!fF.has(E))D[E]=_[E];if(Object.keys(D).length>0)$.registry.add(g,D);if(_.description)g=g.describe(_.description);return g}function _W(_,$){if(typeof _==="boolean")return _?u.any():u.never();let g;try{g=JSON.parse(JSON.stringify(_))}catch{throw Error("fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas")}let U=xF(g,$?.defaultTarget),D=g.$defs||g.definitions||{},I={version:U,defs:D,refs:new Map,processing:new Set,rootSchema:g,registry:$?.registry??v_};return y_(g,I)}var u,fF;var XX=w(()=>{LD();Q1();rD();MD();u={...bD,...Y1,iso:bg},fF=new Set(["$schema","$ref","$defs","definitions","$id","id","$comment","$anchor","$vocabulary","$dynamicRef","$dynamicAnchor","type","enum","const","anyOf","oneOf","allOf","not","properties","required","additionalProperties","patternProperties","propertyNames","minProperties","maxProperties","items","prefixItems","additionalItems","minItems","maxItems","uniqueItems","contains","minContains","maxContains","minLength","maxLength","pattern","format","minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf","description","default","contentEncoding","contentMediaType","contentSchema","unevaluatedItems","unevaluatedProperties","if","then","else","dependentSchemas","dependentRequired","nullable","readOnly"])});var Fj={};k$(Fj,{string:()=>cF,number:()=>hF,date:()=>mF,boolean:()=>nF,bigint:()=>dF});function cF(_){return PP(Hg,_)}function hF(_){return GP(Cg,_)}function nF(_){return BP(vg,_)}function dF(_){return FP(wg,_)}function mF(_){return fP(d4,_)}var YX=w(()=>{j$();MD()});var rj={};k$(rj,{xor:()=>bL,xid:()=>aS,void:()=>KL,uuidv7:()=>dS,uuidv6:()=>nS,uuidv4:()=>hS,uuid:()=>cS,util:()=>Z,url:()=>mS,uppercase:()=>Xg,unknown:()=>x6,union:()=>sD,undefined:()=>QL,ulid:()=>eS,uint64:()=>XL,uint32:()=>zL,tuple:()=>e1,trim:()=>Bg,treeifyError:()=>QI,transform:()=>$U,toUpperCase:()=>Fg,toLowerCase:()=>Vg,toJSONSchema:()=>TD,templateLiteral:()=>nL,symbol:()=>YL,superRefine:()=>Bj,success:()=>xL,stringbool:()=>eL,stringFormat:()=>AL,string:()=>x4,strictObject:()=>FL,startsWith:()=>Qg,slugify:()=>rg,size:()=>k6,setErrorMap:()=>JX,set:()=>CL,safeParseAsync:()=>B1,safeParse:()=>q1,safeEncodeAsync:()=>H1,safeEncode:()=>M1,safeDecodeAsync:()=>k1,safeDecode:()=>Z1,registry:()=>SD,regexes:()=>s_,regex:()=>Rg,refine:()=>qj,record:()=>a1,readonly:()=>Gj,property:()=>YD,promise:()=>dL,prettifyError:()=>TI,preprocess:()=>sL,prefault:()=>Oj,positive:()=>zD,pipe:()=>HD,partialRecord:()=>ZL,parseAsync:()=>K1,parse:()=>T1,overwrite:()=>L$,optional:()=>c4,object:()=>VL,number:()=>v1,nullish:()=>fL,nullable:()=>h4,null:()=>y1,normalize:()=>qg,nonpositive:()=>GD,nonoptional:()=>Pj,nonnegative:()=>XD,never:()=>aD,negative:()=>RD,nativeEnum:()=>vL,nanoid:()=>tS,nan:()=>yL,multipleOf:()=>j6,minSize:()=>T$,minLength:()=>x$,mime:()=>Kg,meta:()=>oL,maxSize:()=>E6,maxLength:()=>C6,map:()=>kL,mac:()=>$L,lte:()=>_$,lt:()=>Y$,lowercase:()=>Gg,looseRecord:()=>HL,looseObject:()=>rL,locales:()=>w4,literal:()=>wL,length:()=>v6,lazy:()=>Qj,ksuid:()=>sS,keyof:()=>BL,jwt:()=>NL,json:()=>aL,iso:()=>bg,ipv6:()=>gL,ipv4:()=>_L,invertCodec:()=>hL,intersection:()=>o1,int64:()=>GL,int32:()=>JL,int:()=>ZD,instanceof:()=>pL,includes:()=>Yg,httpUrl:()=>iS,hostname:()=>OL,hex:()=>PL,hash:()=>SL,guid:()=>yS,gte:()=>x_,gt:()=>Q$,globalRegistry:()=>v_,getErrorMap:()=>zX,function:()=>mL,fromJSONSchema:()=>_W,formatError:()=>b4,float64:()=>WL,float32:()=>LL,flattenError:()=>r4,file:()=>uL,exactOptional:()=>Ij,enum:()=>_U,endsWith:()=>Tg,encodeAsync:()=>r1,encode:()=>V1,emoji:()=>lS,email:()=>xS,e164:()=>EL,discriminatedUnion:()=>ML,describe:()=>tL,decodeAsync:()=>b1,decode:()=>F1,date:()=>qL,custom:()=>lL,cuid2:()=>pS,cuid:()=>oS,core:()=>y$,config:()=>F_,coerce:()=>Fj,codec:()=>cL,clone:()=>f_,cidrv6:()=>UL,cidrv4:()=>DL,check:()=>iL,catch:()=>Wj,boolean:()=>w1,bigint:()=>RL,base64url:()=>jL,base64:()=>IL,array:()=>m4,any:()=>TL,_function:()=>mL,_default:()=>Nj,_ZodString:()=>CD,ZodXor:()=>i1,ZodXID:()=>cD,ZodVoid:()=>d1,ZodUnknown:()=>h1,ZodUnion:()=>l4,ZodUndefined:()=>f1,ZodUUID:()=>K$,ZodURL:()=>n4,ZodULID:()=>yD,ZodType:()=>e,ZodTuple:()=>p1,ZodTransform:()=>Dj,ZodTemplateLiteral:()=>Xj,ZodSymbol:()=>u1,ZodSuccess:()=>Sj,ZodStringFormat:()=>L_,ZodString:()=>Hg,ZodSet:()=>_j,ZodRecord:()=>Mg,ZodRealError:()=>l_,ZodReadonly:()=>Rj,ZodPromise:()=>Tj,ZodPreprocess:()=>zj,ZodPrefault:()=>Aj,ZodPipe:()=>t4,ZodOptional:()=>gU,ZodObject:()=>i4,ZodNumberFormat:()=>y6,ZodNumber:()=>Cg,ZodNullable:()=>jj,ZodNull:()=>x1,ZodNonOptional:()=>DU,ZodNever:()=>n1,ZodNanoID:()=>uD,ZodNaN:()=>Jj,ZodMap:()=>s1,ZodMAC:()=>C1,ZodLiteral:()=>$j,ZodLazy:()=>Yj,ZodKSUID:()=>hD,ZodJWT:()=>pD,ZodIssueCode:()=>WX,ZodIntersection:()=>t1,ZodISOTime:()=>VD,ZodISODuration:()=>FD,ZodISODateTime:()=>qD,ZodISODate:()=>BD,ZodIPv6:()=>dD,ZodIPv4:()=>nD,ZodGUID:()=>y4,ZodFunction:()=>Kj,ZodFirstPartyTypeKind:()=>Vj,ZodFile:()=>gj,ZodExactOptional:()=>Uj,ZodError:()=>SX,ZodEnum:()=>Zg,ZodEmoji:()=>wD,ZodEmail:()=>vD,ZodE164:()=>oD,ZodDiscriminatedUnion:()=>l1,ZodDefault:()=>Ej,ZodDate:()=>d4,ZodCustomStringFormat:()=>kg,ZodCustom:()=>p4,ZodCodec:()=>o4,ZodCatch:()=>Lj,ZodCUID2:()=>xD,ZodCUID:()=>fD,ZodCIDRv6:()=>iD,ZodCIDRv4:()=>mD,ZodBoolean:()=>vg,ZodBigIntFormat:()=>eD,ZodBigInt:()=>wg,ZodBase64URL:()=>tD,ZodBase64:()=>lD,ZodArray:()=>m1,ZodAny:()=>c1,TimePrecision:()=>z1,NEVER:()=>RI,$output:()=>tI,$input:()=>oI,$brand:()=>GI});var $W=w(()=>{j$();j$();XO();j$();KD();XX();NP();rD();rD();YX();MD();Q1();uS();fS();RX();F_(ND())});var QX={};k$(QX,{z:()=>rj,xor:()=>bL,xid:()=>aS,void:()=>KL,uuidv7:()=>dS,uuidv6:()=>nS,uuidv4:()=>hS,uuid:()=>cS,util:()=>Z,url:()=>mS,uppercase:()=>Xg,unknown:()=>x6,union:()=>sD,undefined:()=>QL,ulid:()=>eS,uint64:()=>XL,uint32:()=>zL,tuple:()=>e1,trim:()=>Bg,treeifyError:()=>QI,transform:()=>$U,toUpperCase:()=>Fg,toLowerCase:()=>Vg,toJSONSchema:()=>TD,templateLiteral:()=>nL,symbol:()=>YL,superRefine:()=>Bj,success:()=>xL,stringbool:()=>eL,stringFormat:()=>AL,string:()=>x4,strictObject:()=>FL,startsWith:()=>Qg,slugify:()=>rg,size:()=>k6,setErrorMap:()=>JX,set:()=>CL,safeParseAsync:()=>B1,safeParse:()=>q1,safeEncodeAsync:()=>H1,safeEncode:()=>M1,safeDecodeAsync:()=>k1,safeDecode:()=>Z1,registry:()=>SD,regexes:()=>s_,regex:()=>Rg,refine:()=>qj,record:()=>a1,readonly:()=>Gj,property:()=>YD,promise:()=>dL,prettifyError:()=>TI,preprocess:()=>sL,prefault:()=>Oj,positive:()=>zD,pipe:()=>HD,partialRecord:()=>ZL,parseAsync:()=>K1,parse:()=>T1,overwrite:()=>L$,optional:()=>c4,object:()=>VL,number:()=>v1,nullish:()=>fL,nullable:()=>h4,null:()=>y1,normalize:()=>qg,nonpositive:()=>GD,nonoptional:()=>Pj,nonnegative:()=>XD,never:()=>aD,negative:()=>RD,nativeEnum:()=>vL,nanoid:()=>tS,nan:()=>yL,multipleOf:()=>j6,minSize:()=>T$,minLength:()=>x$,mime:()=>Kg,meta:()=>oL,maxSize:()=>E6,maxLength:()=>C6,map:()=>kL,mac:()=>$L,lte:()=>_$,lt:()=>Y$,lowercase:()=>Gg,looseRecord:()=>HL,looseObject:()=>rL,locales:()=>w4,literal:()=>wL,length:()=>v6,lazy:()=>Qj,ksuid:()=>sS,keyof:()=>BL,jwt:()=>NL,json:()=>aL,iso:()=>bg,ipv6:()=>gL,ipv4:()=>_L,invertCodec:()=>hL,intersection:()=>o1,int64:()=>GL,int32:()=>JL,int:()=>ZD,instanceof:()=>pL,includes:()=>Yg,httpUrl:()=>iS,hostname:()=>OL,hex:()=>PL,hash:()=>SL,guid:()=>yS,gte:()=>x_,gt:()=>Q$,globalRegistry:()=>v_,getErrorMap:()=>zX,function:()=>mL,fromJSONSchema:()=>_W,formatError:()=>b4,float64:()=>WL,float32:()=>LL,flattenError:()=>r4,file:()=>uL,exactOptional:()=>Ij,enum:()=>_U,endsWith:()=>Tg,encodeAsync:()=>r1,encode:()=>V1,emoji:()=>lS,email:()=>xS,e164:()=>EL,discriminatedUnion:()=>ML,describe:()=>tL,default:()=>iF,decodeAsync:()=>b1,decode:()=>F1,date:()=>qL,custom:()=>lL,cuid2:()=>pS,cuid:()=>oS,core:()=>y$,config:()=>F_,coerce:()=>Fj,codec:()=>cL,clone:()=>f_,cidrv6:()=>UL,cidrv4:()=>DL,check:()=>iL,catch:()=>Wj,boolean:()=>w1,bigint:()=>RL,base64url:()=>jL,base64:()=>IL,array:()=>m4,any:()=>TL,_function:()=>mL,_default:()=>Nj,_ZodString:()=>CD,ZodXor:()=>i1,ZodXID:()=>cD,ZodVoid:()=>d1,ZodUnknown:()=>h1,ZodUnion:()=>l4,ZodUndefined:()=>f1,ZodUUID:()=>K$,ZodURL:()=>n4,ZodULID:()=>yD,ZodType:()=>e,ZodTuple:()=>p1,ZodTransform:()=>Dj,ZodTemplateLiteral:()=>Xj,ZodSymbol:()=>u1,ZodSuccess:()=>Sj,ZodStringFormat:()=>L_,ZodString:()=>Hg,ZodSet:()=>_j,ZodRecord:()=>Mg,ZodRealError:()=>l_,ZodReadonly:()=>Rj,ZodPromise:()=>Tj,ZodPreprocess:()=>zj,ZodPrefault:()=>Aj,ZodPipe:()=>t4,ZodOptional:()=>gU,ZodObject:()=>i4,ZodNumberFormat:()=>y6,ZodNumber:()=>Cg,ZodNullable:()=>jj,ZodNull:()=>x1,ZodNonOptional:()=>DU,ZodNever:()=>n1,ZodNanoID:()=>uD,ZodNaN:()=>Jj,ZodMap:()=>s1,ZodMAC:()=>C1,ZodLiteral:()=>$j,ZodLazy:()=>Yj,ZodKSUID:()=>hD,ZodJWT:()=>pD,ZodIssueCode:()=>WX,ZodIntersection:()=>t1,ZodISOTime:()=>VD,ZodISODuration:()=>FD,ZodISODateTime:()=>qD,ZodISODate:()=>BD,ZodIPv6:()=>dD,ZodIPv4:()=>nD,ZodGUID:()=>y4,ZodFunction:()=>Kj,ZodFirstPartyTypeKind:()=>Vj,ZodFile:()=>gj,ZodExactOptional:()=>Uj,ZodError:()=>SX,ZodEnum:()=>Zg,ZodEmoji:()=>wD,ZodEmail:()=>vD,ZodE164:()=>oD,ZodDiscriminatedUnion:()=>l1,ZodDefault:()=>Ej,ZodDate:()=>d4,ZodCustomStringFormat:()=>kg,ZodCustom:()=>p4,ZodCodec:()=>o4,ZodCatch:()=>Lj,ZodCUID2:()=>xD,ZodCUID:()=>fD,ZodCIDRv6:()=>iD,ZodCIDRv4:()=>mD,ZodBoolean:()=>vg,ZodBigIntFormat:()=>eD,ZodBigInt:()=>wg,ZodBase64URL:()=>tD,ZodBase64:()=>lD,ZodArray:()=>m1,ZodAny:()=>c1,TimePrecision:()=>z1,NEVER:()=>RI,$output:()=>tI,$input:()=>oI,$brand:()=>GI});var iF;var TX=w(()=>{$W();$W();iF=rj});var qU=a6((fC)=>{class $J extends Error{constructor(_,$,g){super(g);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=$,this.exitCode=_,this.nestedError=void 0}}class A8 extends $J{constructor(_){super(1,"commander.invalidArgument",_);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}fC.CommanderError=$J;fC.InvalidArgumentError=A8});var JE=a6((nC)=>{var{InvalidArgumentError:cC}=qU();class O8{constructor(_,$){switch(this.description=$||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,_[0]){case"<":this.required=!0,this._name=_.slice(1,-1);break;case"[":this.required=!1,this._name=_.slice(1,-1);break;default:this.required=!0,this._name=_;break}if(this._name.length>3&&this._name.slice(-3)==="...")this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_concatValue(_,$){if($===this.defaultValue||!Array.isArray($))return[_];return $.concat(_)}default(_,$){return this.defaultValue=_,this.defaultValueDescription=$,this}argParser(_){return this.parseArg=_,this}choices(_){return this.argChoices=_.slice(),this.parseArg=($,g)=>{if(!this.argChoices.includes($))throw new cC(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._concatValue($,g);return $},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function hC(_){let $=_.name()+(_.variadic===!0?"...":"");return _.required?"<"+$+">":"["+$+"]"}nC.Argument=O8;nC.humanReadableArgName=hC});var gJ=a6((lC)=>{var{humanReadableArgName:iC}=JE();class P8{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(_){this.helpWidth=this.helpWidth??_.helpWidth??80}visibleCommands(_){let $=_.commands.filter((U)=>!U._hidden),g=_._getHelpCommand();if(g&&!g._hidden)$.push(g);if(this.sortSubcommands)$.sort((U,D)=>{return U.name().localeCompare(D.name())});return $}compareOptions(_,$){let g=(U)=>{return U.short?U.short.replace(/^-/,""):U.long.replace(/^--/,"")};return g(_).localeCompare(g($))}visibleOptions(_){let $=_.options.filter((U)=>!U.hidden),g=_._getHelpOption();if(g&&!g.hidden){let U=g.short&&_._findOption(g.short),D=g.long&&_._findOption(g.long);if(!U&&!D)$.push(g);else if(g.long&&!D)$.push(_.createOption(g.long,g.description));else if(g.short&&!U)$.push(_.createOption(g.short,g.description))}if(this.sortOptions)$.sort(this.compareOptions);return $}visibleGlobalOptions(_){if(!this.showGlobalOptions)return[];let $=[];for(let g=_.parent;g;g=g.parent){let U=g.options.filter((D)=>!D.hidden);$.push(...U)}if(this.sortOptions)$.sort(this.compareOptions);return $}visibleArguments(_){if(_._argsDescription)_.registeredArguments.forEach(($)=>{$.description=$.description||_._argsDescription[$.name()]||""});if(_.registeredArguments.find(($)=>$.description))return _.registeredArguments;return[]}subcommandTerm(_){let $=_.registeredArguments.map((g)=>iC(g)).join(" ");return _._name+(_._aliases[0]?"|"+_._aliases[0]:"")+(_.options.length?" [options]":"")+($?" "+$:"")}optionTerm(_){return _.flags}argumentTerm(_){return _.name()}longestSubcommandTermLength(_,$){return $.visibleCommands(_).reduce((g,U)=>{return Math.max(g,this.displayWidth($.styleSubcommandTerm($.subcommandTerm(U))))},0)}longestOptionTermLength(_,$){return $.visibleOptions(_).reduce((g,U)=>{return Math.max(g,this.displayWidth($.styleOptionTerm($.optionTerm(U))))},0)}longestGlobalOptionTermLength(_,$){return $.visibleGlobalOptions(_).reduce((g,U)=>{return Math.max(g,this.displayWidth($.styleOptionTerm($.optionTerm(U))))},0)}longestArgumentTermLength(_,$){return $.visibleArguments(_).reduce((g,U)=>{return Math.max(g,this.displayWidth($.styleArgumentTerm($.argumentTerm(U))))},0)}commandUsage(_){let $=_._name;if(_._aliases[0])$=$+"|"+_._aliases[0];let g="";for(let U=_.parent;U;U=U.parent)g=U.name()+" "+g;return g+$+" "+_.usage()}commandDescription(_){return _.description()}subcommandDescription(_){return _.summary()||_.description()}optionDescription(_){let $=[];if(_.argChoices)$.push(`choices: ${_.argChoices.map((g)=>JSON.stringify(g)).join(", ")}`);if(_.defaultValue!==void 0){if(_.required||_.optional||_.isBoolean()&&typeof _.defaultValue==="boolean")$.push(`default: ${_.defaultValueDescription||JSON.stringify(_.defaultValue)}`)}if(_.presetArg!==void 0&&_.optional)$.push(`preset: ${JSON.stringify(_.presetArg)}`);if(_.envVar!==void 0)$.push(`env: ${_.envVar}`);if($.length>0)return`${_.description} (${$.join(", ")})`;return _.description}argumentDescription(_){let $=[];if(_.argChoices)$.push(`choices: ${_.argChoices.map((g)=>JSON.stringify(g)).join(", ")}`);if(_.defaultValue!==void 0)$.push(`default: ${_.defaultValueDescription||JSON.stringify(_.defaultValue)}`);if($.length>0){let g=`(${$.join(", ")})`;if(_.description)return`${_.description} ${g}`;return g}return _.description}formatHelp(_,$){let g=$.padWidth(_,$),U=$.helpWidth??80;function D(P,W){return $.formatItem(P,g,W,$)}let I=[`${$.styleTitle("Usage:")} ${$.styleUsage($.commandUsage(_))}`,""],j=$.commandDescription(_);if(j.length>0)I=I.concat([$.boxWrap($.styleCommandDescription(j),U),""]);let E=$.visibleArguments(_).map((P)=>{return D($.styleArgumentTerm($.argumentTerm(P)),$.styleArgumentDescription($.argumentDescription(P)))});if(E.length>0)I=I.concat([$.styleTitle("Arguments:"),...E,""]);let A=$.visibleOptions(_).map((P)=>{return D($.styleOptionTerm($.optionTerm(P)),$.styleOptionDescription($.optionDescription(P)))});if(A.length>0)I=I.concat([$.styleTitle("Options:"),...A,""]);if($.showGlobalOptions){let P=$.visibleGlobalOptions(_).map((W)=>{return D($.styleOptionTerm($.optionTerm(W)),$.styleOptionDescription($.optionDescription(W)))});if(P.length>0)I=I.concat([$.styleTitle("Global Options:"),...P,""])}let O=$.visibleCommands(_).map((P)=>{return D($.styleSubcommandTerm($.subcommandTerm(P)),$.styleSubcommandDescription($.subcommandDescription(P)))});if(O.length>0)I=I.concat([$.styleTitle("Commands:"),...O,""]);return I.join(` +`)}displayWidth(_){return S8(_).length}styleTitle(_){return _}styleUsage(_){return _.split(" ").map(($)=>{if($==="[options]")return this.styleOptionText($);if($==="[command]")return this.styleSubcommandText($);if($[0]==="["||$[0]==="<")return this.styleArgumentText($);return this.styleCommandText($)}).join(" ")}styleCommandDescription(_){return this.styleDescriptionText(_)}styleOptionDescription(_){return this.styleDescriptionText(_)}styleSubcommandDescription(_){return this.styleDescriptionText(_)}styleArgumentDescription(_){return this.styleDescriptionText(_)}styleDescriptionText(_){return _}styleOptionTerm(_){return this.styleOptionText(_)}styleSubcommandTerm(_){return _.split(" ").map(($)=>{if($==="[options]")return this.styleOptionText($);if($[0]==="["||$[0]==="<")return this.styleArgumentText($);return this.styleSubcommandText($)}).join(" ")}styleArgumentTerm(_){return this.styleArgumentText(_)}styleOptionText(_){return _}styleArgumentText(_){return _}styleSubcommandText(_){return _}styleCommandText(_){return _}padWidth(_,$){return Math.max($.longestOptionTermLength(_,$),$.longestGlobalOptionTermLength(_,$),$.longestSubcommandTermLength(_,$),$.longestArgumentTermLength(_,$))}preformatted(_){return/\n[^\S\r\n]/.test(_)}formatItem(_,$,g,U){let I=" ".repeat(2);if(!g)return I+_;let j=_.padEnd($+_.length-U.displayWidth(_)),E=2,O=(this.helpWidth??80)-$-E-2,P;if(O{let j=I.match(U);if(j===null){D.push("");return}let E=[j.shift()],A=this.displayWidth(E[0]);j.forEach((O)=>{let P=this.displayWidth(O);if(A+P<=$){E.push(O),A+=P;return}D.push(E.join(""));let W=O.trimStart();E=[W],A=this.displayWidth(W)}),D.push(E.join(""))}),D.join(` +`)}}function S8(_){let $=/\x1b\[\d*(;\d*)*m/g;return _.replace($,"")}lC.Help=P8;lC.stripColor=S8});var DJ=a6((aC)=>{var{InvalidArgumentError:pC}=qU();class W8{constructor(_,$){this.flags=_,this.description=$||"",this.required=_.includes("<"),this.optional=_.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(_),this.mandatory=!1;let g=eC(_);if(this.short=g.shortFlag,this.long=g.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(_,$){return this.defaultValue=_,this.defaultValueDescription=$,this}preset(_){return this.presetArg=_,this}conflicts(_){return this.conflictsWith=this.conflictsWith.concat(_),this}implies(_){let $=_;if(typeof _==="string")$={[_]:!0};return this.implied=Object.assign(this.implied||{},$),this}env(_){return this.envVar=_,this}argParser(_){return this.parseArg=_,this}makeOptionMandatory(_=!0){return this.mandatory=!!_,this}hideHelp(_=!0){return this.hidden=!!_,this}_concatValue(_,$){if($===this.defaultValue||!Array.isArray($))return[_];return $.concat(_)}choices(_){return this.argChoices=_.slice(),this.parseArg=($,g)=>{if(!this.argChoices.includes($))throw new pC(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._concatValue($,g);return $},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){if(this.negate)return L8(this.name().replace(/^no-/,""));return L8(this.name())}is(_){return this.short===_||this.long===_}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class J8{constructor(_){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,_.forEach(($)=>{if($.negate)this.negativeOptions.set($.attributeName(),$);else this.positiveOptions.set($.attributeName(),$)}),this.negativeOptions.forEach(($,g)=>{if(this.positiveOptions.has(g))this.dualOptions.add(g)})}valueFromOption(_,$){let g=$.attributeName();if(!this.dualOptions.has(g))return!0;let U=this.negativeOptions.get(g).presetArg,D=U!==void 0?U:!1;return $.negate===(D===_)}}function L8(_){return _.split("-").reduce(($,g)=>{return $+g[0].toUpperCase()+g.slice(1)})}function eC(_){let $,g,U=/^-[^-]$/,D=/^--[^-]/,I=_.split(/[ |,]+/).concat("guard");if(U.test(I[0]))$=I.shift();if(D.test(I[0]))g=I.shift();if(!$&&U.test(I[0]))$=I.shift();if(!$&&D.test(I[0]))$=g,g=I.shift();if(I[0].startsWith("-")){let j=I[0],E=`option creation failed due to '${j}' in option flags '${_}'`;if(/^-[^-][^-]/.test(j))throw Error(`${E} - a short flag is a single dash and a single character - either use a single dash and a single character (for a short flag) - - or use a double dash for a long option (and can have two, like '--ws, --workspace')`);if(U.test(j))throw Error(`${N} -- too many short flags`);if(g.test(j))throw Error(`${N} -- too many long flags`);throw Error(`${N} -- unrecognised flag format`)}if($===void 0&&D===void 0)throw Error(`option creation failed due to no flags found in '${_}'.`);return{shortFlag:$,longFlag:D}}cv.Option=O8;cv.DualOptions=A8});var L8=e6((lv)=>{function mv(_,$){if(Math.abs(_.length-$.length)>3)return Math.max(_.length,$.length);let D=[];for(let U=0;U<=_.length;U++)D[U]=[U];for(let U=0;U<=$.length;U++)D[0][U]=U;for(let U=1;U<=$.length;U++)for(let g=1;g<=_.length;g++){let I=1;if(_[g-1]===$[U-1])I=0;else I=1;if(D[g][U]=Math.min(D[g-1][U]+1,D[g][U-1]+1,D[g-1][U-1]+I),g>1&&U>1&&_[g-1]===$[U-2]&&_[g-2]===$[U-1])D[g][U]=Math.min(D[g][U],D[g-2][U-2]+1)}return D[_.length][$.length]}function iv(_,$){if(!$||$.length===0)return"";$=Array.from(new Set($));let D=_.startsWith("--");if(D)_=_.slice(2),$=$.map((j)=>j.slice(2));let U=[],g=3,I=0.4;if($.forEach((j)=>{if(j.length<=1)return;let N=mv(_,j),O=Math.max(_.length,j.length);if((O-N)/O>I){if(Nj.localeCompare(N)),D)U=U.map((j)=>`--${j}`);if(U.length>1)return` + - or use a double dash for a long option (and can have two, like '--ws, --workspace')`);if(U.test(j))throw Error(`${E} +- too many short flags`);if(D.test(j))throw Error(`${E} +- too many long flags`);throw Error(`${E} +- unrecognised flag format`)}if($===void 0&&g===void 0)throw Error(`option creation failed due to no flags found in '${_}'.`);return{shortFlag:$,longFlag:g}}aC.Option=W8;aC.DualOptions=J8});var z8=a6((Dv)=>{function $v(_,$){if(Math.abs(_.length-$.length)>3)return Math.max(_.length,$.length);let g=[];for(let U=0;U<=_.length;U++)g[U]=[U];for(let U=0;U<=$.length;U++)g[0][U]=U;for(let U=1;U<=$.length;U++)for(let D=1;D<=_.length;D++){let I=1;if(_[D-1]===$[U-1])I=0;else I=1;if(g[D][U]=Math.min(g[D-1][U]+1,g[D][U-1]+1,g[D-1][U-1]+I),D>1&&U>1&&_[D-1]===$[U-2]&&_[D-2]===$[U-1])g[D][U]=Math.min(g[D][U],g[D-2][U-2]+1)}return g[_.length][$.length]}function gv(_,$){if(!$||$.length===0)return"";$=Array.from(new Set($));let g=_.startsWith("--");if(g)_=_.slice(2),$=$.map((j)=>j.slice(2));let U=[],D=3,I=0.4;if($.forEach((j)=>{if(j.length<=1)return;let E=$v(_,j),A=Math.max(_.length,j.length);if((A-E)/A>I){if(Ej.localeCompare(E)),g)U=U.map((j)=>`--${j}`);if(U.length>1)return` (Did you mean one of ${U.join(", ")}?)`;if(U.length===1)return` -(Did you mean ${U[0]}?)`;return""}lv.suggestSimilar=iv});var S8=e6(($r)=>{var ov=O_("events").EventEmitter,s3=O_("child_process"),S6=O_("path"),WN=O_("fs"),E_=O_("process"),{Argument:pv,humanReadableArgName:ev}=SN(),{CommanderError:_z}=VU(),{Help:av,stripColor:sv}=e3(),{Option:J8,DualOptions:_r}=a3(),{suggestSimilar:P8}=L8();class Dz extends ov{constructor(_){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=_||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:($)=>E_.stdout.write($),writeErr:($)=>E_.stderr.write($),outputError:($,D)=>D($),getOutHelpWidth:()=>E_.stdout.isTTY?E_.stdout.columns:void 0,getErrHelpWidth:()=>E_.stderr.isTTY?E_.stderr.columns:void 0,getOutHasColors:()=>$z()??(E_.stdout.isTTY&&E_.stdout.hasColors?.()),getErrHasColors:()=>$z()??(E_.stderr.isTTY&&E_.stderr.hasColors?.()),stripColor:($)=>sv($)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(_){return this._outputConfiguration=_._outputConfiguration,this._helpOption=_._helpOption,this._helpCommand=_._helpCommand,this._helpConfiguration=_._helpConfiguration,this._exitCallback=_._exitCallback,this._storeOptionsAsProperties=_._storeOptionsAsProperties,this._combineFlagAndOptionalValue=_._combineFlagAndOptionalValue,this._allowExcessArguments=_._allowExcessArguments,this._enablePositionalOptions=_._enablePositionalOptions,this._showHelpAfterError=_._showHelpAfterError,this._showSuggestionAfterError=_._showSuggestionAfterError,this}_getCommandAndAncestors(){let _=[];for(let $=this;$;$=$.parent)_.push($);return _}command(_,$,D){let U=$,g=D;if(typeof U==="object"&&U!==null)g=U,U=null;g=g||{};let[,I,j]=_.match(/([^ ]+) *(.*)/),N=this.createCommand(I);if(U)N.description(U),N._executableHandler=!0;if(g.isDefault)this._defaultCommandName=N._name;if(N._hidden=!!(g.noHelp||g.hidden),N._executableFile=g.executableFile||null,j)N.arguments(j);if(this._registerCommand(N),N.parent=this,N.copyInheritedSettings(this),U)return this;return N}createCommand(_){return new Dz(_)}createHelp(){return Object.assign(new av,this.configureHelp())}configureHelp(_){if(_===void 0)return this._helpConfiguration;return this._helpConfiguration=_,this}configureOutput(_){if(_===void 0)return this._outputConfiguration;return Object.assign(this._outputConfiguration,_),this}showHelpAfterError(_=!0){if(typeof _!=="string")_=!!_;return this._showHelpAfterError=_,this}showSuggestionAfterError(_=!0){return this._showSuggestionAfterError=!!_,this}addCommand(_,$){if(!_._name)throw Error(`Command passed to .addCommand() must have a name -- specify the name in Command constructor or using .name()`);if($=$||{},$.isDefault)this._defaultCommandName=_._name;if($.noHelp||$.hidden)_._hidden=!0;return this._registerCommand(_),_.parent=this,_._checkForBrokenPassThrough(),this}createArgument(_,$){return new pv(_,$)}argument(_,$,D,U){let g=this.createArgument(_,$);if(typeof D==="function")g.default(U).argParser(D);else g.default(D);return this.addArgument(g),this}arguments(_){return _.trim().split(/ +/).forEach(($)=>{this.argument($)}),this}addArgument(_){let $=this.registeredArguments.slice(-1)[0];if($&&$.variadic)throw Error(`only the last argument can be variadic '${$.name()}'`);if(_.required&&_.defaultValue!==void 0&&_.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${_.name()}'`);return this.registeredArguments.push(_),this}helpCommand(_,$){if(typeof _==="boolean")return this._addImplicitHelpCommand=_,this;_=_??"help [command]";let[,D,U]=_.match(/([^ ]+) *(.*)/),g=$??"display help for command",I=this.createCommand(D);if(I.helpOption(!1),U)I.arguments(U);if(g)I.description(g);return this._addImplicitHelpCommand=!0,this._helpCommand=I,this}addHelpCommand(_,$){if(typeof _!=="object")return this.helpCommand(_,$),this;return this._addImplicitHelpCommand=!0,this._helpCommand=_,this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook(_,$){let D=["preSubcommand","preAction","postAction"];if(!D.includes(_))throw Error(`Unexpected value for event passed to hook : '${_}'. -Expecting one of '${D.join("', '")}'`);if(this._lifeCycleHooks[_])this._lifeCycleHooks[_].push($);else this._lifeCycleHooks[_]=[$];return this}exitOverride(_){if(_)this._exitCallback=_;else this._exitCallback=($)=>{if($.code!=="commander.executeSubCommandAsync")throw $};return this}_exit(_,$,D){if(this._exitCallback)this._exitCallback(new _z(_,$,D));E_.exit(_)}action(_){let $=(D)=>{let U=this.registeredArguments.length,g=D.slice(0,U);if(this._storeOptionsAsProperties)g[U]=this;else g[U]=this.opts();return g.push(this),_.apply(this,g)};return this._actionHandler=$,this}createOption(_,$){return new J8(_,$)}_callParseArg(_,$,D,U){try{return _.parseArg($,D)}catch(g){if(g.code==="commander.invalidArgument"){let I=`${U} ${g.message}`;this.error(I,{exitCode:g.exitCode,code:g.code})}throw g}}_registerOption(_){let $=_.short&&this._findOption(_.short)||_.long&&this._findOption(_.long);if($){let D=_.long&&this._findOption(_.long)?_.long:_.short;throw Error(`Cannot add option '${_.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${D}' -- already used by option '${$.flags}'`)}this.options.push(_)}_registerCommand(_){let $=(U)=>{return[U.name()].concat(U.aliases())},D=$(_).find((U)=>this._findCommand(U));if(D){let U=$(this._findCommand(D)).join("|"),g=$(_).join("|");throw Error(`cannot add command '${g}' as already have command '${U}'`)}this.commands.push(_)}addOption(_){this._registerOption(_);let $=_.name(),D=_.attributeName();if(_.negate){let g=_.long.replace(/^--no-/,"--");if(!this._findOption(g))this.setOptionValueWithSource(D,_.defaultValue===void 0?!0:_.defaultValue,"default")}else if(_.defaultValue!==void 0)this.setOptionValueWithSource(D,_.defaultValue,"default");let U=(g,I,j)=>{if(g==null&&_.presetArg!==void 0)g=_.presetArg;let N=this.getOptionValue(D);if(g!==null&&_.parseArg)g=this._callParseArg(_,g,N,I);else if(g!==null&&_.variadic)g=_._concatValue(g,N);if(g==null)if(_.negate)g=!1;else if(_.isBoolean()||_.optional)g=!0;else g="";this.setOptionValueWithSource(D,g,j)};if(this.on("option:"+$,(g)=>{let I=`error: option '${_.flags}' argument '${g}' is invalid.`;U(g,I,"cli")}),_.envVar)this.on("optionEnv:"+$,(g)=>{let I=`error: option '${_.flags}' value '${g}' from env '${_.envVar}' is invalid.`;U(g,I,"env")});return this}_optionEx(_,$,D,U,g){if(typeof $==="object"&&$ instanceof J8)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let I=this.createOption($,D);if(I.makeOptionMandatory(!!_.mandatory),typeof U==="function")I.default(g).argParser(U);else if(U instanceof RegExp){let j=U;U=(N,O)=>{let A=j.exec(N);return A?A[0]:O},I.default(g).argParser(U)}else I.default(U);return this.addOption(I)}option(_,$,D,U){return this._optionEx({},_,$,D,U)}requiredOption(_,$,D,U){return this._optionEx({mandatory:!0},_,$,D,U)}combineFlagAndOptionalValue(_=!0){return this._combineFlagAndOptionalValue=!!_,this}allowUnknownOption(_=!0){return this._allowUnknownOption=!!_,this}allowExcessArguments(_=!0){return this._allowExcessArguments=!!_,this}enablePositionalOptions(_=!0){return this._enablePositionalOptions=!!_,this}passThroughOptions(_=!0){return this._passThroughOptions=!!_,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(_=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!_,this}getOptionValue(_){if(this._storeOptionsAsProperties)return this[_];return this._optionValues[_]}setOptionValue(_,$){return this.setOptionValueWithSource(_,$,void 0)}setOptionValueWithSource(_,$,D){if(this._storeOptionsAsProperties)this[_]=$;else this._optionValues[_]=$;return this._optionValueSources[_]=D,this}getOptionValueSource(_){return this._optionValueSources[_]}getOptionValueSourceWithGlobals(_){let $;return this._getCommandAndAncestors().forEach((D)=>{if(D.getOptionValueSource(_)!==void 0)$=D.getOptionValueSource(_)}),$}_prepareUserArgs(_,$){if(_!==void 0&&!Array.isArray(_))throw Error("first parameter to parse must be array or undefined");if($=$||{},_===void 0&&$.from===void 0){if(E_.versions?.electron)$.from="electron";let U=E_.execArgv??[];if(U.includes("-e")||U.includes("--eval")||U.includes("-p")||U.includes("--print"))$.from="eval"}if(_===void 0)_=E_.argv;this.rawArgs=_.slice();let D;switch($.from){case void 0:case"node":this._scriptPath=_[1],D=_.slice(2);break;case"electron":if(E_.defaultApp)this._scriptPath=_[1],D=_.slice(2);else D=_.slice(1);break;case"user":D=_.slice(0);break;case"eval":D=_.slice(1);break;default:throw Error(`unexpected parse option { from: '${$.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",D}parse(_,$){this._prepareForParse();let D=this._prepareUserArgs(_,$);return this._parseCommand([],D),this}async parseAsync(_,$){this._prepareForParse();let D=this._prepareUserArgs(_,$);return await this._parseCommand([],D),this}_prepareForParse(){if(this._savedState===null)this.saveStateBeforeParse();else this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true. -- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(_,$,D){if(WN.existsSync(_))return;let U=$?`searched for local subcommand relative to directory '${$}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",g=`'${_}' does not exist - - if '${D}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead +(Did you mean ${U[0]}?)`;return""}Dv.suggestSimilar=gv});var Y8=a6((Pv)=>{var Iv=A_("events").EventEmitter,UJ=A_("child_process"),R6=A_("path"),zE=A_("fs"),N_=A_("process"),{Argument:jv,humanReadableArgName:Ev}=JE(),{CommanderError:IJ}=qU(),{Help:Nv,stripColor:Av}=gJ(),{Option:R8,DualOptions:Ov}=DJ(),{suggestSimilar:G8}=z8();class EJ extends Iv{constructor(_){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=_||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:($)=>N_.stdout.write($),writeErr:($)=>N_.stderr.write($),outputError:($,g)=>g($),getOutHelpWidth:()=>N_.stdout.isTTY?N_.stdout.columns:void 0,getErrHelpWidth:()=>N_.stderr.isTTY?N_.stderr.columns:void 0,getOutHasColors:()=>jJ()??(N_.stdout.isTTY&&N_.stdout.hasColors?.()),getErrHasColors:()=>jJ()??(N_.stderr.isTTY&&N_.stderr.hasColors?.()),stripColor:($)=>Av($)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(_){return this._outputConfiguration=_._outputConfiguration,this._helpOption=_._helpOption,this._helpCommand=_._helpCommand,this._helpConfiguration=_._helpConfiguration,this._exitCallback=_._exitCallback,this._storeOptionsAsProperties=_._storeOptionsAsProperties,this._combineFlagAndOptionalValue=_._combineFlagAndOptionalValue,this._allowExcessArguments=_._allowExcessArguments,this._enablePositionalOptions=_._enablePositionalOptions,this._showHelpAfterError=_._showHelpAfterError,this._showSuggestionAfterError=_._showSuggestionAfterError,this}_getCommandAndAncestors(){let _=[];for(let $=this;$;$=$.parent)_.push($);return _}command(_,$,g){let U=$,D=g;if(typeof U==="object"&&U!==null)D=U,U=null;D=D||{};let[,I,j]=_.match(/([^ ]+) *(.*)/),E=this.createCommand(I);if(U)E.description(U),E._executableHandler=!0;if(D.isDefault)this._defaultCommandName=E._name;if(E._hidden=!!(D.noHelp||D.hidden),E._executableFile=D.executableFile||null,j)E.arguments(j);if(this._registerCommand(E),E.parent=this,E.copyInheritedSettings(this),U)return this;return E}createCommand(_){return new EJ(_)}createHelp(){return Object.assign(new Nv,this.configureHelp())}configureHelp(_){if(_===void 0)return this._helpConfiguration;return this._helpConfiguration=_,this}configureOutput(_){if(_===void 0)return this._outputConfiguration;return Object.assign(this._outputConfiguration,_),this}showHelpAfterError(_=!0){if(typeof _!=="string")_=!!_;return this._showHelpAfterError=_,this}showSuggestionAfterError(_=!0){return this._showSuggestionAfterError=!!_,this}addCommand(_,$){if(!_._name)throw Error(`Command passed to .addCommand() must have a name +- specify the name in Command constructor or using .name()`);if($=$||{},$.isDefault)this._defaultCommandName=_._name;if($.noHelp||$.hidden)_._hidden=!0;return this._registerCommand(_),_.parent=this,_._checkForBrokenPassThrough(),this}createArgument(_,$){return new jv(_,$)}argument(_,$,g,U){let D=this.createArgument(_,$);if(typeof g==="function")D.default(U).argParser(g);else D.default(g);return this.addArgument(D),this}arguments(_){return _.trim().split(/ +/).forEach(($)=>{this.argument($)}),this}addArgument(_){let $=this.registeredArguments.slice(-1)[0];if($&&$.variadic)throw Error(`only the last argument can be variadic '${$.name()}'`);if(_.required&&_.defaultValue!==void 0&&_.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${_.name()}'`);return this.registeredArguments.push(_),this}helpCommand(_,$){if(typeof _==="boolean")return this._addImplicitHelpCommand=_,this;_=_??"help [command]";let[,g,U]=_.match(/([^ ]+) *(.*)/),D=$??"display help for command",I=this.createCommand(g);if(I.helpOption(!1),U)I.arguments(U);if(D)I.description(D);return this._addImplicitHelpCommand=!0,this._helpCommand=I,this}addHelpCommand(_,$){if(typeof _!=="object")return this.helpCommand(_,$),this;return this._addImplicitHelpCommand=!0,this._helpCommand=_,this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook(_,$){let g=["preSubcommand","preAction","postAction"];if(!g.includes(_))throw Error(`Unexpected value for event passed to hook : '${_}'. +Expecting one of '${g.join("', '")}'`);if(this._lifeCycleHooks[_])this._lifeCycleHooks[_].push($);else this._lifeCycleHooks[_]=[$];return this}exitOverride(_){if(_)this._exitCallback=_;else this._exitCallback=($)=>{if($.code!=="commander.executeSubCommandAsync")throw $};return this}_exit(_,$,g){if(this._exitCallback)this._exitCallback(new IJ(_,$,g));N_.exit(_)}action(_){let $=(g)=>{let U=this.registeredArguments.length,D=g.slice(0,U);if(this._storeOptionsAsProperties)D[U]=this;else D[U]=this.opts();return D.push(this),_.apply(this,D)};return this._actionHandler=$,this}createOption(_,$){return new R8(_,$)}_callParseArg(_,$,g,U){try{return _.parseArg($,g)}catch(D){if(D.code==="commander.invalidArgument"){let I=`${U} ${D.message}`;this.error(I,{exitCode:D.exitCode,code:D.code})}throw D}}_registerOption(_){let $=_.short&&this._findOption(_.short)||_.long&&this._findOption(_.long);if($){let g=_.long&&this._findOption(_.long)?_.long:_.short;throw Error(`Cannot add option '${_.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${g}' +- already used by option '${$.flags}'`)}this.options.push(_)}_registerCommand(_){let $=(U)=>{return[U.name()].concat(U.aliases())},g=$(_).find((U)=>this._findCommand(U));if(g){let U=$(this._findCommand(g)).join("|"),D=$(_).join("|");throw Error(`cannot add command '${D}' as already have command '${U}'`)}this.commands.push(_)}addOption(_){this._registerOption(_);let $=_.name(),g=_.attributeName();if(_.negate){let D=_.long.replace(/^--no-/,"--");if(!this._findOption(D))this.setOptionValueWithSource(g,_.defaultValue===void 0?!0:_.defaultValue,"default")}else if(_.defaultValue!==void 0)this.setOptionValueWithSource(g,_.defaultValue,"default");let U=(D,I,j)=>{if(D==null&&_.presetArg!==void 0)D=_.presetArg;let E=this.getOptionValue(g);if(D!==null&&_.parseArg)D=this._callParseArg(_,D,E,I);else if(D!==null&&_.variadic)D=_._concatValue(D,E);if(D==null)if(_.negate)D=!1;else if(_.isBoolean()||_.optional)D=!0;else D="";this.setOptionValueWithSource(g,D,j)};if(this.on("option:"+$,(D)=>{let I=`error: option '${_.flags}' argument '${D}' is invalid.`;U(D,I,"cli")}),_.envVar)this.on("optionEnv:"+$,(D)=>{let I=`error: option '${_.flags}' value '${D}' from env '${_.envVar}' is invalid.`;U(D,I,"env")});return this}_optionEx(_,$,g,U,D){if(typeof $==="object"&&$ instanceof R8)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let I=this.createOption($,g);if(I.makeOptionMandatory(!!_.mandatory),typeof U==="function")I.default(D).argParser(U);else if(U instanceof RegExp){let j=U;U=(E,A)=>{let O=j.exec(E);return O?O[0]:A},I.default(D).argParser(U)}else I.default(U);return this.addOption(I)}option(_,$,g,U){return this._optionEx({},_,$,g,U)}requiredOption(_,$,g,U){return this._optionEx({mandatory:!0},_,$,g,U)}combineFlagAndOptionalValue(_=!0){return this._combineFlagAndOptionalValue=!!_,this}allowUnknownOption(_=!0){return this._allowUnknownOption=!!_,this}allowExcessArguments(_=!0){return this._allowExcessArguments=!!_,this}enablePositionalOptions(_=!0){return this._enablePositionalOptions=!!_,this}passThroughOptions(_=!0){return this._passThroughOptions=!!_,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(_=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!_,this}getOptionValue(_){if(this._storeOptionsAsProperties)return this[_];return this._optionValues[_]}setOptionValue(_,$){return this.setOptionValueWithSource(_,$,void 0)}setOptionValueWithSource(_,$,g){if(this._storeOptionsAsProperties)this[_]=$;else this._optionValues[_]=$;return this._optionValueSources[_]=g,this}getOptionValueSource(_){return this._optionValueSources[_]}getOptionValueSourceWithGlobals(_){let $;return this._getCommandAndAncestors().forEach((g)=>{if(g.getOptionValueSource(_)!==void 0)$=g.getOptionValueSource(_)}),$}_prepareUserArgs(_,$){if(_!==void 0&&!Array.isArray(_))throw Error("first parameter to parse must be array or undefined");if($=$||{},_===void 0&&$.from===void 0){if(N_.versions?.electron)$.from="electron";let U=N_.execArgv??[];if(U.includes("-e")||U.includes("--eval")||U.includes("-p")||U.includes("--print"))$.from="eval"}if(_===void 0)_=N_.argv;this.rawArgs=_.slice();let g;switch($.from){case void 0:case"node":this._scriptPath=_[1],g=_.slice(2);break;case"electron":if(N_.defaultApp)this._scriptPath=_[1],g=_.slice(2);else g=_.slice(1);break;case"user":g=_.slice(0);break;case"eval":g=_.slice(1);break;default:throw Error(`unexpected parse option { from: '${$.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",g}parse(_,$){this._prepareForParse();let g=this._prepareUserArgs(_,$);return this._parseCommand([],g),this}async parseAsync(_,$){this._prepareForParse();let g=this._prepareUserArgs(_,$);return await this._parseCommand([],g),this}_prepareForParse(){if(this._savedState===null)this.saveStateBeforeParse();else this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true. +- either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(_,$,g){if(zE.existsSync(_))return;let U=$?`searched for local subcommand relative to directory '${$}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",D=`'${_}' does not exist + - if '${g}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead - if the default executable name is not suitable, use the executableFile option to supply a custom name or path - - ${U}`;throw Error(g)}_executeSubCommand(_,$){$=$.slice();let D=!1,U=[".js",".ts",".tsx",".mjs",".cjs"];function g(A,L){let z=S6.resolve(A,L);if(WN.existsSync(z))return z;if(U.includes(S6.extname(L)))return;let W=U.find((J)=>WN.existsSync(`${z}${J}`));if(W)return`${z}${W}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let I=_._executableFile||`${this._name}-${_._name}`,j=this._executableDir||"";if(this._scriptPath){let A;try{A=WN.realpathSync(this._scriptPath)}catch{A=this._scriptPath}j=S6.resolve(S6.dirname(A),j)}if(j){let A=g(j,I);if(!A&&!_._executableFile&&this._scriptPath){let L=S6.basename(this._scriptPath,S6.extname(this._scriptPath));if(L!==this._name)A=g(j,`${L}-${_._name}`)}I=A||I}D=U.includes(S6.extname(I));let N;if(E_.platform!=="win32")if(D)$.unshift(I),$=z8(E_.execArgv).concat($),N=s3.spawn(E_.argv[0],$,{stdio:"inherit"});else N=s3.spawn(I,$,{stdio:"inherit"});else this._checkForMissingExecutable(I,j,_._name),$.unshift(I),$=z8(E_.execArgv).concat($),N=s3.spawn(E_.execPath,$,{stdio:"inherit"});if(!N.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((L)=>{E_.on(L,()=>{if(N.killed===!1&&N.exitCode===null)N.kill(L)})});let O=this._exitCallback;N.on("close",(A)=>{if(A=A??1,!O)E_.exit(A);else O(new _z(A,"commander.executeSubCommandAsync","(close)"))}),N.on("error",(A)=>{if(A.code==="ENOENT")this._checkForMissingExecutable(I,j,_._name);else if(A.code==="EACCES")throw Error(`'${I}' not executable`);if(!O)E_.exit(1);else{let L=new _z(1,"commander.executeSubCommandAsync","(error)");L.nestedError=A,O(L)}}),this.runningCommand=N}_dispatchSubcommand(_,$,D){let U=this._findCommand(_);if(!U)this.help({error:!0});U._prepareForParse();let g;return g=this._chainOrCallSubCommandHook(g,U,"preSubcommand"),g=this._chainOrCall(g,()=>{if(U._executableHandler)this._executeSubCommand(U,$.concat(D));else return U._parseCommand($,D)}),g}_dispatchHelpCommand(_){if(!_)this.help();let $=this._findCommand(_);if($&&!$._executableHandler)$.help();return this._dispatchSubcommand(_,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach((_,$)=>{if(_.required&&this.args[$]==null)this.missingArgument(_.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let _=(D,U,g)=>{let I=U;if(U!==null&&D.parseArg){let j=`error: command-argument value '${U}' is invalid for argument '${D.name()}'.`;I=this._callParseArg(D,U,g,j)}return I};this._checkNumberOfArguments();let $=[];this.registeredArguments.forEach((D,U)=>{let g=D.defaultValue;if(D.variadic){if(U{return _(D,j,I)},D.defaultValue)}else if(g===void 0)g=[]}else if(U$());return $()}_chainOrCallHooks(_,$){let D=_,U=[];if(this._getCommandAndAncestors().reverse().filter((g)=>g._lifeCycleHooks[$]!==void 0).forEach((g)=>{g._lifeCycleHooks[$].forEach((I)=>{U.push({hookedCommand:g,callback:I})})}),$==="postAction")U.reverse();return U.forEach((g)=>{D=this._chainOrCall(D,()=>{return g.callback(g.hookedCommand,this)})}),D}_chainOrCallSubCommandHook(_,$,D){let U=_;if(this._lifeCycleHooks[D]!==void 0)this._lifeCycleHooks[D].forEach((g)=>{U=this._chainOrCall(U,()=>{return g(this,$)})});return U}_parseCommand(_,$){let D=this.parseOptions($);if(this._parseOptionsEnv(),this._parseOptionsImplied(),_=_.concat(D.operands),$=D.unknown,this.args=_.concat($),_&&this._findCommand(_[0]))return this._dispatchSubcommand(_[0],_.slice(1),$);if(this._getHelpCommand()&&_[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(_[1]);if(this._defaultCommandName)return this._outputHelpIfRequested($),this._dispatchSubcommand(this._defaultCommandName,_,$);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(D.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let U=()=>{if(D.unknown.length>0)this.unknownOption(D.unknown[0])},g=`command:${this.name()}`;if(this._actionHandler){U(),this._processArguments();let I;if(I=this._chainOrCallHooks(I,"preAction"),I=this._chainOrCall(I,()=>this._actionHandler(this.processedArgs)),this.parent)I=this._chainOrCall(I,()=>{this.parent.emit(g,_,$)});return I=this._chainOrCallHooks(I,"postAction"),I}if(this.parent&&this.parent.listenerCount(g))U(),this._processArguments(),this.parent.emit(g,_,$);else if(_.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",_,$);if(this.listenerCount("command:*"))this.emit("command:*",_,$);else if(this.commands.length)this.unknownCommand();else U(),this._processArguments()}else if(this.commands.length)U(),this.help({error:!0});else U(),this._processArguments()}_findCommand(_){if(!_)return;return this.commands.find(($)=>$._name===_||$._aliases.includes(_))}_findOption(_){return this.options.find(($)=>$.is(_))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach((_)=>{_.options.forEach(($)=>{if($.mandatory&&_.getOptionValue($.attributeName())===void 0)_.missingMandatoryOptionValue($)})})}_checkForConflictingLocalOptions(){let _=this.options.filter((D)=>{let U=D.attributeName();if(this.getOptionValue(U)===void 0)return!1;return this.getOptionValueSource(U)!=="default"});_.filter((D)=>D.conflictsWith.length>0).forEach((D)=>{let U=_.find((g)=>D.conflictsWith.includes(g.attributeName()));if(U)this._conflictingOption(D,U)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach((_)=>{_._checkForConflictingLocalOptions()})}parseOptions(_){let $=[],D=[],U=$,g=_.slice();function I(N){return N.length>1&&N[0]==="-"}let j=null;while(g.length){let N=g.shift();if(N==="--"){if(U===D)U.push(N);U.push(...g);break}if(j&&!I(N)){this.emit(`option:${j.name()}`,N);continue}if(j=null,I(N)){let O=this._findOption(N);if(O){if(O.required){let A=g.shift();if(A===void 0)this.optionMissingArgument(O);this.emit(`option:${O.name()}`,A)}else if(O.optional){let A=null;if(g.length>0&&!I(g[0]))A=g.shift();this.emit(`option:${O.name()}`,A)}else this.emit(`option:${O.name()}`);j=O.variadic?O:null;continue}}if(N.length>2&&N[0]==="-"&&N[1]!=="-"){let O=this._findOption(`-${N[1]}`);if(O){if(O.required||O.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${O.name()}`,N.slice(2));else this.emit(`option:${O.name()}`),g.unshift(`-${N.slice(2)}`);continue}}if(/^--[^=]+=/.test(N)){let O=N.indexOf("="),A=this._findOption(N.slice(0,O));if(A&&(A.required||A.optional)){this.emit(`option:${A.name()}`,N.slice(O+1));continue}}if(I(N))U=D;if((this._enablePositionalOptions||this._passThroughOptions)&&$.length===0&&D.length===0){if(this._findCommand(N)){if($.push(N),g.length>0)D.push(...g);break}else if(this._getHelpCommand()&&N===this._getHelpCommand().name()){if($.push(N),g.length>0)$.push(...g);break}else if(this._defaultCommandName){if(D.push(N),g.length>0)D.push(...g);break}}if(this._passThroughOptions){if(U.push(N),g.length>0)U.push(...g);break}U.push(N)}return{operands:$,unknown:D}}opts(){if(this._storeOptionsAsProperties){let _={},$=this.options.length;for(let D=0;D<$;D++){let U=this.options[D].attributeName();_[U]=U===this._versionOptionName?this._version:this[U]}return _}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((_,$)=>Object.assign(_,$.opts()),{})}error(_,$){if(this._outputConfiguration.outputError(`${_} + - ${U}`;throw Error(D)}_executeSubCommand(_,$){$=$.slice();let g=!1,U=[".js",".ts",".tsx",".mjs",".cjs"];function D(O,P){let W=R6.resolve(O,P);if(zE.existsSync(W))return W;if(U.includes(R6.extname(P)))return;let z=U.find((S)=>zE.existsSync(`${W}${S}`));if(z)return`${W}${z}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let I=_._executableFile||`${this._name}-${_._name}`,j=this._executableDir||"";if(this._scriptPath){let O;try{O=zE.realpathSync(this._scriptPath)}catch{O=this._scriptPath}j=R6.resolve(R6.dirname(O),j)}if(j){let O=D(j,I);if(!O&&!_._executableFile&&this._scriptPath){let P=R6.basename(this._scriptPath,R6.extname(this._scriptPath));if(P!==this._name)O=D(j,`${P}-${_._name}`)}I=O||I}g=U.includes(R6.extname(I));let E;if(N_.platform!=="win32")if(g)$.unshift(I),$=X8(N_.execArgv).concat($),E=UJ.spawn(N_.argv[0],$,{stdio:"inherit"});else E=UJ.spawn(I,$,{stdio:"inherit"});else this._checkForMissingExecutable(I,j,_._name),$.unshift(I),$=X8(N_.execArgv).concat($),E=UJ.spawn(N_.execPath,$,{stdio:"inherit"});if(!E.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((P)=>{N_.on(P,()=>{if(E.killed===!1&&E.exitCode===null)E.kill(P)})});let A=this._exitCallback;E.on("close",(O)=>{if(O=O??1,!A)N_.exit(O);else A(new IJ(O,"commander.executeSubCommandAsync","(close)"))}),E.on("error",(O)=>{if(O.code==="ENOENT")this._checkForMissingExecutable(I,j,_._name);else if(O.code==="EACCES")throw Error(`'${I}' not executable`);if(!A)N_.exit(1);else{let P=new IJ(1,"commander.executeSubCommandAsync","(error)");P.nestedError=O,A(P)}}),this.runningCommand=E}_dispatchSubcommand(_,$,g){let U=this._findCommand(_);if(!U)this.help({error:!0});U._prepareForParse();let D;return D=this._chainOrCallSubCommandHook(D,U,"preSubcommand"),D=this._chainOrCall(D,()=>{if(U._executableHandler)this._executeSubCommand(U,$.concat(g));else return U._parseCommand($,g)}),D}_dispatchHelpCommand(_){if(!_)this.help();let $=this._findCommand(_);if($&&!$._executableHandler)$.help();return this._dispatchSubcommand(_,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach((_,$)=>{if(_.required&&this.args[$]==null)this.missingArgument(_.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let _=(g,U,D)=>{let I=U;if(U!==null&&g.parseArg){let j=`error: command-argument value '${U}' is invalid for argument '${g.name()}'.`;I=this._callParseArg(g,U,D,j)}return I};this._checkNumberOfArguments();let $=[];this.registeredArguments.forEach((g,U)=>{let D=g.defaultValue;if(g.variadic){if(U{return _(g,j,I)},g.defaultValue)}else if(D===void 0)D=[]}else if(U$());return $()}_chainOrCallHooks(_,$){let g=_,U=[];if(this._getCommandAndAncestors().reverse().filter((D)=>D._lifeCycleHooks[$]!==void 0).forEach((D)=>{D._lifeCycleHooks[$].forEach((I)=>{U.push({hookedCommand:D,callback:I})})}),$==="postAction")U.reverse();return U.forEach((D)=>{g=this._chainOrCall(g,()=>{return D.callback(D.hookedCommand,this)})}),g}_chainOrCallSubCommandHook(_,$,g){let U=_;if(this._lifeCycleHooks[g]!==void 0)this._lifeCycleHooks[g].forEach((D)=>{U=this._chainOrCall(U,()=>{return D(this,$)})});return U}_parseCommand(_,$){let g=this.parseOptions($);if(this._parseOptionsEnv(),this._parseOptionsImplied(),_=_.concat(g.operands),$=g.unknown,this.args=_.concat($),_&&this._findCommand(_[0]))return this._dispatchSubcommand(_[0],_.slice(1),$);if(this._getHelpCommand()&&_[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(_[1]);if(this._defaultCommandName)return this._outputHelpIfRequested($),this._dispatchSubcommand(this._defaultCommandName,_,$);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(g.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let U=()=>{if(g.unknown.length>0)this.unknownOption(g.unknown[0])},D=`command:${this.name()}`;if(this._actionHandler){U(),this._processArguments();let I;if(I=this._chainOrCallHooks(I,"preAction"),I=this._chainOrCall(I,()=>this._actionHandler(this.processedArgs)),this.parent)I=this._chainOrCall(I,()=>{this.parent.emit(D,_,$)});return I=this._chainOrCallHooks(I,"postAction"),I}if(this.parent&&this.parent.listenerCount(D))U(),this._processArguments(),this.parent.emit(D,_,$);else if(_.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",_,$);if(this.listenerCount("command:*"))this.emit("command:*",_,$);else if(this.commands.length)this.unknownCommand();else U(),this._processArguments()}else if(this.commands.length)U(),this.help({error:!0});else U(),this._processArguments()}_findCommand(_){if(!_)return;return this.commands.find(($)=>$._name===_||$._aliases.includes(_))}_findOption(_){return this.options.find(($)=>$.is(_))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach((_)=>{_.options.forEach(($)=>{if($.mandatory&&_.getOptionValue($.attributeName())===void 0)_.missingMandatoryOptionValue($)})})}_checkForConflictingLocalOptions(){let _=this.options.filter((g)=>{let U=g.attributeName();if(this.getOptionValue(U)===void 0)return!1;return this.getOptionValueSource(U)!=="default"});_.filter((g)=>g.conflictsWith.length>0).forEach((g)=>{let U=_.find((D)=>g.conflictsWith.includes(D.attributeName()));if(U)this._conflictingOption(g,U)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach((_)=>{_._checkForConflictingLocalOptions()})}parseOptions(_){let $=[],g=[],U=$,D=_.slice();function I(E){return E.length>1&&E[0]==="-"}let j=null;while(D.length){let E=D.shift();if(E==="--"){if(U===g)U.push(E);U.push(...D);break}if(j&&!I(E)){this.emit(`option:${j.name()}`,E);continue}if(j=null,I(E)){let A=this._findOption(E);if(A){if(A.required){let O=D.shift();if(O===void 0)this.optionMissingArgument(A);this.emit(`option:${A.name()}`,O)}else if(A.optional){let O=null;if(D.length>0&&!I(D[0]))O=D.shift();this.emit(`option:${A.name()}`,O)}else this.emit(`option:${A.name()}`);j=A.variadic?A:null;continue}}if(E.length>2&&E[0]==="-"&&E[1]!=="-"){let A=this._findOption(`-${E[1]}`);if(A){if(A.required||A.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${A.name()}`,E.slice(2));else this.emit(`option:${A.name()}`),D.unshift(`-${E.slice(2)}`);continue}}if(/^--[^=]+=/.test(E)){let A=E.indexOf("="),O=this._findOption(E.slice(0,A));if(O&&(O.required||O.optional)){this.emit(`option:${O.name()}`,E.slice(A+1));continue}}if(I(E))U=g;if((this._enablePositionalOptions||this._passThroughOptions)&&$.length===0&&g.length===0){if(this._findCommand(E)){if($.push(E),D.length>0)g.push(...D);break}else if(this._getHelpCommand()&&E===this._getHelpCommand().name()){if($.push(E),D.length>0)$.push(...D);break}else if(this._defaultCommandName){if(g.push(E),D.length>0)g.push(...D);break}}if(this._passThroughOptions){if(U.push(E),D.length>0)U.push(...D);break}U.push(E)}return{operands:$,unknown:g}}opts(){if(this._storeOptionsAsProperties){let _={},$=this.options.length;for(let g=0;g<$;g++){let U=this.options[g].attributeName();_[U]=U===this._versionOptionName?this._version:this[U]}return _}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((_,$)=>Object.assign(_,$.opts()),{})}error(_,$){if(this._outputConfiguration.outputError(`${_} `,this._outputConfiguration.writeErr),typeof this._showHelpAfterError==="string")this._outputConfiguration.writeErr(`${this._showHelpAfterError} `);else if(this._showHelpAfterError)this._outputConfiguration.writeErr(` -`),this.outputHelp({error:!0});let D=$||{},U=D.exitCode||1,g=D.code||"commander.error";this._exit(U,g,_)}_parseOptionsEnv(){this.options.forEach((_)=>{if(_.envVar&&_.envVar in E_.env){let $=_.attributeName();if(this.getOptionValue($)===void 0||["default","config","env"].includes(this.getOptionValueSource($)))if(_.required||_.optional)this.emit(`optionEnv:${_.name()}`,E_.env[_.envVar]);else this.emit(`optionEnv:${_.name()}`)}})}_parseOptionsImplied(){let _=new _r(this.options),$=(D)=>{return this.getOptionValue(D)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(D))};this.options.filter((D)=>D.implied!==void 0&&$(D.attributeName())&&_.valueFromOption(this.getOptionValue(D.attributeName()),D)).forEach((D)=>{Object.keys(D.implied).filter((U)=>!$(U)).forEach((U)=>{this.setOptionValueWithSource(U,D.implied[U],"implied")})})}missingArgument(_){let $=`error: missing required argument '${_}'`;this.error($,{code:"commander.missingArgument"})}optionMissingArgument(_){let $=`error: option '${_.flags}' argument missing`;this.error($,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(_){let $=`error: required option '${_.flags}' not specified`;this.error($,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(_,$){let D=(I)=>{let j=I.attributeName(),N=this.getOptionValue(j),O=this.options.find((L)=>L.negate&&j===L.attributeName()),A=this.options.find((L)=>!L.negate&&j===L.attributeName());if(O&&(O.presetArg===void 0&&N===!1||O.presetArg!==void 0&&N===O.presetArg))return O;return A||I},U=(I)=>{let j=D(I),N=j.attributeName();if(this.getOptionValueSource(N)==="env")return`environment variable '${j.envVar}'`;return`option '${j.flags}'`},g=`error: ${U(_)} cannot be used with ${U($)}`;this.error(g,{code:"commander.conflictingOption"})}unknownOption(_){if(this._allowUnknownOption)return;let $="";if(_.startsWith("--")&&this._showSuggestionAfterError){let U=[],g=this;do{let I=g.createHelp().visibleOptions(g).filter((j)=>j.long).map((j)=>j.long);U=U.concat(I),g=g.parent}while(g&&!g._enablePositionalOptions);$=P8(_,U)}let D=`error: unknown option '${_}'${$}`;this.error(D,{code:"commander.unknownOption"})}_excessArguments(_){if(this._allowExcessArguments)return;let $=this.registeredArguments.length,D=$===1?"":"s",g=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${$} argument${D} but got ${_.length}.`;this.error(g,{code:"commander.excessArguments"})}unknownCommand(){let _=this.args[0],$="";if(this._showSuggestionAfterError){let U=[];this.createHelp().visibleCommands(this).forEach((g)=>{if(U.push(g.name()),g.alias())U.push(g.alias())}),$=P8(_,U)}let D=`error: unknown command '${_}'${$}`;this.error(D,{code:"commander.unknownCommand"})}version(_,$,D){if(_===void 0)return this._version;this._version=_,$=$||"-V, --version",D=D||"output the version number";let U=this.createOption($,D);return this._versionOptionName=U.attributeName(),this._registerOption(U),this.on("option:"+U.name(),()=>{this._outputConfiguration.writeOut(`${_} -`),this._exit(0,"commander.version",_)}),this}description(_,$){if(_===void 0&&$===void 0)return this._description;if(this._description=_,$)this._argsDescription=$;return this}summary(_){if(_===void 0)return this._summary;return this._summary=_,this}alias(_){if(_===void 0)return this._aliases[0];let $=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)$=this.commands[this.commands.length-1];if(_===$._name)throw Error("Command alias can't be the same as its name");let D=this.parent?._findCommand(_);if(D){let U=[D.name()].concat(D.aliases()).join("|");throw Error(`cannot add alias '${_}' to command '${this.name()}' as already have command '${U}'`)}return $._aliases.push(_),this}aliases(_){if(_===void 0)return this._aliases;return _.forEach(($)=>this.alias($)),this}usage(_){if(_===void 0){if(this._usage)return this._usage;let $=this.registeredArguments.map((D)=>{return ev(D)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?$:[]).join(" ")}return this._usage=_,this}name(_){if(_===void 0)return this._name;return this._name=_,this}nameFromFilename(_){return this._name=S6.basename(_,S6.extname(_)),this}executableDir(_){if(_===void 0)return this._executableDir;return this._executableDir=_,this}helpInformation(_){let $=this.createHelp(),D=this._getOutputContext(_);$.prepareContext({error:D.error,helpWidth:D.helpWidth,outputHasColors:D.hasColors});let U=$.formatHelp(this,$);if(D.hasColors)return U;return this._outputConfiguration.stripColor(U)}_getOutputContext(_){_=_||{};let $=!!_.error,D,U,g;if($)D=(j)=>this._outputConfiguration.writeErr(j),U=this._outputConfiguration.getErrHasColors(),g=this._outputConfiguration.getErrHelpWidth();else D=(j)=>this._outputConfiguration.writeOut(j),U=this._outputConfiguration.getOutHasColors(),g=this._outputConfiguration.getOutHelpWidth();return{error:$,write:(j)=>{if(!U)j=this._outputConfiguration.stripColor(j);return D(j)},hasColors:U,helpWidth:g}}outputHelp(_){let $;if(typeof _==="function")$=_,_=void 0;let D=this._getOutputContext(_),U={error:D.error,write:D.write,command:this};this._getCommandAndAncestors().reverse().forEach((I)=>I.emit("beforeAllHelp",U)),this.emit("beforeHelp",U);let g=this.helpInformation({error:D.error});if($){if(g=$(g),typeof g!=="string"&&!Buffer.isBuffer(g))throw Error("outputHelp callback must return a string or a Buffer")}if(D.write(g),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",U),this._getCommandAndAncestors().forEach((I)=>I.emit("afterAllHelp",U))}helpOption(_,$){if(typeof _==="boolean"){if(_)this._helpOption=this._helpOption??void 0;else this._helpOption=null;return this}return _=_??"-h, --help",$=$??"display help for command",this._helpOption=this.createOption(_,$),this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(_){return this._helpOption=_,this}help(_){this.outputHelp(_);let $=Number(E_.exitCode??0);if($===0&&_&&typeof _!=="function"&&_.error)$=1;this._exit($,"commander.help","(outputHelp)")}addHelpText(_,$){let D=["beforeAll","before","after","afterAll"];if(!D.includes(_))throw Error(`Unexpected value for position to addHelpText. -Expecting one of '${D.join("', '")}'`);let U=`${_}Help`;return this.on(U,(g)=>{let I;if(typeof $==="function")I=$({error:g.error,command:g.command});else I=$;if(I)g.write(`${I} -`)}),this}_outputHelpIfRequested(_){let $=this._getHelpOption();if($&&_.find((U)=>$.is(U)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function z8(_){return _.map(($)=>{if(!$.startsWith("--inspect"))return $;let D,U="127.0.0.1",g="9229",I;if((I=$.match(/^(--inspect(-brk)?)$/))!==null)D=I[1];else if((I=$.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(D=I[1],/^\d+$/.test(I[3]))g=I[3];else U=I[3];else if((I=$.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)D=I[1],U=I[3],g=I[4];if(D&&g!=="0")return`${D}=${U}:${parseInt(g)+1}`;return $})}function $z(){if(E_.env.NO_COLOR||E_.env.FORCE_COLOR==="0"||E_.env.FORCE_COLOR==="false")return!1;if(E_.env.FORCE_COLOR||E_.env.CLICOLOR_FORCE!==void 0)return!0;return}$r.Command=Dz;$r.useColor=$z});var G8=e6((jr)=>{var{Argument:W8}=SN(),{Command:gz}=S8(),{CommanderError:Ur,InvalidArgumentError:X8}=VU(),{Help:Ir}=e3(),{Option:R8}=a3();jr.program=new gz;jr.createCommand=(_)=>new gz(_);jr.createOption=(_,$)=>new R8(_,$);jr.createArgument=(_,$)=>new W8(_,$);jr.Command=gz;jr.Option=R8;jr.Argument=W8;jr.Help=Ir;jr.CommanderError=Ur;jr.InvalidArgumentError=X8;jr.InvalidOptionArgumentError=X8});import{chmodSync as Tz,closeSync as ZD,existsSync as U0,fsyncSync as CN,lstatSync as JY,openSync as vN,readFileSync as bD,renameSync as qz,unlinkSync as rN,writeFileSync as fN}from"fs";import{randomUUID as HD}from"crypto";import{basename as PY,dirname as Bz,join as kN}from"path";import{chmodSync as Pz,existsSync as NY,mkdirSync as VN,readFileSync as EY,writeFileSync as zz}from"fs";import{homedir as KN}from"os";import{dirname as OY,join as x_,resolve as Sz}from"path";var l$=x_(".hasna","knowledge"),Wz=x_(".hasna","apps","knowledge"),P_={division:"xyz",app_type:"opensource",app:"knowledge",env:"prod",local_path:l$,s3:{bucket:"example-knowledge-prod",region:"us-east-1",profile:"example-infra",prefix:".hasna/knowledge",server_side_encryption:"AES256"},secrets:{env:"example/knowledge/prod/env",aws:"example/knowledge/prod/aws",s3:"example/knowledge/prod/s3",rds:null,future_rds:"example/knowledge/prod/rds"},source_owner:"open-files",evidence_doc:"docs/canonical-secrets-bootstrap-2026-06-08.md"};function Xz(){return{type:"s3",artifacts_root:"artifacts",s3:{bucket:P_.s3.bucket,prefix:P_.s3.prefix,region:P_.s3.region,profile:P_.s3.profile,server_side_encryption:P_.s3.server_side_encryption}}}function FD(){return x_(KN(),".open-knowledge","db.json")}function bU(){return x_(KN(),".hasna","knowledge")}function FN(_=process.cwd()){return Sz(_,l$)}function AY(){return x_(KN(),Wz)}function LY(_=process.cwd()){return Sz(_,Wz)}function MN(_,$=process.cwd()){if(_==="project"||_==="local")return g$(LY($));return g$(AY())}function g$(_){return{home:_,configPath:x_(_,"config.json"),jsonStorePath:x_(_,"db.json"),knowledgeDbPath:x_(_,"knowledge.db"),artifactsDir:x_(_,"artifacts"),cacheDir:x_(_,"cache"),exportsDir:x_(_,"exports"),indexesDir:x_(_,"indexes"),logsDir:x_(_,"logs"),runsDir:x_(_,"runs"),schemasDir:x_(_,"schemas"),wikiDir:x_(_,"wiki")}}function MD(){return{version:1,mode:"local",hosted:{api_url:"https://knowledge.md"},storage:{type:"local",artifacts_root:"artifacts"},sources:{preferred_ref:"open-files",allowed_schemes:["open-files","s3","file","https","http"]},providers:{default_model:"openai:gpt-5.2",aliases:{fast:"openai:gpt-5-mini",reasoning:"anthropic:claude-opus-4-6",sonnet:"anthropic:claude-sonnet-4-6",deepseek:"deepseek:deepseek-chat","deepseek-reasoning":"deepseek:deepseek-reasoner"},openai:{api_key_env:"OPENAI_API_KEY",default_model:"gpt-5.2"},anthropic:{api_key_env:"ANTHROPIC_API_KEY",default_model:"claude-sonnet-4-6"},deepseek:{api_key_env:"DEEPSEEK_API_KEY",default_model:"deepseek-chat"}},embeddings:{default_model:"openai:text-embedding-3-small",dimensions:1536,batch_size:64,max_parallel_calls:4},safety:{network:{web_search_enabled:!1,s3_reads_enabled:!1,allowed_s3_buckets:[]},redaction:{enabled:!0},approvals:{generated_writes_require_approval:!0}}}}function g0(_){let $=g$(_);VN($.home,{recursive:!0,mode:448});for(let D of[$.artifactsDir,$.cacheDir,$.exportsDir,$.indexesDir,$.logsDir,$.runsDir,$.schemasDir,$.wikiDir])VN(D,{recursive:!0,mode:448});if(!NY($.configPath))zz($.configPath,`${JSON.stringify(MD(),null,2)} -`,{mode:384}),Pz($.configPath,384);return $}function HU(_,$=process.cwd()){if(_==="project"||_==="local")return g$(FN($));return g$(bU())}function X6(_){VN(OY(_),{recursive:!0})}function ZN(_){let $=EY(_,"utf8");return JSON.parse($)}function Rz(_,$){X6(_),zz(_,`${JSON.stringify($,null,2)} -`,{mode:384}),Pz(_,384)}function Vz(_,$){if(!$)return!0;let D=$.toLowerCase();return _.id.toLowerCase().includes(D)||_.title.toLowerCase().includes(D)||_.content.toLowerCase().includes(D)}function CU(){return g$(bU()).jsonStorePath}function kD(_){if(_===CU()&&U0(FD()))uN();if(!U0(_))X6(_),Mz(_,`${JSON.stringify({items:[]},null,2)} -`)}function zY(_){return _.toISOString().replace(/[:.]/g,"-")}function wN(_){let $=[`id:${_.id}`];if(typeof _.short_id==="string"&&_.short_id.length>0)$.push(`short_id:${_.short_id}`);return $}function SY(_){let $=new Set;for(let D of _)for(let U of wN(D))$.add(U);return $}function WY(_,$){return wN($).some((D)=>_.has(D))}function bN(_,$){X6(_),fN(_,`${JSON.stringify($,null,2)} -`,{mode:384}),Tz(_,384)}function Gz(_){let $=JSON.parse(bD(_,"utf8"));if(!$||typeof $!=="object"||!Array.isArray($.items))return{store:{items:[]},skippedInvalid:0};let D={items:[]},U=0;for(let g of $.items)if(g&&typeof g==="object"&&typeof g.id==="string"&&g.id.length>0)D.items.push(g);else U+=1;return{store:D,skippedInvalid:U}}function uN(_={}){if(_.dryRun===!0)return Yz(_);return r$(CU(),()=>Yz(_),{createParent:!0})}function Yz(_={}){let $=_.dryRun===!0,D=_.now??new Date,U=g$(bU()),g=FD(),I=U.jsonStorePath,j=U0(g),N=U0(I),O={ok:!0,dry_run:$,legacy_path:g,canonical_path:I,legacy_exists:j,canonical_existed:N,canonical_created:!1,would_create_canonical:!1,imported:0,skipped_existing:0,skipped_invalid:0,backup_path:null,report_path:null,errors:[],message:j?"Legacy global store already imported":"No legacy global store found"};if(!j)return O;let A;try{let P=Gz(g);A=P.store,O.skipped_invalid=P.skippedInvalid}catch(P){return O.ok=!1,O.errors.push(`Could not read legacy store: ${P instanceof Error?P.message:String(P)}`),O.message="Legacy global store import failed",O}let L={items:[]};if(N)try{L=Gz(I).store}catch(P){return O.ok=!1,O.errors.push(`Could not read canonical store: ${P instanceof Error?P.message:String(P)}`),O.message="Legacy global store import failed",O}let z=SY(L.items),W={items:[...L.items]};for(let P of A.items){if(!P?.id){O.skipped_invalid+=1;continue}if(WY(z,P)){O.skipped_existing+=1;continue}W.items.push(P);for(let S of wN(P))z.add(S);O.imported+=1}if(O.would_create_canonical=!N&&O.imported>0,O.canonical_created=!$&&O.would_create_canonical,O.message=O.imported>0?`Imported ${O.imported} legacy item(s) into canonical knowledge store`:"Legacy global store already imported",$||O.imported===0)return O;let J=`${zY(D)}-${HD().slice(0,8)}`;if(N)O.backup_path=kN(U.exportsDir,`legacy-open-knowledge-db-before-import-${J}.json`),bN(O.backup_path,L);return bN(I,W),O.report_path=kN(U.runsDir,`legacy-open-knowledge-import-${J}.json`),bN(O.report_path,O),O}function I0(_){if(!U0(_))return{exists:!1,items:[]};let $=bD(_,"utf8"),D=JSON.parse($);if(!D||!Array.isArray(D.items))return{exists:!0,items:[]};return{exists:!0,items:D.items}}function XY(_){return`${_}.lock`}var kU=1e4,Kz=25,Qz=120000,RY=new Int32Array(new SharedArrayBuffer(4));function xN(_){return typeof _==="object"&&_!==null&&"code"in _?String(_.code):void 0}function Fz(_){let $=null;try{$=vN(Bz(_),"r"),CN($)}catch{}finally{if($!==null)try{ZD($)}catch{}}}var HN=new Set;function Mz(_,$){X6(_);let D=kN(Bz(_),`.${PY(_)}.tmp.${HD()}`),U=null;try{U=vN(D,"wx",384),fN(U,$),CN(U),ZD(U),U=null,qz(D,_);try{Tz(_,384)}catch{}Fz(_)}catch(g){if(U!==null)try{ZD(U)}catch{}try{rN(D)}catch{}throw g}}function Zz(_){Atomics.wait(RY,0,0,_)}function GY(_){if(typeof _!=="number"||!Number.isInteger(_)||_<=0)return!1;try{return process.kill(_,0),!0}catch($){return xN($)!=="ESRCH"}}function bz(_,$){try{let D=bD(_,"utf8"),U=JSON.parse(D);if(typeof U.ts==="number")return $-U.ts>Qz&&!GY(U.pid)}catch{}try{return $-JY(_).mtimeMs>Qz}catch{return!1}}function YY(_){let $=new Date().toISOString().replace(/[-:]/g,"").replace(/\.\d{3}Z$/,"Z"),D=`${_}.stale.${$}.${HD()}`;try{qz(_,D)}catch(U){if(xN(U)!=="ENOENT")throw U;return}}function QY(_){let $=HD(),D=`${_}.breaker`,U=Date.now();while(Date.now()-U{U=I};while(Date.now()-DCY)return null;D=FY(_,"utf8")}catch{return null}let U=uY(D);for(let g of $){let I=U.get(g)?.trim();if(I)return I}return null}function j0(_,$,D){if(!fY.test(D))return;throw new vD(_,`The credential from ${$} contains characters that cannot be sent in an HTTP header (a control character or non-ASCII byte). A file written with CR-only line endings is the usual cause. Rewrite that credential file with one LF-terminated KEY=value line. The value is not shown here, and is deliberately never logged.`,[$])}var xY=Symbol.for("nodejs.util.inspect.custom");function N0(_){let{apiKey:$,...D}=_,U={...D};return Object.defineProperty(U,"apiKey",{value:$,enumerable:!1,writable:!1,configurable:!1}),Object.defineProperty(U,xY,{value:()=>({...D,apiKey:"[redacted]"}),enumerable:!1,writable:!1,configurable:!1}),U}function yY(_,$){return j0(_,"explicit apiKey option",$),N0({apiKey:$,tier:"argument",source:"explicit apiKey option",deliberate:!0,deprecated:!1,diskCandidates:[],warning:null})}function uz(_,$){for(let D of $){let U=_[D]?.trim();if(U)return{key:D,value:U}}return null}var xz=Symbol.for("hasna:contracts:credentialDeprecationNotices");function hY(){let _=globalThis,$=_[xz];if($ instanceof Set)return $;let D=new Set;return _[xz]=D,D}function cY(_){if(typeof process<"u"&&process.stderr)process.stderr.write(`${_} -`)}function nN(_,$,D={}){let{apiKeyKeys:U}=nz(_),g=dz(_,$),I=D.apiKey?.trim();if(I)return j0(_,"the explicit apiKey argument",I),N0({apiKey:I,tier:"argument",source:"explicit apiKey argument",deliberate:!0,deprecated:!1,diskCandidates:g,warning:null});let j=KY(_),N=$[j];if(N!==void 0){let z=N.trim();if(!z)throw new vD(_,`${j} is set but empty. It is a deliberate override, so it is not resolved around: either give it a real key or unset it to fall back to the credential on disk.`,[j]);return j0(_,j,z),N0({apiKey:z,tier:"override",source:j,deliberate:!0,deprecated:!1,diskCandidates:g,warning:null})}let O=D.profile?.trim()||$[yN]?.trim();if(O){let z=D.profile?.trim()?"explicit profile argument":yN;if(!rY.test(O))throw new vD(_,`Profile name from ${z} is not usable in a path. Use letters, digits, dot, dash, or underscore.`,[z]);let W=mz(_,$,O);for(let J of W){let P=wz(J,U);if(P)return j0(_,J,P),N0({apiKey:P,tier:"profile",source:J,deliberate:!0,deprecated:!1,diskCandidates:W,warning:null})}throw new vD(_,`Profile '${O}' (from ${z}) has no ${U[0]} for '${_}'. Looked in: ${W.join(", ")||""}. `+"A profile names WHICH identity to use, so it is never resolved around \u2014 "+`create the profile's credential file or unset ${yN}.`,W)}let A=g.map((z)=>({path:z,value:wz(z,U)})).filter((z)=>z.value!==null);if(A.length>0){let z=A[0];j0(_,z.path,z.value);let W=[...A.slice(1).filter((P)=>P.value!==z.value).map((P)=>P.path),...(()=>{let P=uz($,U);return P&&P.value!==z.value?[P.key]:[]})()],J=W.length>0?`Credential sources disagree for '${_}': ${z.path} and ${W.join(", ")} hold different keys. ${z.path} wins, because a file on `+"disk is re-read on every call while an environment variable is a snapshot. Reconcile them \u2014 "+"a rotation that updated only one leaves the other to fail 401 wherever it is loaded first.":null;return N0({apiKey:z.value,tier:"disk",source:z.path,deliberate:!1,deprecated:!1,diskCandidates:g,warning:J})}let L=uz($,U);if(L){j0(_,L.key,L.value);let z=g.length>0?`Put the current key in ${g[0]} \u2014 it is re-read on every call, so rotations take effect immediately.`:"This environment has no HOME, so no credential file could be consulted at all; the disk tier is unavailable here and this process will keep using the environment snapshot.",W=`[${_}] DEPRECATED: the API key came from ${L.key} in this process's environment. Environment variables are a snapshot taken when this process started, so a shell that started before a key rotation keeps using the old key until it exits. ${z}`,J=D.onDeprecation??cY,P=hY();if(!P.has(_))P.add(_),J(W);return N0({apiKey:L.value,tier:"legacy-env",source:L.key,deliberate:!1,deprecated:!0,diskCandidates:g,warning:W})}return null}var R6="HASNA_FLEET_API_DOMAIN",E0="your-deployment.example",mN=/[\u0000-\u001f\u007f]/,iz=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;function vU(_){if(_.length===0||_.length>253||mN.test(_)||/[^\x00-\x7f]/.test(_))return!1;return _.split(".").every(($)=>$.length<=63&&!$.startsWith("xn--")&&iz.test($))}function nY(_){let $=_[R6];if($===void 0)return{domain:E0,source:"default",misconfigured:!0,warning:`${R6} is not set; using the non-resolving ${E0} fallback.`};let D=$.trim().toLowerCase();if(mN.test($)||!vU(D))return{domain:E0,source:R6,misconfigured:!0,warning:`${R6} is blank or invalid; using the non-resolving ${E0} fallback.`};return{domain:D,source:R6,misconfigured:!1,warning:null}}function lz(_){if(_.length>63||!iz.test(_))throw Error("App name must be one lowercase DNS label.");return _}function dY(_,$){let D=`${lz(_)}.${$}`;if(!vU(D))throw Error("Composed cloud hostname must be a valid DNS domain");return D}function mY(_,$){let D=lz(_),U=nY($),g=`${D}.${U.domain}`;if(vU(g))return{baseUrl:`https://${g}`,source:U.source,misconfigured:U.misconfigured,warning:U.warning};return{baseUrl:`https://${dY(D,E0)}`,source:U.source,misconfigured:!0,warning:`${R6} cannot form a valid composed cloud hostname for app '${D}'; using the non-resolving ${E0} fallback.`}}function hN(_,$,D={}){for(let U of $){let g=_[U],I=g?.trim();if(I)return{key:U,value:D.preserveRaw?g:I}}return null}function iY(_){let $=/^[a-z][a-z0-9+.-]*:\/\//i.exec(_);if(!$)throw Error("API URL must be absolute.");let D=_.slice($[0].length),U=D.search(/[/?#]/),g=U===-1?D:D.slice(0,U);if(!g)throw Error("API URL must include a hostname.");return g}function yz(_){if(!/^[0-9]+$/.test(_)||_.length>1&&_.startsWith("0"))throw Error("API URL authority must contain a canonical port between 1 and 65535.");let $=Number(_);if(!Number.isSafeInteger($)||$<1||$>65535)throw Error("API URL authority must contain a canonical port between 1 and 65535.")}function lY(_){let $;if(_.startsWith("[")){let D=_.indexOf("]");if(D===-1)throw Error("API URL authority must contain a canonical hostname.");$=_.slice(0,D+1);let U=_.slice(D+1);if(U){if(!U.startsWith(":"))throw Error("API URL authority must contain a canonical hostname and port.");yz(U.slice(1))}if(rz($.slice(1,-1))!==6)throw Error("API URL authority must contain a canonical IPv6 literal.")}else{let D=_.indexOf(":"),U=_.lastIndexOf(":");if(D!==U)throw Error("IPv6 API URL authorities must use brackets.");if(U!==-1){let N=_.slice(U+1);yz(N),$=_.slice(0,U)}else $=_;let g=rz($),j=$.split(".").every((N)=>/^(?:0x[0-9a-f]+|[0-9]+)$/i.test(N));if(g!==4&&j||g!==4&&!vU($.toLowerCase()))throw Error("API URL authority must contain a canonical ASCII hostname.")}return $.toLowerCase()}function tY(_){return/^(?:localhost|127\.0\.0\.1|\[::1\])(?::[0-9]+)?$/i.test(_)}function tz(_){if(mN.test(_))throw Error("API URL must not contain ASCII control characters.");let $=_.trim(),D=iY($);if(D.includes("@")||D.includes("\\")||D.includes("%")||/[^\x00-\x7f]/.test(D))throw Error("API URL authority must be canonical ASCII without credentials.");let U=lY(D),g=new URL($);if(g.protocol!=="http:"&&g.protocol!=="https:")throw Error("API URL must use http or https.");if(g.username||g.password)throw Error("API URL must not include credentials.");if(!g.hostname||g.hostname.endsWith("."))throw Error("API URL must include a canonical hostname.");if(g.hostname.toLowerCase()!==U)throw Error("API URL authority must not rely on parser hostname normalization.");if(g.hostname.split(".").some((j)=>j.toLowerCase().startsWith("xn--")))throw Error("API URL must not use IDN or punycode hostnames.");if(g.protocol==="http:"&&!tY(D))throw Error("API URL may use http only for an exact loopback authority.");if(g.search||g.hash)throw Error("API URL must not include a query string or fragment.");let I=g.pathname.replace(/\/+$/,"");if(I.endsWith("/v1"))I=I.slice(0,-3);return g.pathname=`${I}/v1`,g.toString().replace(/\/+$/,"")}function oY(_,$=process.env,D={}){let U=nz(_),g=hN($,U.modeKeys),I=hN($,U.apiUrlKeys,{preserveRaw:!0}),j=hN($,U.apiKeyKeys),N="sqlite",O="default",A=[],L;if(g)N=VY(g.value).mode,O=g.key;else if(I){if(L=nN(_,$,D.credentials),L)N="postgres",O=`${I.key}+${L.source}`}if(N==="sqlite")return{transport:"sqlite",mode:N,modeSource:O,baseUrl:null,apiUrlSource:null,apiKeyPresent:Boolean(j),apiKeySource:j?j.key:null,apiKeyTier:null,misconfigured:!1,warning:A.length>0?A.join(" "):null};if(L===void 0)L=nN(_,$,D.credentials);if(!L){let P=oz(_,$);return A.push(`${O}=postgres but no API key could be resolved for '${_}'. A client reaches server data over HTTP only; refusing to route. Using the local sqlite store. Looked for a credential file at ${P}, then for ${U.apiKeyKeys[0]} in the environment.`),{transport:"sqlite",mode:N,modeSource:O,baseUrl:null,apiUrlSource:null,apiKeyPresent:!1,apiKeySource:null,apiKeyTier:null,misconfigured:!0,warning:A.join(" ")}}if(L.warning)A.push(L.warning);let z=null,W=I?.key??($[R6]===void 0?"default":R6),J;try{if(!I)z=mY(_,$),W=z.source;let P=I?.value??z.baseUrl;J=tz(P)}catch(P){let S=P instanceof Error?P.message:String(P);return A.push(`Invalid API URL from ${W}: ${S}. Using local store.`),{transport:"sqlite",mode:N,modeSource:O,baseUrl:null,apiUrlSource:null,apiKeyPresent:!0,apiKeySource:L.source,apiKeyTier:L.tier,misconfigured:!0,warning:A.join(" ")}}if(z?.warning)A.push(z.warning);return{transport:"http",mode:N,modeSource:O,baseUrl:J,apiUrlSource:W,apiKeyPresent:!0,apiKeySource:L.source,apiKeyTier:L.tier,misconfigured:z?.misconfigured??!1,warning:A.length>0?A.join(" "):null}}function oz(_,$){let D=dz(_,$);return D.length>0?D.join(" or "):""}class O0 extends Error{status;method;path;body;credentialSource;credentialTier;constructor(_,$,D,U,g){let I=g?`. ${g.guidance}`:"";super(`Hasna cloud request failed: ${_} ${$} -> ${D}${I}`);this.name="HasnaHttpError",this.status=D,this.method=_,this.path=$,this.body=U,this.credentialSource=g?.source??null,this.credentialTier=g?.tier??null}}function pY(_,$){if(typeof $==="function")return $();return yY(_,$)}function eY(_){let $=`The API key for this request came from ${_.source}`;if(_.deliberate)return`${$} \u2014 a credential you selected deliberately. It was NOT substituted with any other key: `+"falling back here would authenticate as a different principal than the one you named, which is exactly the failure an override exists to prevent. Rotate that key, or unset the override to use the credential on disk.";if(_.deprecated){let D=_.diskCandidates[0],U=D?`Write the CURRENT key to ${D} \u2014 that file is re-read on every call, so rotations take `+`effect immediately and in every shell. Do not simply unset ${_.source}: nothing was found on disk, so that would leave this client with no credential at all.`:"This environment has no HOME, so no credential file could be consulted; the disk tier is unavailable here and there is nothing to fall back to. Set HOME, or supply the key explicitly.";return`${$}, a variable in this process's environment \u2014 which is a snapshot taken when the process `+`started. A STALE SHELL is the most common cause of this error: this shell exported the key before it was rotated, and will keep sending the old one until it exits. ${U}`}return`${$}, which was re-read from disk on this very call \u2014 so a stale shell is NOT the cause here. `+"The stored credential is genuinely being rejected: rotate it, or re-run the fleet key distribution so this machine gets the current key."}var aY=[408,425,429,500,502,503,504],sY=new Set(["GET","HEAD","PUT","DELETE","OPTIONS"]),_Q=new Set(["host",":authority","forwarded","x-forwarded-host","x-original-host"]);function hz(_,$){if(!_)return;let D=Object.keys(_).find((U)=>_Q.has(U.trim().toLowerCase()));if(D)throw Error(`Authenticated ${$} headers must not set authority header '${D}'.`)}function $Q(_,$){if(!$)return _;let D=$ instanceof URLSearchParams?$:new URLSearchParams;if(!($ instanceof URLSearchParams))for(let[g,I]of Object.entries($)){if(I===null||I===void 0)continue;if(Array.isArray(I))for(let j of I)D.append(g,String(j));else D.append(g,String(I))}let U=D.toString();if(!U)return _;return`${_}${_.includes("?")?"&":"?"}${U}`}var DQ=(_)=>new Promise(($)=>setTimeout($,_));function gQ(_){let $=_.fetchImpl??((A,L)=>fetch(A,L)),D=tz(_.baseUrl),U=_.timeoutMs??30000,g=_.sleepImpl??DQ,I=_.retry;function j(A){let L=A!==void 0?A:I;if(L===!1)return null;let z=L??{};return{retries:z.retries??2,baseDelayMs:z.baseDelayMs??200,maxDelayMs:z.maxDelayMs??2000,retryStatuses:z.retryStatuses??[...aY]}}async function N(A,L,z,W,J,P){hz(_.headers,"transport"),hz(J.headers,"request");let S={"x-api-key":P.apiKey,Authorization:`Bearer ${P.apiKey}`,Accept:"application/json",..._.headers??{},...J.headers??{}};if(J.idempotencyKey)S["Idempotency-Key"]=J.idempotencyKey;let X={method:A,headers:S,redirect:"manual"};if(W!==void 0)S["Content-Type"]="application/json",X.body=JSON.stringify(W);let G=new AbortController,R=()=>G.abort();if(J.signal)if(J.signal.aborted)G.abort();else J.signal.addEventListener("abort",R,{once:!0});let V=setTimeout(()=>G.abort(),J.timeoutMs??U);X.signal=G.signal;let Q;try{Q=await $(z,X)}catch(K){let Z=K instanceof Error?K:Error(String(K));if(J.signal?.aborted)return{ok:!1,retryable:!1,error:Z};return{ok:!1,retryable:!0,error:Z}}finally{if(clearTimeout(V),J.signal)J.signal.removeEventListener("abort",R)}let T=await Q.text(),q=void 0;if(T.length>0)try{q=JSON.parse(T)}catch{q=T}if(!Q.ok){if(Q.status>=300&&Q.status<400)return{ok:!1,retryable:!1,error:new O0(A,L,Q.status,q)};if(Q.status===401||Q.status===403)return{ok:!1,retryable:!1,error:new O0(A,L,Q.status,q,{source:P.source,tier:P.tier,guidance:eY(P)})};let K=j(J.retry);return{ok:!1,retryable:K?K.retryStatuses.includes(Q.status):!1,error:new O0(A,L,Q.status,q)}}return{ok:!0,value:q}}async function O(A,L,z,W={}){let J=A.toUpperCase(),P=$Q(L.startsWith("/")?L:`/${L}`,W.query),S=`${D}${P}`,X=j(W.retry),G=sY.has(J)||Boolean(W.idempotencyKey),R=X&&G?X.retries+1:1,V=pY(_.name,_.apiKey),Q=null;for(let T=1;T<=R;T++){let q=await N(J,P,S,z,W,V);if(q.ok)return q.value;if(Q=q,!(X!==null&&G&&q.retryable&&TO("GET",A,void 0,L),post:(A,L,z)=>O("POST",A,L,z),put:(A,L,z)=>O("PUT",A,L,z),patch:(A,L,z)=>O("PATCH",A,L,z),del:(A,L,z)=>O("DELETE",A,L,z)}}function UQ(_,$=process.env,D){let U=D?.credentials,g=oY(_,$,{...U?{credentials:U}:{}});if(g.misconfigured)throw Error(g.warning??`Client for '${_}' is misconfigured for the API client.`);if(g.transport==="sqlite"||!g.baseUrl)return{transport:"sqlite",client:null,resolution:g};let I=()=>{let j=nN(_,$,U);if(!j)throw Error(`Client for '${_}' resolved to the http transport but no API key is available any more. Looked at ${oz(_,$)}, then the environment. A credential file that was removed after this client was built is the usual cause.`);return j};return{transport:"http",client:gQ({name:_,baseUrl:g.baseUrl,apiKey:I,...D?.fetchImpl?{fetchImpl:D.fetchImpl}:{},...D?.headers?{headers:D.headers}:{},...D?.timeoutMs?{timeoutMs:D.timeoutMs}:{},...D?.retry!==void 0?{retry:D.retry}:{},...D?.sleepImpl?{sleepImpl:D.sleepImpl}:{}}),resolution:g}}function dN(_){let $=_.replace(/^\/+|\/+$/g,"");if(!$)throw Error("resource must be a non-empty path segment");return`/${$}`}function cN(_,$){if($===void 0||$===null||`${$}`.length===0)throw Error("id must be a non-empty string");return`${dN(_)}/${encodeURIComponent(String($))}`}function IQ(){let _=globalThis;if(_.crypto?.randomUUID)return _.crypto.randomUUID();return`idmp_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,12)}`}function jQ(_){if(Array.isArray(_))return _;if(_&&typeof _==="object"){let $=_;for(let D of["items","data","results","rows","records"])if(Array.isArray($[D]))return $[D]}return[]}function NQ(_){if(_&&typeof _==="object"){let $=_;for(let D of["total","count","totalCount","total_count"])if(typeof $[D]==="number")return $[D]}return null}function EQ(_){if(_&&typeof _==="object"){let $=_;for(let D of["cursor","nextCursor","next_cursor","next"])if(typeof $[D]==="string")return $[D]}return null}function OQ(_,$){return{name:_,baseUrl:$.baseUrl,transport:$,async list(D,U={}){let g=await $.get(dN(D),U);return{items:jQ(g),total:NQ(g),cursor:EQ(g),raw:g}},async get(D,U,g={}){try{return await $.get(cN(D,U),g)}catch(I){if(I instanceof O0&&I.status===404)return null;throw I}},async create(D,U,g={}){let{idempotencyKey:I,...j}=g;return $.post(dN(D),U,{...j,idempotencyKey:I??IQ()})},async update(D,U,g,I={}){let{method:j="PATCH",idempotencyKey:N,...O}=I;return(j==="PUT"?$.put:$.patch)(cN(D,U),g,{...O,...N?{idempotencyKey:N}:{}})},async delete(D,U,g={}){try{await $.del(cN(D,U),void 0,g)}catch(I){if(I instanceof O0&&I.status===404)return;throw I}}}}function iN(_,$=process.env,D){let U=UQ(_,$,D);if(U.transport==="http")return{transport:"http",client:OQ(_,U.client)};return{transport:"sqlite",client:null}}function pz(_){return _.toUpperCase().replace(/-/g,"_")}function ez(_){let $=pz(_);return{modeKeys:[`HASNA_${$}_STORAGE_MODE`,`HASNA_${$}_MODE`,`${$}_STORAGE_MODE`,`${$}_MODE`],apiUrlKeys:[`HASNA_${$}_API_URL`,`${$}_API_URL`],apiKeyKeys:[`HASNA_${$}_API_KEY`,`${$}_API_KEY`]}}function az(_){return`HASNA_${pz(_)}_API_KEY_OVERRIDE`}var sz="HASNA_PROFILE";function rD(_){let $=_.trim().toLowerCase().replace(/-/g,"_");if($==="sqlite")return{mode:"sqlite"};if($==="postgres"||$==="postgresql")return{mode:"postgres"};throw Error(`Unknown storage mode '${_}'. The runtime-placement axis was removed; set sqlite for the on-box SQLite file or postgres for a PostgreSQL server (DATABASE_URL).`)}function rU(_){let $=_.trim().toLowerCase().replace(/-/g,"_");if($==="sqlite")return{mode:"sqlite"};if($==="postgres"||$==="postgresql")return{mode:"postgres"};throw Error(`Unknown storage mode '${_}'. The runtime-placement axis was removed; set sqlite for the on-box SQLite file or postgres for a PostgreSQL server (DATABASE_URL).`)}import Aw from"pg";class fU extends Error{scheme;port;constructor(_,$){super(_);this.name="KnowledgeNetworkGuardError",this.scheme=$.scheme,this.port=$.port}}function A0(_=process.env){return(_.NODE_ENV??"").trim().toLowerCase()==="test"}function _S(_){let $=_.split(".");if($.length!==4)return!1;if(!$.every((D)=>/^\d{1,3}$/.test(D)&&Number(D)<=255))return!1;return $[0]==="127"}function zQ(_){let $=_.trim().toLowerCase();if($.length===0)return!1;if($==="localhost"||$.endsWith(".localhost"))return!0;if(_S($))return!0;if(!$.startsWith("[")||!$.endsWith("]"))return!1;let D=$.slice(1,-1);if(D==="::1"||/^(0:){7}1$/.test(D))return!0;let U=D.split(":").pop()??"";if(/^(::ffff:|::)/.test(D)&&_S(U))return!0;return/^::(ffff:)?7f[0-9a-f]{2}:[0-9a-f]{1,4}$/.test(D)}function gS(_){if(typeof _==="string")return _;if(_ instanceof URL)return _.href;return _.url}function $S(_,$=process.env){if(!A0($))return;let D=gS(_),U;try{U=new URL(D)}catch{throw new fU("knowledge: refused an outbound request with an unparseable target while NODE_ENV=test. Under test, only loopback requests are permitted.",{scheme:"unknown",port:""})}if(zQ(U.hostname))return;throw new fU(`knowledge: refused a non-loopback ${U.protocol.replace(":","")} request while NODE_ENV=test (target host withheld on purpose). This process resolved to the cloud backend under test, which means a read or write was about to leave the machine and reach the live store. Select the mode explicitly (HASNA_KNOWLEDGE_STORAGE_MODE=sqlite) or point the API URL at 127.0.0.1 for a hermetic test.`,{scheme:U.protocol.replace(":",""),port:U.port})}var SQ=new Set([301,302,303,307,308]),DS=5;function WQ(_,$){if($?.method)return $.method.toUpperCase();if(typeof _!=="string"&&!(_ instanceof URL))return _.method.toUpperCase();return"GET"}async function wU(_,$){if($S(_),!A0()||$?.redirect!==void 0)return fetch(_,$);let D=gS(_),U=WQ(_,$),g=$?.body,I=await fetch(_,{...$??{},redirect:"manual"});for(let j=0;SQ.has(I.status);j++){let N=I.headers.get("location");if(!N)return I;let O=new URL(N,D).href;if($S(O),j>=DS){let L=new URL(O);throw new fU(`knowledge: refused to follow more than ${DS} redirects while NODE_ENV=test (target host withheld on purpose). Under test the guard follows redirects itself so every hop is checked, and a chain this long is a loop, not a route.`,{scheme:L.protocol.replace(":",""),port:L.port})}if(I.status===303||(I.status===301||I.status===302)&&U!=="GET"&&U!=="HEAD")U="GET",g=void 0;let A={...$??{},method:U,redirect:"manual"};if(g===void 0)delete A.body;else A.body=g;I=await fetch(O,A),D=O}return I}var fD="knowledge",lN=ez(fD),o$=lN.modeKeys,xU=lN.apiUrlKeys,yU=lN.apiKeyKeys;function uU(_,$){return $.filter((D)=>(_[D]??"").trim().length>0)}function wD(_=process.env){let $=[...uU(_,xU),...uU(_,yU)],D=o$[0];for(let U of o$){let g=_[U]?.trim();if(!g)continue;let I;try{I=rU(g)}catch(N){let O=N instanceof Error?N.message:String(N);throw Error(`knowledge: ${U}=${g} is not a valid mode. ${O} Unset ${U} to use the default sqlite backend, or set ${U}=sqlite or ${U}=postgres.`)}let j=[];if(U!==D)j.push(`Using alias env ${U}; the canonical key is ${D}.`);if(I.mode==="sqlite"&&$.length>0)j.push(`${U}=sqlite pins the on-box store; ${$.join(", ")} are set but ignored.`);return{mode:I.mode,source:{kind:"env",name:U,value:g},pointer_env_present:$,pointer_ignored:I.mode==="sqlite"&&$.length>0,warning:j.length>0?j.join(" "):null}}return{mode:"sqlite",source:{kind:"default",name:null,value:null},pointer_env_present:$,pointer_ignored:$.length>0,warning:$.length>0?`${$.join(", ")} are set but do NOT select a backend: mode is sqlite by default. Set ${D}=postgres to route reads and writes to the API, or unset those vars to silence this note.`:null}}var XQ=["postgres"],RQ=["sqlite"],US=new Map;function IS(_,$,D){let U=$===rD;if(U){let g=US.get(_);if(g!==void 0)return g}for(let g of _)try{if($(g),U)US.set(_,g);return g}catch{}throw Error(`knowledge: no known storage token is accepted by the installed @hasna/contracts (tried ${_.join(", ")}). The storage-mode enum has changed; add the new token to ${D} in src/knowledge-mode.ts.`)}function GQ(_=rD){return IS(XQ,_,"SERVER_MODE_CANDIDATES")}function YQ(_=rD){return IS(RQ,_,"LOCAL_MODE_CANDIDATES")}function QQ(_,$=rD){return _==="postgres"?GQ($):YQ($)}function tN(_,$){return{..._,[o$[0]]:QQ($)}}class jS extends Error{code="knowledge_mode_unset_with_api_url";constructor(_){let $=o$[0];super(`knowledge: ${_.join(", ")} names an API store, but no mode variable says to use it, so this command would silently read and write the on-box store instead. Set ${$}=postgres to use the API, or ${$}=sqlite to confirm you want the on-box store. Run 'knowledge mode' to see the full resolution.`);this.name="HalfConfiguredKnowledgeClientError"}}function NS(_=process.env,$={}){let D=wD(_);if($.storePathOverridden)return D;if(D.source.kind!=="default")return D;let U=uU(_,xU);if(U.length===0)return D;throw new jS(U)}function ES(_=process.env){let $=wD(_);return{...$,store_transport:$.mode==="postgres"?"api":"local",api_key_present:uU(_,yU).length>0,network_guard_active:A0(_)}}function OS(_){return{fetchImpl:wU,...A0(_)?{retry:!1}:{}}}var G6="notes";class L0 extends Error{expected;current;code="version_conflict";constructor(_,$){super(`version_conflict: this edit was written against version ${_} but the stored entry is now at version ${$}. Nothing was written. Re-read the entry and re-apply only if the fields you are changing are untouched between the two versions.`);this.expected=_;this.current=$;this.name="KnowledgeVersionConflictError"}}function TQ(_){let $={};if(_.search)$.search=_.search;if(_.limit!==void 0)$.limit=_.limit;if(_.offset!==void 0)$.offset=_.offset;if(_.includeArchived||_.archivedOnly)$.includeArchived=!0;return $}function qQ(_){return{baseUrl:_.baseUrl,async list($={}){let D=$.limit??200,U=TQ({...$,limit:Math.min(Math.max(D,1),200)}),g=await _.list(G6,{query:U}),I=g.items;if($.archivedOnly)I=I.filter((j)=>j.archived===!0);if($.tag){let j=$.tag.toLowerCase();I=I.filter((N)=>(N.tags??[]).some((O)=>O.toLowerCase()===j))}return{items:I,total:g.total}},async get($){return _.get(G6,$)},async create($){return _.create(G6,{...$.id?{id:$.id}:{},title:$.title,content:$.content,url:$.url??null,tags:$.tags??[],...$.metadata?{metadata:$.metadata}:{}})},async update($,D,U={}){try{return await _.update(G6,$,D,{...U.expectedVersion!==void 0?{headers:{"if-match":String(U.expectedVersion)}}:{}})}catch(g){if(oN(g))return null;let I=BQ(g);if(I)throw I;throw g}},async delete($){let D=await _.get(G6,$);if(!D)return!1;return await _.delete(G6,D.id),!0},async listVersions($,D={}){try{return await _.transport.get(`/${G6}/${encodeURIComponent($)}/versions`,{query:{limit:D.limit,offset:D.offset}})}catch(U){if(oN(U))return null;throw U}},async getVersion($,D){try{return await _.transport.get(`/${G6}/${encodeURIComponent($)}/versions/${D}`)}catch(U){if(oN(U))return null;throw U}}}}function BQ(_){if(!_||typeof _!=="object")return null;if(_.status!==409)return null;let $=_.body,U=(typeof $==="string"?VQ($):$)??{};if(U.error!=="version_conflict")return null;return new L0(Number(U.expected??0),Number(U.current??0))}function VQ(_){try{return JSON.parse(_)}catch{return null}}function oN(_){return Boolean(_&&typeof _==="object"&&_.status===404)}function uD(_=process.env){let $=FQ(_);return $?qQ($):null}function KQ(_){let $={..._};return delete $.HOME,delete $.USERPROFILE,delete $[sz],delete $[az(fD)],$}function FQ(_,$={}){if(wD(_).mode!=="postgres")return null;let D=$.guarded?KQ(_):_,U=iN(fD,tN(D,"postgres"),OS(D));if(U.transport!=="http")return null;return U.client}function Y6(_=process.env){if(wD(_).mode!=="postgres")return!1;return iN(fD,tN(_,"postgres"),OS(_)).transport==="http"}async function hU(_){let D=[];for(let U=0;;U+=200){let{items:g}=await _.list({includeArchived:!0,limit:200,offset:U});if(D.push(...g),g.length<200)break;if(U>1e5)break}return D}class eN extends Error{location;code="version_history_unsupported";constructor(_){super(`Version history is not kept by the local JSON knowledge store (${_}). It has no version line, so an empty history here would be a claim, not a measurement. Entry versioning lives in the Postgres-backed store: point this CLI at it (HASNA_KNOWLEDGE_STORAGE_MODE=postgres plus the API url/key) and re-run.`);this.location=_;this.name="VersionHistoryUnsupportedError"}}function pN(_,$){return _.id===$||_.short_id===$}class AS{storePath;kind="local";supportsVersions=!1;constructor(_){this.storePath=_}async listVersions(){throw new eN(this.storePath)}async getVersion(){throw new eN(this.storePath)}get location(){return this.storePath}get exists(){return MQ(this.storePath)}async listAll(){let _=I0(this.storePath);return{items:_.items,exists:_.exists}}async get(_){return I0(this.storePath).items.find((D)=>pN(D,_))??null}async create(_){return r$(this.storePath,()=>{let $=CD(this.storePath),D=new Date().toISOString(),U=_.id??Cz(),g={id:U,short_id:vz(U),title:_.title,content:_.content,url:_.url??null,tags:_.tags??[],metadata:_.metadata??{},archived:!1,created_at:D,updated_at:D,version:1};return $.items.push(g),t$(this.storePath,$),g},{createParent:!0})}async update(_,$,D={}){return r$(this.storePath,()=>{let U=CD(this.storePath),g=U.items.findIndex((N)=>pN(N,_));if(g===-1)return null;let I=U.items[g],j=I.version??1;if(D.expectedVersion!==void 0&&D.expectedVersion!==j)throw new L0(D.expectedVersion,j);if($.title!==void 0)I.title=$.title;if($.content!==void 0)I.content=$.content;if($.url!==void 0)I.url=$.url;if($.tags!==void 0)I.tags=$.tags;if($.metadata!==void 0)I.metadata=$.metadata;if($.archived!==void 0)I.archived=$.archived;return I.updated_at=new Date().toISOString(),I.version=j+1,U.items[g]=I,t$(this.storePath,U),I},{createParent:!0})}async delete(_){return r$(this.storePath,()=>{let $=CD(this.storePath),D=$.items.length;$.items=$.items.filter((g)=>!pN(g,_));let U=D!==$.items.length;if(U)t$(this.storePath,$);return U},{createParent:!0})}async deleteMany(_){if(_.length===0)return 0;let $=new Set(_);return r$(this.storePath,()=>{let D=CD(this.storePath),U=D.items.length;D.items=D.items.filter((I)=>!$.has(I.id)&&!(I.short_id!=null&&$.has(I.short_id)));let g=U-D.items.length;if(g>0)t$(this.storePath,D);return g},{createParent:!0})}}class LS{cloud;kind="api";exists=!0;supportsVersions=!0;constructor(_){this.cloud=_}async listVersions(_,$={}){return this.cloud.listVersions(_,$)}async getVersion(_,$){return this.cloud.getVersion(_,$)}get location(){return this.cloud.baseUrl}async listAll(){return{items:await hU(this.cloud),exists:!0}}async get(_){return this.cloud.get(_)}async create(_){return this.cloud.create({..._.id?{id:_.id}:{},title:_.title,content:_.content,url:_.url??null,tags:_.tags??[],..._.metadata?{metadata:_.metadata}:{}})}async update(_,$,D={}){return this.cloud.update(_,$,{expectedVersion:D.expectedVersion})}async delete(_){return this.cloud.delete(_)}async deleteMany(_){let $=0;for(let D of _)if(await this.cloud.delete(D))$+=1;return $}}function cU(_){let $=_.storePathOverridden?null:uD(_.env??process.env);if($)return new LS($);return new AS(_.storePath)}function JS(_){let $=_??"";if($==="")return[];return $.replace(/\n$/,"").split(` -`)}var aN=5000;function ZQ(_,$){let D=JS(_),U=JS($);if(D.length>aN||U.length>aN)throw Error(`Refusing to line-diff ${Math.max(D.length,U.length)} lines (limit ${aN}). Fetch the two versions and diff them with a dedicated tool.`);let g=Array.from({length:D.length+1},()=>Array(U.length+1).fill(0));for(let O=D.length-1;O>=0;O-=1)for(let A=U.length-1;A>=0;A-=1)g[O][A]=D[O]===U[A]?g[O+1][A+1]+1:Math.max(g[O+1][A],g[O][A+1]);let I=[],j=0,N=0;while(j=g[j][N+1])I.push({op:"remove",from_line:j+1,to_line:null,text:D[j]}),j+=1;else I.push({op:"add",from_line:null,to_line:N+1,text:U[N]}),N+=1;while(j{if(!bQ(_[N],$[N]))D.push({field:N,from:_[N]??null,to:$[N]??null})};U("title"),U("url"),U("tags"),U("metadata"),U("archived");let g=ZQ(_.content,$.content),I=g.filter((N)=>N.op==="add").length,j=g.filter((N)=>N.op==="remove").length;return{identical:D.length===0&&I===0&&j===0,fields:D,content:g,added:I,removed:j}}function zS(_,$,D){let U=[`--- ${$}`,`+++ ${D}`];if(_.identical)return U.push("(no changes)"),U.join(` -`);for(let g of _.fields)U.push(`~ ${g.field}: ${JSON.stringify(g.from)} -> ${JSON.stringify(g.to)}`);if(_.added===0&&_.removed===0){if(_.fields.length>0)U.push("(content unchanged)")}else{U.push(`@@ content +${_.added} -${_.removed} @@`);for(let g of _.content){let I=g.op==="add"?"+":g.op==="remove"?"-":" ";U.push(`${I}${g.text}`)}}return U.join(` -`)}import{Database as SS}from"bun:sqlite";function nU(_="catalog"){if(Y6()){let $=o$[0];throw Error(`knowledge: ${_} builds/reads the on-box sqlite RAG catalog (source ingestion, chunk embeddings, wiki compilation, cross-machine sync, machine registry). That local indexing pipeline is not available in cloud mode. In cloud mode the shared corpus is the cloud knowledge-items: 'add/list/get/update/delete' item commands AND 'search/ask/build/context' over that shared corpus all route to the cloud. Set ${$}=local `+"(or unset it \u2014 local is the default) to use the full local catalog pipeline; run 'knowledge mode' to see "+"which variable selected the current backend.")}}var HQ="porter unicode61 remove_diacritics 2",WS=` +`),this.outputHelp({error:!0});let g=$||{},U=g.exitCode||1,D=g.code||"commander.error";this._exit(U,D,_)}_parseOptionsEnv(){this.options.forEach((_)=>{if(_.envVar&&_.envVar in N_.env){let $=_.attributeName();if(this.getOptionValue($)===void 0||["default","config","env"].includes(this.getOptionValueSource($)))if(_.required||_.optional)this.emit(`optionEnv:${_.name()}`,N_.env[_.envVar]);else this.emit(`optionEnv:${_.name()}`)}})}_parseOptionsImplied(){let _=new Ov(this.options),$=(g)=>{return this.getOptionValue(g)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(g))};this.options.filter((g)=>g.implied!==void 0&&$(g.attributeName())&&_.valueFromOption(this.getOptionValue(g.attributeName()),g)).forEach((g)=>{Object.keys(g.implied).filter((U)=>!$(U)).forEach((U)=>{this.setOptionValueWithSource(U,g.implied[U],"implied")})})}missingArgument(_){let $=`error: missing required argument '${_}'`;this.error($,{code:"commander.missingArgument"})}optionMissingArgument(_){let $=`error: option '${_.flags}' argument missing`;this.error($,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(_){let $=`error: required option '${_.flags}' not specified`;this.error($,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(_,$){let g=(I)=>{let j=I.attributeName(),E=this.getOptionValue(j),A=this.options.find((P)=>P.negate&&j===P.attributeName()),O=this.options.find((P)=>!P.negate&&j===P.attributeName());if(A&&(A.presetArg===void 0&&E===!1||A.presetArg!==void 0&&E===A.presetArg))return A;return O||I},U=(I)=>{let j=g(I),E=j.attributeName();if(this.getOptionValueSource(E)==="env")return`environment variable '${j.envVar}'`;return`option '${j.flags}'`},D=`error: ${U(_)} cannot be used with ${U($)}`;this.error(D,{code:"commander.conflictingOption"})}unknownOption(_){if(this._allowUnknownOption)return;let $="";if(_.startsWith("--")&&this._showSuggestionAfterError){let U=[],D=this;do{let I=D.createHelp().visibleOptions(D).filter((j)=>j.long).map((j)=>j.long);U=U.concat(I),D=D.parent}while(D&&!D._enablePositionalOptions);$=G8(_,U)}let g=`error: unknown option '${_}'${$}`;this.error(g,{code:"commander.unknownOption"})}_excessArguments(_){if(this._allowExcessArguments)return;let $=this.registeredArguments.length,g=$===1?"":"s",D=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${$} argument${g} but got ${_.length}.`;this.error(D,{code:"commander.excessArguments"})}unknownCommand(){let _=this.args[0],$="";if(this._showSuggestionAfterError){let U=[];this.createHelp().visibleCommands(this).forEach((D)=>{if(U.push(D.name()),D.alias())U.push(D.alias())}),$=G8(_,U)}let g=`error: unknown command '${_}'${$}`;this.error(g,{code:"commander.unknownCommand"})}version(_,$,g){if(_===void 0)return this._version;this._version=_,$=$||"-V, --version",g=g||"output the version number";let U=this.createOption($,g);return this._versionOptionName=U.attributeName(),this._registerOption(U),this.on("option:"+U.name(),()=>{this._outputConfiguration.writeOut(`${_} +`),this._exit(0,"commander.version",_)}),this}description(_,$){if(_===void 0&&$===void 0)return this._description;if(this._description=_,$)this._argsDescription=$;return this}summary(_){if(_===void 0)return this._summary;return this._summary=_,this}alias(_){if(_===void 0)return this._aliases[0];let $=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)$=this.commands[this.commands.length-1];if(_===$._name)throw Error("Command alias can't be the same as its name");let g=this.parent?._findCommand(_);if(g){let U=[g.name()].concat(g.aliases()).join("|");throw Error(`cannot add alias '${_}' to command '${this.name()}' as already have command '${U}'`)}return $._aliases.push(_),this}aliases(_){if(_===void 0)return this._aliases;return _.forEach(($)=>this.alias($)),this}usage(_){if(_===void 0){if(this._usage)return this._usage;let $=this.registeredArguments.map((g)=>{return Ev(g)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?$:[]).join(" ")}return this._usage=_,this}name(_){if(_===void 0)return this._name;return this._name=_,this}nameFromFilename(_){return this._name=R6.basename(_,R6.extname(_)),this}executableDir(_){if(_===void 0)return this._executableDir;return this._executableDir=_,this}helpInformation(_){let $=this.createHelp(),g=this._getOutputContext(_);$.prepareContext({error:g.error,helpWidth:g.helpWidth,outputHasColors:g.hasColors});let U=$.formatHelp(this,$);if(g.hasColors)return U;return this._outputConfiguration.stripColor(U)}_getOutputContext(_){_=_||{};let $=!!_.error,g,U,D;if($)g=(j)=>this._outputConfiguration.writeErr(j),U=this._outputConfiguration.getErrHasColors(),D=this._outputConfiguration.getErrHelpWidth();else g=(j)=>this._outputConfiguration.writeOut(j),U=this._outputConfiguration.getOutHasColors(),D=this._outputConfiguration.getOutHelpWidth();return{error:$,write:(j)=>{if(!U)j=this._outputConfiguration.stripColor(j);return g(j)},hasColors:U,helpWidth:D}}outputHelp(_){let $;if(typeof _==="function")$=_,_=void 0;let g=this._getOutputContext(_),U={error:g.error,write:g.write,command:this};this._getCommandAndAncestors().reverse().forEach((I)=>I.emit("beforeAllHelp",U)),this.emit("beforeHelp",U);let D=this.helpInformation({error:g.error});if($){if(D=$(D),typeof D!=="string"&&!Buffer.isBuffer(D))throw Error("outputHelp callback must return a string or a Buffer")}if(g.write(D),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",U),this._getCommandAndAncestors().forEach((I)=>I.emit("afterAllHelp",U))}helpOption(_,$){if(typeof _==="boolean"){if(_)this._helpOption=this._helpOption??void 0;else this._helpOption=null;return this}return _=_??"-h, --help",$=$??"display help for command",this._helpOption=this.createOption(_,$),this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption(_){return this._helpOption=_,this}help(_){this.outputHelp(_);let $=Number(N_.exitCode??0);if($===0&&_&&typeof _!=="function"&&_.error)$=1;this._exit($,"commander.help","(outputHelp)")}addHelpText(_,$){let g=["beforeAll","before","after","afterAll"];if(!g.includes(_))throw Error(`Unexpected value for position to addHelpText. +Expecting one of '${g.join("', '")}'`);let U=`${_}Help`;return this.on(U,(D)=>{let I;if(typeof $==="function")I=$({error:D.error,command:D.command});else I=$;if(I)D.write(`${I} +`)}),this}_outputHelpIfRequested(_){let $=this._getHelpOption();if($&&_.find((U)=>$.is(U)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function X8(_){return _.map(($)=>{if(!$.startsWith("--inspect"))return $;let g,U="127.0.0.1",D="9229",I;if((I=$.match(/^(--inspect(-brk)?)$/))!==null)g=I[1];else if((I=$.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(g=I[1],/^\d+$/.test(I[3]))D=I[3];else U=I[3];else if((I=$.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)g=I[1],U=I[3],D=I[4];if(g&&D!=="0")return`${g}=${U}:${parseInt(D)+1}`;return $})}function jJ(){if(N_.env.NO_COLOR||N_.env.FORCE_COLOR==="0"||N_.env.FORCE_COLOR==="false")return!1;if(N_.env.FORCE_COLOR||N_.env.CLICOLOR_FORCE!==void 0)return!0;return}Pv.Command=EJ;Pv.useColor=jJ});var q8=a6((zv)=>{var{Argument:Q8}=JE(),{Command:NJ}=Y8(),{CommanderError:Wv,InvalidArgumentError:T8}=qU(),{Help:Jv}=gJ(),{Option:K8}=DJ();zv.program=new NJ;zv.createCommand=(_)=>new NJ(_);zv.createOption=(_,$)=>new K8(_,$);zv.createArgument=(_,$)=>new Q8(_,$);zv.Command=NJ;zv.Option=K8;zv.Argument=Q8;zv.Help=Jv;zv.CommanderError=Wv;zv.InvalidArgumentError=T8;zv.InvalidOptionArgumentError=T8});import{chmodSync as FJ,closeSync as r0,existsSync as I4,fsyncSync as kE,lstatSync as RY,openSync as CE,readFileSync as b0,renameSync as rJ,unlinkSync as vE,writeFileSync as wE}from"fs";import{randomUUID as M0}from"crypto";import{basename as GY,dirname as bJ,join as HE}from"path";import{chmodSync as GJ,existsSync as SY,mkdirSync as BE,readFileSync as LY,writeFileSync as XJ}from"fs";import{homedir as VE}from"os";import{dirname as WY,join as u_,resolve as YJ}from"path";var l$=u_(".hasna","knowledge"),QJ=u_(".hasna","apps","knowledge"),S_={division:"xyz",app_type:"opensource",app:"knowledge",env:"prod",local_path:l$,s3:{bucket:"example-knowledge-prod",region:"us-east-1",profile:"example-infra",prefix:".hasna/knowledge",server_side_encryption:"AES256"},secrets:{env:"example/knowledge/prod/env",aws:"example/knowledge/prod/aws",s3:"example/knowledge/prod/s3",rds:null,future_rds:"example/knowledge/prod/rds"},source_owner:"open-files",evidence_doc:"docs/canonical-secrets-bootstrap-2026-06-08.md"};function TJ(){return{type:"s3",artifacts_root:"artifacts",s3:{bucket:S_.s3.bucket,prefix:S_.s3.prefix,region:S_.s3.region,profile:S_.s3.profile,server_side_encryption:S_.s3.server_side_encryption}}}function V0(){return u_(VE(),".open-knowledge","db.json")}function bU(){return u_(VE(),".hasna","knowledge")}function FE(_=process.cwd()){return YJ(_,l$)}function JY(){return u_(VE(),QJ)}function zY(_=process.cwd()){return YJ(_,QJ)}function rE(_,$=process.cwd()){if(_==="project"||_==="local")return g$(zY($));return g$(JY())}function g$(_){return{home:_,configPath:u_(_,"config.json"),jsonStorePath:u_(_,"db.json"),knowledgeDbPath:u_(_,"knowledge.db"),artifactsDir:u_(_,"artifacts"),cacheDir:u_(_,"cache"),exportsDir:u_(_,"exports"),indexesDir:u_(_,"indexes"),logsDir:u_(_,"logs"),runsDir:u_(_,"runs"),schemasDir:u_(_,"schemas"),wikiDir:u_(_,"wiki")}}function F0(){return{version:1,mode:"local",hosted:{api_url:"https://knowledge.md"},storage:{type:"local",artifacts_root:"artifacts"},sources:{preferred_ref:"open-files",allowed_schemes:["open-files","s3","file","https","http"]},providers:{default_model:"openai:gpt-5.2",aliases:{fast:"openai:gpt-5-mini",reasoning:"anthropic:claude-opus-4-6",sonnet:"anthropic:claude-sonnet-4-6",deepseek:"deepseek:deepseek-chat","deepseek-reasoning":"deepseek:deepseek-reasoner"},openai:{api_key_env:"OPENAI_API_KEY",default_model:"gpt-5.2"},anthropic:{api_key_env:"ANTHROPIC_API_KEY",default_model:"claude-sonnet-4-6"},deepseek:{api_key_env:"DEEPSEEK_API_KEY",default_model:"deepseek-chat"}},embeddings:{default_model:"openai:text-embedding-3-small",dimensions:1536,batch_size:64,max_parallel_calls:4},safety:{network:{web_search_enabled:!1,s3_reads_enabled:!1,allowed_s3_buckets:[]},redaction:{enabled:!0},approvals:{generated_writes_require_approval:!0}}}}function U4(_){let $=g$(_);BE($.home,{recursive:!0,mode:448});for(let g of[$.artifactsDir,$.cacheDir,$.exportsDir,$.indexesDir,$.logsDir,$.runsDir,$.schemasDir,$.wikiDir])BE(g,{recursive:!0,mode:448});if(!SY($.configPath))XJ($.configPath,`${JSON.stringify(F0(),null,2)} +`,{mode:384}),GJ($.configPath,384);return $}function MU(_,$=process.cwd()){if(_==="project"||_==="local")return g$(FE($));return g$(bU())}function X6(_){BE(WY(_),{recursive:!0})}function bE(_){let $=LY(_,"utf8");return JSON.parse($)}function KJ(_,$){X6(_),XJ(_,`${JSON.stringify($,null,2)} +`,{mode:384}),GJ(_,384)}function HU(){return g$(bU()).jsonStorePath}function Z0(_){if(_===HU()&&I4(V0()))fE();if(!I4(_))X6(_),HJ(_,`${JSON.stringify({items:[]},null,2)} +`)}function XY(_){return _.toISOString().replace(/[:.]/g,"-")}function uE(_){let $=[`id:${_.id}`];if(typeof _.short_id==="string"&&_.short_id.length>0)$.push(`short_id:${_.short_id}`);return $}function YY(_){let $=new Set;for(let g of _)for(let U of uE(g))$.add(U);return $}function QY(_,$){return uE($).some((g)=>_.has(g))}function ME(_,$){X6(_),wE(_,`${JSON.stringify($,null,2)} +`,{mode:384}),FJ(_,384)}function qJ(_){let $=JSON.parse(b0(_,"utf8"));if(!$||typeof $!=="object"||!Array.isArray($.items))return{store:{items:[]},skippedInvalid:0};let g={items:[]},U=0;for(let D of $.items)if(D&&typeof D==="object"&&typeof D.id==="string"&&D.id.length>0)g.items.push(D);else U+=1;return{store:g,skippedInvalid:U}}function fE(_={}){if(_.dryRun===!0)return BJ(_);return C$(HU(),()=>BJ(_),{createParent:!0})}function BJ(_={}){let $=_.dryRun===!0,g=_.now??new Date,U=g$(bU()),D=V0(),I=U.jsonStorePath,j=I4(D),E=I4(I),A={ok:!0,dry_run:$,legacy_path:D,canonical_path:I,legacy_exists:j,canonical_existed:E,canonical_created:!1,would_create_canonical:!1,imported:0,skipped_existing:0,skipped_invalid:0,backup_path:null,report_path:null,errors:[],message:j?"Legacy global store already imported":"No legacy global store found"};if(!j)return A;let O;try{let L=qJ(D);O=L.store,A.skipped_invalid=L.skippedInvalid}catch(L){return A.ok=!1,A.errors.push(`Could not read legacy store: ${L instanceof Error?L.message:String(L)}`),A.message="Legacy global store import failed",A}let P={items:[]};if(E)try{P=qJ(I).store}catch(L){return A.ok=!1,A.errors.push(`Could not read canonical store: ${L instanceof Error?L.message:String(L)}`),A.message="Legacy global store import failed",A}let W=YY(P.items),z={items:[...P.items]};for(let L of O.items){if(!L?.id){A.skipped_invalid+=1;continue}if(QY(W,L)){A.skipped_existing+=1;continue}z.items.push(L);for(let J of uE(L))W.add(J);A.imported+=1}if(A.would_create_canonical=!E&&A.imported>0,A.canonical_created=!$&&A.would_create_canonical,A.message=A.imported>0?`Imported ${A.imported} legacy item(s) into canonical knowledge store`:"Legacy global store already imported",$||A.imported===0)return A;let S=`${XY(g)}-${M0().slice(0,8)}`;if(E)A.backup_path=HE(U.exportsDir,`legacy-open-knowledge-db-before-import-${S}.json`),ME(A.backup_path,P);return ME(I,z),A.report_path=HE(U.runsDir,`legacy-open-knowledge-import-${S}.json`),ME(A.report_path,A),A}function s6(_){if(!I4(_))return{exists:!1,items:[]};let $=b0(_,"utf8"),g=JSON.parse($);if(!g||!Array.isArray(g.items))return{exists:!0,items:[]};return{exists:!0,items:g.items}}function TY(_){return`${_}.lock`}var ZU=1e4,MJ=25,VJ=120000,KY=new Int32Array(new SharedArrayBuffer(4));function xE(_){return typeof _==="object"&&_!==null&&"code"in _?String(_.code):void 0}function ZJ(_){let $=null;try{$=CE(bJ(_),"r"),kE($)}catch{}finally{if($!==null)try{r0($)}catch{}}}var ZE=new Set;function HJ(_,$){X6(_);let g=HE(bJ(_),`.${GY(_)}.tmp.${M0()}`),U=null;try{U=CE(g,"wx",384),wE(U,$),kE(U),r0(U),U=null,rJ(g,_);try{FJ(_,384)}catch{}ZJ(_)}catch(D){if(U!==null)try{r0(U)}catch{}try{vE(g)}catch{}throw D}}function kJ(_){Atomics.wait(KY,0,0,_)}function qY(_){if(typeof _!=="number"||!Number.isInteger(_)||_<=0)return!1;try{return process.kill(_,0),!0}catch($){return xE($)!=="ESRCH"}}function CJ(_,$){try{let g=b0(_,"utf8"),U=JSON.parse(g);if(typeof U.ts==="number")return $-U.ts>VJ&&!qY(U.pid)}catch{}try{return $-RY(_).mtimeMs>VJ}catch{return!1}}function BY(_){let $=new Date().toISOString().replace(/[-:]/g,"").replace(/\.\d{3}Z$/,"Z"),g=`${_}.stale.${$}.${M0()}`;try{rJ(_,g)}catch(U){if(xE(U)!=="ENOENT")throw U;return}}function VY(_){let $=M0(),g=`${_}.breaker`,U=Date.now();while(Date.now()-U{U=I};while(Date.now()-gfY)return null;g=HY(_,"utf8")}catch{return null}let U=nY(g);for(let D of $){let I=U.get(D)?.trim();if(I)return I}return null}function j4(_,$,g){if(!cY.test(g))return;throw new k0(_,`The credential from ${$} contains characters that cannot be sent in an HTTP header (a control character or non-ASCII byte). A file written with CR-only line endings is the usual cause. Rewrite that credential file with one LF-terminated KEY=value line. The value is not shown here, and is deliberately never logged.`,[$])}var dY=Symbol.for("nodejs.util.inspect.custom");function E4(_){let{apiKey:$,...g}=_,U={...g};return Object.defineProperty(U,"apiKey",{value:$,enumerable:!1,writable:!1,configurable:!1}),Object.defineProperty(U,dY,{value:()=>({...g,apiKey:"[redacted]"}),enumerable:!1,writable:!1,configurable:!1}),U}function mY(_,$){return j4(_,"explicit apiKey option",$),E4({apiKey:$,tier:"argument",source:"explicit apiKey option",deliberate:!0,deprecated:!1,diskCandidates:[],warning:null})}function hJ(_,$){for(let g of $){let U=_[g]?.trim();if(U)return{key:g,value:U}}return null}var nJ=Symbol.for("hasna:contracts:credentialDeprecationNotices");function iY(){let _=globalThis,$=_[nJ];if($ instanceof Set)return $;let g=new Set;return _[nJ]=g,g}function lY(_){if(typeof process<"u"&&process.stderr)process.stderr.write(`${_} +`)}function nE(_,$,g={}){let{apiKeyKeys:U}=lJ(_),D=tJ(_,$),I=g.apiKey?.trim();if(I)return j4(_,"the explicit apiKey argument",I),E4({apiKey:I,tier:"argument",source:"explicit apiKey argument",deliberate:!0,deprecated:!1,diskCandidates:D,warning:null});let j=ZY(_),E=$[j];if(E!==void 0){let W=E.trim();if(!W)throw new k0(_,`${j} is set but empty. It is a deliberate override, so it is not resolved around: either give it a real key or unset it to fall back to the credential on disk.`,[j]);return j4(_,j,W),E4({apiKey:W,tier:"override",source:j,deliberate:!0,deprecated:!1,diskCandidates:D,warning:null})}let A=g.profile?.trim()||$[yE]?.trim();if(A){let W=g.profile?.trim()?"explicit profile argument":yE;if(!yY.test(A))throw new k0(_,`Profile name from ${W} is not usable in a path. Use letters, digits, dot, dash, or underscore.`,[W]);let z=oJ(_,$,A);for(let S of z){let L=cJ(S,U);if(L)return j4(_,S,L),E4({apiKey:L,tier:"profile",source:S,deliberate:!0,deprecated:!1,diskCandidates:z,warning:null})}throw new k0(_,`Profile '${A}' (from ${W}) has no ${U[0]} for '${_}'. Looked in: ${z.join(", ")||""}. `+"A profile names WHICH identity to use, so it is never resolved around \u2014 "+`create the profile's credential file or unset ${yE}.`,z)}let O=D.map((W)=>({path:W,value:cJ(W,U)})).filter((W)=>W.value!==null);if(O.length>0){let W=O[0];j4(_,W.path,W.value);let z=[...O.slice(1).filter((L)=>L.value!==W.value).map((L)=>L.path),...(()=>{let L=hJ($,U);return L&&L.value!==W.value?[L.key]:[]})()],S=z.length>0?`Credential sources disagree for '${_}': ${W.path} and ${z.join(", ")} hold different keys. ${W.path} wins, because a file on `+"disk is re-read on every call while an environment variable is a snapshot. Reconcile them \u2014 "+"a rotation that updated only one leaves the other to fail 401 wherever it is loaded first.":null;return E4({apiKey:W.value,tier:"disk",source:W.path,deliberate:!1,deprecated:!1,diskCandidates:D,warning:S})}let P=hJ($,U);if(P){j4(_,P.key,P.value);let W=D.length>0?`Put the current key in ${D[0]} \u2014 it is re-read on every call, so rotations take effect immediately.`:"This environment has no HOME, so no credential file could be consulted at all; the disk tier is unavailable here and this process will keep using the environment snapshot.",z=`[${_}] DEPRECATED: the API key came from ${P.key} in this process's environment. Environment variables are a snapshot taken when this process started, so a shell that started before a key rotation keeps using the old key until it exits. ${W}`,S=g.onDeprecation??lY,L=iY();if(!L.has(_))L.add(_),S(z);return E4({apiKey:P.value,tier:"legacy-env",source:P.key,deliberate:!1,deprecated:!0,diskCandidates:D,warning:z})}return null}var Y6="HASNA_FLEET_API_DOMAIN",N4="your-deployment.example",mE=/[\u0000-\u001f\u007f]/,pJ=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;function kU(_){if(_.length===0||_.length>253||mE.test(_)||/[^\x00-\x7f]/.test(_))return!1;return _.split(".").every(($)=>$.length<=63&&!$.startsWith("xn--")&&pJ.test($))}function tY(_){let $=_[Y6];if($===void 0)return{domain:N4,source:"default",misconfigured:!0,warning:`${Y6} is not set; using the non-resolving ${N4} fallback.`};let g=$.trim().toLowerCase();if(mE.test($)||!kU(g))return{domain:N4,source:Y6,misconfigured:!0,warning:`${Y6} is blank or invalid; using the non-resolving ${N4} fallback.`};return{domain:g,source:Y6,misconfigured:!1,warning:null}}function eJ(_){if(_.length>63||!pJ.test(_))throw Error("App name must be one lowercase DNS label.");return _}function oY(_,$){let g=`${eJ(_)}.${$}`;if(!kU(g))throw Error("Composed cloud hostname must be a valid DNS domain");return g}function pY(_,$){let g=eJ(_),U=tY($),D=`${g}.${U.domain}`;if(kU(D))return{baseUrl:`https://${D}`,source:U.source,misconfigured:U.misconfigured,warning:U.warning};return{baseUrl:`https://${oY(g,N4)}`,source:U.source,misconfigured:!0,warning:`${Y6} cannot form a valid composed cloud hostname for app '${g}'; using the non-resolving ${N4} fallback.`}}function cE(_,$,g={}){for(let U of $){let D=_[U],I=D?.trim();if(I)return{key:U,value:g.preserveRaw?D:I}}return null}function eY(_){let $=/^[a-z][a-z0-9+.-]*:\/\//i.exec(_);if(!$)throw Error("API URL must be absolute.");let g=_.slice($[0].length),U=g.search(/[/?#]/),D=U===-1?g:g.slice(0,U);if(!D)throw Error("API URL must include a hostname.");return D}function dJ(_){if(!/^[0-9]+$/.test(_)||_.length>1&&_.startsWith("0"))throw Error("API URL authority must contain a canonical port between 1 and 65535.");let $=Number(_);if(!Number.isSafeInteger($)||$<1||$>65535)throw Error("API URL authority must contain a canonical port between 1 and 65535.")}function aY(_){let $;if(_.startsWith("[")){let g=_.indexOf("]");if(g===-1)throw Error("API URL authority must contain a canonical hostname.");$=_.slice(0,g+1);let U=_.slice(g+1);if(U){if(!U.startsWith(":"))throw Error("API URL authority must contain a canonical hostname and port.");dJ(U.slice(1))}if(xJ($.slice(1,-1))!==6)throw Error("API URL authority must contain a canonical IPv6 literal.")}else{let g=_.indexOf(":"),U=_.lastIndexOf(":");if(g!==U)throw Error("IPv6 API URL authorities must use brackets.");if(U!==-1){let E=_.slice(U+1);dJ(E),$=_.slice(0,U)}else $=_;let D=xJ($),j=$.split(".").every((E)=>/^(?:0x[0-9a-f]+|[0-9]+)$/i.test(E));if(D!==4&&j||D!==4&&!kU($.toLowerCase()))throw Error("API URL authority must contain a canonical ASCII hostname.")}return $.toLowerCase()}function sY(_){return/^(?:localhost|127\.0\.0\.1|\[::1\])(?::[0-9]+)?$/i.test(_)}function aJ(_){if(mE.test(_))throw Error("API URL must not contain ASCII control characters.");let $=_.trim(),g=eY($);if(g.includes("@")||g.includes("\\")||g.includes("%")||/[^\x00-\x7f]/.test(g))throw Error("API URL authority must be canonical ASCII without credentials.");let U=aY(g),D=new URL($);if(D.protocol!=="http:"&&D.protocol!=="https:")throw Error("API URL must use http or https.");if(D.username||D.password)throw Error("API URL must not include credentials.");if(!D.hostname||D.hostname.endsWith("."))throw Error("API URL must include a canonical hostname.");if(D.hostname.toLowerCase()!==U)throw Error("API URL authority must not rely on parser hostname normalization.");if(D.hostname.split(".").some((j)=>j.toLowerCase().startsWith("xn--")))throw Error("API URL must not use IDN or punycode hostnames.");if(D.protocol==="http:"&&!sY(g))throw Error("API URL may use http only for an exact loopback authority.");if(D.search||D.hash)throw Error("API URL must not include a query string or fragment.");let I=D.pathname.replace(/\/+$/,"");if(I.endsWith("/v1"))I=I.slice(0,-3);return D.pathname=`${I}/v1`,D.toString().replace(/\/+$/,"")}function _Q(_,$=process.env,g={}){let U=lJ(_),D=cE($,U.modeKeys),I=cE($,U.apiUrlKeys,{preserveRaw:!0}),j=cE($,U.apiKeyKeys),E="sqlite",A="default",O=[],P;if(D)E=MY(D.value).mode,A=D.key;else if(I){if(P=nE(_,$,g.credentials),P)E="postgres",A=`${I.key}+${P.source}`}if(E==="sqlite")return{transport:"sqlite",mode:E,modeSource:A,baseUrl:null,apiUrlSource:null,apiKeyPresent:Boolean(j),apiKeySource:j?j.key:null,apiKeyTier:null,misconfigured:!1,warning:O.length>0?O.join(" "):null};if(P===void 0)P=nE(_,$,g.credentials);if(!P){let L=sJ(_,$);return O.push(`${A}=postgres but no API key could be resolved for '${_}'. A client reaches server data over HTTP only; refusing to route. Using the local sqlite store. Looked for a credential file at ${L}, then for ${U.apiKeyKeys[0]} in the environment.`),{transport:"sqlite",mode:E,modeSource:A,baseUrl:null,apiUrlSource:null,apiKeyPresent:!1,apiKeySource:null,apiKeyTier:null,misconfigured:!0,warning:O.join(" ")}}if(P.warning)O.push(P.warning);let W=null,z=I?.key??($[Y6]===void 0?"default":Y6),S;try{if(!I)W=pY(_,$),z=W.source;let L=I?.value??W.baseUrl;S=aJ(L)}catch(L){let J=L instanceof Error?L.message:String(L);return O.push(`Invalid API URL from ${z}: ${J}. Using local store.`),{transport:"sqlite",mode:E,modeSource:A,baseUrl:null,apiUrlSource:null,apiKeyPresent:!0,apiKeySource:P.source,apiKeyTier:P.tier,misconfigured:!0,warning:O.join(" ")}}if(W?.warning)O.push(W.warning);return{transport:"http",mode:E,modeSource:A,baseUrl:S,apiUrlSource:z,apiKeyPresent:!0,apiKeySource:P.source,apiKeyTier:P.tier,misconfigured:W?.misconfigured??!1,warning:O.length>0?O.join(" "):null}}function sJ(_,$){let g=tJ(_,$);return g.length>0?g.join(" or "):""}class A4 extends Error{status;method;path;body;credentialSource;credentialTier;constructor(_,$,g,U,D){let I=D?`. ${D.guidance}`:"";super(`Hasna cloud request failed: ${_} ${$} -> ${g}${I}`);this.name="HasnaHttpError",this.status=g,this.method=_,this.path=$,this.body=U,this.credentialSource=D?.source??null,this.credentialTier=D?.tier??null}}function $Q(_,$){if(typeof $==="function")return $();return mY(_,$)}function gQ(_){let $=`The API key for this request came from ${_.source}`;if(_.deliberate)return`${$} \u2014 a credential you selected deliberately. It was NOT substituted with any other key: `+"falling back here would authenticate as a different principal than the one you named, which is exactly the failure an override exists to prevent. Rotate that key, or unset the override to use the credential on disk.";if(_.deprecated){let g=_.diskCandidates[0],U=g?`Write the CURRENT key to ${g} \u2014 that file is re-read on every call, so rotations take `+`effect immediately and in every shell. Do not simply unset ${_.source}: nothing was found on disk, so that would leave this client with no credential at all.`:"This environment has no HOME, so no credential file could be consulted; the disk tier is unavailable here and there is nothing to fall back to. Set HOME, or supply the key explicitly.";return`${$}, a variable in this process's environment \u2014 which is a snapshot taken when the process `+`started. A STALE SHELL is the most common cause of this error: this shell exported the key before it was rotated, and will keep sending the old one until it exits. ${U}`}return`${$}, which was re-read from disk on this very call \u2014 so a stale shell is NOT the cause here. `+"The stored credential is genuinely being rejected: rotate it, or re-run the fleet key distribution so this machine gets the current key."}var DQ=[408,425,429,500,502,503,504],UQ=new Set(["GET","HEAD","PUT","DELETE","OPTIONS"]),IQ=new Set(["host",":authority","forwarded","x-forwarded-host","x-original-host"]);function mJ(_,$){if(!_)return;let g=Object.keys(_).find((U)=>IQ.has(U.trim().toLowerCase()));if(g)throw Error(`Authenticated ${$} headers must not set authority header '${g}'.`)}function jQ(_,$){if(!$)return _;let g=$ instanceof URLSearchParams?$:new URLSearchParams;if(!($ instanceof URLSearchParams))for(let[D,I]of Object.entries($)){if(I===null||I===void 0)continue;if(Array.isArray(I))for(let j of I)g.append(D,String(j));else g.append(D,String(I))}let U=g.toString();if(!U)return _;return`${_}${_.includes("?")?"&":"?"}${U}`}var EQ=(_)=>new Promise(($)=>setTimeout($,_));function NQ(_){let $=_.fetchImpl??((O,P)=>fetch(O,P)),g=aJ(_.baseUrl),U=_.timeoutMs??30000,D=_.sleepImpl??EQ,I=_.retry;function j(O){let P=O!==void 0?O:I;if(P===!1)return null;let W=P??{};return{retries:W.retries??2,baseDelayMs:W.baseDelayMs??200,maxDelayMs:W.maxDelayMs??2000,retryStatuses:W.retryStatuses??[...DQ]}}async function E(O,P,W,z,S,L){mJ(_.headers,"transport"),mJ(S.headers,"request");let J={"x-api-key":L.apiKey,Authorization:`Bearer ${L.apiKey}`,Accept:"application/json",..._.headers??{},...S.headers??{}};if(S.idempotencyKey)J["Idempotency-Key"]=S.idempotencyKey;let R={method:O,headers:J,redirect:"manual"};if(z!==void 0)J["Content-Type"]="application/json",R.body=JSON.stringify(z);let X=new AbortController,G=()=>X.abort();if(S.signal)if(S.signal.aborted)X.abort();else S.signal.addEventListener("abort",G,{once:!0});let B=setTimeout(()=>X.abort(),S.timeoutMs??U);R.signal=X.signal;let Q;try{Q=await $(W,R)}catch(V){let F=V instanceof Error?V:Error(String(V));if(S.signal?.aborted)return{ok:!1,retryable:!1,error:F};return{ok:!1,retryable:!0,error:F}}finally{if(clearTimeout(B),S.signal)S.signal.removeEventListener("abort",G)}let T=await Q.text(),K=void 0;if(T.length>0)try{K=JSON.parse(T)}catch{K=T}if(!Q.ok){if(Q.status>=300&&Q.status<400)return{ok:!1,retryable:!1,error:new A4(O,P,Q.status,K)};if(Q.status===401||Q.status===403)return{ok:!1,retryable:!1,error:new A4(O,P,Q.status,K,{source:L.source,tier:L.tier,guidance:gQ(L)})};let V=j(S.retry);return{ok:!1,retryable:V?V.retryStatuses.includes(Q.status):!1,error:new A4(O,P,Q.status,K)}}return{ok:!0,value:K}}async function A(O,P,W,z={}){let S=O.toUpperCase(),L=jQ(P.startsWith("/")?P:`/${P}`,z.query),J=`${g}${L}`,R=j(z.retry),X=UQ.has(S)||Boolean(z.idempotencyKey),G=R&&X?R.retries+1:1,B=$Q(_.name,_.apiKey),Q=null;for(let T=1;T<=G;T++){let K=await E(S,L,J,W,z,B);if(K.ok)return K.value;if(Q=K,!(R!==null&&X&&K.retryable&&TA("GET",O,void 0,P),post:(O,P,W)=>A("POST",O,P,W),put:(O,P,W)=>A("PUT",O,P,W),patch:(O,P,W)=>A("PATCH",O,P,W),del:(O,P,W)=>A("DELETE",O,P,W)}}function AQ(_,$=process.env,g){let U=g?.credentials,D=_Q(_,$,{...U?{credentials:U}:{}});if(D.misconfigured)throw Error(D.warning??`Client for '${_}' is misconfigured for the API client.`);if(D.transport==="sqlite"||!D.baseUrl)return{transport:"sqlite",client:null,resolution:D};let I=()=>{let j=nE(_,$,U);if(!j)throw Error(`Client for '${_}' resolved to the http transport but no API key is available any more. Looked at ${sJ(_,$)}, then the environment. A credential file that was removed after this client was built is the usual cause.`);return j};return{transport:"http",client:NQ({name:_,baseUrl:D.baseUrl,apiKey:I,...g?.fetchImpl?{fetchImpl:g.fetchImpl}:{},...g?.headers?{headers:g.headers}:{},...g?.timeoutMs?{timeoutMs:g.timeoutMs}:{},...g?.retry!==void 0?{retry:g.retry}:{},...g?.sleepImpl?{sleepImpl:g.sleepImpl}:{}}),resolution:D}}function dE(_){let $=_.replace(/^\/+|\/+$/g,"");if(!$)throw Error("resource must be a non-empty path segment");return`/${$}`}function hE(_,$){if($===void 0||$===null||`${$}`.length===0)throw Error("id must be a non-empty string");return`${dE(_)}/${encodeURIComponent(String($))}`}function OQ(){let _=globalThis;if(_.crypto?.randomUUID)return _.crypto.randomUUID();return`idmp_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,12)}`}function PQ(_){if(Array.isArray(_))return _;if(_&&typeof _==="object"){let $=_;for(let g of["items","data","results","rows","records"])if(Array.isArray($[g]))return $[g]}return[]}function SQ(_){if(_&&typeof _==="object"){let $=_;for(let g of["total","count","totalCount","total_count"])if(typeof $[g]==="number")return $[g]}return null}function LQ(_){if(_&&typeof _==="object"){let $=_;for(let g of["cursor","nextCursor","next_cursor","next"])if(typeof $[g]==="string")return $[g]}return null}function WQ(_,$){return{name:_,baseUrl:$.baseUrl,transport:$,async list(g,U={}){let D=await $.get(dE(g),U);return{items:PQ(D),total:SQ(D),cursor:LQ(D),raw:D}},async get(g,U,D={}){try{return await $.get(hE(g,U),D)}catch(I){if(I instanceof A4&&I.status===404)return null;throw I}},async create(g,U,D={}){let{idempotencyKey:I,...j}=D;return $.post(dE(g),U,{...j,idempotencyKey:I??OQ()})},async update(g,U,D,I={}){let{method:j="PATCH",idempotencyKey:E,...A}=I;return(j==="PUT"?$.put:$.patch)(hE(g,U),D,{...A,...E?{idempotencyKey:E}:{}})},async delete(g,U,D={}){try{await $.del(hE(g,U),void 0,D)}catch(I){if(I instanceof A4&&I.status===404)return;throw I}}}}function iE(_,$=process.env,g){let U=AQ(_,$,g);if(U.transport==="http")return{transport:"http",client:WQ(_,U.client)};return{transport:"sqlite",client:null}}function _z(_){return _.toUpperCase().replace(/-/g,"_")}function $z(_){let $=_z(_);return{modeKeys:[`HASNA_${$}_STORAGE_MODE`,`HASNA_${$}_MODE`,`${$}_STORAGE_MODE`,`${$}_MODE`],apiUrlKeys:[`HASNA_${$}_API_URL`,`${$}_API_URL`],apiKeyKeys:[`HASNA_${$}_API_KEY`,`${$}_API_KEY`]}}function gz(_){return`HASNA_${_z(_)}_API_KEY_OVERRIDE`}var Dz="HASNA_PROFILE";function C0(_){let $=_.trim().toLowerCase().replace(/-/g,"_");if($==="sqlite")return{mode:"sqlite"};if($==="postgres"||$==="postgresql")return{mode:"postgres"};throw Error(`Unknown storage mode '${_}'. The runtime-placement axis was removed; set sqlite for the on-box SQLite file or postgres for a PostgreSQL server (DATABASE_URL).`)}function CU(_){let $=_.trim().toLowerCase().replace(/-/g,"_");if($==="sqlite")return{mode:"sqlite"};if($==="postgres"||$==="postgresql")return{mode:"postgres"};throw Error(`Unknown storage mode '${_}'. The runtime-placement axis was removed; set sqlite for the on-box SQLite file or postgres for a PostgreSQL server (DATABASE_URL).`)}import Xu from"pg";class vU extends Error{scheme;port;constructor(_,$){super(_);this.name="KnowledgeNetworkGuardError",this.scheme=$.scheme,this.port=$.port}}function O4(_=process.env){return(_.NODE_ENV??"").trim().toLowerCase()==="test"}function Uz(_){let $=_.split(".");if($.length!==4)return!1;if(!$.every((g)=>/^\d{1,3}$/.test(g)&&Number(g)<=255))return!1;return $[0]==="127"}function XQ(_){let $=_.trim().toLowerCase();if($.length===0)return!1;if($==="localhost"||$.endsWith(".localhost"))return!0;if(Uz($))return!0;if(!$.startsWith("[")||!$.endsWith("]"))return!1;let g=$.slice(1,-1);if(g==="::1"||/^(0:){7}1$/.test(g))return!0;let U=g.split(":").pop()??"";if(/^(::ffff:|::)/.test(g)&&Uz(U))return!0;return/^::(ffff:)?7f[0-9a-f]{2}:[0-9a-f]{1,4}$/.test(g)}function Ez(_){if(typeof _==="string")return _;if(_ instanceof URL)return _.href;return _.url}function Iz(_,$=process.env){if(!O4($))return;let g=Ez(_),U;try{U=new URL(g)}catch{throw new vU("knowledge: refused an outbound request with an unparseable target while NODE_ENV=test. Under test, only loopback requests are permitted.",{scheme:"unknown",port:""})}if(XQ(U.hostname))return;throw new vU(`knowledge: refused a non-loopback ${U.protocol.replace(":","")} request while NODE_ENV=test (target host withheld on purpose). This process resolved to the cloud backend under test, which means a read or write was about to leave the machine and reach the live store. Select the mode explicitly (HASNA_KNOWLEDGE_STORAGE_MODE=sqlite) or point the API URL at 127.0.0.1 for a hermetic test.`,{scheme:U.protocol.replace(":",""),port:U.port})}var YQ=new Set([301,302,303,307,308]),jz=5;function QQ(_,$){if($?.method)return $.method.toUpperCase();if(typeof _!=="string"&&!(_ instanceof URL))return _.method.toUpperCase();return"GET"}async function wU(_,$){if(Iz(_),!O4()||$?.redirect!==void 0)return fetch(_,$);let g=Ez(_),U=QQ(_,$),D=$?.body,I=await fetch(_,{...$??{},redirect:"manual"});for(let j=0;YQ.has(I.status);j++){let E=I.headers.get("location");if(!E)return I;let A=new URL(E,g).href;if(Iz(A),j>=jz){let P=new URL(A);throw new vU(`knowledge: refused to follow more than ${jz} redirects while NODE_ENV=test (target host withheld on purpose). Under test the guard follows redirects itself so every hop is checked, and a chain this long is a loop, not a route.`,{scheme:P.protocol.replace(":",""),port:P.port})}if(I.status===303||(I.status===301||I.status===302)&&U!=="GET"&&U!=="HEAD")U="GET",D=void 0;let O={...$??{},method:U,redirect:"manual"};if(D===void 0)delete O.body;else O.body=D;I=await fetch(A,O),g=A}return I}var v0="knowledge",lE=$z(v0),o$=lE.modeKeys,fU=lE.apiUrlKeys,xU=lE.apiKeyKeys;function uU(_,$){return $.filter((g)=>(_[g]??"").trim().length>0)}function w0(_=process.env){let $=[...uU(_,fU),...uU(_,xU)],g=o$[0];for(let U of o$){let D=_[U]?.trim();if(!D)continue;let I;try{I=CU(D)}catch(E){let A=E instanceof Error?E.message:String(E);throw Error(`knowledge: ${U}=${D} is not a valid mode. ${A} Unset ${U} to use the default sqlite backend, or set ${U}=sqlite or ${U}=postgres.`)}let j=[];if(U!==g)j.push(`Using alias env ${U}; the canonical key is ${g}.`);if(I.mode==="sqlite"&&$.length>0)j.push(`${U}=sqlite pins the on-box store; ${$.join(", ")} are set but ignored.`);return{mode:I.mode,source:{kind:"env",name:U,value:D},pointer_env_present:$,pointer_ignored:I.mode==="sqlite"&&$.length>0,warning:j.length>0?j.join(" "):null}}return{mode:"sqlite",source:{kind:"default",name:null,value:null},pointer_env_present:$,pointer_ignored:$.length>0,warning:$.length>0?`${$.join(", ")} are set but do NOT select a backend: mode is sqlite by default. Set ${g}=postgres to route reads and writes to the API, or unset those vars to silence this note.`:null}}var TQ=["postgres"],KQ=["sqlite"],Nz=new Map;function Az(_,$,g){let U=$===C0;if(U){let D=Nz.get(_);if(D!==void 0)return D}for(let D of _)try{if($(D),U)Nz.set(_,D);return D}catch{}throw Error(`knowledge: no known storage token is accepted by the installed @hasna/contracts (tried ${_.join(", ")}). The storage-mode enum has changed; add the new token to ${g} in src/knowledge-mode.ts.`)}function qQ(_=C0){return Az(TQ,_,"SERVER_MODE_CANDIDATES")}function BQ(_=C0){return Az(KQ,_,"LOCAL_MODE_CANDIDATES")}function VQ(_,$=C0){return _==="postgres"?qQ($):BQ($)}function tE(_,$){return{..._,[o$[0]]:VQ($)}}class Oz extends Error{code="knowledge_mode_unset_with_api_url";constructor(_){let $=o$[0];super(`knowledge: ${_.join(", ")} names an API store, but no mode variable says to use it, so this command would silently read and write the on-box store instead. Set ${$}=postgres to use the API, or ${$}=sqlite to confirm you want the on-box store. Run 'knowledge mode' to see the full resolution.`);this.name="HalfConfiguredKnowledgeClientError"}}function Pz(_=process.env,$={}){let g=w0(_);if($.storePathOverridden)return g;if(g.source.kind!=="default")return g;let U=uU(_,fU);if(U.length===0)return g;throw new Oz(U)}function Sz(_=process.env){let $=w0(_);return{...$,store_transport:$.mode==="postgres"?"api":"local",api_key_present:uU(_,xU).length>0,network_guard_active:O4(_)}}function oE(_){return Boolean(_&&typeof _==="object"&&_.query_capability==="hasna.knowledge.bounded-query.v1")}function Lz(_){return{fetchImpl:wU,...O4(_)?{retry:!1}:{}}}var p$="notes";class P4 extends Error{expected;current;code="version_conflict";constructor(_,$){super(`version_conflict: this edit was written against version ${_} but the stored entry is now at version ${$}. Nothing was written. Re-read the entry and re-apply only if the fields you are changing are untouched between the two versions.`);this.expected=_;this.current=$;this.name="KnowledgeVersionConflictError"}}class eE extends Error{operation;fields;code="bounded_query_capability_required";constructor(_,$){super(`bounded_query_capability_required: the Knowledge server did not prove support for ${_} field(s): ${$.join(", ")}. Refusing to accept a possibly unfiltered response; update the server and retry.`);this.operation=_;this.fields=$;this.name="KnowledgeBoundedQueryCapabilityError"}}function FQ(_){let $={};if(_.search)$.filter=_.search,$.search=_.search;if(_.tags?.length)$.tags=_.tags;if(_.archive){if($.archive=_.archive,_.archive==="all")$.includeArchived=!0}if(_.sort)$.sort=_.sort;if(_.direction)$.direction=_.direction;if(_.limit!==void 0)$.limit=_.limit;if(_.offset!==void 0)$.offset=_.offset;return $}function rQ(_){let $=[];if(_.tags?.length)$.push("tags");if(_.sort!==void 0)$.push("sort");if(_.direction!==void 0)$.push("direction");if(_.archive==="archived")$.push("archive=archived");return $}function yU(_,$,g,U,D){let I=_??$;if(!Number.isFinite(I)||!Number.isInteger(I)||ID)throw Error(`${g} must be an integer between ${U} and ${D}.`);return I}function bQ(_){return{baseUrl:_.baseUrl,async list($={}){let g=yU($.limit,200,"limit",1,200),U=yU($.offset,0,"offset",0,1e4),D=FQ({...$,limit:g,offset:U}),I=await _.list(p$,{query:D});if(!Number.isInteger(I.total)||Number(I.total)<0)throw Error("knowledge cloud list response is missing a valid producer total.");let j=rQ($);if(j.length>0&&!oE(I.raw))throw new eE("list",j);return{items:I.items,total:Number(I.total)}},async search($){let g=yU($.limit,20,"limit",1,200),U=yU($.offset,0,"offset",0,1e4),D=await _.transport.get(`/${p$}/search`,{query:{q:$.query,archive:$.archive??"active",limit:g,offset:U}});if(!Number.isInteger(D.total)||D.total<0||!Array.isArray(D.items)||D.items.some((I)=>!I||typeof I!=="object"||!I.item||typeof I.rank!=="number"||!Number.isFinite(I.rank)))throw Error("knowledge cloud search response is missing producer rank or total evidence.");if(!oE(D))throw new eE("search",["q","rank","total"]);return{items:D.items,total:D.total}},async get($){return _.get(p$,$)},async create($){return _.create(p$,{...$.id?{id:$.id}:{},title:$.title,content:$.content,url:$.url??null,tags:$.tags??[],...$.metadata?{metadata:$.metadata}:{}})},async update($,g,U={}){try{return await _.update(p$,$,g,{...U.expectedVersion!==void 0?{headers:{"if-match":String(U.expectedVersion)}}:{}})}catch(D){if(pE(D))return null;let I=MQ(D);if(I)throw I;throw D}},async delete($){let g=await _.get(p$,$);if(!g)return!1;return await _.delete(p$,g.id),!0},async listVersions($,g={}){try{return await _.transport.get(`/${p$}/${encodeURIComponent($)}/versions`,{query:{limit:g.limit,offset:g.offset}})}catch(U){if(pE(U))return null;throw U}},async getVersion($,g){try{return await _.transport.get(`/${p$}/${encodeURIComponent($)}/versions/${g}`)}catch(U){if(pE(U))return null;throw U}}}}function MQ(_){if(!_||typeof _!=="object")return null;if(_.status!==409)return null;let $=_.body,U=(typeof $==="string"?ZQ($):$)??{};if(U.error!=="version_conflict")return null;return new P4(Number(U.expected??0),Number(U.current??0))}function ZQ(_){try{return JSON.parse(_)}catch{return null}}function pE(_){return Boolean(_&&typeof _==="object"&&_.status===404)}function u0(_=process.env){let $=kQ(_);return $?bQ($):null}function HQ(_){let $={..._};return delete $.HOME,delete $.USERPROFILE,delete $[Dz],delete $[gz(v0)],$}function kQ(_,$={}){if(w0(_).mode!=="postgres")return null;let g=$.guarded?HQ(_):_,U=iE(v0,tE(g,"postgres"),Lz(g));if(U.transport!=="http")return null;return U.client}function Q6(_=process.env){if(w0(_).mode!=="postgres")return!1;return iE(v0,tE(_,"postgres"),Lz(_)).transport==="http"}async function cU(_){let g=[];for(let U=0;;U+=200){let{items:D}=await _.list({archive:"all",limit:200,offset:U});if(g.push(...D),D.length<200)break;if(U>1e5)break}return g}class sE extends Error{location;code="version_history_unsupported";constructor(_){super(`Version history is not kept by the local JSON knowledge store (${_}). It has no version line, so an empty history here would be a claim, not a measurement. Entry versioning lives in the Postgres-backed store: point this CLI at it (HASNA_KNOWLEDGE_STORAGE_MODE=postgres plus the API url/key) and re-run.`);this.location=_;this.name="VersionHistoryUnsupportedError"}}function aE(_,$){return _.id===$||_.short_id===$}function vQ(_,$){let g=$.trim().toLowerCase();if(!g)return!0;return _.id.toLowerCase().includes(g)||_.title.toLowerCase().includes(g)||_.content.toLowerCase().includes(g)}function wQ(_,$){if($.length===0)return!0;let g=new Set((_.tags??[]).map((U)=>U.toLowerCase()));return $.every((U)=>{let D=U.trim().toLowerCase(),I=U.split(",").map((j)=>j.trim().toLowerCase()).filter(Boolean);return D.length>0&&g.has(D)||I.length>0&&I.every((j)=>g.has(j))})}function uQ(_,$,g,U){let D=g==="title"?_.title.localeCompare($.title):_.created_at.localeCompare($.created_at),I=D===0?_.id.localeCompare($.id):D;return U==="desc"?-I:I}function Wz(_,$,g,U,D){let I=_??$;if(!Number.isFinite(I)||!Number.isInteger(I)||ID)throw Error(`${g} must be an integer between ${U} and ${D}.`);return I}function fQ(_,$){let g=$.archive??"active",U=$.sort??"created",D=$.direction??"asc",I=Wz($.limit,50,"limit",1,200),j=Wz($.offset,0,"offset",0,1e4),E=_.filter((A)=>g==="all"||(g==="archived"?A.archived===!0:A.archived!==!0));if($.search)E=E.filter((A)=>vQ(A,$.search));if($.tags?.length)E=E.filter((A)=>wQ(A,$.tags));return E.sort((A,O)=>uQ(A,O,U,D)),{total:E.length,items:E.slice(j,j+I)}}class Jz{storePath;kind="local";supportsVersions=!1;constructor(_){this.storePath=_}async listVersions(){throw new sE(this.storePath)}async getVersion(){throw new sE(this.storePath)}get location(){return this.storePath}get exists(){return CQ(this.storePath)}async list(_={}){let $=s6(this.storePath);return{...fQ($.items,_),exists:$.exists}}async listAll(){let _=s6(this.storePath);return{items:_.items,total:_.items.length,exists:_.exists}}async get(_){return s6(this.storePath).items.find((g)=>aE(g,_))??null}async create(_){return C$(this.storePath,()=>{let $=H0(this.storePath),g=new Date().toISOString(),U=_.id??uJ(),D={id:U,short_id:fJ(U),title:_.title,content:_.content,url:_.url??null,tags:_.tags??[],metadata:_.metadata??{},archived:!1,created_at:g,updated_at:g,version:1};return $.items.push(D),t$(this.storePath,$),D},{createParent:!0})}async update(_,$,g={}){return C$(this.storePath,()=>{let U=H0(this.storePath),D=U.items.findIndex((E)=>aE(E,_));if(D===-1)return null;let I=U.items[D],j=I.version??1;if(g.expectedVersion!==void 0&&g.expectedVersion!==j)throw new P4(g.expectedVersion,j);if($.title!==void 0)I.title=$.title;if($.content!==void 0)I.content=$.content;if($.url!==void 0)I.url=$.url;if($.tags!==void 0)I.tags=$.tags;if($.metadata!==void 0)I.metadata=$.metadata;if($.archived!==void 0)I.archived=$.archived;return I.updated_at=new Date().toISOString(),I.version=j+1,U.items[D]=I,t$(this.storePath,U),I},{createParent:!0})}async delete(_){return C$(this.storePath,()=>{let $=H0(this.storePath),g=$.items.length;$.items=$.items.filter((D)=>!aE(D,_));let U=g!==$.items.length;if(U)t$(this.storePath,$);return U},{createParent:!0})}async deleteMany(_){if(_.length===0)return 0;let $=new Set(_);return C$(this.storePath,()=>{let g=H0(this.storePath),U=g.items.length;g.items=g.items.filter((I)=>!$.has(I.id)&&!(I.short_id!=null&&$.has(I.short_id)));let D=U-g.items.length;if(D>0)t$(this.storePath,g);return D},{createParent:!0})}}class zz{cloud;kind="api";exists=!0;supportsVersions=!0;constructor(_){this.cloud=_}async listVersions(_,$={}){return this.cloud.listVersions(_,$)}async getVersion(_,$){return this.cloud.getVersion(_,$)}get location(){return this.cloud.baseUrl}async list(_={}){let $=await this.cloud.list({search:_.search,tags:_.tags,archive:_.archive,sort:_.sort,direction:_.direction,limit:_.limit,offset:_.offset});return{items:$.items,total:$.total,exists:!0}}async listAll(){let _=await cU(this.cloud);return{items:_,total:_.length,exists:!0}}async get(_){return this.cloud.get(_)}async create(_){return this.cloud.create({..._.id?{id:_.id}:{},title:_.title,content:_.content,url:_.url??null,tags:_.tags??[],..._.metadata?{metadata:_.metadata}:{}})}async update(_,$,g={}){return this.cloud.update(_,$,{expectedVersion:g.expectedVersion})}async delete(_){return this.cloud.delete(_)}async deleteMany(_){let $=0;for(let g of _)if(await this.cloud.delete(g))$+=1;return $}}function hU(_){let $=_.storePathOverridden?null:u0(_.env??process.env);if($)return new zz($);return new Jz(_.storePath)}function Rz(_){let $=_??"";if($==="")return[];return $.replace(/\n$/,"").split(` +`)}var _N=5000;function xQ(_,$){let g=Rz(_),U=Rz($);if(g.length>_N||U.length>_N)throw Error(`Refusing to line-diff ${Math.max(g.length,U.length)} lines (limit ${_N}). Fetch the two versions and diff them with a dedicated tool.`);let D=Array.from({length:g.length+1},()=>Array(U.length+1).fill(0));for(let A=g.length-1;A>=0;A-=1)for(let O=U.length-1;O>=0;O-=1)D[A][O]=g[A]===U[O]?D[A+1][O+1]+1:Math.max(D[A+1][O],D[A][O+1]);let I=[],j=0,E=0;while(j=D[j][E+1])I.push({op:"remove",from_line:j+1,to_line:null,text:g[j]}),j+=1;else I.push({op:"add",from_line:null,to_line:E+1,text:U[E]}),E+=1;while(j{if(!yQ(_[E],$[E]))g.push({field:E,from:_[E]??null,to:$[E]??null})};U("title"),U("url"),U("tags"),U("metadata"),U("archived");let D=xQ(_.content,$.content),I=D.filter((E)=>E.op==="add").length,j=D.filter((E)=>E.op==="remove").length;return{identical:g.length===0&&I===0&&j===0,fields:g,content:D,added:I,removed:j}}function Xz(_,$,g){let U=[`--- ${$}`,`+++ ${g}`];if(_.identical)return U.push("(no changes)"),U.join(` +`);for(let D of _.fields)U.push(`~ ${D.field}: ${JSON.stringify(D.from)} -> ${JSON.stringify(D.to)}`);if(_.added===0&&_.removed===0){if(_.fields.length>0)U.push("(content unchanged)")}else{U.push(`@@ content +${_.added} -${_.removed} @@`);for(let D of _.content){let I=D.op==="add"?"+":D.op==="remove"?"-":" ";U.push(`${I}${D.text}`)}}return U.join(` +`)}import{Database as Yz}from"bun:sqlite";function nU(_="catalog"){if(Q6()){let $=o$[0];throw Error(`knowledge: ${_} builds/reads the on-box sqlite RAG catalog (source ingestion, chunk embeddings, wiki compilation, cross-machine sync, machine registry). That local indexing pipeline is not available in cloud mode. In cloud mode the shared corpus is the cloud knowledge-items: 'add/list/get/update/delete' item commands AND 'search/ask/build/context' over that shared corpus all route to the cloud. Set ${$}=local `+"(or unset it \u2014 local is the default) to use the full local catalog pipeline; run 'knowledge mode' to see "+"which variable selected the current backend.")}}var cQ="porter unicode61 remove_diacritics 2",Qz=` PRAGMA journal_mode = WAL; PRAGMA foreign_keys = ON; @@ -266,7 +266,7 @@ CREATE VIRTUAL TABLE IF NOT EXISTS chunks_fts USING fts5( INSERT OR IGNORE INTO schema_versions(version, applied_at) VALUES (1, datetime('now')); -`,kQ=` +`,hQ=` DROP TABLE IF EXISTS chunks_fts; CREATE VIRTUAL TABLE IF NOT EXISTS chunks_fts USING fts5( @@ -279,7 +279,7 @@ CREATE VIRTUAL TABLE IF NOT EXISTS chunks_fts USING fts5( INSERT OR IGNORE INTO schema_versions(version, applied_at) VALUES (2, datetime('now')); -`,CQ=` +`,nQ=` CREATE TABLE IF NOT EXISTS audit_events ( id TEXT PRIMARY KEY, event_type TEXT NOT NULL, @@ -310,7 +310,7 @@ CREATE INDEX IF NOT EXISTS idx_approval_gates_status ON approval_gates(status); INSERT OR IGNORE INTO schema_versions(version, applied_at) VALUES (3, datetime('now')); -`,vQ=` +`,dQ=` CREATE TABLE IF NOT EXISTS vector_index_entries ( id TEXT PRIMARY KEY, chunk_id TEXT NOT NULL REFERENCES chunks(id) ON DELETE CASCADE, @@ -341,7 +341,7 @@ CREATE INDEX IF NOT EXISTS idx_vector_index_status ON vector_index_entries(statu INSERT OR IGNORE INTO schema_versions(version, applied_at) VALUES (4, datetime('now')); -`,rQ=` +`,mQ=` CREATE TABLE IF NOT EXISTS reindex_queue ( id TEXT PRIMARY KEY, kind TEXT NOT NULL, @@ -362,7 +362,7 @@ CREATE INDEX IF NOT EXISTS idx_reindex_queue_source_uri ON reindex_queue(source_ INSERT OR IGNORE INTO schema_versions(version, applied_at) VALUES (5, datetime('now')); -`,XS=` +`,Tz=` CREATE TABLE IF NOT EXISTS knowledge_machines ( machine_id TEXT PRIMARY KEY, hostname TEXT, @@ -437,7 +437,7 @@ CREATE INDEX IF NOT EXISTS idx_sync_conflicts_entity ON knowledge_sync_conflicts INSERT OR IGNORE INTO schema_versions(version, applied_at) VALUES (6, datetime('now')); -`,fQ=` +`,iQ=` CREATE TABLE IF NOT EXISTS knowledge_sync_table_clocks ( table_name TEXT NOT NULL, machine_id TEXT NOT NULL, @@ -477,7 +477,7 @@ CREATE INDEX IF NOT EXISTS idx_sync_imports_status ON knowledge_sync_imports(sta INSERT OR IGNORE INTO schema_versions(version, applied_at) VALUES (7, datetime('now')); -`,wQ=` +`,lQ=` CREATE INDEX IF NOT EXISTS idx_wiki_pages_lifecycle_status ON wiki_pages(status, valid_to); CREATE INDEX IF NOT EXISTS idx_wiki_pages_last_verified ON wiki_pages(last_verified_at); CREATE INDEX IF NOT EXISTS idx_wiki_pages_supersedes ON wiki_pages(supersedes); @@ -485,7 +485,7 @@ CREATE INDEX IF NOT EXISTS idx_wiki_pages_superseded_by ON wiki_pages(superseded INSERT OR IGNORE INTO schema_versions(version, applied_at) VALUES (8, datetime('now')); -`,uQ=` +`,tQ=` BEGIN; CREATE TEMP TABLE _chunks_fts_backup AS @@ -498,7 +498,7 @@ CREATE VIRTUAL TABLE chunks_fts USING fts5( text, title, source_uri, - tokenize='${HQ}' + tokenize='${cQ}' ); INSERT INTO chunks_fts (chunk_id, text, title, source_uri) @@ -510,7 +510,7 @@ INSERT OR IGNORE INTO schema_versions(version, applied_at) VALUES (9, datetime('now')); COMMIT; -`,xQ=` +`,oQ=` CREATE TABLE IF NOT EXISTS knowledge_promotion_candidates ( id TEXT PRIMARY KEY, record_kind TEXT NOT NULL, @@ -571,14 +571,14 @@ CREATE INDEX IF NOT EXISTS idx_durable_records_validity INSERT OR IGNORE INTO schema_versions(version, applied_at) VALUES (10, datetime('now')); -`;function r(_){nU("opening the local knowledge.db catalog"),X6(_);let $=new SS(_);return $.exec("PRAGMA foreign_keys = ON;"),$.exec("PRAGMA busy_timeout = 5000;"),$}function RS(_){return nU("reading the local knowledge.db catalog"),new SS(_,{readonly:!0})}function h(_){let $=r(_);try{if($.exec(WS),r_($)<2)$.exec(kQ);if(r_($)<3)$.exec(CQ);if(r_($)<4)$.exec(vQ);if(r_($)<5)$.exec(rQ);if(r_($)<6)$.exec(XS);if(yQ($))hQ($);if(cQ($))nQ($);if(dQ($))mQ($);if(iQ($))lQ($);return{path:_,schema_version:r_($)}}finally{$.close()}}function r_(_){return _.query("SELECT MAX(version) AS version FROM schema_versions").get()?.version??0}function F_(_,$){return _.query(`SELECT COUNT(*) AS n FROM ${$}`).get()?.n??0}function sN(_){return`"${_.replaceAll('"','""')}"`}function e$(_,$){let D=_.query("SELECT name FROM sqlite_master WHERE type IN ('table', 'virtual') AND name = ?").get($);return Boolean(D)}function p$(_,$,D){if(!e$(_,$))return!1;return _.query(`PRAGMA table_info(${sN($)})`).all().some((g)=>g.name===D)}function Q6(_,$,D,U){if(!p$(_,$,D))_.exec(`ALTER TABLE ${sN($)} ADD COLUMN ${sN(D)} ${U};`)}function yQ(_){return r_(_)<7||!p$(_,"knowledge_sync_changes","logical_clock")||!p$(_,"knowledge_sync_changes","bundle_id")||!e$(_,"knowledge_sync_table_clocks")||!e$(_,"knowledge_sync_imports")}function hQ(_){if(!e$(_,"knowledge_sync_changes"))_.exec(XS);Q6(_,"knowledge_sync_changes","logical_clock","INTEGER NOT NULL DEFAULT 0"),Q6(_,"knowledge_sync_changes","bundle_id","TEXT"),_.exec(fQ)}function cQ(_){return r_(_)<8||!p$(_,"wiki_pages","valid_from")||!p$(_,"wiki_pages","valid_to")||!p$(_,"wiki_pages","supersedes")||!p$(_,"wiki_pages","superseded_by")||!p$(_,"wiki_pages","confidence")||!p$(_,"wiki_pages","last_verified_at")}function nQ(_){if(!e$(_,"wiki_pages"))_.exec(WS);Q6(_,"wiki_pages","valid_from","TEXT"),Q6(_,"wiki_pages","valid_to","TEXT"),Q6(_,"wiki_pages","supersedes","TEXT"),Q6(_,"wiki_pages","superseded_by","TEXT"),Q6(_,"wiki_pages","confidence","REAL"),Q6(_,"wiki_pages","last_verified_at","TEXT"),_.exec(` +`;function v(_){nU("opening the local knowledge.db catalog"),X6(_);let $=new Yz(_);return $.exec("PRAGMA foreign_keys = ON;"),$.exec("PRAGMA busy_timeout = 5000;"),$}function Kz(_){return nU("reading the local knowledge.db catalog"),new Yz(_,{readonly:!0})}function c(_){let $=v(_);try{if($.exec(Qz),k_($)<2)$.exec(hQ);if(k_($)<3)$.exec(nQ);if(k_($)<4)$.exec(dQ);if(k_($)<5)$.exec(mQ);if(k_($)<6)$.exec(Tz);if(pQ($))eQ($);if(aQ($))sQ($);if(_T($))$T($);if(gT($))DT($);return{path:_,schema_version:k_($)}}finally{$.close()}}function k_(_){return _.query("SELECT MAX(version) AS version FROM schema_versions").get()?.version??0}function B_(_,$){return _.query(`SELECT COUNT(*) AS n FROM ${$}`).get()?.n??0}function $N(_){return`"${_.replaceAll('"','""')}"`}function a$(_,$){let g=_.query("SELECT name FROM sqlite_master WHERE type IN ('table', 'virtual') AND name = ?").get($);return Boolean(g)}function e$(_,$,g){if(!a$(_,$))return!1;return _.query(`PRAGMA table_info(${$N($)})`).all().some((D)=>D.name===g)}function T6(_,$,g,U){if(!e$(_,$,g))_.exec(`ALTER TABLE ${$N($)} ADD COLUMN ${$N(g)} ${U};`)}function pQ(_){return k_(_)<7||!e$(_,"knowledge_sync_changes","logical_clock")||!e$(_,"knowledge_sync_changes","bundle_id")||!a$(_,"knowledge_sync_table_clocks")||!a$(_,"knowledge_sync_imports")}function eQ(_){if(!a$(_,"knowledge_sync_changes"))_.exec(Tz);T6(_,"knowledge_sync_changes","logical_clock","INTEGER NOT NULL DEFAULT 0"),T6(_,"knowledge_sync_changes","bundle_id","TEXT"),_.exec(iQ)}function aQ(_){return k_(_)<8||!e$(_,"wiki_pages","valid_from")||!e$(_,"wiki_pages","valid_to")||!e$(_,"wiki_pages","supersedes")||!e$(_,"wiki_pages","superseded_by")||!e$(_,"wiki_pages","confidence")||!e$(_,"wiki_pages","last_verified_at")}function sQ(_){if(!a$(_,"wiki_pages"))_.exec(Qz);T6(_,"wiki_pages","valid_from","TEXT"),T6(_,"wiki_pages","valid_to","TEXT"),T6(_,"wiki_pages","supersedes","TEXT"),T6(_,"wiki_pages","superseded_by","TEXT"),T6(_,"wiki_pages","confidence","REAL"),T6(_,"wiki_pages","last_verified_at","TEXT"),_.exec(` UPDATE wiki_pages SET valid_from = COALESCE(valid_from, created_at), last_verified_at = COALESCE(last_verified_at, updated_at), confidence = COALESCE(confidence, 0.8) WHERE valid_from IS NULL OR last_verified_at IS NULL OR confidence IS NULL; - `),_.exec(wQ)}function GS(_){let $=_.query("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ?").get("chunks_fts");return Boolean($?.sql&&$.sql.includes("remove_diacritics"))}function dQ(_){if(!e$(_,"chunks_fts"))return!1;return r_(_)<9||!GS(_)}function mQ(_){if(!e$(_,"chunks_fts"))return;if(GS(_)){_.exec("INSERT OR IGNORE INTO schema_versions(version, applied_at) VALUES (9, datetime('now'));");return}_.exec(uQ)}function iQ(_){return r_(_)<10||!e$(_,"knowledge_promotion_candidates")||!e$(_,"durable_knowledge_records")}function lQ(_){_.exec(xQ)}function _E(_){let $=r(_);try{return{schema_version:r_($),sources:F_($,"sources"),source_revisions:F_($,"source_revisions"),chunks:F_($,"chunks"),wiki_pages:F_($,"wiki_pages"),citations:F_($,"citations"),indexes:F_($,"knowledge_indexes"),runs:F_($,"runs"),run_events:F_($,"run_events"),redaction_findings:F_($,"redaction_findings"),audit_events:F_($,"audit_events"),approval_gates:F_($,"approval_gates"),storage_objects:F_($,"storage_objects"),embeddings:F_($,"chunk_embeddings"),vector_entries:F_($,"vector_index_entries"),reindex_queue:F_($,"reindex_queue"),knowledge_machines:F_($,"knowledge_machines"),sync_snapshots:F_($,"knowledge_sync_snapshots"),sync_changes:F_($,"knowledge_sync_changes"),sync_conflicts:F_($,"knowledge_sync_conflicts"),sync_table_clocks:F_($,"knowledge_sync_table_clocks"),sync_imports:F_($,"knowledge_sync_imports"),promotion_candidates:F_($,"knowledge_promotion_candidates"),durable_records:F_($,"durable_knowledge_records")}}finally{$.close()}}import{chmodSync as tQ,existsSync as oQ,mkdirSync as YS,readFileSync as pQ,statSync as eQ,writeFileSync as aQ}from"fs";import{dirname as sQ,join as $E,relative as _T,sep as $T}from"path";import{pathToFileURL as DT}from"url";function f$(_){let $=_.replace(/\\/g,"/").trim();if(!$||$.startsWith("/"))throw Error(`Invalid artifact key: ${_}`);let D=$.split("/").filter(Boolean);if(D.length===0||D.some((U)=>U==="."||U===".."))throw Error(`Invalid artifact key: ${_}`);return D.join("/")}function DE(_,$){let D=_T(_,$);if(D.startsWith("..")||D===".."||D.startsWith(`..${$T}`))throw Error(`Artifact path escapes root: ${$}`)}function gT(_){if(!_)return;let $={};for(let[D,U]of Object.entries(_))if(typeof U==="string")$[D]=U;else if(typeof U==="number"||typeof U==="boolean")$[D]=String(U);return Object.keys($).length>0?$:void 0}class QS{root;type="local";canRead=!0;canWrite=!0;constructor(_){this.root=_;YS(_,{recursive:!0,mode:448})}async put(_){let $=f$(_.key),D=$E(this.root,$);return DE(this.root,D),YS(sQ(D),{recursive:!0,mode:448}),aQ(D,_.body,{mode:384}),tQ(D,384),{key:$,uri:DT(D).href,modified_at:eQ(D).mtime.toISOString()}}async getText(_){let $=f$(_),D=$E(this.root,$);return DE(this.root,D),pQ(D,"utf8")}async exists(_){let $=f$(_),D=$E(this.root,$);return DE(this.root,D),oQ(D)}}class TS{options;type="s3";canRead=!0;canWrite=!0;client;constructor(_){this.options=_;this.client=_.client}async getClient(){if(this.client)return this.client;let[{S3Client:_},{fromIni:$}]=await Promise.all([import("@aws-sdk/client-s3"),import("@aws-sdk/credential-providers")]);return this.client=new _({region:this.options.region,credentials:this.options.profile?$({profile:this.options.profile}):void 0,maxAttempts:this.options.max_attempts}),this.client}objectKey(_){let $=f$(_),D=this.options.prefix?f$(this.options.prefix):"";return D?`${D}/${$}`:$}async put(_){let[{PutObjectCommand:$},D]=await Promise.all([import("@aws-sdk/client-s3"),this.getClient()]),U=f$(_.key),g=this.objectKey(U);return await D.send(new $({Bucket:this.options.bucket,Key:g,Body:_.body,ContentType:_.content_type,Metadata:gT(_.metadata),ServerSideEncryption:this.options.server_side_encryption,SSEKMSKeyId:this.options.kms_key_id})),{key:U,uri:`s3://${this.options.bucket}/${g}`,modified_at:new Date().toISOString()}}async getText(_){let[{GetObjectCommand:$},D]=await Promise.all([import("@aws-sdk/client-s3"),this.getClient()]),U=this.objectKey(_),g=await D.send(new $({Bucket:this.options.bucket,Key:U}));if(!g.Body)return"";return await g.Body.transformToString()}async exists(_){let[{HeadObjectCommand:$},D]=await Promise.all([import("@aws-sdk/client-s3"),this.getClient()]),U=this.objectKey(_);try{return await D.send(new $({Bucket:this.options.bucket,Key:U})),!0}catch(g){let I=g instanceof Error?g.name:"";if(I==="NotFound"||I==="NoSuchKey"||I==="NotFoundError")return!1;throw g}}}function gE(_,$){if(_.storage.type==="s3"){if(!_.storage.s3?.bucket)throw Error("S3 artifact storage requires storage.s3.bucket");return new TS({bucket:_.storage.s3.bucket,prefix:_.storage.s3.prefix,region:_.storage.s3.region,profile:_.storage.s3.profile,max_attempts:_.storage.s3.max_attempts,server_side_encryption:_.storage.s3.server_side_encryption,kms_key_id:_.storage.s3.kms_key_id})}return new QS($.artifactsDir)}import{createHash as JU}from"crypto";import{spawnSync as pZ}from"child_process";import{existsSync as W_,readFileSync as eZ}from"fs";import{hostname as aZ}from"os";import{join as f9,resolve as p9}from"path";import{createHash as Z7,randomUUID as b7}from"crypto";import{createHash as JT,randomUUID as PT}from"crypto";import{existsSync as IE,readdirSync as zT}from"fs";import{join as bS}from"path";import{pathToFileURL as ST}from"url";import{existsSync as UT,mkdirSync as IT,readFileSync as jT,unlinkSync as NT,writeFileSync as ET}from"fs";import{homedir as OT}from"os";import{dirname as AT,join as qS}from"path";var UE="https://knowledge.md";function a$(_){let $=new URL(_);if($.protocol!=="http:"&&$.protocol!=="https:")throw Error("Knowledge API URL must use http or https.");let D=$.pathname.replace(/\/+$/,"");if(D==="/api"||D==="/api/v1")$.pathname="/";else if(D.endsWith("/api/v1"))$.pathname=D.slice(0,-7)||"/";else if(D.endsWith("/api"))$.pathname=D.slice(0,-4)||"/";return $.toString().replace(/\/+$/,"")}function dU(_=process.env){if(_.HASNA_KNOWLEDGE_AUTH_PATH)return _.HASNA_KNOWLEDGE_AUTH_PATH;let $=_.HASNA_KNOWLEDGE_AUTH_DIR??qS(OT(),".hasna","knowledge");return qS($,"auth.json")}function BS(_,$=process.env){return a$($.KNOWLEDGE_API_URL??_?.hosted?.api_url??UE)}function VS(_=process.env){try{let $=dU(_);if(!UT($))return null;let D=JSON.parse(jT($,"utf8"));return typeof D.api_key==="string"&&D.api_key.length>0?D:null}catch{return null}}function KS(_,$=process.env){let D=dU($),U={..._,api_url:_.api_url?a$(_.api_url):void 0,created_at:_.created_at??new Date().toISOString()};return IT(AT(D),{recursive:!0,mode:448}),ET(D,`${JSON.stringify(U,null,2)} -`,{mode:384}),U}function FS(_=process.env){try{return NT(dU(_)),!0}catch{return!1}}function LT(_=process.env){if(_.KNOWLEDGE_API_KEY)return{apiKey:_.KNOWLEDGE_API_KEY,source:"env"};if(_.HASNA_KNOWLEDGE_API_KEY)return{apiKey:_.HASNA_KNOWLEDGE_API_KEY,source:"env"};let $=VS(_);return $?.api_key?{apiKey:$.api_key,source:"file"}:{apiKey:null,source:"none"}}function MS(_,$=process.env){let D=VS($),U=LT($),g=$.KNOWLEDGE_API_URL?BS(_,$):D?.api_url?a$(D.api_url):BS(_,$);return{authenticated:Boolean(U.apiKey),source:U.source,api_url:g,auth_path:dU($),email:U.source==="file"?D?.email??null:null,org_id:U.source==="file"?D?.org_id??null:null,org_slug:U.source==="file"?D?.org_slug??null:null,user_id:U.source==="file"?D?.user_id??null:null,api_key_present:Boolean(U.apiKey)}}var ZS=2;var HS=[{kind:"schema",prefix:"schemas/",description:"Machine-readable agent schemas and source rules."},{kind:"index",prefix:"indexes/",description:"Small orientation indexes and future shard manifests."},{kind:"log",prefix:"logs/",description:"Append-only JSONL run and wiki-maintenance log partitions."},{kind:"run",prefix:"runs/",description:"Prompt/tool/cost ledgers and generated output records."},{kind:"wiki_page",prefix:"wiki/",description:"Generated cited Markdown pages, not raw source files."},{kind:"export",prefix:"exports/",description:"Portable exports and snapshots of derived knowledge state."}],WT=["cloud.env","knowledge.db.pre-cloud-*.bak","db.json.pre-cloud-*.bak","migration-exports"];function kS(_){let $=[];if(IE(bS(_.home,"cloud.env")))$.push("cloud.env");if(IE(bS(_.home,"migration-exports")))$.push("migration-exports");if(IE(_.home)){for(let D of zT(_.home))if(/^(?:knowledge\.db|db\.json)\.pre-cloud-.+\.bak$/i.test(D))$.push(D)}return $}function J0(_){let $=typeof _==="string"?Buffer.from(_):Buffer.from(_);return{hash:`sha256:${JT("sha256").update($).digest("hex")}`,size_bytes:$.byteLength}}function CS(_){return HS.find((D)=>_.startsWith(D.prefix))?.kind??"artifact"}function mU(_,$,D="global"){let U=jE(_,$),g=_.storage.s3??null,I=g?.prefix?.replace(/^\/+|\/+$/g,"")??"",j=g?`s3://${g.bucket}/${I?`${I}/`:""}`:"",N=P_.s3.prefix.replace(/^\/+|\/+$/g,""),O=`s3://${P_.s3.bucket}/${N}/`,A=_.storage.type==="s3"&&g?.bucket===P_.s3.bucket&&(g.region??null)===P_.s3.region;return{scope:D,mode:_.mode,storage_type:_.storage.type,workspace_home:$.home,local_layout:{app_path:l$,config_path:$.configPath,json_store_path:$.jsonStorePath,knowledge_db_path:$.knowledgeDbPath,directories:{artifacts:$.artifactsDir,cache:$.cacheDir,exports:$.exportsDir,indexes:$.indexesDir,logs:$.logsDir,runs:$.runsDir,schemas:$.schemasDir,wiki:$.wikiDir}},artifact_store:{type:_.storage.type,artifacts_root:_.storage.artifacts_root,uri_prefix:_.storage.type==="s3"?j:ST(`${$.artifactsDir}/`).href,s3:g?{bucket:g.bucket,prefix:I,region:g.region??null,profile:g.profile??null,server_side_encryption:g.server_side_encryption??null,kms_key_configured:Boolean(g.kms_key_id)}:null},canonical_example:{division:P_.division,app_type:P_.app_type,app:P_.app,env:P_.env,active:A,local_path:P_.local_path,s3:{bucket:P_.s3.bucket,region:P_.s3.region,profile:P_.s3.profile,prefix:N,uri_prefix:O,server_side_encryption:P_.s3.server_side_encryption},secrets:{env:P_.secrets.env,aws:P_.secrets.aws,s3:P_.secrets.s3,rds:P_.secrets.rds,future_rds:P_.secrets.future_rds},evidence_doc:P_.evidence_doc},hosted:{enabled:_.mode==="hosted",api_url:a$(_.hosted?.api_url??UE),api_url_env:"KNOWLEDGE_API_URL",api_key_env:"KNOWLEDGE_API_KEY",auth_storage:"~/.hasna/knowledge/auth.json",registry_contract_version:ZS,requires_hosted_account_for_local_use:!1},secret_handling:{workspace_env_files_supported:!1,forbidden_workspace_files:WT,forbidden_workspace_files_present:kS($),runtime_env_keys:["HASNA_KNOWLEDGE_STORAGE_MODE","KNOWLEDGE_STORAGE_MODE","HASNA_KNOWLEDGE_DATABASE_URL","KNOWLEDGE_DATABASE_URL"],secret_ref_authority:"open-secrets",approved_secret_refs:{env:P_.secrets.env,aws:P_.secrets.aws,s3:P_.secrets.s3,rds:P_.secrets.rds},db_url_rotation_decision:{status:"blocked_without_secret_authority",reason:"No live secret mutation authority is available in @hasna/knowledge. Rotate the DB URL only through the approved secret authority if separate evidence proves the URL propagated to backups, exports, sync bundles, reports, or copied artifacts.",authority_required:!0}},source_ownership:{owner:"open-files",preferred_ref:_.sources.preferred_ref,allowed_schemes:_.sources.allowed_schemes,raw_source_bytes_stored_in_open_knowledge:!1,stores:["source refs","source revisions and hashes","citation spans","redacted extracted chunks","embeddings","generated wiki artifacts","indexes","run ledgers"],does_not_store:["raw open-files bytes","S3 object credentials","connector secrets","hosted tenant ownership state"]},private_fleet_boundary:{manifest_authority:"open-machines",source_ref_authority:"open-files",secret_ref_authority:"open-secrets",raw_private_manifest_bytes_stored_in_open_knowledge:!1,accepted_source_ref_schemes:_.sources.allowed_schemes.filter((L)=>["open-files","s3","file"].includes(L)),stores:["source refs for private manifests","redacted setup decisions","runbook summaries","citation spans into approved knowledge sources","machine setup evidence hashes"],does_not_store:["private fleet manifests","machine hostnames","machine serial numbers","sudo passwords","VNC passwords","SSH private keys","GitHub App private keys","secret values"],example_manifest_ref:"open-files://source/private-fleet-manifest/path/machines.json"},generated_artifacts:HS,scalability:{catalog:"knowledge.db tracks sources, revisions, chunks, citations, indexes, runs, and storage_objects.",indexes:"Indexes are cataloged DB rows plus sharded artifacts, not one giant index.md.",logs:"Logs use dated JSONL partitions under logs/yyyy/mm/dd.jsonl.",markdown:"Markdown pages are the readable wiki layer over DB/object-store state."},warnings:U.warnings}}function jE(_,$){let D=[],U=[],g=kS($);for(let I of g)D.push(`Forbidden Knowledge workspace file present: ${I}. Move secrets to open-secrets/runtime env and remove or replace legacy backups/exports with redacted owner-only artifacts.`);if(!$.home.endsWith(l$))U.push(`Workspace home does not end with ${l$}: ${$.home}`);if(_.storage.type==="s3"){if(!_.storage.s3?.bucket)D.push("storage.s3.bucket is required when storage.type is s3.");if(!_.storage.s3?.prefix)U.push("storage.s3.prefix is empty; generated knowledge artifacts will be written at the bucket root.");if(_.mode==="local")U.push("storage.type is s3 while mode is local; this is valid for BYO S3, but hosted wrappers should set mode to hosted.")}if(_.storage.type==="local"&&_.storage.s3)U.push("storage.s3 is configured but ignored while storage.type is local.");if(_.sources.preferred_ref!=="open-files")U.push("sources.preferred_ref should stay open-files for durable company knowledge.");if(!_.sources.allowed_schemes.includes("open-files"))D.push("sources.allowed_schemes must include open-files.");if(_.mode==="hosted"&&_.hosted?.api_url)try{a$(_.hosted.api_url)}catch{D.push("hosted.api_url must be an http(s) URL when mode is hosted.")}return{ok:D.length===0,errors:D,warnings:U}}function s$(_,$,D=new Date){let U=D.toISOString(),g=_.prepare(` + `),_.exec(lQ)}function qz(_){let $=_.query("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = ?").get("chunks_fts");return Boolean($?.sql&&$.sql.includes("remove_diacritics"))}function _T(_){if(!a$(_,"chunks_fts"))return!1;return k_(_)<9||!qz(_)}function $T(_){if(!a$(_,"chunks_fts"))return;if(qz(_)){_.exec("INSERT OR IGNORE INTO schema_versions(version, applied_at) VALUES (9, datetime('now'));");return}_.exec(tQ)}function gT(_){return k_(_)<10||!a$(_,"knowledge_promotion_candidates")||!a$(_,"durable_knowledge_records")}function DT(_){_.exec(oQ)}function gN(_){let $=v(_);try{return{schema_version:k_($),sources:B_($,"sources"),source_revisions:B_($,"source_revisions"),chunks:B_($,"chunks"),wiki_pages:B_($,"wiki_pages"),citations:B_($,"citations"),indexes:B_($,"knowledge_indexes"),runs:B_($,"runs"),run_events:B_($,"run_events"),redaction_findings:B_($,"redaction_findings"),audit_events:B_($,"audit_events"),approval_gates:B_($,"approval_gates"),storage_objects:B_($,"storage_objects"),embeddings:B_($,"chunk_embeddings"),vector_entries:B_($,"vector_index_entries"),reindex_queue:B_($,"reindex_queue"),knowledge_machines:B_($,"knowledge_machines"),sync_snapshots:B_($,"knowledge_sync_snapshots"),sync_changes:B_($,"knowledge_sync_changes"),sync_conflicts:B_($,"knowledge_sync_conflicts"),sync_table_clocks:B_($,"knowledge_sync_table_clocks"),sync_imports:B_($,"knowledge_sync_imports"),promotion_candidates:B_($,"knowledge_promotion_candidates"),durable_records:B_($,"durable_knowledge_records")}}finally{$.close()}}import{chmodSync as UT,existsSync as IT,mkdirSync as Bz,readFileSync as jT,statSync as ET,writeFileSync as NT}from"fs";import{dirname as AT,join as DN,relative as OT,sep as PT}from"path";import{pathToFileURL as ST}from"url";function v$(_){let $=_.replace(/\\/g,"/").trim();if(!$||$.startsWith("/"))throw Error(`Invalid artifact key: ${_}`);let g=$.split("/").filter(Boolean);if(g.length===0||g.some((U)=>U==="."||U===".."))throw Error(`Invalid artifact key: ${_}`);return g.join("/")}function UN(_,$){let g=OT(_,$);if(g.startsWith("..")||g===".."||g.startsWith(`..${PT}`))throw Error(`Artifact path escapes root: ${$}`)}function LT(_){if(!_)return;let $={};for(let[g,U]of Object.entries(_))if(typeof U==="string")$[g]=U;else if(typeof U==="number"||typeof U==="boolean")$[g]=String(U);return Object.keys($).length>0?$:void 0}class Vz{root;type="local";canRead=!0;canWrite=!0;constructor(_){this.root=_;Bz(_,{recursive:!0,mode:448})}async put(_){let $=v$(_.key),g=DN(this.root,$);return UN(this.root,g),Bz(AT(g),{recursive:!0,mode:448}),NT(g,_.body,{mode:384}),UT(g,384),{key:$,uri:ST(g).href,modified_at:ET(g).mtime.toISOString()}}async getText(_){let $=v$(_),g=DN(this.root,$);return UN(this.root,g),jT(g,"utf8")}async exists(_){let $=v$(_),g=DN(this.root,$);return UN(this.root,g),IT(g)}}class Fz{options;type="s3";canRead=!0;canWrite=!0;client;constructor(_){this.options=_;this.client=_.client}async getClient(){if(this.client)return this.client;let[{S3Client:_},{fromIni:$}]=await Promise.all([import("@aws-sdk/client-s3"),import("@aws-sdk/credential-providers")]);return this.client=new _({region:this.options.region,credentials:this.options.profile?$({profile:this.options.profile}):void 0,maxAttempts:this.options.max_attempts}),this.client}objectKey(_){let $=v$(_),g=this.options.prefix?v$(this.options.prefix):"";return g?`${g}/${$}`:$}async put(_){let[{PutObjectCommand:$},g]=await Promise.all([import("@aws-sdk/client-s3"),this.getClient()]),U=v$(_.key),D=this.objectKey(U);return await g.send(new $({Bucket:this.options.bucket,Key:D,Body:_.body,ContentType:_.content_type,Metadata:LT(_.metadata),ServerSideEncryption:this.options.server_side_encryption,SSEKMSKeyId:this.options.kms_key_id})),{key:U,uri:`s3://${this.options.bucket}/${D}`,modified_at:new Date().toISOString()}}async getText(_){let[{GetObjectCommand:$},g]=await Promise.all([import("@aws-sdk/client-s3"),this.getClient()]),U=this.objectKey(_),D=await g.send(new $({Bucket:this.options.bucket,Key:U}));if(!D.Body)return"";return await D.Body.transformToString()}async exists(_){let[{HeadObjectCommand:$},g]=await Promise.all([import("@aws-sdk/client-s3"),this.getClient()]),U=this.objectKey(_);try{return await g.send(new $({Bucket:this.options.bucket,Key:U})),!0}catch(D){let I=D instanceof Error?D.name:"";if(I==="NotFound"||I==="NoSuchKey"||I==="NotFoundError")return!1;throw D}}}function IN(_,$){if(_.storage.type==="s3"){if(!_.storage.s3?.bucket)throw Error("S3 artifact storage requires storage.s3.bucket");return new Fz({bucket:_.storage.s3.bucket,prefix:_.storage.s3.prefix,region:_.storage.s3.region,profile:_.storage.s3.profile,max_attempts:_.storage.s3.max_attempts,server_side_encryption:_.storage.s3.server_side_encryption,kms_key_id:_.storage.s3.kms_key_id})}return new Vz($.artifactsDir)}import{createHash as PU}from"crypto";import{spawnSync as jM}from"child_process";import{existsSync as J_,readFileSync as EM}from"fs";import{hostname as NM}from"os";import{join as c5,resolve as $9}from"path";import{createHash as xK,randomUUID as yK}from"crypto";import{createHash as TT,randomUUID as KT}from"crypto";import{existsSync as EN,readdirSync as qT}from"fs";import{join as vz}from"path";import{pathToFileURL as BT}from"url";import{existsSync as WT,mkdirSync as JT,readFileSync as zT,unlinkSync as RT,writeFileSync as GT}from"fs";import{homedir as XT}from"os";import{dirname as YT,join as rz}from"path";var jN="https://knowledge.md";function s$(_){let $=new URL(_);if($.protocol!=="http:"&&$.protocol!=="https:")throw Error("Knowledge API URL must use http or https.");let g=$.pathname.replace(/\/+$/,"");if(g==="/api"||g==="/api/v1")$.pathname="/";else if(g.endsWith("/api/v1"))$.pathname=g.slice(0,-7)||"/";else if(g.endsWith("/api"))$.pathname=g.slice(0,-4)||"/";return $.toString().replace(/\/+$/,"")}function dU(_=process.env){if(_.HASNA_KNOWLEDGE_AUTH_PATH)return _.HASNA_KNOWLEDGE_AUTH_PATH;let $=_.HASNA_KNOWLEDGE_AUTH_DIR??rz(XT(),".hasna","knowledge");return rz($,"auth.json")}function bz(_,$=process.env){return s$($.KNOWLEDGE_API_URL??_?.hosted?.api_url??jN)}function Mz(_=process.env){try{let $=dU(_);if(!WT($))return null;let g=JSON.parse(zT($,"utf8"));return typeof g.api_key==="string"&&g.api_key.length>0?g:null}catch{return null}}function Zz(_,$=process.env){let g=dU($),U={..._,api_url:_.api_url?s$(_.api_url):void 0,created_at:_.created_at??new Date().toISOString()};return JT(YT(g),{recursive:!0,mode:448}),GT(g,`${JSON.stringify(U,null,2)} +`,{mode:384}),U}function Hz(_=process.env){try{return RT(dU(_)),!0}catch{return!1}}function QT(_=process.env){if(_.KNOWLEDGE_API_KEY)return{apiKey:_.KNOWLEDGE_API_KEY,source:"env"};if(_.HASNA_KNOWLEDGE_API_KEY)return{apiKey:_.HASNA_KNOWLEDGE_API_KEY,source:"env"};let $=Mz(_);return $?.api_key?{apiKey:$.api_key,source:"file"}:{apiKey:null,source:"none"}}function kz(_,$=process.env){let g=Mz($),U=QT($),D=$.KNOWLEDGE_API_URL?bz(_,$):g?.api_url?s$(g.api_url):bz(_,$);return{authenticated:Boolean(U.apiKey),source:U.source,api_url:D,auth_path:dU($),email:U.source==="file"?g?.email??null:null,org_id:U.source==="file"?g?.org_id??null:null,org_slug:U.source==="file"?g?.org_slug??null:null,user_id:U.source==="file"?g?.user_id??null:null,api_key_present:Boolean(U.apiKey)}}var Cz=2;var wz=[{kind:"schema",prefix:"schemas/",description:"Machine-readable agent schemas and source rules."},{kind:"index",prefix:"indexes/",description:"Small orientation indexes and future shard manifests."},{kind:"log",prefix:"logs/",description:"Append-only JSONL run and wiki-maintenance log partitions."},{kind:"run",prefix:"runs/",description:"Prompt/tool/cost ledgers and generated output records."},{kind:"wiki_page",prefix:"wiki/",description:"Generated cited Markdown pages, not raw source files."},{kind:"export",prefix:"exports/",description:"Portable exports and snapshots of derived knowledge state."}],VT=["cloud.env","knowledge.db.pre-cloud-*.bak","db.json.pre-cloud-*.bak","migration-exports"];function uz(_){let $=[];if(EN(vz(_.home,"cloud.env")))$.push("cloud.env");if(EN(vz(_.home,"migration-exports")))$.push("migration-exports");if(EN(_.home)){for(let g of qT(_.home))if(/^(?:knowledge\.db|db\.json)\.pre-cloud-.+\.bak$/i.test(g))$.push(g)}return $}function S4(_){let $=typeof _==="string"?Buffer.from(_):Buffer.from(_);return{hash:`sha256:${TT("sha256").update($).digest("hex")}`,size_bytes:$.byteLength}}function fz(_){return wz.find((g)=>_.startsWith(g.prefix))?.kind??"artifact"}function mU(_,$,g="global"){let U=NN(_,$),D=_.storage.s3??null,I=D?.prefix?.replace(/^\/+|\/+$/g,"")??"",j=D?`s3://${D.bucket}/${I?`${I}/`:""}`:"",E=S_.s3.prefix.replace(/^\/+|\/+$/g,""),A=`s3://${S_.s3.bucket}/${E}/`,O=_.storage.type==="s3"&&D?.bucket===S_.s3.bucket&&(D.region??null)===S_.s3.region;return{scope:g,mode:_.mode,storage_type:_.storage.type,workspace_home:$.home,local_layout:{app_path:l$,config_path:$.configPath,json_store_path:$.jsonStorePath,knowledge_db_path:$.knowledgeDbPath,directories:{artifacts:$.artifactsDir,cache:$.cacheDir,exports:$.exportsDir,indexes:$.indexesDir,logs:$.logsDir,runs:$.runsDir,schemas:$.schemasDir,wiki:$.wikiDir}},artifact_store:{type:_.storage.type,artifacts_root:_.storage.artifacts_root,uri_prefix:_.storage.type==="s3"?j:BT(`${$.artifactsDir}/`).href,s3:D?{bucket:D.bucket,prefix:I,region:D.region??null,profile:D.profile??null,server_side_encryption:D.server_side_encryption??null,kms_key_configured:Boolean(D.kms_key_id)}:null},canonical_example:{division:S_.division,app_type:S_.app_type,app:S_.app,env:S_.env,active:O,local_path:S_.local_path,s3:{bucket:S_.s3.bucket,region:S_.s3.region,profile:S_.s3.profile,prefix:E,uri_prefix:A,server_side_encryption:S_.s3.server_side_encryption},secrets:{env:S_.secrets.env,aws:S_.secrets.aws,s3:S_.secrets.s3,rds:S_.secrets.rds,future_rds:S_.secrets.future_rds},evidence_doc:S_.evidence_doc},hosted:{enabled:_.mode==="hosted",api_url:s$(_.hosted?.api_url??jN),api_url_env:"KNOWLEDGE_API_URL",api_key_env:"KNOWLEDGE_API_KEY",auth_storage:"~/.hasna/knowledge/auth.json",registry_contract_version:Cz,requires_hosted_account_for_local_use:!1},secret_handling:{workspace_env_files_supported:!1,forbidden_workspace_files:VT,forbidden_workspace_files_present:uz($),runtime_env_keys:["HASNA_KNOWLEDGE_STORAGE_MODE","KNOWLEDGE_STORAGE_MODE","HASNA_KNOWLEDGE_DATABASE_URL","KNOWLEDGE_DATABASE_URL"],secret_ref_authority:"open-secrets",approved_secret_refs:{env:S_.secrets.env,aws:S_.secrets.aws,s3:S_.secrets.s3,rds:S_.secrets.rds},db_url_rotation_decision:{status:"blocked_without_secret_authority",reason:"No live secret mutation authority is available in @hasna/knowledge. Rotate the DB URL only through the approved secret authority if separate evidence proves the URL propagated to backups, exports, sync bundles, reports, or copied artifacts.",authority_required:!0}},source_ownership:{owner:"open-files",preferred_ref:_.sources.preferred_ref,allowed_schemes:_.sources.allowed_schemes,raw_source_bytes_stored_in_open_knowledge:!1,stores:["source refs","source revisions and hashes","citation spans","redacted extracted chunks","embeddings","generated wiki artifacts","indexes","run ledgers"],does_not_store:["raw open-files bytes","S3 object credentials","connector secrets","hosted tenant ownership state"]},private_fleet_boundary:{manifest_authority:"open-machines",source_ref_authority:"open-files",secret_ref_authority:"open-secrets",raw_private_manifest_bytes_stored_in_open_knowledge:!1,accepted_source_ref_schemes:_.sources.allowed_schemes.filter((P)=>["open-files","s3","file"].includes(P)),stores:["source refs for private manifests","redacted setup decisions","runbook summaries","citation spans into approved knowledge sources","machine setup evidence hashes"],does_not_store:["private fleet manifests","machine hostnames","machine serial numbers","sudo passwords","VNC passwords","SSH private keys","GitHub App private keys","secret values"],example_manifest_ref:"open-files://source/private-fleet-manifest/path/machines.json"},generated_artifacts:wz,scalability:{catalog:"knowledge.db tracks sources, revisions, chunks, citations, indexes, runs, and storage_objects.",indexes:"Indexes are cataloged DB rows plus sharded artifacts, not one giant index.md.",logs:"Logs use dated JSONL partitions under logs/yyyy/mm/dd.jsonl.",markdown:"Markdown pages are the readable wiki layer over DB/object-store state."},warnings:U.warnings}}function NN(_,$){let g=[],U=[],D=uz($);for(let I of D)g.push(`Forbidden Knowledge workspace file present: ${I}. Move secrets to open-secrets/runtime env and remove or replace legacy backups/exports with redacted owner-only artifacts.`);if(!$.home.endsWith(l$))U.push(`Workspace home does not end with ${l$}: ${$.home}`);if(_.storage.type==="s3"){if(!_.storage.s3?.bucket)g.push("storage.s3.bucket is required when storage.type is s3.");if(!_.storage.s3?.prefix)U.push("storage.s3.prefix is empty; generated knowledge artifacts will be written at the bucket root.");if(_.mode==="local")U.push("storage.type is s3 while mode is local; this is valid for BYO S3, but hosted wrappers should set mode to hosted.")}if(_.storage.type==="local"&&_.storage.s3)U.push("storage.s3 is configured but ignored while storage.type is local.");if(_.sources.preferred_ref!=="open-files")U.push("sources.preferred_ref should stay open-files for durable company knowledge.");if(!_.sources.allowed_schemes.includes("open-files"))g.push("sources.allowed_schemes must include open-files.");if(_.mode==="hosted"&&_.hosted?.api_url)try{s$(_.hosted.api_url)}catch{g.push("hosted.api_url must be an http(s) URL when mode is hosted.")}return{ok:g.length===0,errors:g,warnings:U}}function _6(_,$,g=new Date){let U=g.toISOString(),D=_.prepare(` INSERT INTO storage_objects ( id, artifact_uri, kind, content_type, hash, size_bytes, metadata_json, created_at, updated_at ) @@ -590,49 +590,49 @@ VALUES (10, datetime('now')); size_bytes = excluded.size_bytes, metadata_json = excluded.metadata_json, updated_at = excluded.updated_at - `);_.transaction((j)=>{for(let N of j){let O={key:N.key,...N.modified_at?{artifact_modified_at:N.modified_at}:{},...N.metadata??{}};g.run(PT(),N.uri,N.kind,N.content_type??null,N.hash??null,N.size_bytes??null,JSON.stringify(O),U,U)}})($)}function NE(_){return["deleted","stale","invalidated","reindex_required"].includes((_??"").toLowerCase())}function T6(_){let $=_.status??null;return{source_owner:"open-files",source_ref:_.source_ref??null,source_uri:_.source_uri??null,source_kind:_.source_kind??null,source_revision_id:_.source_revision_id??null,revision:_.revision??null,hash:_.hash??null,chunk_id:_.chunk_id??null,start_offset:_.start_offset??null,end_offset:_.end_offset??null,status:$,read_only:!0,citation_required:!0,resolver:_.resolver??null,stale:NE($)}}function U$(_){return{source_owner:"open-files",generated_from:_.generated_from,artifact_key:_.artifact_key,source_refs:_.source_refs??[],read_only_sources:!0,citation_required:_.citation_required??!0,raw_source_bytes_stored_in_open_knowledge:!1}}function vS(_,$){return{..._,provenance:$}}import{createHash as Y7}from"crypto";import{existsSync as Q7,readFileSync as T7}from"fs";import{basename as oU}from"path";import{createHash as nT}from"crypto";import{existsSync as dT,readFileSync as mT}from"fs";import{basename as iT}from"path";import{fileURLToPath as XT}from"url";function rS(_,$){if(!_)throw Error($);return _}function RT(_){let D=_.slice(13).split("/").filter(Boolean),U=D[0];if(U!=="file"&&U!=="source")throw Error("Invalid open-files ref. Expected open-files://file/, open-files://file//revision/, or open-files://source//path/.");let g=rS(D[1],"Invalid open-files ref. Missing id.");if(U==="file"){if(D.length===2)return{kind:"open-files",uri:_,entity:U,id:g};if(D[2]==="revision"&&D[3]&&D.length===4)return{kind:"open-files",uri:_,entity:U,id:g,revision_id:decodeURIComponent(D[3])};throw Error("Invalid open-files file ref. Expected open-files://file//revision/.")}let I=D.indexOf("path"),j=I>=0?decodeURIComponent(D.slice(I+1).join("/")):void 0;return{kind:"open-files",uri:_,entity:U,id:g,path:j}}function GT(_){let $=new URL(_),D=rS($.hostname,"Invalid s3 ref. Missing bucket."),U=decodeURIComponent($.pathname.replace(/^\/+/,""));if(!U)throw Error("Invalid s3 ref. Missing object key.");return{kind:"s3",uri:_,bucket:D,key:U}}function YT(_){return{kind:"file",uri:_,path:XT(_)}}function QT(_){let $=new URL(_);return{kind:"web",uri:_,url:$.toString()}}function A$(_){if(_.startsWith("open-files://"))return RT(_);if(_.startsWith("s3://"))return GT(_);if(_.startsWith("file://"))return YT(_);if(_.startsWith("https://")||_.startsWith("http://"))return QT(_);throw Error(`Unsupported source ref scheme: ${_}`)}function fS(_,$=A$(_)){if($.kind==="open-files"&&$.entity==="file"&&$.revision_id)return _.replace(/\/revision\/[^/]+$/,"");return _}function wS(_){let $=A$(_);return $.kind==="open-files"&&$.entity==="file"?$.revision_id??null:null}import{createHash as TT,randomUUID as OE}from"crypto";import{relative as qT,resolve as xS,sep as BT}from"path";function uS(_){let $=process.env[_];return $==="1"||$==="true"||$==="yes"}function yS(_,$){let D=_,U=new Set(D.safety?.network?.allowed_s3_buckets??[]);if(_.storage.type==="s3"&&_.storage.s3?.bucket)U.add(_.storage.s3.bucket);if(process.env.HASNA_KNOWLEDGE_ALLOWED_S3_BUCKETS)for(let g of process.env.HASNA_KNOWLEDGE_ALLOWED_S3_BUCKETS.split(",").map((I)=>I.trim()).filter(Boolean))U.add(g);return{mode:_.mode,allowWriteRoots:[$.home,$.artifactsDir,$.cacheDir,$.exportsDir,$.indexesDir,$.logsDir,$.runsDir,$.schemasDir,$.wikiDir].map((g)=>xS(g)),readOnlySourceAccess:!0,network:{webSearchEnabled:D.safety?.network?.web_search_enabled??uS("HASNA_KNOWLEDGE_WEB_SEARCH"),s3ReadsEnabled:D.safety?.network?.s3_reads_enabled??uS("HASNA_KNOWLEDGE_ALLOW_S3_READS"),allowedS3Buckets:[...U].sort()},redaction:{enabled:D.safety?.redaction?.enabled??!0},approvals:{generatedWritesRequireApproval:D.safety?.approvals?.generated_writes_require_approval??!0}}}function VT(_,$){let D=qT(_,$);return D===""||!D.startsWith("..")&&D!==".."&&!D.startsWith(`..${BT}`)}function _6(_,$){let D=xS(_);if(!$.allowWriteRoots.some((U)=>VT(U,D)))throw Error(`Safety policy denied write outside .hasna/knowledge: ${_}`)}function q6(_,$){let U=new URL(_).hostname;if(!$.network.s3ReadsEnabled)throw Error("Safety policy denied S3 read. Set safety.network.s3_reads_enabled=true or HASNA_KNOWLEDGE_ALLOW_S3_READS=1.");if(!$.network.allowedS3Buckets.includes(U))throw Error(`Safety policy denied S3 bucket "${U}". Add it to safety.network.allowed_s3_buckets or HASNA_KNOWLEDGE_ALLOWED_S3_BUCKETS.`)}function P0(_){if(!_.network.webSearchEnabled)throw Error("Safety policy denied web search. Set safety.network.web_search_enabled=true or HASNA_KNOWLEDGE_WEB_SEARCH=1.")}var hS=[{type:"private_key_block",severity:"high",regex:/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g,replacement:"[REDACTED:private_key_block]"},{type:"secret_assignment",severity:"high",regex:/\b(?:api[_-]?key|secret|token|password)\s*[:=]\s*['"]?[^'"\s]{8,}/gi,replacement:"[REDACTED:secret_assignment]"},{type:"openai_api_key",severity:"high",regex:/\bsk-[A-Za-z0-9_-]{20,}\b/g,replacement:"[REDACTED:openai_api_key]"},{type:"anthropic_api_key",severity:"high",regex:new RegExp(`\\b${["sk","ant"].join("-")}-[A-Za-z0-9_-]{20,}\\b`,"g"),replacement:"[REDACTED:anthropic_api_key]"},{type:"aws_access_key_id",severity:"high",regex:/\bA(?:KIA|SIA)[A-Z0-9]{16}\b/g,replacement:"[REDACTED:aws_access_key_id]"}];function u_(_,$){if($&&!$.redaction.enabled)return{text:_,findings:[]};let D=_,U=[];for(let g of hS)D=D.replace(g.regex,(I,...j)=>{let N=typeof j.at(-2)==="number"?j.at(-2):D.indexOf(I);return U.push({type:g.type,severity:g.severity,start:Math.max(0,N),end:Math.max(0,N+I.length)}),g.replacement});return{text:D,findings:U}}function KT(_){return`audit_${TT("sha256").update(`${_.event_type}\x00${_.action}\x00${_.target_uri??""}\x00${_.created_at??""}\x00${JSON.stringify(_.metadata??{})}\x00${OE()}`).digest("hex").slice(0,24)}`}function EE(_,$=0){if($>6)return"[Truncated:depth]";if(typeof _==="string")return _.length>1000?`${_.slice(0,1000)}...[Truncated:${_.length-1000} chars]`:_;if(typeof _==="number"||typeof _==="boolean"||_===null||_===void 0)return _;if(Array.isArray(_)){let D=_.slice(0,25).map((U)=>EE(U,$+1));if(_.length>25)D.push(`[Truncated:${_.length-25} items]`);return D}if(typeof _==="object"){let D={},U=Object.entries(_).slice(0,50);for(let[I,j]of U)D[I]=EE(j,$+1);let g=Object.keys(_).length;if(g>U.length)D.__truncated_keys=g-U.length;return D}return String(_)}function X_(_,$){let D=$.created_at??new Date().toISOString(),U=EE($.metadata??{}),g=KT({...$,metadata:U,created_at:D});return _.run(`INSERT INTO audit_events (id, event_type, action, target_uri, decision, metadata_json, created_at) - VALUES (?, ?, ?, ?, ?, ?, ?)`,[g,$.event_type,$.action,$.target_uri??null,$.decision,JSON.stringify(U),D]),g}function z0(_,$){let D=$.created_at??new Date().toISOString();for(let U of $.findings)_.run(`INSERT INTO redaction_findings (id, source_uri, run_id, severity, finding_type, metadata_json, created_at) - VALUES (?, ?, ?, ?, ?, ?, ?)`,[`redact_${OE()}`,$.source_uri??null,$.run_id??null,U.severity,U.type,JSON.stringify({...$.metadata??{},start:U.start,end:U.end}),D]);return $.findings.length}function iU(_,$){let D=$.created_at??new Date().toISOString(),U=`approval_${OE()}`;return _.run(`INSERT INTO approval_gates (id, action, target_uri, status, reason, approved_by, metadata_json, created_at, updated_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[U,$.action,$.target_uri??null,"approved",$.reason??null,$.approved_by??"local-cli",JSON.stringify($.metadata??{}),D,D]),{id:U,status:"approved"}}var FT=[{type:"github_token",severity:"high",regex:/\bgh[pousr]_[A-Za-z0-9_]{20,}\b/g,replacement:"[REDACTED:github_token]"},{type:"github_pat_token",severity:"high",regex:/\bgithub[_]pat[_][A-Za-z0-9_]{20,}\b/g,replacement:"[REDACTED:github_pat_token]"},{type:"package_registry_token",severity:"high",regex:/\bnpm_[A-Za-z0-9_-]{20,}\b/g,replacement:"[REDACTED:package_registry_token]"},{type:"context7_token",severity:"high",regex:/\bctx7sk[-][A-Za-z0-9_-]{10,}\b/g,replacement:"[REDACTED:context7_token]"},{type:"xai_api_key",severity:"high",regex:/\bxai[-][A-Za-z0-9_-]{20,}\b/g,replacement:"[REDACTED:xai_api_key]"},{type:"google_api_key",severity:"high",regex:/\bAIza[A-Za-z0-9_-]{20,}\b/g,replacement:"[REDACTED:google_api_key]"}];hS.push(...FT);function MT(_,$,D){let U=_.query(`SELECT id FROM approval_gates + `);_.transaction((j)=>{for(let E of j){let A={key:E.key,...E.modified_at?{artifact_modified_at:E.modified_at}:{},...E.metadata??{}};D.run(KT(),E.uri,E.kind,E.content_type??null,E.hash??null,E.size_bytes??null,JSON.stringify(A),U,U)}})($)}function AN(_){return["deleted","stale","invalidated","reindex_required"].includes((_??"").toLowerCase())}function K6(_){let $=_.status??null;return{source_owner:"open-files",source_ref:_.source_ref??null,source_uri:_.source_uri??null,source_kind:_.source_kind??null,source_revision_id:_.source_revision_id??null,revision:_.revision??null,hash:_.hash??null,chunk_id:_.chunk_id??null,start_offset:_.start_offset??null,end_offset:_.end_offset??null,status:$,read_only:!0,citation_required:!0,resolver:_.resolver??null,stale:AN($)}}function D$(_){return{source_owner:"open-files",generated_from:_.generated_from,artifact_key:_.artifact_key,source_refs:_.source_refs??[],read_only_sources:!0,citation_required:_.citation_required??!0,raw_source_bytes_stored_in_open_knowledge:!1}}function xz(_,$){return{..._,provenance:$}}import{createHash as MK}from"crypto";import{existsSync as ZK,readFileSync as HK}from"fs";import{basename as oU}from"path";import{createHash as sT}from"crypto";import{existsSync as _K,readFileSync as $K}from"fs";import{basename as gK}from"path";import{fileURLToPath as FT}from"url";function yz(_,$){if(!_)throw Error($);return _}function rT(_){let g=_.slice(13).split("/").filter(Boolean),U=g[0];if(U!=="file"&&U!=="source")throw Error("Invalid open-files ref. Expected open-files://file/, open-files://file//revision/, or open-files://source//path/.");let D=yz(g[1],"Invalid open-files ref. Missing id.");if(U==="file"){if(g.length===2)return{kind:"open-files",uri:_,entity:U,id:D};if(g[2]==="revision"&&g[3]&&g.length===4)return{kind:"open-files",uri:_,entity:U,id:D,revision_id:decodeURIComponent(g[3])};throw Error("Invalid open-files file ref. Expected open-files://file//revision/.")}let I=g.indexOf("path"),j=I>=0?decodeURIComponent(g.slice(I+1).join("/")):void 0;return{kind:"open-files",uri:_,entity:U,id:D,path:j}}function bT(_){let $=new URL(_),g=yz($.hostname,"Invalid s3 ref. Missing bucket."),U=decodeURIComponent($.pathname.replace(/^\/+/,""));if(!U)throw Error("Invalid s3 ref. Missing object key.");return{kind:"s3",uri:_,bucket:g,key:U}}function MT(_){return{kind:"file",uri:_,path:FT(_)}}function ZT(_){let $=new URL(_);return{kind:"web",uri:_,url:$.toString()}}function A$(_){if(_.startsWith("open-files://"))return rT(_);if(_.startsWith("s3://"))return bT(_);if(_.startsWith("file://"))return MT(_);if(_.startsWith("https://")||_.startsWith("http://"))return ZT(_);throw Error(`Unsupported source ref scheme: ${_}`)}function cz(_,$=A$(_)){if($.kind==="open-files"&&$.entity==="file"&&$.revision_id)return _.replace(/\/revision\/[^/]+$/,"");return _}function hz(_){let $=A$(_);return $.kind==="open-files"&&$.entity==="file"?$.revision_id??null:null}import{createHash as HT,randomUUID as PN}from"crypto";import{relative as kT,resolve as dz,sep as CT}from"path";function nz(_){let $=process.env[_];return $==="1"||$==="true"||$==="yes"}function mz(_,$){let g=_,U=new Set(g.safety?.network?.allowed_s3_buckets??[]);if(_.storage.type==="s3"&&_.storage.s3?.bucket)U.add(_.storage.s3.bucket);if(process.env.HASNA_KNOWLEDGE_ALLOWED_S3_BUCKETS)for(let D of process.env.HASNA_KNOWLEDGE_ALLOWED_S3_BUCKETS.split(",").map((I)=>I.trim()).filter(Boolean))U.add(D);return{mode:_.mode,allowWriteRoots:[$.home,$.artifactsDir,$.cacheDir,$.exportsDir,$.indexesDir,$.logsDir,$.runsDir,$.schemasDir,$.wikiDir].map((D)=>dz(D)),readOnlySourceAccess:!0,network:{webSearchEnabled:g.safety?.network?.web_search_enabled??nz("HASNA_KNOWLEDGE_WEB_SEARCH"),s3ReadsEnabled:g.safety?.network?.s3_reads_enabled??nz("HASNA_KNOWLEDGE_ALLOW_S3_READS"),allowedS3Buckets:[...U].sort()},redaction:{enabled:g.safety?.redaction?.enabled??!0},approvals:{generatedWritesRequireApproval:g.safety?.approvals?.generated_writes_require_approval??!0}}}function vT(_,$){let g=kT(_,$);return g===""||!g.startsWith("..")&&g!==".."&&!g.startsWith(`..${CT}`)}function $6(_,$){let g=dz(_);if(!$.allowWriteRoots.some((U)=>vT(U,g)))throw Error(`Safety policy denied write outside .hasna/knowledge: ${_}`)}function q6(_,$){let U=new URL(_).hostname;if(!$.network.s3ReadsEnabled)throw Error("Safety policy denied S3 read. Set safety.network.s3_reads_enabled=true or HASNA_KNOWLEDGE_ALLOW_S3_READS=1.");if(!$.network.allowedS3Buckets.includes(U))throw Error(`Safety policy denied S3 bucket "${U}". Add it to safety.network.allowed_s3_buckets or HASNA_KNOWLEDGE_ALLOWED_S3_BUCKETS.`)}function L4(_){if(!_.network.webSearchEnabled)throw Error("Safety policy denied web search. Set safety.network.web_search_enabled=true or HASNA_KNOWLEDGE_WEB_SEARCH=1.")}var iz=[{type:"private_key_block",severity:"high",regex:/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g,replacement:"[REDACTED:private_key_block]"},{type:"secret_assignment",severity:"high",regex:/\b(?:api[_-]?key|secret|token|password)\s*[:=]\s*['"]?[^'"\s]{8,}/gi,replacement:"[REDACTED:secret_assignment]"},{type:"openai_api_key",severity:"high",regex:/\bsk-[A-Za-z0-9_-]{20,}\b/g,replacement:"[REDACTED:openai_api_key]"},{type:"anthropic_api_key",severity:"high",regex:new RegExp(`\\b${["sk","ant"].join("-")}-[A-Za-z0-9_-]{20,}\\b`,"g"),replacement:"[REDACTED:anthropic_api_key]"},{type:"aws_access_key_id",severity:"high",regex:/\bA(?:KIA|SIA)[A-Z0-9]{16}\b/g,replacement:"[REDACTED:aws_access_key_id]"}];function w_(_,$){if($&&!$.redaction.enabled)return{text:_,findings:[]};let g=_,U=[];for(let D of iz)g=g.replace(D.regex,(I,...j)=>{let E=typeof j.at(-2)==="number"?j.at(-2):g.indexOf(I);return U.push({type:D.type,severity:D.severity,start:Math.max(0,E),end:Math.max(0,E+I.length)}),D.replacement});return{text:g,findings:U}}function wT(_){return`audit_${HT("sha256").update(`${_.event_type}\x00${_.action}\x00${_.target_uri??""}\x00${_.created_at??""}\x00${JSON.stringify(_.metadata??{})}\x00${PN()}`).digest("hex").slice(0,24)}`}function ON(_,$=0){if($>6)return"[Truncated:depth]";if(typeof _==="string")return _.length>1000?`${_.slice(0,1000)}...[Truncated:${_.length-1000} chars]`:_;if(typeof _==="number"||typeof _==="boolean"||_===null||_===void 0)return _;if(Array.isArray(_)){let g=_.slice(0,25).map((U)=>ON(U,$+1));if(_.length>25)g.push(`[Truncated:${_.length-25} items]`);return g}if(typeof _==="object"){let g={},U=Object.entries(_).slice(0,50);for(let[I,j]of U)g[I]=ON(j,$+1);let D=Object.keys(_).length;if(D>U.length)g.__truncated_keys=D-U.length;return g}return String(_)}function z_(_,$){let g=$.created_at??new Date().toISOString(),U=ON($.metadata??{}),D=wT({...$,metadata:U,created_at:g});return _.run(`INSERT INTO audit_events (id, event_type, action, target_uri, decision, metadata_json, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?)`,[D,$.event_type,$.action,$.target_uri??null,$.decision,JSON.stringify(U),g]),D}function W4(_,$){let g=$.created_at??new Date().toISOString();for(let U of $.findings)_.run(`INSERT INTO redaction_findings (id, source_uri, run_id, severity, finding_type, metadata_json, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?)`,[`redact_${PN()}`,$.source_uri??null,$.run_id??null,U.severity,U.type,JSON.stringify({...$.metadata??{},start:U.start,end:U.end}),g]);return $.findings.length}function iU(_,$){let g=$.created_at??new Date().toISOString(),U=`approval_${PN()}`;return _.run(`INSERT INTO approval_gates (id, action, target_uri, status, reason, approved_by, metadata_json, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[U,$.action,$.target_uri??null,"approved",$.reason??null,$.approved_by??"local-cli",JSON.stringify($.metadata??{}),g,g]),{id:U,status:"approved"}}var uT=[{type:"github_token",severity:"high",regex:/\bgh[pousr]_[A-Za-z0-9_]{20,}\b/g,replacement:"[REDACTED:github_token]"},{type:"github_pat_token",severity:"high",regex:/\bgithub[_]pat[_][A-Za-z0-9_]{20,}\b/g,replacement:"[REDACTED:github_pat_token]"},{type:"package_registry_token",severity:"high",regex:/\bnpm_[A-Za-z0-9_-]{20,}\b/g,replacement:"[REDACTED:package_registry_token]"},{type:"context7_token",severity:"high",regex:/\bctx7sk[-][A-Za-z0-9_-]{10,}\b/g,replacement:"[REDACTED:context7_token]"},{type:"xai_api_key",severity:"high",regex:/\bxai[-][A-Za-z0-9_-]{20,}\b/g,replacement:"[REDACTED:xai_api_key]"},{type:"google_api_key",severity:"high",regex:/\bAIza[A-Za-z0-9_-]{20,}\b/g,replacement:"[REDACTED:google_api_key]"}];iz.push(...uT);function fT(_,$,g){let U=_.query(`SELECT id FROM approval_gates WHERE action = ? AND status = 'approved' AND (target_uri IS NULL OR target_uri = ? OR ? IS NULL) - ORDER BY updated_at DESC LIMIT 1`).get($,D??null,D??null);return Boolean(U)}function cS(_,$,D,U){let g=D==="generated_write"&&$.approvals.generatedWritesRequireApproval,I=!g||MT(_,D,U);return{action:D,target_uri:U??null,approval_required:g,approved:I,decision:I?"allow":"requires_approval"}}import{createHash as ZT}from"crypto";import{realpathSync as bT}from"fs";import{homedir as HT,tmpdir as kT}from"os";var a6=String.raw`[^\s"'<>),\]}]`,LE=String.raw`[^/\\\s"'<>]+`,mS=/file:\/\/[^\s"'<>),\]}]+/gi,CT=/\/[^\s"'<>),\]}]*\.hasna\/[^\s"'<>),\]}]*/g,iS=/(?:~|\/(?:home|Users)\/[^/\s"'<>]+)?\/?\.hasna(?:\/[^\s"'<>),\]}]*)?/gi,lS=new RegExp(String.raw`/(?:home|Users)/${LE}/(?:workspace|Workspace)/${a6}*`,"g"),vT=[new RegExp(String.raw`/(?:home|Users)/${LE}(?:/${a6}*)?`,"g"),new RegExp(String.raw`(?:/private)?/var/(?:folders|tmp)/${a6}+`,"g"),new RegExp(String.raw`(?:/private)?/tmp/${a6}+`,"g"),new RegExp(String.raw`(?),\]}]+)\b/gi,oS=/\b(?:postgres(?:ql)?|mysql|mariadb):\/\/[^\s"'<>),\]}]+/gi,rT=new Set(["content_base64"]);function fT(_){return _.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function wT(_){return _.length>=4&&_!=="/"&&!/^[A-Za-z]:[\\/]?$/.test(_)}var nS=null,AE=[];function uT(){let _=new Set;for(let D of[HT(),kT()]){if(!D)continue;_.add(D);try{_.add(bT(D))}catch{}}let $=[..._].sort().join("\x00");if($===nS)return AE;return nS=$,AE=[..._].filter(wT).sort((D,U)=>U.length-D.length).map((D)=>new RegExp(`${fT(D)}(?:[/\\\\]${a6}*)?`,"g")),AE}function L$(_){return ZT("sha256").update(_).digest("hex").slice(0,12)}function xT(_){return _.length<=80?_:`${_.slice(0,77)}...`}function dS(_){return/(?:^|\/)\.hasna(?:\/|$)/i.test(_)||/\b(?:knowledge\.db|db\.json|cloud\.env)\b/i.test(_)||/\bmigration-exports\//i.test(_)}function yT(_,$,D,U){for(let g of _.matchAll(mS)){let I=g[0];if(!D.allowFileSourceRefs||dS(I))U.push({type:dS(I)?"private_file_uri":"local_file_uri",severity:"high",path:$,preview:xT(I.replace(/^file:\/\/.*/,`[redacted:file-uri:${L$(I)}]`))})}for(let g of _.matchAll(iS))U.push({type:"private_hasna_path",severity:"high",path:$,preview:`[redacted:.hasna:${L$(g[0])}]`});for(let g of _.matchAll(tS))U.push({type:g[0].toLowerCase()==="cloud.env"?"workspace_env_file":"raw_database_or_export_ref",severity:"high",path:$,preview:`[redacted:${L$(g[0])}]`});for(let g of _.matchAll(oS))U.push({type:"database_url",severity:"high",path:$,preview:`[redacted:database-url:${L$(g[0])}]`});if(!D.allowPrivateWorkspaceRefs)for(let g of _.matchAll(lS))U.push({type:"private_workspace_path",severity:"medium",path:$,preview:`[redacted:workspace:${L$(g[0])}]`})}function hT(_,$={},D="$"){let U=[],g=(I,j)=>{if(typeof I==="string"){yT(I,j,$,U);return}if(!I||typeof I!=="object")return;if(Array.isArray(I)){I.forEach((N,O)=>g(N,`${j}[${O}]`));return}for(let[N,O]of Object.entries(I))g(O,`${j}.${N}`)};return g(_,D),U}function s6(_,$={}){let D=hT(_,$);if(D.length===0)return;let U=new Map;for(let I of D)U.set(I.type,(U.get(I.type)??0)+1);let g=[...U.entries()].map(([I,j])=>`${I}:${j}`).join(", ");throw Error(`Knowledge private-ref lint failed (${g}). Store open-files/s3 refs or approved runtime secret refs instead of private .hasna, file://, raw DB/export, or cloud.env refs.`)}function cT(_){let $=u_(_).text.replace(oS,(D)=>`[REDACTED:database-url:${L$(D)}]`).replace(mS,(D)=>`[REDACTED:local-file-uri:${L$(D)}]`).replace(CT,(D)=>`[REDACTED:local-hasna-path:${L$(D)}]`).replace(lS,(D)=>`[REDACTED:private-workspace:${L$(D)}]`);for(let D of[...uT(),...vT])$=$.replace(D,(U)=>`[REDACTED:local-path:${L$(U)}]`);return $.replace(iS,(D)=>`[REDACTED:hasna-path:${L$(D)}]`).replace(tS,(D)=>`[REDACTED:private-artifact:${L$(D)}]`)}function q_(_){if(typeof _==="string")return cT(_);if(!_||typeof _!=="object")return _;if(Array.isArray(_))return _.map((D)=>q_(D));let $={};for(let[D,U]of Object.entries(_))$[D]=rT.has(D)?U:q_(U);return $}var lT=20971520,pS=1e4,tT=10;function PE(_,$){return`${_}_${nT("sha256").update($).digest("hex").slice(0,20)}`}function _4(_){return _&&typeof _==="object"&&!Array.isArray(_)?_:void 0}function N_(_){return typeof _==="string"&&_.length>0?_:void 0}function oT(_){return typeof _==="number"&&Number.isFinite(_)?_:void 0}function pT(_){let $=N_(_.source_ref)??N_(_.source_uri)??N_(_.uri);if($)return $;let D=N_(_.file_id);if(D){let I=N_(_.revision_id)??N_(_.revision),j=`open-files://file/${encodeURIComponent(D)}`;return I?`${j}/revision/${encodeURIComponent(I)}`:j}let U=N_(_.source_id),g=N_(_.path);if(U&&g)return`open-files://source/${encodeURIComponent(U)}/path/${encodeURIComponent(g)}`;throw Error("Manifest item is missing source_ref, file_id, or source_id/path.")}function eT(_,$){if($.kind==="open-files"&&$.entity==="file"&&$.revision_id)return _.replace(/\/revision\/[^/]+$/,"");return _}function aT(_){let $=N_(_.extracted_text)??N_(_.text)??N_(_.content_text)??N_(_.markdown);if($!==void 0)return $;let D=_.content;return typeof D==="string"?D:null}function sT(_){let $=N_(_.extracted_text_ref)??N_(_.extracted_text_uri)??N_(_.text_ref);if($)return $;let D=_4(_.content);return N_(D?.extracted_text_ref)??N_(D?.extracted_text_uri)??null}function _7(_){let $=N_(_.path);return N_(_.title)??N_(_.name)??($?iT($):null)}function $7(_){return N_(_.hash)??N_(_.checksum)??N_(_.sha256)??null}var eS=new Set(["text","content","content_text","extracted_text","markdown","raw","raw_text","raw_bytes","raw_content","raw_body","raw_file","source_raw","source_raw_bytes","source_bytes","source_content","source_body","file_bytes","file_content","content_bytes","content_base64","document_bytes","document_content","document_base64","binary","binary_content","binary_base64","bytes","body","blob","data","payload"]);function aS(_){return _.toLowerCase().replace(/[\s-]+/g,"_")}function JE(_){if(Array.isArray(_))return _.map((U)=>JE(U));let $=_4(_);if(!$)return _;let D={};for(let[U,g]of Object.entries($)){if(eS.has(aS(U)))continue;D[U]=JE(g)}return D}function D7(_,$,D){return N_(_.revision_id)??N_(_.revision)??N_(_.version_id)??($.kind==="open-files"?$.revision_id:void 0)??D??N_(_.updated_at)??"current"}function g7(_,$){let D={};for(let[U,g]of Object.entries(_)){if(eS.has(aS(U)))continue;D[U]=q_(JE(g))}return D.source_ref=$.sourceRef,D.source_uri=$.sourceUri,D.status=$.status,D}function U7(_,$,D={}){let U=pT(_);s6(U,{allowFileSourceRefs:D.allowFileSourceRefs===!0});let g=A$(U),I=eT(U,g),j=$7(_),N=N_(_.status)??"active";return{raw:_,sourceRef:U,sourceUri:I,kind:g.kind,title:_7(_),revision:D7(_,g,j),hash:j,extractedTextUri:sT(_),text:aT(_),metadata:g7(_,{sourceRef:U,sourceUri:I,status:N}),acl:_.permissions??_.acl??{},status:N,updatedAt:N_(_.updated_at)??$}}function I7(_){let $=_.trim();if(!$)return[];if($.startsWith("[")){let D=JSON.parse($);if(!Array.isArray(D))throw Error("Manifest array parse failed.");return D.map((U)=>{let g=_4(U);if(!g)throw Error("Manifest array entries must be objects.");return g})}if($.startsWith("{"))try{let D=JSON.parse($),U=_4(D);if(!U)throw Error("Manifest object parse failed.");if(Array.isArray(U.items))return U.items.map((g)=>{let I=_4(g);if(!I)throw Error("Manifest items entries must be objects.");return I});if("source_ref"in U||"source_uri"in U||"file_id"in U)return[U]}catch(D){let U=$.split(/\r?\n/).filter((g)=>g.trim().length>0);if(U.length<=1)throw D;return U.map((g)=>{let I=_4(JSON.parse(g));if(!I)throw Error("Manifest JSONL entries must be objects.");return I})}return $.split(/\r?\n/).filter((D)=>D.trim().length>0).map((D)=>{let U=_4(JSON.parse(D));if(!U)throw Error("Manifest JSONL entries must be objects.");return U})}async function j7(_,$,D){let U=new URL(_),g=U.hostname,I=decodeURIComponent(U.pathname.replace(/^\/+/,""));if(!g||!I)throw Error(`Invalid S3 manifest URI: ${_}`);if(D)q6(_,D);let[{S3Client:j,GetObjectCommand:N},{fromIni:O}]=await Promise.all([import("@aws-sdk/client-s3"),import("@aws-sdk/credential-providers")]),A=$?.storage.type==="s3"&&$.storage.s3?.bucket===g?$.storage.s3:void 0,z=await new j({region:A?.region,credentials:A?.profile?O({profile:A.profile}):void 0,maxAttempts:A?.max_attempts}).send(new N({Bucket:g,Key:I}));if(!z.Body)return"";return await z.Body.transformToString()}async function N7(_,$,D,U=lT){let g=_.startsWith("s3://")?await j7(_,$,D):(()=>{if(!dT(_))throw Error(`Manifest not found: ${_}`);return mT(_,"utf8")})(),I=Buffer.byteLength(g);if(I>U)throw Error(`Manifest input is too large: ${I} bytes exceeds ${U} byte limit.`);return g}function E7(_,$,D){let U=_.replace(/\r\n/g,` -`);if(!U.trim())return[];let g=[],I=0;while(I),\]}]`,LN=String.raw`[^/\\\s"'<>]+`,pz=/file:\/\/[^\s"'<>),\]}]+/gi,nT=/\/[^\s"'<>),\]}]*\.hasna\/[^\s"'<>),\]}]*/g,ez=/(?:~|\/(?:home|Users)\/[^/\s"'<>]+)?\/?\.hasna(?:\/[^\s"'<>),\]}]*)?/gi,az=new RegExp(String.raw`/(?:home|Users)/${LN}/(?:workspace|Workspace)/${_g}*`,"g"),dT=[new RegExp(String.raw`/(?:home|Users)/${LN}(?:/${_g}*)?`,"g"),new RegExp(String.raw`(?:/private)?/var/(?:folders|tmp)/${_g}+`,"g"),new RegExp(String.raw`(?:/private)?/tmp/${_g}+`,"g"),new RegExp(String.raw`(?),\]}]+)\b/gi,_3=/\b(?:postgres(?:ql)?|mysql|mariadb):\/\/[^\s"'<>),\]}]+/gi,mT=new Set(["content_base64"]);function iT(_){return _.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function lT(_){return _.length>=4&&_!=="/"&&!/^[A-Za-z]:[\\/]?$/.test(_)}var tz=null,SN=[];function tT(){let _=new Set;for(let g of[cT(),hT()]){if(!g)continue;_.add(g);try{_.add(yT(g))}catch{}}let $=[..._].sort().join("\x00");if($===tz)return SN;return tz=$,SN=[..._].filter(lT).sort((g,U)=>U.length-g.length).map((g)=>new RegExp(`${iT(g)}(?:[/\\\\]${_g}*)?`,"g")),SN}function O$(_){return xT("sha256").update(_).digest("hex").slice(0,12)}function oT(_){return _.length<=80?_:`${_.slice(0,77)}...`}function oz(_){return/(?:^|\/)\.hasna(?:\/|$)/i.test(_)||/\b(?:knowledge\.db|db\.json|cloud\.env)\b/i.test(_)||/\bmigration-exports\//i.test(_)}function pT(_,$,g,U){for(let D of _.matchAll(pz)){let I=D[0];if(!g.allowFileSourceRefs||oz(I))U.push({type:oz(I)?"private_file_uri":"local_file_uri",severity:"high",path:$,preview:oT(I.replace(/^file:\/\/.*/,`[redacted:file-uri:${O$(I)}]`))})}for(let D of _.matchAll(ez))U.push({type:"private_hasna_path",severity:"high",path:$,preview:`[redacted:.hasna:${O$(D[0])}]`});for(let D of _.matchAll(sz))U.push({type:D[0].toLowerCase()==="cloud.env"?"workspace_env_file":"raw_database_or_export_ref",severity:"high",path:$,preview:`[redacted:${O$(D[0])}]`});for(let D of _.matchAll(_3))U.push({type:"database_url",severity:"high",path:$,preview:`[redacted:database-url:${O$(D[0])}]`});if(!g.allowPrivateWorkspaceRefs)for(let D of _.matchAll(az))U.push({type:"private_workspace_path",severity:"medium",path:$,preview:`[redacted:workspace:${O$(D[0])}]`})}function eT(_,$={},g="$"){let U=[],D=(I,j)=>{if(typeof I==="string"){pT(I,j,$,U);return}if(!I||typeof I!=="object")return;if(Array.isArray(I)){I.forEach((E,A)=>D(E,`${j}[${A}]`));return}for(let[E,A]of Object.entries(I))D(A,`${j}.${E}`)};return D(_,g),U}function $g(_,$={}){let g=eT(_,$);if(g.length===0)return;let U=new Map;for(let I of g)U.set(I.type,(U.get(I.type)??0)+1);let D=[...U.entries()].map(([I,j])=>`${I}:${j}`).join(", ");throw Error(`Knowledge private-ref lint failed (${D}). Store open-files/s3 refs or approved runtime secret refs instead of private .hasna, file://, raw DB/export, or cloud.env refs.`)}function aT(_){let $=w_(_).text.replace(_3,(g)=>`[REDACTED:database-url:${O$(g)}]`).replace(pz,(g)=>`[REDACTED:local-file-uri:${O$(g)}]`).replace(nT,(g)=>`[REDACTED:local-hasna-path:${O$(g)}]`).replace(az,(g)=>`[REDACTED:private-workspace:${O$(g)}]`);for(let g of[...tT(),...dT])$=$.replace(g,(U)=>`[REDACTED:local-path:${O$(U)}]`);return $.replace(ez,(g)=>`[REDACTED:hasna-path:${O$(g)}]`).replace(sz,(g)=>`[REDACTED:private-artifact:${O$(g)}]`)}function T_(_){if(typeof _==="string")return aT(_);if(!_||typeof _!=="object")return _;if(Array.isArray(_))return _.map((g)=>T_(g));let $={};for(let[g,U]of Object.entries(_))$[g]=mT.has(g)?U:T_(U);return $}var DK=20971520,$3=1e4,UK=10;function JN(_,$){return`${_}_${sT("sha256").update($).digest("hex").slice(0,20)}`}function gg(_){return _&&typeof _==="object"&&!Array.isArray(_)?_:void 0}function E_(_){return typeof _==="string"&&_.length>0?_:void 0}function IK(_){return typeof _==="number"&&Number.isFinite(_)?_:void 0}function jK(_){let $=E_(_.source_ref)??E_(_.source_uri)??E_(_.uri);if($)return $;let g=E_(_.file_id);if(g){let I=E_(_.revision_id)??E_(_.revision),j=`open-files://file/${encodeURIComponent(g)}`;return I?`${j}/revision/${encodeURIComponent(I)}`:j}let U=E_(_.source_id),D=E_(_.path);if(U&&D)return`open-files://source/${encodeURIComponent(U)}/path/${encodeURIComponent(D)}`;throw Error("Manifest item is missing source_ref, file_id, or source_id/path.")}function EK(_,$){if($.kind==="open-files"&&$.entity==="file"&&$.revision_id)return _.replace(/\/revision\/[^/]+$/,"");return _}function NK(_){let $=E_(_.extracted_text)??E_(_.text)??E_(_.content_text)??E_(_.markdown);if($!==void 0)return $;let g=_.content;return typeof g==="string"?g:null}function AK(_){let $=E_(_.extracted_text_ref)??E_(_.extracted_text_uri)??E_(_.text_ref);if($)return $;let g=gg(_.content);return E_(g?.extracted_text_ref)??E_(g?.extracted_text_uri)??null}function OK(_){let $=E_(_.path);return E_(_.title)??E_(_.name)??($?gK($):null)}function PK(_){return E_(_.hash)??E_(_.checksum)??E_(_.sha256)??null}var g3=new Set(["text","content","content_text","extracted_text","markdown","raw","raw_text","raw_bytes","raw_content","raw_body","raw_file","source_raw","source_raw_bytes","source_bytes","source_content","source_body","file_bytes","file_content","content_bytes","content_base64","document_bytes","document_content","document_base64","binary","binary_content","binary_base64","bytes","body","blob","data","payload"]);function D3(_){return _.toLowerCase().replace(/[\s-]+/g,"_")}function WN(_){if(Array.isArray(_))return _.map((U)=>WN(U));let $=gg(_);if(!$)return _;let g={};for(let[U,D]of Object.entries($)){if(g3.has(D3(U)))continue;g[U]=WN(D)}return g}function SK(_,$,g){return E_(_.revision_id)??E_(_.revision)??E_(_.version_id)??($.kind==="open-files"?$.revision_id:void 0)??g??E_(_.updated_at)??"current"}function LK(_,$){let g={};for(let[U,D]of Object.entries(_)){if(g3.has(D3(U)))continue;g[U]=T_(WN(D))}return g.source_ref=$.sourceRef,g.source_uri=$.sourceUri,g.status=$.status,g}function WK(_,$,g={}){let U=jK(_);$g(U,{allowFileSourceRefs:g.allowFileSourceRefs===!0});let D=A$(U),I=EK(U,D),j=PK(_),E=E_(_.status)??"active";return{raw:_,sourceRef:U,sourceUri:I,kind:D.kind,title:OK(_),revision:SK(_,D,j),hash:j,extractedTextUri:AK(_),text:NK(_),metadata:LK(_,{sourceRef:U,sourceUri:I,status:E}),acl:_.permissions??_.acl??{},status:E,updatedAt:E_(_.updated_at)??$}}function JK(_){let $=_.trim();if(!$)return[];if($.startsWith("[")){let g=JSON.parse($);if(!Array.isArray(g))throw Error("Manifest array parse failed.");return g.map((U)=>{let D=gg(U);if(!D)throw Error("Manifest array entries must be objects.");return D})}if($.startsWith("{"))try{let g=JSON.parse($),U=gg(g);if(!U)throw Error("Manifest object parse failed.");if(Array.isArray(U.items))return U.items.map((D)=>{let I=gg(D);if(!I)throw Error("Manifest items entries must be objects.");return I});if("source_ref"in U||"source_uri"in U||"file_id"in U)return[U]}catch(g){let U=$.split(/\r?\n/).filter((D)=>D.trim().length>0);if(U.length<=1)throw g;return U.map((D)=>{let I=gg(JSON.parse(D));if(!I)throw Error("Manifest JSONL entries must be objects.");return I})}return $.split(/\r?\n/).filter((g)=>g.trim().length>0).map((g)=>{let U=gg(JSON.parse(g));if(!U)throw Error("Manifest JSONL entries must be objects.");return U})}async function zK(_,$,g){let U=new URL(_),D=U.hostname,I=decodeURIComponent(U.pathname.replace(/^\/+/,""));if(!D||!I)throw Error(`Invalid S3 manifest URI: ${_}`);if(g)q6(_,g);let[{S3Client:j,GetObjectCommand:E},{fromIni:A}]=await Promise.all([import("@aws-sdk/client-s3"),import("@aws-sdk/credential-providers")]),O=$?.storage.type==="s3"&&$.storage.s3?.bucket===D?$.storage.s3:void 0,W=await new j({region:O?.region,credentials:O?.profile?A({profile:O.profile}):void 0,maxAttempts:O?.max_attempts}).send(new E({Bucket:D,Key:I}));if(!W.Body)return"";return await W.Body.transformToString()}async function RK(_,$,g,U=DK){let D=_.startsWith("s3://")?await zK(_,$,g):(()=>{if(!_K(_))throw Error(`Manifest not found: ${_}`);return $K(_,"utf8")})(),I=Buffer.byteLength(D);if(I>U)throw Error(`Manifest input is too large: ${I} bytes exceeds ${U} byte limit.`);return D}function GK(_,$,g){let U=_.replace(/\r\n/g,` +`);if(!U.trim())return[];let D=[],I=0;while(II+Math.floor($*0.5))N=z+(z===A?2:1)}let O=U.slice(I,N).trim();if(O)g.push({ordinal:g.length,text:O,startOffset:I,endOffset:N});if(N>=U.length)break;I=Math.max(0,N-D)}return g}function O7(_){let $=_.trim().split(/\s+/).filter(Boolean).length;return Math.max(1,Math.ceil($*1.25))}function A7(_,$){let D=_.query("SELECT id FROM chunks WHERE source_revision_id = ?").all($);for(let U of D)_.run("DELETE FROM chunks_fts WHERE chunk_id = ?",[U.id]);return _.run("DELETE FROM chunks WHERE source_revision_id = ?",[$]),D.length}function L7(_,$,D){let U=PE("src",$.sourceUri);_.run(`INSERT INTO sources (id, uri, kind, title, metadata_json, acl_json, created_at, updated_at) +`,j),P=U.lastIndexOf(". ",j),W=Math.max(O,P);if(W>I+Math.floor($*0.5))E=W+(W===O?2:1)}let A=U.slice(I,E).trim();if(A)D.push({ordinal:D.length,text:A,startOffset:I,endOffset:E});if(E>=U.length)break;I=Math.max(0,E-g)}return D}function XK(_){let $=_.trim().split(/\s+/).filter(Boolean).length;return Math.max(1,Math.ceil($*1.25))}function YK(_,$){let g=_.query("SELECT id FROM chunks WHERE source_revision_id = ?").all($);for(let U of g)_.run("DELETE FROM chunks_fts WHERE chunk_id = ?",[U.id]);return _.run("DELETE FROM chunks WHERE source_revision_id = ?",[$]),g.length}function QK(_,$,g){let U=JN("src",$.sourceUri);_.run(`INSERT INTO sources (id, uri, kind, title, metadata_json, acl_json, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(uri) DO UPDATE SET kind = excluded.kind, title = excluded.title, metadata_json = excluded.metadata_json, acl_json = excluded.acl_json, - updated_at = excluded.updated_at`,[U,$.sourceUri,$.kind,$.title,JSON.stringify($.metadata),JSON.stringify($.acl??{}),D,$.updatedAt]);let g=_.query("SELECT id FROM sources WHERE uri = ?").get($.sourceUri);if(!g)throw Error(`Failed to upsert source: ${$.sourceUri}`);return g.id}function J7(_,$,D,U){let g=PE("rev",`${$}\x00${D.revision}`);_.run(`INSERT INTO source_revisions (id, source_id, revision, hash, extracted_text_uri, metadata_json, created_at) + updated_at = excluded.updated_at`,[U,$.sourceUri,$.kind,$.title,JSON.stringify($.metadata),JSON.stringify($.acl??{}),g,$.updatedAt]);let D=_.query("SELECT id FROM sources WHERE uri = ?").get($.sourceUri);if(!D)throw Error(`Failed to upsert source: ${$.sourceUri}`);return D.id}function TK(_,$,g,U){let D=JN("rev",`${$}\x00${g.revision}`);_.run(`INSERT INTO source_revisions (id, source_id, revision, hash, extracted_text_uri, metadata_json, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT(source_id, revision) DO UPDATE SET hash = excluded.hash, extracted_text_uri = excluded.extracted_text_uri, - metadata_json = excluded.metadata_json`,[g,$,D.revision,D.hash,D.extractedTextUri,JSON.stringify(D.metadata),U]);let I=_.query("SELECT id FROM source_revisions WHERE source_id = ? AND revision = ?").get($,D.revision);if(!I)throw Error(`Failed to upsert source revision: ${D.sourceRef}`);return I.id}function P7(_,$,D,U,g,I,j){if(!D.text||D.status.toLowerCase()==="deleted")return{chunksInserted:0,redactions:0};let N=u_(D.text,j);if(N.findings.length>0)z0(_,{source_uri:D.sourceUri,findings:N.findings,metadata:{source_ref:D.sourceRef,revision:D.revision},created_at:U}),X_(_,{event_type:"redaction",action:"source_text_redact",target_uri:D.sourceUri,decision:"redacted",metadata:{findings:N.findings.length,source_ref:D.sourceRef,revision:D.revision},created_at:U});let O=E7(N.text,g,I);for(let A of O){let L=PE("chk",`${$}\x00${A.ordinal}\x00${A.text}`),z=T6({source_ref:D.sourceRef,source_uri:D.sourceUri,source_kind:D.kind,source_revision_id:$,revision:D.revision,hash:D.hash,chunk_id:L,start_offset:A.startOffset,end_offset:A.endOffset,status:D.status,resolver:"open-files-read-only"}),W=vS({source_ref:D.sourceRef,source_uri:D.sourceUri,source_kind:D.kind,source_revision_id:$,revision:D.revision,hash:D.hash,status:D.status,path:N_(D.raw.path)??null,mime:N_(D.raw.mime)??N_(D.raw.content_type)??null,size:oT(D.raw.size)??null},z);_.run(`INSERT INTO chunks (id, source_revision_id, kind, ordinal, text, token_count, start_offset, end_offset, metadata_json, created_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[L,$,"source",A.ordinal,A.text,O7(A.text),A.startOffset,A.endOffset,JSON.stringify(W),U]),_.run("INSERT INTO chunks_fts (chunk_id, text, title, source_uri) VALUES (?, ?, ?, ?)",[L,A.text,D.title??"",D.sourceUri])}return{chunksInserted:O.length,redactions:N.findings.length}}async function sS(_){let $=_.now??new Date;if(_.safetyPolicy)_6(_.dbPath,_.safetyPolicy);h(_.dbPath);let D=await N7(_.input,_.config,_.safetyPolicy,_.maxInputBytes),U=I7(D),g=_.maxItems??pS;if(U.length>g)throw Error(`Manifest contains too many items: ${U.length} exceeds ${g} item limit.`);return $4({dbPath:_.dbPath,items:U,sourceLabel:_.input,allowFileSourceRefs:_.config?.sources.allowed_schemes.includes("file")===!0,safetyPolicy:_.safetyPolicy,now:$,maxChunkChars:_.maxChunkChars,chunkOverlapChars:_.chunkOverlapChars,maxItems:_.maxItems})}async function $4(_){let $=(_.now??new Date).toISOString(),D=_.maxChunkChars??4000,U=_.chunkOverlapChars??200,g=_.maxItems??pS;if(D<500)throw Error("maxChunkChars must be at least 500.");if(U<0||U>=D)throw Error("chunkOverlapChars must be less than maxChunkChars.");if(_.items.length>g)throw Error(`Manifest contains too many items: ${_.items.length} exceeds ${g} item limit.`);if(_.safetyPolicy)_6(_.dbPath,_.safetyPolicy);h(_.dbPath);let I=r(_.dbPath);try{return I.transaction(()=>{let N=new Set,O=new Set,A=0,L=0,z=0,W=0,J=[];X_(I,{event_type:"source_read",action:_.readAction??(_.sourceLabel.startsWith("s3://")?"s3_manifest_read":"local_manifest_read"),target_uri:_.sourceLabel,decision:"allow",metadata:{items:_.items.length,read_only:!0},created_at:$});for(let P of _.items){let S=U7(P,$,{allowFileSourceRefs:_.allowFileSourceRefs});if(J.length0)return U}return null}function _W(_,$){for(let D of $){let U=_[D];if(typeof U==="number"&&Number.isFinite(U))return U}return null}function z7(_,$){let D=_.mode;if(typeof D==="string"&&D!=="read_only")throw Error(`Source resolver denied ${$}. Permission mode is ${D}, expected read_only.`);let U=_.denied_purposes;if(Array.isArray(U)&&U.includes($))throw Error(`Source resolver denied ${$}. Purpose is explicitly denied.`);let g=_.allowed_purposes;if(Array.isArray(g)&&g.length>0&&!g.includes($))throw Error(`Source resolver denied ${$}. Allowed purposes: ${g.join(", ")}`)}function S7(_,$,D){if(!$)return D;try{let U=A$(_);if(U.kind==="open-files"&&U.entity==="file")return`${_}/revision/${encodeURIComponent($.revision)}`}catch{return D}return D}function W7(_,$,D){return _.query(`SELECT id, uri, kind, title, metadata_json, acl_json, updated_at + metadata_json = excluded.metadata_json`,[D,$,g.revision,g.hash,g.extractedTextUri,JSON.stringify(g.metadata),U]);let I=_.query("SELECT id FROM source_revisions WHERE source_id = ? AND revision = ?").get($,g.revision);if(!I)throw Error(`Failed to upsert source revision: ${g.sourceRef}`);return I.id}function KK(_,$,g,U,D,I,j){if(!g.text||g.status.toLowerCase()==="deleted")return{chunksInserted:0,redactions:0};let E=w_(g.text,j);if(E.findings.length>0)W4(_,{source_uri:g.sourceUri,findings:E.findings,metadata:{source_ref:g.sourceRef,revision:g.revision},created_at:U}),z_(_,{event_type:"redaction",action:"source_text_redact",target_uri:g.sourceUri,decision:"redacted",metadata:{findings:E.findings.length,source_ref:g.sourceRef,revision:g.revision},created_at:U});let A=GK(E.text,D,I);for(let O of A){let P=JN("chk",`${$}\x00${O.ordinal}\x00${O.text}`),W=K6({source_ref:g.sourceRef,source_uri:g.sourceUri,source_kind:g.kind,source_revision_id:$,revision:g.revision,hash:g.hash,chunk_id:P,start_offset:O.startOffset,end_offset:O.endOffset,status:g.status,resolver:"open-files-read-only"}),z=xz({source_ref:g.sourceRef,source_uri:g.sourceUri,source_kind:g.kind,source_revision_id:$,revision:g.revision,hash:g.hash,status:g.status,path:E_(g.raw.path)??null,mime:E_(g.raw.mime)??E_(g.raw.content_type)??null,size:IK(g.raw.size)??null},W);_.run(`INSERT INTO chunks (id, source_revision_id, kind, ordinal, text, token_count, start_offset, end_offset, metadata_json, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[P,$,"source",O.ordinal,O.text,XK(O.text),O.startOffset,O.endOffset,JSON.stringify(z),U]),_.run("INSERT INTO chunks_fts (chunk_id, text, title, source_uri) VALUES (?, ?, ?, ?)",[P,O.text,g.title??"",g.sourceUri])}return{chunksInserted:A.length,redactions:E.findings.length}}async function U3(_){let $=_.now??new Date;if(_.safetyPolicy)$6(_.dbPath,_.safetyPolicy);c(_.dbPath);let g=await RK(_.input,_.config,_.safetyPolicy,_.maxInputBytes),U=JK(g),D=_.maxItems??$3;if(U.length>D)throw Error(`Manifest contains too many items: ${U.length} exceeds ${D} item limit.`);return Dg({dbPath:_.dbPath,items:U,sourceLabel:_.input,allowFileSourceRefs:_.config?.sources.allowed_schemes.includes("file")===!0,safetyPolicy:_.safetyPolicy,now:$,maxChunkChars:_.maxChunkChars,chunkOverlapChars:_.chunkOverlapChars,maxItems:_.maxItems})}async function Dg(_){let $=(_.now??new Date).toISOString(),g=_.maxChunkChars??4000,U=_.chunkOverlapChars??200,D=_.maxItems??$3;if(g<500)throw Error("maxChunkChars must be at least 500.");if(U<0||U>=g)throw Error("chunkOverlapChars must be less than maxChunkChars.");if(_.items.length>D)throw Error(`Manifest contains too many items: ${_.items.length} exceeds ${D} item limit.`);if(_.safetyPolicy)$6(_.dbPath,_.safetyPolicy);c(_.dbPath);let I=v(_.dbPath);try{return I.transaction(()=>{let E=new Set,A=new Set,O=0,P=0,W=0,z=0,S=[];z_(I,{event_type:"source_read",action:_.readAction??(_.sourceLabel.startsWith("s3://")?"s3_manifest_read":"local_manifest_read"),target_uri:_.sourceLabel,decision:"allow",metadata:{items:_.items.length,read_only:!0},created_at:$});for(let L of _.items){let J=WK(L,$,{allowFileSourceRefs:_.allowFileSourceRefs});if(S.length0)return U}return null}function I3(_,$){for(let g of $){let U=_[g];if(typeof U==="number"&&Number.isFinite(U))return U}return null}function qK(_,$){let g=_.mode;if(typeof g==="string"&&g!=="read_only")throw Error(`Source resolver denied ${$}. Permission mode is ${g}, expected read_only.`);let U=_.denied_purposes;if(Array.isArray(U)&&U.includes($))throw Error(`Source resolver denied ${$}. Purpose is explicitly denied.`);let D=_.allowed_purposes;if(Array.isArray(D)&&D.length>0&&!D.includes($))throw Error(`Source resolver denied ${$}. Allowed purposes: ${D.join(", ")}`)}function BK(_,$,g){if(!$)return g;try{let U=A$(_);if(U.kind==="open-files"&&U.entity==="file")return`${_}/revision/${encodeURIComponent($.revision)}`}catch{return g}return g}function VK(_,$,g){return _.query(`SELECT id, uri, kind, title, metadata_json, acl_json, updated_at FROM sources WHERE uri = ? OR uri = ? ORDER BY CASE WHEN uri = ? THEN 0 ELSE 1 END - LIMIT 1`).get($,D,$)??null}function X7(_,$,D){if(D)return _.query(`SELECT id, revision, hash, extracted_text_uri, metadata_json, created_at + LIMIT 1`).get($,g,$)??null}function FK(_,$,g){if(g)return _.query(`SELECT id, revision, hash, extracted_text_uri, metadata_json, created_at FROM source_revisions WHERE source_id = ? AND revision = ? - LIMIT 1`).get($,D)??null;return _.query(`SELECT id, revision, hash, extracted_text_uri, metadata_json, created_at + LIMIT 1`).get($,g)??null;return _.query(`SELECT id, revision, hash, extracted_text_uri, metadata_json, created_at FROM source_revisions WHERE source_id = ? ORDER BY created_at DESC, revision DESC - LIMIT 1`).get($)??null}function R7(_,$){if(!$)return 0;return _.query("SELECT COUNT(*) AS n FROM chunks WHERE source_revision_id = ?").get($)?.n??0}function G7(_,$,D){if(!$||D<=0)return[];return _.query(`SELECT id, kind, ordinal, text, token_count, start_offset, end_offset, metadata_json + LIMIT 1`).get($)??null}function rK(_,$){if(!$)return 0;return _.query("SELECT COUNT(*) AS n FROM chunks WHERE source_revision_id = ?").get($)?.n??0}function bK(_,$,g){if(!$||g<=0)return[];return _.query(`SELECT id, kind, ordinal, text, token_count, start_offset, end_offset, metadata_json FROM chunks WHERE source_revision_id = ? ORDER BY ordinal ASC - LIMIT ?`).all($,D)}async function tU(_){let $=_.purpose??"knowledge_answer",D=Math.max(0,Math.min(_.limit??10,100)),U=(_.now??new Date).toISOString(),g=A$(_.sourceRef),I=fS(_.sourceRef,g),j=wS(_.sourceRef);if(_.safetyPolicy){if(!_.safetyPolicy.readOnlySourceAccess)throw Error("Safety policy denied source resolution.");_6(_.dbPath,_.safetyPolicy)}h(_.dbPath);let N=r(_.dbPath);try{return N.transaction(()=>{let O=W7(N,I,_.sourceRef);if(!O)return X_(N,{event_type:"source_read",action:"open_files_resolve_missing",target_uri:_.sourceRef,decision:"allow",metadata:{purpose:$,read_only:!0,source_uri:I},created_at:U}),{source_ref:_.sourceRef,source_uri:I,purpose:$,read_only:!0,resolved:!1,resolver:{name:"open-files-read-only",mode:"local_catalog",contract:"open-files-knowledge-source-v1"},source:null,revision:null,content:{mime:null,size:null,hash:null,text_available:!1,chunks_total:0,chunks_returned:0,char_count_returned:0,extracted_text_ref:null,bytes_available:!1,bytes_exposed:!1},chunks:[],citations:[]};let A=lU(O.metadata_json),L=lU(O.acl_json);try{z7(L,$)}catch(Q){throw X_(N,{event_type:"source_read",action:"open_files_resolve",target_uri:_.sourceRef,decision:"deny",metadata:{purpose:$,read_only:!0,source_uri:O.uri,error:Q instanceof Error?Q.message:String(Q)},created_at:U}),Q}let z=X7(N,O.id,j),W=lU(z?.metadata_json),J=R7(N,z?.id??null),P=G7(N,z?.id??null,D),S=S7(O.uri,z,_.sourceRef),X=P.map((Q)=>{let T=lU(Q.metadata_json),q={resolver:"open-files-read-only",mode:"local_catalog",purpose:$,read_only:!0,source_ref:D4(T,["source_ref"])??S,source_uri:O.uri,source_revision_id:z?.id??null,revision:z?.revision??null,hash:z?.hash??D4(T,["hash"]),chunk_id:Q.id,start_offset:Q.start_offset,end_offset:Q.end_offset,resolved_at:U},K=T6({source_ref:q.source_ref,source_uri:q.source_uri,source_kind:O.kind,source_revision_id:q.source_revision_id,revision:q.revision,hash:q.hash,chunk_id:Q.id,start_offset:Q.start_offset,end_offset:Q.end_offset,status:D4(T,["status"]),resolver:q.resolver});return{id:Q.id,kind:Q.kind,ordinal:Q.ordinal,text:Q.text,token_count:Q.token_count,start_offset:Q.start_offset,end_offset:Q.end_offset,metadata:T,evidence:q,provenance:K}}),G=X.map((Q)=>({source_ref:Q.evidence.source_ref,source_uri:O.uri,chunk_id:Q.id,quote:Q.text.slice(0,500),start_offset:Q.start_offset,end_offset:Q.end_offset,evidence:Q.evidence,provenance:Q.provenance}));X_(N,{event_type:"source_read",action:"open_files_resolve",target_uri:_.sourceRef,decision:"allow",metadata:{purpose:$,read_only:!0,source_uri:O.uri,revision:z?.revision??null,chunks_returned:X.length,chunks_total:J},created_at:U});let R=D4(A,["mime","content_type"])??D4(W,["mime","content_type"]),V=_W(A,["size","size_bytes"])??_W(W,["size","size_bytes"]);return{source_ref:S,source_uri:O.uri,purpose:$,read_only:!0,resolved:!0,resolver:{name:"open-files-read-only",mode:"local_catalog",contract:"open-files-knowledge-source-v1"},source:{id:O.id,uri:O.uri,kind:O.kind,title:O.title,metadata:A,permissions:L,updated_at:O.updated_at},revision:z?{id:z.id,revision:z.revision,hash:z.hash,extracted_text_uri:z.extracted_text_uri,metadata:W,created_at:z.created_at,reindex_required:W.reindex_required===!0}:null,content:{mime:R,size:V,hash:z?.hash??D4(A,["hash","checksum","sha256"]),text_available:J>0,chunks_total:J,chunks_returned:X.length,char_count_returned:X.reduce((Q,T)=>Q+T.text.length,0),extracted_text_ref:z?.extracted_text_uri??D4(W,["extracted_text_ref","extracted_text_uri"]),bytes_available:!1,bytes_exposed:!1},chunks:X,citations:G}})()}finally{N.close()}}function S0(_){return`sha256:${Y7("sha256").update(_).digest("hex")}`}function q7(_){return _.replace(//gi," ").replace(//gi," ").replace(/<[^>]+>/g," ").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/\s+\n/g,` + LIMIT ?`).all($,g)}async function tU(_){let $=_.purpose??"knowledge_answer",g=Math.max(0,Math.min(_.limit??10,100)),U=(_.now??new Date).toISOString(),D=A$(_.sourceRef),I=cz(_.sourceRef,D),j=hz(_.sourceRef);if(_.safetyPolicy){if(!_.safetyPolicy.readOnlySourceAccess)throw Error("Safety policy denied source resolution.");$6(_.dbPath,_.safetyPolicy)}c(_.dbPath);let E=v(_.dbPath);try{return E.transaction(()=>{let A=VK(E,I,_.sourceRef);if(!A)return z_(E,{event_type:"source_read",action:"open_files_resolve_missing",target_uri:_.sourceRef,decision:"allow",metadata:{purpose:$,read_only:!0,source_uri:I},created_at:U}),{source_ref:_.sourceRef,source_uri:I,purpose:$,read_only:!0,resolved:!1,resolver:{name:"open-files-read-only",mode:"local_catalog",contract:"open-files-knowledge-source-v1"},source:null,revision:null,content:{mime:null,size:null,hash:null,text_available:!1,chunks_total:0,chunks_returned:0,char_count_returned:0,extracted_text_ref:null,bytes_available:!1,bytes_exposed:!1},chunks:[],citations:[]};let O=lU(A.metadata_json),P=lU(A.acl_json);try{qK(P,$)}catch(Q){throw z_(E,{event_type:"source_read",action:"open_files_resolve",target_uri:_.sourceRef,decision:"deny",metadata:{purpose:$,read_only:!0,source_uri:A.uri,error:Q instanceof Error?Q.message:String(Q)},created_at:U}),Q}let W=FK(E,A.id,j),z=lU(W?.metadata_json),S=rK(E,W?.id??null),L=bK(E,W?.id??null,g),J=BK(A.uri,W,_.sourceRef),R=L.map((Q)=>{let T=lU(Q.metadata_json),K={resolver:"open-files-read-only",mode:"local_catalog",purpose:$,read_only:!0,source_ref:Ug(T,["source_ref"])??J,source_uri:A.uri,source_revision_id:W?.id??null,revision:W?.revision??null,hash:W?.hash??Ug(T,["hash"]),chunk_id:Q.id,start_offset:Q.start_offset,end_offset:Q.end_offset,resolved_at:U},V=K6({source_ref:K.source_ref,source_uri:K.source_uri,source_kind:A.kind,source_revision_id:K.source_revision_id,revision:K.revision,hash:K.hash,chunk_id:Q.id,start_offset:Q.start_offset,end_offset:Q.end_offset,status:Ug(T,["status"]),resolver:K.resolver});return{id:Q.id,kind:Q.kind,ordinal:Q.ordinal,text:Q.text,token_count:Q.token_count,start_offset:Q.start_offset,end_offset:Q.end_offset,metadata:T,evidence:K,provenance:V}}),X=R.map((Q)=>({source_ref:Q.evidence.source_ref,source_uri:A.uri,chunk_id:Q.id,quote:Q.text.slice(0,500),start_offset:Q.start_offset,end_offset:Q.end_offset,evidence:Q.evidence,provenance:Q.provenance}));z_(E,{event_type:"source_read",action:"open_files_resolve",target_uri:_.sourceRef,decision:"allow",metadata:{purpose:$,read_only:!0,source_uri:A.uri,revision:W?.revision??null,chunks_returned:R.length,chunks_total:S},created_at:U});let G=Ug(O,["mime","content_type"])??Ug(z,["mime","content_type"]),B=I3(O,["size","size_bytes"])??I3(z,["size","size_bytes"]);return{source_ref:J,source_uri:A.uri,purpose:$,read_only:!0,resolved:!0,resolver:{name:"open-files-read-only",mode:"local_catalog",contract:"open-files-knowledge-source-v1"},source:{id:A.id,uri:A.uri,kind:A.kind,title:A.title,metadata:O,permissions:P,updated_at:A.updated_at},revision:W?{id:W.id,revision:W.revision,hash:W.hash,extracted_text_uri:W.extracted_text_uri,metadata:z,created_at:W.created_at,reindex_required:z.reindex_required===!0}:null,content:{mime:G,size:B,hash:W?.hash??Ug(O,["hash","checksum","sha256"]),text_available:S>0,chunks_total:S,chunks_returned:R.length,char_count_returned:R.reduce((Q,T)=>Q+T.text.length,0),extracted_text_ref:W?.extracted_text_uri??Ug(z,["extracted_text_ref","extracted_text_uri"]),bytes_available:!1,bytes_exposed:!1},chunks:R,citations:X}})()}finally{E.close()}}function J4(_){return`sha256:${MK("sha256").update(_).digest("hex")}`}function kK(_){return _.replace(//gi," ").replace(//gi," ").replace(/<[^>]+>/g," ").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/\s+\n/g,` `).replace(/\n\s+/g,` -`).replace(/[ \t]{2,}/g," ").trim()}async function B7(_,$,D){let U=new URL(_),g=U.hostname,I=decodeURIComponent(U.pathname.replace(/^\/+/,""));if(!g||!I)throw Error(`Invalid S3 source URI: ${_}`);if(D)q6(_,D);let[{S3Client:j,GetObjectCommand:N},{fromIni:O}]=await Promise.all([import("@aws-sdk/client-s3"),import("@aws-sdk/credential-providers")]),A=$?.storage.type==="s3"&&$.storage.s3?.bucket===g?$.storage.s3:void 0,z=await new j({region:A?.region,credentials:A?.profile?O({profile:A.profile}):void 0,maxAttempts:A?.max_attempts}).send(new N({Bucket:g,Key:I}));if(!z.Body)return"";return await z.Body.transformToString()}async function V7(_,$){if($)P0($);let D=await wU(_,{headers:{accept:"text/markdown,text/plain,text/html,application/json;q=0.8,*/*;q=0.5","user-agent":"@hasna/knowledge source-ingest"}});if(!D.ok)throw Error(`Web source read failed ${D.status}: ${_}`);let U=D.headers.get("content-type"),g=await D.text();return{text:U?.includes("html")?q7(g):g,mime:U}}function pU(_){if(_.kind==="file")return oU(_.path);if(_.kind==="s3")return oU(_.key);if(_.kind==="web")return oU(new URL(_.url).pathname)||_.url;return _.path?oU(_.path):_.id}async function $W(_,$,D){if(_.kind==="file"){if(!Q7(_.path))throw Error(`Source file not found: ${_.path}`);let U=T7(_.path,"utf8");return{text:U,contentSource:"file",title:pU(_),mime:"text/plain",size:U.length,hash:S0(U),revision:null,extractedTextRef:null,metadata:{path:_.path},permissions:{mode:"read_only"}}}if(_.kind==="s3"){let U=await B7(_.uri,$,D);return{text:U,contentSource:"s3",title:pU(_),mime:"text/plain",size:U.length,hash:S0(U),revision:null,extractedTextRef:null,metadata:{bucket:_.bucket,key:_.key},permissions:{mode:"read_only"}}}if(_.kind==="web"){let U=await V7(_.url,D);return{text:U.text,contentSource:"web",title:pU(_),mime:U.mime,size:U.text.length,hash:S0(U.text),revision:null,extractedTextRef:null,metadata:{url:_.url},permissions:{mode:"read_only"}}}throw Error(`Direct source reading is not available for ${_.uri}`)}async function K7(_,$,D){if(_.startsWith("open-files://"))throw Error("Open-files extracted text refs require an open-files resolver API. Ingest an open-files manifest with extracted_text or an extracted_text_ref using file://, s3://, or https://.");let U=A$(_);return{text:(await $W(U,$,D)).text,contentSource:"extracted_text_ref"}}async function F7(_){let $=await tU({dbPath:_.dbPath,sourceRef:_.sourceRef,purpose:_.purpose??"knowledge_index",limit:100,safetyPolicy:_.safetyPolicy,now:_.now});if(!$.resolved)throw Error("Open-files source is not in the local knowledge catalog. Ingest an open-files manifest first or use the open-files resolver API.");if($.revision?.extracted_text_uri&&!$.content.text_available){let U=await K7($.revision.extracted_text_uri,_.config,_.safetyPolicy);return{text:U.text,contentSource:U.contentSource,title:$.source?.title??null,mime:$.content.mime,size:U.text.length,hash:$.revision.hash??S0(U.text),revision:$.revision.revision,extractedTextRef:$.revision.extracted_text_uri,metadata:$.source?.metadata??{},permissions:$.source?.permissions??{mode:"read_only"}}}if($.chunks.length===0)throw Error("Open-files source has no extracted text chunks yet. Ingest an open-files manifest with extracted_text or extracted_text_ref first.");let D=$.chunks.map((U)=>U.text).join(` +`).replace(/[ \t]{2,}/g," ").trim()}async function CK(_,$,g){let U=new URL(_),D=U.hostname,I=decodeURIComponent(U.pathname.replace(/^\/+/,""));if(!D||!I)throw Error(`Invalid S3 source URI: ${_}`);if(g)q6(_,g);let[{S3Client:j,GetObjectCommand:E},{fromIni:A}]=await Promise.all([import("@aws-sdk/client-s3"),import("@aws-sdk/credential-providers")]),O=$?.storage.type==="s3"&&$.storage.s3?.bucket===D?$.storage.s3:void 0,W=await new j({region:O?.region,credentials:O?.profile?A({profile:O.profile}):void 0,maxAttempts:O?.max_attempts}).send(new E({Bucket:D,Key:I}));if(!W.Body)return"";return await W.Body.transformToString()}async function vK(_,$){if($)L4($);let g=await wU(_,{headers:{accept:"text/markdown,text/plain,text/html,application/json;q=0.8,*/*;q=0.5","user-agent":"@hasna/knowledge source-ingest"}});if(!g.ok)throw Error(`Web source read failed ${g.status}: ${_}`);let U=g.headers.get("content-type"),D=await g.text();return{text:U?.includes("html")?kK(D):D,mime:U}}function pU(_){if(_.kind==="file")return oU(_.path);if(_.kind==="s3")return oU(_.key);if(_.kind==="web")return oU(new URL(_.url).pathname)||_.url;return _.path?oU(_.path):_.id}async function j3(_,$,g){if(_.kind==="file"){if(!ZK(_.path))throw Error(`Source file not found: ${_.path}`);let U=HK(_.path,"utf8");return{text:U,contentSource:"file",title:pU(_),mime:"text/plain",size:U.length,hash:J4(U),revision:null,extractedTextRef:null,metadata:{path:_.path},permissions:{mode:"read_only"}}}if(_.kind==="s3"){let U=await CK(_.uri,$,g);return{text:U,contentSource:"s3",title:pU(_),mime:"text/plain",size:U.length,hash:J4(U),revision:null,extractedTextRef:null,metadata:{bucket:_.bucket,key:_.key},permissions:{mode:"read_only"}}}if(_.kind==="web"){let U=await vK(_.url,g);return{text:U.text,contentSource:"web",title:pU(_),mime:U.mime,size:U.text.length,hash:J4(U.text),revision:null,extractedTextRef:null,metadata:{url:_.url},permissions:{mode:"read_only"}}}throw Error(`Direct source reading is not available for ${_.uri}`)}async function wK(_,$,g){if(_.startsWith("open-files://"))throw Error("Open-files extracted text refs require an open-files resolver API. Ingest an open-files manifest with extracted_text or an extracted_text_ref using file://, s3://, or https://.");let U=A$(_);return{text:(await j3(U,$,g)).text,contentSource:"extracted_text_ref"}}async function uK(_){let $=await tU({dbPath:_.dbPath,sourceRef:_.sourceRef,purpose:_.purpose??"knowledge_index",limit:100,safetyPolicy:_.safetyPolicy,now:_.now});if(!$.resolved)throw Error("Open-files source is not in the local knowledge catalog. Ingest an open-files manifest first or use the open-files resolver API.");if($.revision?.extracted_text_uri&&!$.content.text_available){let U=await wK($.revision.extracted_text_uri,_.config,_.safetyPolicy);return{text:U.text,contentSource:U.contentSource,title:$.source?.title??null,mime:$.content.mime,size:U.text.length,hash:$.revision.hash??J4(U.text),revision:$.revision.revision,extractedTextRef:$.revision.extracted_text_uri,metadata:$.source?.metadata??{},permissions:$.source?.permissions??{mode:"read_only"}}}if($.chunks.length===0)throw Error("Open-files source has no extracted text chunks yet. Ingest an open-files manifest with extracted_text or extracted_text_ref first.");let g=$.chunks.map((U)=>U.text).join(` -`);return{text:D,contentSource:"catalog_chunks",title:$.source?.title??null,mime:$.content.mime,size:D.length,hash:$.revision?.hash??S0(D),revision:$.revision?.revision??null,extractedTextRef:$.revision?.extracted_text_uri??null,metadata:$.source?.metadata??{},permissions:$.source?.permissions??{mode:"read_only"}}}function M7(_,$,D,U){let g=D.hash??S0(D.text),I={...q_(D.metadata),source_ref:_,content_source:D.contentSource,read_only:!0},j={source_ref:_,name:D.title??pU($),mime:D.mime??"text/plain",size:D.size??D.text.length,hash:g,revision:D.revision??g,status:"active",updated_at:new Date().toISOString(),permissions:{mode:"read_only",allowed_purposes:[U],...D.permissions},metadata:I,extracted_text_ref:D.extractedTextRef,extracted_text:D.text};if($.kind==="open-files"){if($.entity==="file")j.file_id=$.id;if($.entity==="source")j.source_id=$.id,j.path=$.path}if($.kind==="file")j.path=$.path;if($.kind==="s3")j.path=$.key;if($.kind==="web")j.url=$.url;return j}async function eU(_){let $=_.purpose??"knowledge_index";s6(_.sourceRef,{allowFileSourceRefs:_.config?.sources.allowed_schemes.includes("file")!==!1});let D=A$(_.sourceRef),U=D.kind==="open-files"?await F7(_):await $W(D,_.config,_.safetyPolicy),g=M7(_.sourceRef,D,U,$);return{...await $4({dbPath:_.dbPath,items:[g],sourceLabel:_.sourceRef,readAction:"source_ref_ingest_read",allowFileSourceRefs:_.config?.sources.allowed_schemes.includes("file")!==!1,safetyPolicy:_.safetyPolicy,now:_.now}),source_ref:_.sourceRef,content_source:U.contentSource,read_only:!0,hash:String(g.hash)}}function aU(_,$){return`${_}_${Z7("sha256").update($).digest("hex").slice(0,20)}`}function H7(_){return _.normalize("NFKC").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80)||"note"}function zE(_){if(!_)return{};try{let $=JSON.parse(_);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch{return{}}}function k7(_){let $=_.trim().split(/\s+/).filter(Boolean).length;return Math.max(1,Math.ceil($*1.25))}function DW(_){return Array.from(new Set((_??[]).map(($)=>$.trim()).filter(Boolean)))}function C7(_){let $=_.path?.trim()||`wiki/notes/${H7(_.title)}.md`,D=$.replace(/\\/g,"/");if(!D.startsWith("wiki/notes/")||!D.endsWith(".md"))throw Error("App wiki note paths must be relative wiki/notes/*.md artifact keys.");if(D.startsWith("/")||D.split("/").some((U)=>U===".."||U==="."))throw Error(`Invalid app wiki note path: ${$}`);return D}function v7(_){let $=[`# ${_.title}`,"",_.content.trim(),"",`Updated: ${_.now}`];if(_.tags.length>0)$.push("","Tags:",..._.tags.map((D)=>`- ${D}`));if(_.sourceRefs.length>0)$.push("","Source refs:",..._.sourceRefs.map((D)=>`- ${D}`));return $.push(""),$.join(` -`)}async function gW(_,$){let D=await _.put($);return{key:D.key,uri:D.uri,kind:$.key.startsWith("logs/")?"log":"wiki_page",content_type:$.content_type,modified_at:D.modified_at,...J0($.body),metadata:{...$.metadata??{}}}}async function r7(_,$,D){let U=String(D.getUTCFullYear()),g=String(D.getUTCMonth()+1).padStart(2,"0"),I=String(D.getUTCDate()).padStart(2,"0"),j=`logs/${U}/${g}/${I}.jsonl`,N="";try{N=await _.getText(j)}catch{N=""}return gW(_,{key:j,body:`${N}${JSON.stringify($)} -`,content_type:"application/x-ndjson",metadata:{provenance:U$({generated_from:String($.event??"app_wiki_log"),artifact_key:j})}})}function f7(_){return{...q_(_.metadata??{}),app_wiki:!0,note:!0,artifact_key:_.path,tags:_.tags,source_refs:_.sourceRefs,provenance:_.provenance}}function SE(_){let $=zE(_.metadata_json);return{id:_.id,path:_.path,title:_.title,artifact_uri:_.artifact_uri,content_hash:_.content_hash,tags:Array.isArray($.tags)?$.tags.filter((D)=>typeof D==="string"):[],source_refs:Array.isArray($.source_refs)?$.source_refs.filter((D)=>typeof D==="string"):[],created_at:_.created_at,updated_at:_.updated_at}}function w7(_,$){return $.map((D)=>{let U=_.query(`SELECT +`);return{text:g,contentSource:"catalog_chunks",title:$.source?.title??null,mime:$.content.mime,size:g.length,hash:$.revision?.hash??J4(g),revision:$.revision?.revision??null,extractedTextRef:$.revision?.extracted_text_uri??null,metadata:$.source?.metadata??{},permissions:$.source?.permissions??{mode:"read_only"}}}function fK(_,$,g,U){let D=g.hash??J4(g.text),I={...T_(g.metadata),source_ref:_,content_source:g.contentSource,read_only:!0},j={source_ref:_,name:g.title??pU($),mime:g.mime??"text/plain",size:g.size??g.text.length,hash:D,revision:g.revision??D,status:"active",updated_at:new Date().toISOString(),permissions:{mode:"read_only",allowed_purposes:[U],...g.permissions},metadata:I,extracted_text_ref:g.extractedTextRef,extracted_text:g.text};if($.kind==="open-files"){if($.entity==="file")j.file_id=$.id;if($.entity==="source")j.source_id=$.id,j.path=$.path}if($.kind==="file")j.path=$.path;if($.kind==="s3")j.path=$.key;if($.kind==="web")j.url=$.url;return j}async function eU(_){let $=_.purpose??"knowledge_index";$g(_.sourceRef,{allowFileSourceRefs:_.config?.sources.allowed_schemes.includes("file")!==!1});let g=A$(_.sourceRef),U=g.kind==="open-files"?await uK(_):await j3(g,_.config,_.safetyPolicy),D=fK(_.sourceRef,g,U,$);return{...await Dg({dbPath:_.dbPath,items:[D],sourceLabel:_.sourceRef,readAction:"source_ref_ingest_read",allowFileSourceRefs:_.config?.sources.allowed_schemes.includes("file")!==!1,safetyPolicy:_.safetyPolicy,now:_.now}),source_ref:_.sourceRef,content_source:U.contentSource,read_only:!0,hash:String(D.hash)}}function aU(_,$){return`${_}_${xK("sha256").update($).digest("hex").slice(0,20)}`}function cK(_){return _.normalize("NFKC").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80)||"note"}function zN(_){if(!_)return{};try{let $=JSON.parse(_);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch{return{}}}function hK(_){let $=_.trim().split(/\s+/).filter(Boolean).length;return Math.max(1,Math.ceil($*1.25))}function E3(_){return Array.from(new Set((_??[]).map(($)=>$.trim()).filter(Boolean)))}function nK(_){let $=_.path?.trim()||`wiki/notes/${cK(_.title)}.md`,g=$.replace(/\\/g,"/");if(!g.startsWith("wiki/notes/")||!g.endsWith(".md"))throw Error("App wiki note paths must be relative wiki/notes/*.md artifact keys.");if(g.startsWith("/")||g.split("/").some((U)=>U===".."||U==="."))throw Error(`Invalid app wiki note path: ${$}`);return g}function dK(_){let $=[`# ${_.title}`,"",_.content.trim(),"",`Updated: ${_.now}`];if(_.tags.length>0)$.push("","Tags:",..._.tags.map((g)=>`- ${g}`));if(_.sourceRefs.length>0)$.push("","Source refs:",..._.sourceRefs.map((g)=>`- ${g}`));return $.push(""),$.join(` +`)}async function N3(_,$){let g=await _.put($);return{key:g.key,uri:g.uri,kind:$.key.startsWith("logs/")?"log":"wiki_page",content_type:$.content_type,modified_at:g.modified_at,...S4($.body),metadata:{...$.metadata??{}}}}async function mK(_,$,g){let U=String(g.getUTCFullYear()),D=String(g.getUTCMonth()+1).padStart(2,"0"),I=String(g.getUTCDate()).padStart(2,"0"),j=`logs/${U}/${D}/${I}.jsonl`,E="";try{E=await _.getText(j)}catch{E=""}return N3(_,{key:j,body:`${E}${JSON.stringify($)} +`,content_type:"application/x-ndjson",metadata:{provenance:D$({generated_from:String($.event??"app_wiki_log"),artifact_key:j})}})}function iK(_){return{...T_(_.metadata??{}),app_wiki:!0,note:!0,artifact_key:_.path,tags:_.tags,source_refs:_.sourceRefs,provenance:_.provenance}}function RN(_){let $=zN(_.metadata_json);return{id:_.id,path:_.path,title:_.title,artifact_uri:_.artifact_uri,content_hash:_.content_hash,tags:Array.isArray($.tags)?$.tags.filter((g)=>typeof g==="string"):[],source_refs:Array.isArray($.source_refs)?$.source_refs.filter((g)=>typeof g==="string"):[],created_at:_.created_at,updated_at:_.updated_at}}function lK(_,$){return $.map((g)=>{let U=_.query(`SELECT s.uri AS source_uri, c.id AS chunk_id, c.text, @@ -646,13 +646,13 @@ VALUES (10, datetime('now')); LEFT JOIN chunks c ON c.source_revision_id = sr.id WHERE s.uri = ? OR s.metadata_json LIKE ? ORDER BY sr.created_at DESC, c.ordinal ASC - LIMIT 1`).get(D,`%${D}%`),g=zE(U?.metadata_json);return{source_ref:D,source_uri:U?.source_uri??D,chunk_id:U?.chunk_id??null,quote:U?.text?U.text.replace(/\s+/g," ").slice(0,240):null,start_offset:U?.start_offset??null,end_offset:U?.end_offset??null,metadata:{source_ref:D,revision:U?.revision??g.revision,hash:U?.hash??g.hash}}})}function u7(_,$,D,U){_.run("DELETE FROM citations WHERE wiki_page_id = ?",[$]);let g=w7(_,D);for(let I of g)_.run(`INSERT INTO citations (id, wiki_page_id, chunk_id, source_uri, quote, start_offset, end_offset, metadata_json, created_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[aU("cit",`${$}\x00${I.source_uri}\x00${I.chunk_id??b7()}`),$,I.chunk_id,I.source_uri,I.quote,I.start_offset,I.end_offset,JSON.stringify(I.metadata),U]);return g.length}function x7(_,$){_.run(`INSERT INTO knowledge_indexes (id, kind, name, artifact_uri, shard_key, metadata_json, created_at, updated_at) + LIMIT 1`).get(g,`%${g}%`),D=zN(U?.metadata_json);return{source_ref:g,source_uri:U?.source_uri??g,chunk_id:U?.chunk_id??null,quote:U?.text?U.text.replace(/\s+/g," ").slice(0,240):null,start_offset:U?.start_offset??null,end_offset:U?.end_offset??null,metadata:{source_ref:g,revision:U?.revision??D.revision,hash:U?.hash??D.hash}}})}function tK(_,$,g,U){_.run("DELETE FROM citations WHERE wiki_page_id = ?",[$]);let D=lK(_,g);for(let I of D)_.run(`INSERT INTO citations (id, wiki_page_id, chunk_id, source_uri, quote, start_offset, end_offset, metadata_json, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[aU("cit",`${$}\x00${I.source_uri}\x00${I.chunk_id??yK()}`),$,I.chunk_id,I.source_uri,I.quote,I.start_offset,I.end_offset,JSON.stringify(I.metadata),U]);return D.length}function oK(_,$){_.run(`INSERT INTO knowledge_indexes (id, kind, name, artifact_uri, shard_key, metadata_json, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(kind, name, shard_key) DO UPDATE SET artifact_uri = excluded.artifact_uri, metadata_json = excluded.metadata_json, - updated_at = excluded.updated_at`,[aU("idx",`app-wiki-note\x00${$.path}`),"app_wiki_note",$.title,$.artifactUri,$.path,JSON.stringify({artifact_key:$.path,content_hash:$.contentHash,tags:$.tags,source_refs:$.sourceRefs}),$.now,$.now])}function y7(_,$){_.run(`INSERT INTO wiki_pages (id, path, title, artifact_uri, content_hash, status, metadata_json, created_at, updated_at) + updated_at = excluded.updated_at`,[aU("idx",`app-wiki-note\x00${$.path}`),"app_wiki_note",$.title,$.artifactUri,$.path,JSON.stringify({artifact_key:$.path,content_hash:$.contentHash,tags:$.tags,source_refs:$.sourceRefs}),$.now,$.now])}function pK(_,$){_.run(`INSERT INTO wiki_pages (id, path, title, artifact_uri, content_hash, status, metadata_json, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(path) DO UPDATE SET title = excluded.title, @@ -660,22 +660,22 @@ VALUES (10, datetime('now')); content_hash = excluded.content_hash, status = excluded.status, metadata_json = excluded.metadata_json, - updated_at = excluded.updated_at`,[$.pageId,$.path,$.title,$.artifactUri,$.contentHash,"active",JSON.stringify($.metadata),$.now,$.now]);let D=_.query("SELECT id FROM chunks WHERE wiki_page_id = ?").all($.pageId);for(let g of D)_.run("DELETE FROM chunks_fts WHERE chunk_id = ?",[g.id]);_.run("DELETE FROM chunks WHERE wiki_page_id = ?",[$.pageId]);let U=aU("chk",`${$.pageId}\x00${$.contentHash}`);_.run(`INSERT INTO chunks (id, wiki_page_id, kind, ordinal, text, token_count, start_offset, end_offset, metadata_json, created_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[U,$.pageId,"wiki",0,$.body,k7($.body),0,$.body.length,JSON.stringify({...$.metadata,artifact_uri:$.artifactUri,content_hash:$.contentHash}),$.now]),_.run("INSERT INTO chunks_fts (chunk_id, text, title, source_uri) VALUES (?, ?, ?, ?)",[U,$.body,$.title,$.artifactUri])}function xD(_){if(_.scope==="global"&&_.allowGlobal!==!0)throw Error("Global app-wiki writes require allowGlobal=true or CLI --allow-global.");if(_.workspace.home.includes("/.husna/")||_.workspace.home.endsWith("/.husna"))throw Error(`Refusing app-wiki writes to legacy .husna path: ${_.workspace.home}`);if(_.workspace.home.includes("/.hasna/apps/knowledge"))throw Error(`Refusing app-wiki writes to legacy .hasna/apps/knowledge path: ${_.workspace.home}`);if(_.safetyPolicy)_6(_.workspace.knowledgeDbPath,_.safetyPolicy)}async function UW(_){xD(_);let $=h(_.workspace.knowledgeDbPath),D=r(_.workspace.knowledgeDbPath);try{X_(D,{event_type:"write",action:"app_wiki_init",target_uri:_.workspace.home,decision:"allow",metadata:{scope:_.scope,store_type:_.store.type,app_path:".hasna/knowledge"},created_at:(_.now??new Date).toISOString()})}finally{D.close()}return{ok:!0,scope:_.scope,workspace_home:_.workspace.home,knowledge_db_path:_.workspace.knowledgeDbPath,schema_version:$.schema_version,store_type:_.store.type,global_write_allowed:_.scope==="global"&&_.allowGlobal===!0,message:`Initialized app wiki scope at ${_.workspace.home}`}}async function IW(_){xD(_);let $=_.now??new Date,D=$.toISOString(),U=DW(_.tags),g=DW(_.sourceRefs);for(let z of g)s6(z,{allowFileSourceRefs:_.safetyPolicy?.readOnlySourceAccess===!0});let I=C7(_),j=v7({title:_.title,content:_.content,tags:U,sourceRefs:g,now:D}),N=U$({generated_from:"app_wiki_note",artifact_key:I,source_refs:g}),O=await gW(_.store,{key:I,body:j,content_type:"text/markdown",metadata:{generated_from:"app_wiki_note",provenance:N,scope:_.scope,tags:U.join(","),source_refs:g.join(",")}}),A=await r7(_.store,{ts:D,event:"app_wiki_note_written",page_key:I,source_refs:g,tags:U},$);h(_.workspace.knowledgeDbPath);let L=r(_.workspace.knowledgeDbPath);try{let z=aU("wiki",I),W=f7({path:I,tags:U,sourceRefs:g,provenance:N,metadata:_.metadata});s$(L,[O,A],$),y7(L,{pageId:z,path:I,title:_.title,artifactUri:O.uri,contentHash:O.hash??"",body:j,metadata:W,now:D});let J=u7(L,z,g,D);x7(L,{title:_.title,path:I,artifactUri:O.uri,contentHash:O.hash??"",tags:U,sourceRefs:g,now:D}),X_(L,{event_type:"write",action:"app_wiki_note_write",target_uri:O.uri,decision:"allow",metadata:{scope:_.scope,path:I,source_refs:g,tags:U},created_at:D});let P=L.query("SELECT id, path, title, artifact_uri, content_hash, metadata_json, created_at, updated_at FROM wiki_pages WHERE id = ?").get(z);if(!P)throw Error(`Failed to write app wiki note: ${I}`);return{ok:!0,scope:_.scope,workspace_home:_.workspace.home,note:SE(P),artifact_uri:O.uri,content_hash:O.hash??"",citations_written:J,chunks_written:1,storage_objects_written:2,message:`Wrote app wiki note ${I}`}}finally{L.close()}}function jW(_){let $=Math.max(1,Math.min(_.limit??50,200));if(!_.dbPath)return[];h(_.dbPath);let D=r(_.dbPath);try{return D.query(`SELECT id, path, title, artifact_uri, content_hash, metadata_json, created_at, updated_at + updated_at = excluded.updated_at`,[$.pageId,$.path,$.title,$.artifactUri,$.contentHash,"active",JSON.stringify($.metadata),$.now,$.now]);let g=_.query("SELECT id FROM chunks WHERE wiki_page_id = ?").all($.pageId);for(let D of g)_.run("DELETE FROM chunks_fts WHERE chunk_id = ?",[D.id]);_.run("DELETE FROM chunks WHERE wiki_page_id = ?",[$.pageId]);let U=aU("chk",`${$.pageId}\x00${$.contentHash}`);_.run(`INSERT INTO chunks (id, wiki_page_id, kind, ordinal, text, token_count, start_offset, end_offset, metadata_json, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[U,$.pageId,"wiki",0,$.body,hK($.body),0,$.body.length,JSON.stringify({...$.metadata,artifact_uri:$.artifactUri,content_hash:$.contentHash}),$.now]),_.run("INSERT INTO chunks_fts (chunk_id, text, title, source_uri) VALUES (?, ?, ?, ?)",[U,$.body,$.title,$.artifactUri])}function f0(_){if(_.scope==="global"&&_.allowGlobal!==!0)throw Error("Global app-wiki writes require allowGlobal=true or CLI --allow-global.");if(_.workspace.home.includes("/.husna/")||_.workspace.home.endsWith("/.husna"))throw Error(`Refusing app-wiki writes to legacy .husna path: ${_.workspace.home}`);if(_.workspace.home.includes("/.hasna/apps/knowledge"))throw Error(`Refusing app-wiki writes to legacy .hasna/apps/knowledge path: ${_.workspace.home}`);if(_.safetyPolicy)$6(_.workspace.knowledgeDbPath,_.safetyPolicy)}async function A3(_){f0(_);let $=c(_.workspace.knowledgeDbPath),g=v(_.workspace.knowledgeDbPath);try{z_(g,{event_type:"write",action:"app_wiki_init",target_uri:_.workspace.home,decision:"allow",metadata:{scope:_.scope,store_type:_.store.type,app_path:".hasna/knowledge"},created_at:(_.now??new Date).toISOString()})}finally{g.close()}return{ok:!0,scope:_.scope,workspace_home:_.workspace.home,knowledge_db_path:_.workspace.knowledgeDbPath,schema_version:$.schema_version,store_type:_.store.type,global_write_allowed:_.scope==="global"&&_.allowGlobal===!0,message:`Initialized app wiki scope at ${_.workspace.home}`}}async function O3(_){f0(_);let $=_.now??new Date,g=$.toISOString(),U=E3(_.tags),D=E3(_.sourceRefs);for(let W of D)$g(W,{allowFileSourceRefs:_.safetyPolicy?.readOnlySourceAccess===!0});let I=nK(_),j=dK({title:_.title,content:_.content,tags:U,sourceRefs:D,now:g}),E=D$({generated_from:"app_wiki_note",artifact_key:I,source_refs:D}),A=await N3(_.store,{key:I,body:j,content_type:"text/markdown",metadata:{generated_from:"app_wiki_note",provenance:E,scope:_.scope,tags:U.join(","),source_refs:D.join(",")}}),O=await mK(_.store,{ts:g,event:"app_wiki_note_written",page_key:I,source_refs:D,tags:U},$);c(_.workspace.knowledgeDbPath);let P=v(_.workspace.knowledgeDbPath);try{let W=aU("wiki",I),z=iK({path:I,tags:U,sourceRefs:D,provenance:E,metadata:_.metadata});_6(P,[A,O],$),pK(P,{pageId:W,path:I,title:_.title,artifactUri:A.uri,contentHash:A.hash??"",body:j,metadata:z,now:g});let S=tK(P,W,D,g);oK(P,{title:_.title,path:I,artifactUri:A.uri,contentHash:A.hash??"",tags:U,sourceRefs:D,now:g}),z_(P,{event_type:"write",action:"app_wiki_note_write",target_uri:A.uri,decision:"allow",metadata:{scope:_.scope,path:I,source_refs:D,tags:U},created_at:g});let L=P.query("SELECT id, path, title, artifact_uri, content_hash, metadata_json, created_at, updated_at FROM wiki_pages WHERE id = ?").get(W);if(!L)throw Error(`Failed to write app wiki note: ${I}`);return{ok:!0,scope:_.scope,workspace_home:_.workspace.home,note:RN(L),artifact_uri:A.uri,content_hash:A.hash??"",citations_written:S,chunks_written:1,storage_objects_written:2,message:`Wrote app wiki note ${I}`}}finally{P.close()}}function P3(_){let $=Math.max(1,Math.min(_.limit??50,200));if(!_.dbPath)return[];c(_.dbPath);let g=v(_.dbPath);try{return g.query(`SELECT id, path, title, artifact_uri, content_hash, metadata_json, created_at, updated_at FROM wiki_pages WHERE status = 'active' AND path LIKE 'wiki/notes/%' AND metadata_json LIKE '%"app_wiki":true%' ORDER BY updated_at DESC, created_at DESC - LIMIT ?`).all($).map(SE)}finally{D.close()}}async function NW(_){h(_.dbPath);let $=r(_.dbPath);try{let D=$.query(`SELECT id, path, title, artifact_uri, content_hash, metadata_json, created_at, updated_at + LIMIT ?`).all($).map(RN)}finally{g.close()}}async function S3(_){c(_.dbPath);let $=v(_.dbPath);try{let g=$.query(`SELECT id, path, title, artifact_uri, content_hash, metadata_json, created_at, updated_at FROM wiki_pages WHERE (id = ? OR path = ?) AND path LIKE 'wiki/notes/%' - AND metadata_json LIKE '%"app_wiki":true%'`).get(_.id,_.id);if(!D)return null;let U=$.query(`SELECT id, chunk_id, source_uri, quote, start_offset, end_offset, metadata_json, created_at + AND metadata_json LIKE '%"app_wiki":true%'`).get(_.id,_.id);if(!g)return null;let U=$.query(`SELECT id, chunk_id, source_uri, quote, start_offset, end_offset, metadata_json, created_at FROM citations WHERE wiki_page_id = ? - ORDER BY created_at ASC`).all(D.id).map((I)=>({...I,metadata:zE(I.metadata_json),metadata_json:void 0})),g=null;if(_.includeContent!==!1)try{g=await _.store.getText(D.path)}catch{g=null}return{ok:!0,note:SE(D),citations:U,content:g}}finally{$.close()}}async function EW(_){return xD(_),s6(_.sourceRef,{allowFileSourceRefs:_.config?.sources.allowed_schemes.includes("file")!==!1}),eU({dbPath:_.workspace.knowledgeDbPath,sourceRef:_.sourceRef,purpose:_.purpose??"knowledge_index",config:_.config,safetyPolicy:_.safetyPolicy})}import{randomUUID as BE}from"crypto";import{randomUUID as h7}from"crypto";var WE={openai:{api_key_env:"OPENAI_API_KEY",default_model:"gpt-5.2"},anthropic:{api_key_env:"ANTHROPIC_API_KEY",default_model:"claude-sonnet-4-6"},deepseek:{api_key_env:"DEEPSEEK_API_KEY",default_model:"deepseek-chat"}},c7={openai:{text_generation:!0,structured_output:!0,tool_usage:!0,tool_streaming:!0,image_input:!0,native_web_search:!0,reasoning:!0,embeddings:!0},anthropic:{text_generation:!0,structured_output:!0,tool_usage:!0,tool_streaming:!0,image_input:!0,native_web_search:!1,reasoning:!0,embeddings:!1},deepseek:{text_generation:!0,structured_output:!0,tool_usage:!0,tool_streaming:!0,image_input:!1,native_web_search:!1,reasoning:!0,embeddings:!1}},n7={default:"openai:gpt-5.2",fast:"openai:gpt-5-mini",reasoning:"anthropic:claude-opus-4-6",sonnet:"anthropic:claude-sonnet-4-6",deepseek:"deepseek:deepseek-chat","deepseek-reasoning":"deepseek:deepseek-reasoner"};function AW(_){return _?.providers??{}}function $6(_,$){let D=AW(_)[$]??{};return{...WE[$],...D}}function LW(_){let $=AW(_);return{...n7,...$.default_model?{default:$.default_model}:{},...$.aliases??{}}}function f_(_){let[$,...D]=_.split(":"),U=D.join(":");if($!=="openai"&&$!=="anthropic"&&$!=="deepseek")throw Error(`Unsupported AI provider: ${$}`);if(!U)throw Error(`Invalid model ref: ${_}. Expected provider:model.`);return{provider:$,model:U}}function G$(_,$){return LW($)[_]??_}function XE(_){let $=LW(_);return Object.entries($).map(([D,U])=>{let g=f_(U);return{alias:D,model_ref:U,provider:g.provider,model:g.model,default:D==="default",capabilities:c7[g.provider]}})}function JW(_,$=process.env){return Object.keys(WE).map((D)=>{let U=$6(_,D),g=Boolean($[U.api_key_env]);return{provider:D,api_key_env:U.api_key_env,configured:g,source:g?"env":"missing",base_url:U.base_url??null,default_model:U.default_model}})}function PW(_,$=process.env){return{default_model:G$("default",_),providers:JW(_,$),models:XE(_)}}function g4(_,$,D=process.env){let U=JW($,D).find((g)=>g.provider===_);if(!U)throw Error(`Unsupported AI provider: ${_}`);if(!U.configured)throw Error(`Missing ${U.api_key_env} for ${_}. Set the env var to use this provider.`);return U}async function d7(_){if(_==="openai"){let{createOpenAI:D}=await import("@ai-sdk/openai");return D}if(_==="anthropic"){let{createAnthropic:D}=await import("@ai-sdk/anthropic");return D}let{createDeepSeek:$}=await import("@ai-sdk/deepseek");return $}async function m7(_={}){let{createProviderRegistry:$}=await import("ai"),D=_.env??process.env,U={};for(let g of Object.keys(WE)){let I=$6(_.config,g),j=D[I.api_key_env];if(!j)continue;let N=_.factories?.[g]??await d7(g);U[g]=N({apiKey:j,baseURL:I.base_url})}return $(U)}async function yD(_,$={}){let D=G$(_,$.config),U=f_(D);return g4(U.provider,$.config,$.env),(await m7($)).languageModel(D)}function OW(_,$){for(let D of $){let U=_[D];if(typeof U==="number"&&Number.isFinite(U))return U}return 0}function U4(_){let $=_.usage??{};return{provider:_.provider,model:_.model,input_tokens:OW($,["inputTokens","promptTokens","input_tokens","prompt_tokens"]),output_tokens:OW($,["outputTokens","completionTokens","output_tokens","completion_tokens"]),cost_usd:_.costUsd??0,metadata:{usage:$,provider_metadata:_.providerMetadata??{}}}}function W0(_,$){let D=`usage_${h7()}`;return _.run(`INSERT INTO provider_usage (id, run_id, provider, model, input_tokens, output_tokens, cost_usd, metadata_json, created_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[D,$.run_id??null,$.provider,$.model,$.input_tokens,$.output_tokens,$.cost_usd,JSON.stringify($.metadata),$.created_at??new Date().toISOString()]),D}import{createHash as Wq}from"crypto";import{existsSync as s7,readFileSync as _q}from"fs";import{createHash as WW}from"crypto";var i7="openai:text-embedding-3-small",XW=1536;function sU(_){return _?.embeddings??{}}function zW(_,$){return`${_}_${WW("sha256").update($).digest("hex").slice(0,20)}`}function GE(_){if(!_)return{};try{let $=JSON.parse(_);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch{return{}}}function Y$(_,$){for(let D of $){let U=_[D];if(typeof U==="string"&&U.length>0)return U}return null}function SW(_,$){for(let D of $){let U=_[D];if(typeof U==="number"&&Number.isFinite(U))return U}return null}function RE(_){return Math.sqrt(_.reduce(($,D)=>$+D*D,0))}function l7(_,$,D=RE($)){let U=RE(_);if(U===0||D===0)return 0;let g=Math.min(_.length,$.length),I=0;for(let j=0;j{let I=D[g%D.length]/255;return Number((I*2-1).toFixed(6))})}async function o7(_,$,D=process.env){g4("openai",$,D);let U=$6($,"openai"),{createOpenAI:g}=await import("@ai-sdk/openai"),I=g({apiKey:D[U.api_key_env],baseURL:U.base_url});if(I.embeddingModel)return I.embeddingModel(_);if(I.textEmbedding)return I.textEmbedding(_);if(I.textEmbeddingModel)return I.textEmbeddingModel(_);throw Error("OpenAI provider does not expose an embedding model factory.")}function I4(_,$){if(!_||_==="default"||_==="embedding")return sU($).default_model??i7;return _}async function RW(_,$={}){let D=I4($.modelRef,$.config),U=f_(D);if(U.provider!=="openai")throw Error(`Embedding provider ${U.provider} is not supported yet. Use openai:text-embedding-3-small.`);let g=$.dimensions??sU($.config).dimensions??XW;if($.fake)return{provider:U.provider,model:U.model,dimensions:g,vectors:_.map((A)=>t7(A,g)),usage:{input_tokens:_.reduce((A,L)=>A+Math.max(1,Math.ceil(L.split(/\s+/).filter(Boolean).length*1.25)),0)}};let{embedMany:I}=await import("ai"),j=await o7(U.model,$.config,$.env),N=await I({model:j,values:_,maxParallelCalls:$.maxParallelCalls??sU($.config).max_parallel_calls,providerOptions:{openai:{dimensions:g}}}),O=N.embeddings;return{provider:U.provider,model:U.model,dimensions:O[0]?.length??g,vectors:O,usage:{input_tokens:N.usage?.tokens??0}}}function p7(_,$){if($.sourceRevisionId)return _.query(`SELECT + ORDER BY created_at ASC`).all(g.id).map((I)=>({...I,metadata:zN(I.metadata_json),metadata_json:void 0})),D=null;if(_.includeContent!==!1)try{D=await _.store.getText(g.path)}catch{D=null}return{ok:!0,note:RN(g),citations:U,content:D}}finally{$.close()}}async function L3(_){return f0(_),$g(_.sourceRef,{allowFileSourceRefs:_.config?.sources.allowed_schemes.includes("file")!==!1}),eU({dbPath:_.workspace.knowledgeDbPath,sourceRef:_.sourceRef,purpose:_.purpose??"knowledge_index",config:_.config,safetyPolicy:_.safetyPolicy})}import{randomUUID as bN}from"crypto";import{randomUUID as eK}from"crypto";var GN={openai:{api_key_env:"OPENAI_API_KEY",default_model:"gpt-5.2"},anthropic:{api_key_env:"ANTHROPIC_API_KEY",default_model:"claude-sonnet-4-6"},deepseek:{api_key_env:"DEEPSEEK_API_KEY",default_model:"deepseek-chat"}},aK={openai:{text_generation:!0,structured_output:!0,tool_usage:!0,tool_streaming:!0,image_input:!0,native_web_search:!0,reasoning:!0,embeddings:!0},anthropic:{text_generation:!0,structured_output:!0,tool_usage:!0,tool_streaming:!0,image_input:!0,native_web_search:!1,reasoning:!0,embeddings:!1},deepseek:{text_generation:!0,structured_output:!0,tool_usage:!0,tool_streaming:!0,image_input:!1,native_web_search:!1,reasoning:!0,embeddings:!1}},sK={default:"openai:gpt-5.2",fast:"openai:gpt-5-mini",reasoning:"anthropic:claude-opus-4-6",sonnet:"anthropic:claude-sonnet-4-6",deepseek:"deepseek:deepseek-chat","deepseek-reasoning":"deepseek:deepseek-reasoner"};function J3(_){return _?.providers??{}}function g6(_,$){let g=J3(_)[$]??{};return{...GN[$],...g}}function z3(_){let $=J3(_);return{...sK,...$.default_model?{default:$.default_model}:{},...$.aliases??{}}}function C_(_){let[$,...g]=_.split(":"),U=g.join(":");if($!=="openai"&&$!=="anthropic"&&$!=="deepseek")throw Error(`Unsupported AI provider: ${$}`);if(!U)throw Error(`Invalid model ref: ${_}. Expected provider:model.`);return{provider:$,model:U}}function G$(_,$){return z3($)[_]??_}function XN(_){let $=z3(_);return Object.entries($).map(([g,U])=>{let D=C_(U);return{alias:g,model_ref:U,provider:D.provider,model:D.model,default:g==="default",capabilities:aK[D.provider]}})}function R3(_,$=process.env){return Object.keys(GN).map((g)=>{let U=g6(_,g),D=Boolean($[U.api_key_env]);return{provider:g,api_key_env:U.api_key_env,configured:D,source:D?"env":"missing",base_url:U.base_url??null,default_model:U.default_model}})}function G3(_,$=process.env){return{default_model:G$("default",_),providers:R3(_,$),models:XN(_)}}function Ig(_,$,g=process.env){let U=R3($,g).find((D)=>D.provider===_);if(!U)throw Error(`Unsupported AI provider: ${_}`);if(!U.configured)throw Error(`Missing ${U.api_key_env} for ${_}. Set the env var to use this provider.`);return U}async function _7(_){if(_==="openai"){let{createOpenAI:g}=await import("@ai-sdk/openai");return g}if(_==="anthropic"){let{createAnthropic:g}=await import("@ai-sdk/anthropic");return g}let{createDeepSeek:$}=await import("@ai-sdk/deepseek");return $}async function $7(_={}){let{createProviderRegistry:$}=await import("ai"),g=_.env??process.env,U={};for(let D of Object.keys(GN)){let I=g6(_.config,D),j=g[I.api_key_env];if(!j)continue;let E=_.factories?.[D]??await _7(D);U[D]=E({apiKey:j,baseURL:I.base_url})}return $(U)}async function x0(_,$={}){let g=G$(_,$.config),U=C_(g);return Ig(U.provider,$.config,$.env),(await $7($)).languageModel(g)}function W3(_,$){for(let g of $){let U=_[g];if(typeof U==="number"&&Number.isFinite(U))return U}return 0}function jg(_){let $=_.usage??{};return{provider:_.provider,model:_.model,input_tokens:W3($,["inputTokens","promptTokens","input_tokens","prompt_tokens"]),output_tokens:W3($,["outputTokens","completionTokens","output_tokens","completion_tokens"]),cost_usd:_.costUsd??0,metadata:{usage:$,provider_metadata:_.providerMetadata??{}}}}function z4(_,$){let g=`usage_${eK()}`;return _.run(`INSERT INTO provider_usage (id, run_id, provider, model, input_tokens, output_tokens, cost_usd, metadata_json, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[g,$.run_id??null,$.provider,$.model,$.input_tokens,$.output_tokens,$.cost_usd,JSON.stringify($.metadata),$.created_at??new Date().toISOString()]),g}import{createHash as V7}from"crypto";import{existsSync as A7,readFileSync as O7}from"fs";import{createHash as Q3}from"crypto";var g7="openai:text-embedding-3-small",T3=1536;function sU(_){return _?.embeddings??{}}function X3(_,$){return`${_}_${Q3("sha256").update($).digest("hex").slice(0,20)}`}function QN(_){if(!_)return{};try{let $=JSON.parse(_);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch{return{}}}function X$(_,$){for(let g of $){let U=_[g];if(typeof U==="string"&&U.length>0)return U}return null}function Y3(_,$){for(let g of $){let U=_[g];if(typeof U==="number"&&Number.isFinite(U))return U}return null}function YN(_){return Math.sqrt(_.reduce(($,g)=>$+g*g,0))}function D7(_,$,g=YN($)){let U=YN(_);if(U===0||g===0)return 0;let D=Math.min(_.length,$.length),I=0;for(let j=0;j{let I=g[D%g.length]/255;return Number((I*2-1).toFixed(6))})}async function I7(_,$,g=process.env){Ig("openai",$,g);let U=g6($,"openai"),{createOpenAI:D}=await import("@ai-sdk/openai"),I=D({apiKey:g[U.api_key_env],baseURL:U.base_url});if(I.embeddingModel)return I.embeddingModel(_);if(I.textEmbedding)return I.textEmbedding(_);if(I.textEmbeddingModel)return I.textEmbeddingModel(_);throw Error("OpenAI provider does not expose an embedding model factory.")}function Eg(_,$){if(!_||_==="default"||_==="embedding")return sU($).default_model??g7;return _}async function K3(_,$={}){let g=Eg($.modelRef,$.config),U=C_(g);if(U.provider!=="openai")throw Error(`Embedding provider ${U.provider} is not supported yet. Use openai:text-embedding-3-small.`);let D=$.dimensions??sU($.config).dimensions??T3;if($.fake)return{provider:U.provider,model:U.model,dimensions:D,vectors:_.map((O)=>U7(O,D)),usage:{input_tokens:_.reduce((O,P)=>O+Math.max(1,Math.ceil(P.split(/\s+/).filter(Boolean).length*1.25)),0)}};let{embedMany:I}=await import("ai"),j=await I7(U.model,$.config,$.env),E=await I({model:j,values:_,maxParallelCalls:$.maxParallelCalls??sU($.config).max_parallel_calls,providerOptions:{openai:{dimensions:D}}}),A=E.embeddings;return{provider:U.provider,model:U.model,dimensions:A[0]?.length??D,vectors:A,usage:{input_tokens:E.usage?.tokens??0}}}function j7(_,$){if($.sourceRevisionId)return _.query(`SELECT c.id, c.text, c.token_count, @@ -713,7 +713,7 @@ VALUES (10, datetime('now')); ON v.chunk_id = c.id AND v.provider = ? AND v.model = ? WHERE v.id IS NULL ORDER BY c.created_at ASC, c.ordinal ASC - LIMIT ?`).all($.provider,$.model,$.limit)}function e7(_){let $=GE(_.metadata_json),D=$.provenance;if(D&&typeof D==="object"&&!Array.isArray(D))return D;return T6({source_ref:Y$($,["source_ref"]),source_uri:_.source_uri??Y$($,["source_uri"]),source_kind:_.source_kind??Y$($,["source_kind"]),source_revision_id:_.source_revision_id,revision:_.revision??Y$($,["revision"]),hash:_.hash??Y$($,["hash"]),chunk_id:_.id,start_offset:_.start_offset??SW($,["start_offset"]),end_offset:_.end_offset??SW($,["end_offset"]),status:Y$($,["status"]),resolver:"open-files-read-only"})}function a7(_,$,D,U){let g=_.prepare(` + LIMIT ?`).all($.provider,$.model,$.limit)}function E7(_){let $=QN(_.metadata_json),g=$.provenance;if(g&&typeof g==="object"&&!Array.isArray(g))return g;return K6({source_ref:X$($,["source_ref"]),source_uri:_.source_uri??X$($,["source_uri"]),source_kind:_.source_kind??X$($,["source_kind"]),source_revision_id:_.source_revision_id,revision:_.revision??X$($,["revision"]),hash:_.hash??X$($,["hash"]),chunk_id:_.id,start_offset:_.start_offset??Y3($,["start_offset"]),end_offset:_.end_offset??Y3($,["end_offset"]),status:X$($,["status"]),resolver:"open-files-read-only"})}function N7(_,$,g,U){let D=_.prepare(` INSERT INTO chunk_embeddings (id, chunk_id, provider, model, dimensions, vector_json, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT(chunk_id, provider, model) DO UPDATE SET @@ -742,10 +742,10 @@ VALUES (10, datetime('now')); status = excluded.status, metadata_json = excluded.metadata_json, updated_at = excluded.updated_at - `);return _.transaction(()=>{for(let N=0;N<$.length;N+=1){let O=$[N],A=D.vectors[N];if(!A)continue;let L=GE(O.metadata_json),z=e7(O),W=z.source_ref??Y$(L,["source_ref"]),J=z.source_uri??O.source_uri??Y$(L,["source_uri"]),P=z.revision??O.revision??Y$(L,["revision"]),S=z.hash??O.hash??Y$(L,["hash"]),X=z.status??Y$(L,["status"])??"active",G=JSON.stringify(A);g.run(zW("emb",`${O.id}\x00${D.provider}\x00${D.model}`),O.id,D.provider,D.model,D.dimensions,G,U),I.run(zW("vec",`${O.id}\x00${D.provider}\x00${D.model}`),O.id,O.source_revision_id,D.provider,D.model,D.dimensions,G,RE(A),J,W,P,S,z.start_offset,z.end_offset,O.token_count,X,JSON.stringify({...L,provenance:z,embedded_at:U}),U,U)}})(),$.length}async function _I(_){let $=I4(_.modelRef,_.config),D=f_($);if(D.provider!=="openai")throw Error(`Embedding provider ${D.provider} is not supported yet.`);let U=(_.now??new Date).toISOString(),g=Math.max(1,Math.min(_.limit??100,1000));h(_.dbPath);let I=r(_.dbPath),j;try{j=p7(I,{provider:D.provider,model:D.model,limit:g,sourceRevisionId:_.sourceRevisionId})}finally{I.close()}if(j.length===0)return{provider:D.provider,model:D.model,dimensions:_.dimensions??sU(_.config).dimensions??XW,chunks_seen:0,chunks_embedded:0,embeddings_upserted:0,vector_entries_upserted:0,usage:{input_tokens:0}};let N=await RW(j.map((A)=>A.text),_),O=r(_.dbPath);try{let A=a7(O,j,N,U);return{provider:N.provider,model:N.model,dimensions:N.dimensions,chunks_seen:j.length,chunks_embedded:j.length,embeddings_upserted:A,vector_entries_upserted:A,usage:N.usage}}finally{O.close()}}function GW(_){h(_);let $=r(_);try{let D=$.query("SELECT COUNT(*) AS n FROM chunk_embeddings").get()?.n??0,U=$.query("SELECT COUNT(*) AS n FROM vector_index_entries").get()?.n??0,g=$.query(`SELECT provider, model, dimensions, COUNT(*) AS entries, MAX(updated_at) AS updated_at + `);return _.transaction(()=>{for(let E=0;E<$.length;E+=1){let A=$[E],O=g.vectors[E];if(!O)continue;let P=QN(A.metadata_json),W=E7(A),z=W.source_ref??X$(P,["source_ref"]),S=W.source_uri??A.source_uri??X$(P,["source_uri"]),L=W.revision??A.revision??X$(P,["revision"]),J=W.hash??A.hash??X$(P,["hash"]),R=W.status??X$(P,["status"])??"active",X=JSON.stringify(O);D.run(X3("emb",`${A.id}\x00${g.provider}\x00${g.model}`),A.id,g.provider,g.model,g.dimensions,X,U),I.run(X3("vec",`${A.id}\x00${g.provider}\x00${g.model}`),A.id,A.source_revision_id,g.provider,g.model,g.dimensions,X,YN(O),S,z,L,J,W.start_offset,W.end_offset,A.token_count,R,JSON.stringify({...P,provenance:W,embedded_at:U}),U,U)}})(),$.length}async function _I(_){let $=Eg(_.modelRef,_.config),g=C_($);if(g.provider!=="openai")throw Error(`Embedding provider ${g.provider} is not supported yet.`);let U=(_.now??new Date).toISOString(),D=Math.max(1,Math.min(_.limit??100,1000));c(_.dbPath);let I=v(_.dbPath),j;try{j=j7(I,{provider:g.provider,model:g.model,limit:D,sourceRevisionId:_.sourceRevisionId})}finally{I.close()}if(j.length===0)return{provider:g.provider,model:g.model,dimensions:_.dimensions??sU(_.config).dimensions??T3,chunks_seen:0,chunks_embedded:0,embeddings_upserted:0,vector_entries_upserted:0,usage:{input_tokens:0}};let E=await K3(j.map((O)=>O.text),_),A=v(_.dbPath);try{let O=N7(A,j,E,U);return{provider:E.provider,model:E.model,dimensions:E.dimensions,chunks_seen:j.length,chunks_embedded:j.length,embeddings_upserted:O,vector_entries_upserted:O,usage:E.usage}}finally{A.close()}}function q3(_){c(_);let $=v(_);try{let g=$.query("SELECT COUNT(*) AS n FROM chunk_embeddings").get()?.n??0,U=$.query("SELECT COUNT(*) AS n FROM vector_index_entries").get()?.n??0,D=$.query(`SELECT provider, model, dimensions, COUNT(*) AS entries, MAX(updated_at) AS updated_at FROM vector_index_entries GROUP BY provider, model, dimensions - ORDER BY provider, model`).all();return{total_embeddings:D,total_vector_entries:U,indexes:g}}finally{$.close()}}async function $I(_){let $=I4(_.modelRef,_.config),D=f_($),U=Math.max(1,Math.min(_.limit??10,100)),g=await RW([_.query],_),I=g.vectors[0]??[];h(_.dbPath);let j=r(_.dbPath);try{let O=j.query(`SELECT + ORDER BY provider, model`).all();return{total_embeddings:g,total_vector_entries:U,indexes:D}}finally{$.close()}}async function $I(_){let $=Eg(_.modelRef,_.config),g=C_($),U=Math.max(1,Math.min(_.limit??10,100)),D=await K3([_.query],_),I=D.vectors[0]??[];c(_.dbPath);let j=v(_.dbPath);try{let A=j.query(`SELECT v.chunk_id, c.text, v.vector_json, @@ -757,7 +757,7 @@ VALUES (10, datetime('now')); v.metadata_json FROM vector_index_entries v JOIN chunks c ON c.id = v.chunk_id - WHERE v.provider = ? AND v.model = ? AND v.status = 'active'`).all(D.provider,D.model).map((A)=>{let L=JSON.parse(A.vector_json),z=GE(A.metadata_json),W=z.provenance&&typeof z.provenance==="object"&&!Array.isArray(z.provenance)?z.provenance:null;return{chunk_id:A.chunk_id,score:l7(I,L,A.vector_norm),text:A.text,source_uri:A.source_uri,source_ref:A.source_ref,revision:A.revision,hash:A.hash,provenance:W}}).sort((A,L)=>L.score-A.score).slice(0,U);return{provider:D.provider,model:D.model,dimensions:g.dimensions,query:_.query,results:O}}finally{j.close()}}function DI(_){if(!_)return{};try{let $=JSON.parse(_);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch{return{}}}function I$(_,$){for(let D of $){let U=_[D];if(typeof U==="string"&&U.length>0)return U}return null}function YW(_,$){for(let D of $){let U=_[D];if(typeof U==="number"&&Number.isFinite(U))return U}return null}function qW(_){return Array.from(new Set(_))}function BW(_){let $=_.normalize("NFKC").toLowerCase().match(/[\p{L}\p{N}_]+/gu)??[];return qW($.filter((D)=>D.length>0)).slice(0,16)}function QW(_){return _.normalize("NFKC").toLowerCase().match(/[\p{L}\p{N}_]+/gu)??[]}function $q(_){let $=[],D=/"([^"]*)"|(\S+)/g,U,g=!1;while((U=D.exec(_))!==null){if(U[1]!==void 0){let A=QW(U[1]);if(A.length>0)$.push({type:"phrase",value:A.join(" "),negate:g,prefix:!1});g=!1;continue}let I=U[2]??"";if(I==="OR"||I==="||"||I==="|"){$.push({type:"or",value:"",negate:!1,prefix:!1});continue}if(I==="AND"||I==="&&")continue;if(I==="NOT"){g=!0;continue}let j=g;if(g=!1,I.startsWith("-")&&I.length>1)j=!0,I=I.slice(1);let N=!1;if(I.endsWith("*"))N=!0,I=I.slice(0,-1);let O=QW(I);if(O.length===0)continue;$.push({type:O.length>1?"phrase":"term",value:O.join(" "),negate:j,prefix:N})}return $.slice(0,24)}function Dq(_){if(_.type==="phrase")return`"${_.value}"`;return`"${_.value}"*`}function gq(_){let $=$q(_);if($.filter((j)=>j.type!=="or"&&!j.negate).length===0)return{and:null,or:null};let U=(j)=>{let N="",O=!1,A=[];for(let L of $){if(L.type==="or"){O=!0;continue}let z=Dq(L);if(L.negate){A.push(z);continue}if(N.length===0)N=z;else N=O?`${N} OR ${z}`:`${N} ${j} ${z}`;O=!1}for(let L of A)N=`(${N}) NOT ${L}`;return N.length>0?N:null},g=U("AND"),I=U("OR");return{and:g,or:I!==g?I:null}}function Uq(_){return _.replace(/[\\%_]/g,($)=>`\\${$}`)}function VW(_,$){return _.flatMap((D)=>Array.from({length:$},()=>`%${Uq(D)}%`))}function Iq(_,$){let D=Number.isFinite(_)?1/(1+Math.abs(_)):0,U=1/(1+$);return gI(Math.max(D,U))}function YE(_,$){if($.length===0)return 0;let D=$.filter((U)=>_.includes(U)).length;if(D===0)return 0;return gI(Math.min(0.85,0.35+D/$.length*0.5))}function jq(_){return gI(Math.max(0,Math.min(1,(_+1)/2)))}function gI(_){return Number(_.toFixed(6))}function R0(_,$){let D=_.keyword??0,U=_.semantic??0,g=_.catalog??0,I=$?.chunk_id?0.05:0;return gI(Math.min(1,D*0.55+U*0.4+g*0.35+I))}function QE(_){let $=_.provenance;return $&&typeof $==="object"&&!Array.isArray($)?$:null}function Nq(_){let $=DI(_.chunk_metadata_json),D=QE($);if(D)return D;if(!_.source_revision_id&&!_.source_uri)return null;return T6({source_ref:I$($,["source_ref"]),source_uri:_.source_uri??I$($,["source_uri"]),source_kind:_.source_kind??I$($,["source_kind"]),source_revision_id:_.source_revision_id,revision:_.revision??I$($,["revision"]),hash:_.hash??I$($,["hash"]),chunk_id:_.chunk_id,start_offset:_.start_offset??YW($,["start_offset"]),end_offset:_.end_offset??YW($,["end_offset"]),status:I$($,["status"]),resolver:"open-files-read-only"})}function TW(_,$,D){if(!$)return[];try{return Eq(_,$,D)}catch{return[]}}function Eq(_,$,D){return _.query(`SELECT + WHERE v.provider = ? AND v.model = ? AND v.status = 'active'`).all(g.provider,g.model).map((O)=>{let P=JSON.parse(O.vector_json),W=QN(O.metadata_json),z=W.provenance&&typeof W.provenance==="object"&&!Array.isArray(W.provenance)?W.provenance:null;return{chunk_id:O.chunk_id,score:D7(I,P,O.vector_norm),text:O.text,source_uri:O.source_uri,source_ref:O.source_ref,revision:O.revision,hash:O.hash,provenance:z}}).sort((O,P)=>P.score-O.score).slice(0,U);return{provider:g.provider,model:g.model,dimensions:D.dimensions,query:_.query,results:A}}finally{j.close()}}function gI(_){if(!_)return{};try{let $=JSON.parse(_);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch{return{}}}function U$(_,$){for(let g of $){let U=_[g];if(typeof U==="string"&&U.length>0)return U}return null}function B3(_,$){for(let g of $){let U=_[g];if(typeof U==="number"&&Number.isFinite(U))return U}return null}function r3(_){return Array.from(new Set(_))}function b3(_){let $=_.normalize("NFKC").toLowerCase().match(/[\p{L}\p{N}_]+/gu)??[];return r3($.filter((g)=>g.length>0)).slice(0,16)}function V3(_){return _.normalize("NFKC").toLowerCase().match(/[\p{L}\p{N}_]+/gu)??[]}function P7(_){let $=[],g=/"([^"]*)"|(\S+)/g,U,D=!1;while((U=g.exec(_))!==null){if(U[1]!==void 0){let O=V3(U[1]);if(O.length>0)$.push({type:"phrase",value:O.join(" "),negate:D,prefix:!1});D=!1;continue}let I=U[2]??"";if(I==="OR"||I==="||"||I==="|"){$.push({type:"or",value:"",negate:!1,prefix:!1});continue}if(I==="AND"||I==="&&")continue;if(I==="NOT"){D=!0;continue}let j=D;if(D=!1,I.startsWith("-")&&I.length>1)j=!0,I=I.slice(1);let E=!1;if(I.endsWith("*"))E=!0,I=I.slice(0,-1);let A=V3(I);if(A.length===0)continue;$.push({type:A.length>1?"phrase":"term",value:A.join(" "),negate:j,prefix:E})}return $.slice(0,24)}function S7(_){if(_.type==="phrase")return`"${_.value}"`;return`"${_.value}"*`}function L7(_){let $=P7(_);if($.filter((j)=>j.type!=="or"&&!j.negate).length===0)return{and:null,or:null};let U=(j)=>{let E="",A=!1,O=[];for(let P of $){if(P.type==="or"){A=!0;continue}let W=S7(P);if(P.negate){O.push(W);continue}if(E.length===0)E=W;else E=A?`${E} OR ${W}`:`${E} ${j} ${W}`;A=!1}for(let P of O)E=`(${E}) NOT ${P}`;return E.length>0?E:null},D=U("AND"),I=U("OR");return{and:D,or:I!==D?I:null}}function W7(_){return _.replace(/[\\%_]/g,($)=>`\\${$}`)}function M3(_,$){return _.flatMap((g)=>Array.from({length:$},()=>`%${W7(g)}%`))}function J7(_,$){let g=Number.isFinite(_)?1/(1+Math.abs(_)):0,U=1/(1+$);return DI(Math.max(g,U))}function TN(_,$){if($.length===0)return 0;let g=$.filter((U)=>_.includes(U)).length;if(g===0)return 0;return DI(Math.min(0.85,0.35+g/$.length*0.5))}function z7(_){return DI(Math.max(0,Math.min(1,(_+1)/2)))}function DI(_){return Number(_.toFixed(6))}function G4(_,$){let g=_.keyword??0,U=_.semantic??0,D=_.catalog??0,I=$?.chunk_id?0.05:0;return DI(Math.min(1,g*0.55+U*0.4+D*0.35+I))}function KN(_){let $=_.provenance;return $&&typeof $==="object"&&!Array.isArray($)?$:null}function R7(_){let $=gI(_.chunk_metadata_json),g=KN($);if(g)return g;if(!_.source_revision_id&&!_.source_uri)return null;return K6({source_ref:U$($,["source_ref"]),source_uri:_.source_uri??U$($,["source_uri"]),source_kind:_.source_kind??U$($,["source_kind"]),source_revision_id:_.source_revision_id,revision:_.revision??U$($,["revision"]),hash:_.hash??U$($,["hash"]),chunk_id:_.chunk_id,start_offset:_.start_offset??B3($,["start_offset"]),end_offset:_.end_offset??B3($,["end_offset"]),status:U$($,["status"]),resolver:"open-files-read-only"})}function F3(_,$,g){if(!$)return[];try{return G7(_,$,g)}catch{return[]}}function G7(_,$,g){return _.query(`SELECT chunks_fts.chunk_id, c.kind AS chunk_kind, c.wiki_page_id, @@ -786,49 +786,49 @@ VALUES (10, datetime('now')); LEFT JOIN wiki_pages wp ON wp.id = c.wiki_page_id WHERE chunks_fts MATCH ? ORDER BY rank ASC - LIMIT ?`).all($,D)}function KW(_,$){if($.length===0)return"1 = 0";return $.map(()=>`(${_.map((U)=>`lower(COALESCE(${U}, '')) LIKE ? ESCAPE '\\'`).join(" OR ")})`).join(" OR ")}function Oq(_,$,D){let U=["path","title","artifact_uri","metadata_json"];return _.query(`SELECT id, path, title, artifact_uri, content_hash, status, metadata_json + LIMIT ?`).all($,g)}function Z3(_,$){if($.length===0)return"1 = 0";return $.map(()=>`(${_.map((U)=>`lower(COALESCE(${U}, '')) LIKE ? ESCAPE '\\'`).join(" OR ")})`).join(" OR ")}function X7(_,$,g){let U=["path","title","artifact_uri","metadata_json"];return _.query(`SELECT id, path, title, artifact_uri, content_hash, status, metadata_json FROM wiki_pages - WHERE status = 'active' AND (${KW(U,$)}) + WHERE status = 'active' AND (${Z3(U,$)}) ORDER BY updated_at DESC - LIMIT ?`).all(...VW($,U.length),D)}function Aq(_,$,D){let U=["kind","name","shard_key","artifact_uri","metadata_json"];return _.query(`SELECT id, kind, name, artifact_uri, shard_key, metadata_json + LIMIT ?`).all(...M3($,U.length),g)}function Y7(_,$,g){let U=["kind","name","shard_key","artifact_uri","metadata_json"];return _.query(`SELECT id, kind, name, artifact_uri, shard_key, metadata_json FROM knowledge_indexes - WHERE ${KW(U,$)} + WHERE ${Z3(U,$)} ORDER BY updated_at DESC - LIMIT ?`).all(...VW($,U.length),D)}function FW(_){if(!_||!s7(_))return[];try{let $=JSON.parse(_q(_,"utf8"));if(!$||!Array.isArray($.items))return[];return $.items.filter((D)=>{return Boolean(D&&typeof D==="object"&&typeof D.id==="string"&&typeof D.title==="string"&&typeof D.content==="string")})}catch{return[]}}function Lq(_){return[_.id,_.short_id,_.title,_.content,_.url,..._.tags??[]].filter(($)=>typeof $==="string"&&$.length>0).join(" ").toLowerCase()}function MW(_,$,D){if($.length===0)return[];return _.filter((U)=>U.archived!==!0).map((U)=>({item:U,haystack:Lq(U)})).filter(({haystack:U})=>$.some((g)=>U.includes(g))).map(({item:U,haystack:g})=>({item:U,score:YE(g,$)})).sort((U,g)=>g.score-U.score||U.item.id.localeCompare(g.item.id)).slice(0,D)}function Jq(_,$,D){return MW(FW(_),$,D)}function Pq(_,$){let D=DI(_.chunk_metadata_json),U=Nq(_),g=I$(D,["source_ref"]),I=_.source_uri??I$(D,["source_uri"]),j=Boolean(_.wiki_page_id),N={kind:j?"wiki_chunk":"source_chunk",id:_.chunk_id,title:j?_.wiki_title:_.source_title,text:_.text,score:0,scores:{keyword:$},source:I||g?{uri:I,ref:g,kind:_.source_kind??I$(D,["source_kind"]),revision:_.revision??I$(D,["revision"]),hash:_.hash??I$(D,["hash"])}:null,citation:{chunk_id:_.chunk_id,start_offset:_.start_offset,end_offset:_.end_offset},artifact:j?{uri:_.wiki_artifact_uri,path:_.wiki_path,hash:_.wiki_content_hash,shard_key:_.wiki_path}:null,provenance:U,reasons:["keyword_match"]};return N.score=R0(N.scores,N.citation),N}function ZW(_,$){let D=`knowledge://item/${encodeURIComponent(_.id)}`,U={kind:"legacy_item",id:_.id,title:_.title,text:_.content,score:0,scores:{keyword:$},source:{uri:D,ref:D,kind:"legacy_item",revision:null,hash:null},citation:null,artifact:null,provenance:null,reasons:["legacy_note_match","keyword_match"]};return U.score=R0(U.scores,U.citation),U}function zq(_,$){let D=DI(_.metadata_json),U=YE(`${_.path} ${_.title} ${_.artifact_uri??""} ${_.metadata_json}`.toLowerCase(),$),g={kind:"wiki_page",id:_.id,title:_.title,text:null,score:0,scores:{catalog:U},source:null,citation:null,artifact:{uri:_.artifact_uri,path:_.path,hash:_.content_hash,shard_key:_.path},provenance:QE(D),reasons:["wiki_catalog_match"]};return g.score=R0(g.scores,g.citation),g}function Sq(_,$){let D=DI(_.metadata_json),U=YE(`${_.kind} ${_.name} ${_.shard_key??""} ${_.artifact_uri??""} ${_.metadata_json}`.toLowerCase(),$),g={kind:"knowledge_index",id:_.id,title:_.name,text:null,score:0,scores:{catalog:U},source:null,citation:null,artifact:{uri:_.artifact_uri,path:I$(D,["artifact_key"]),hash:I$(D,["content_hash"]),shard_key:_.shard_key},provenance:QE(D),reasons:["index_catalog_match"]};return g.score=R0(g.scores,g.citation),g}function X0(_,$){let D=`${$.kind}:${$.id}`,U=_.get(D);if(!U){_.set(D,$);return}U.scores={keyword:Math.max(U.scores.keyword??0,$.scores.keyword??0)||void 0,semantic:Math.max(U.scores.semantic??0,$.scores.semantic??0)||void 0,catalog:Math.max(U.scores.catalog??0,$.scores.catalog??0)||void 0},U.reasons=qW([...U.reasons,...$.reasons]),U.text=U.text??$.text,U.title=U.title??$.title,U.source=U.source??$.source,U.citation=U.citation??$.citation,U.artifact=U.artifact??$.artifact,U.provenance=U.provenance??$.provenance,U.score=R0(U.scores,U.citation)}function bW(_){let $={source_chunk:0,wiki_chunk:1,legacy_item:2,wiki_page:3,knowledge_index:4};return _.sort((D,U)=>{if(U.score!==D.score)return U.score-D.score;return $[D.kind]-$[U.kind]||D.id.localeCompare(U.id)})}async function UI(_){let $=_.query.trim();if(!$)throw Error("Search query is required.");let D=Math.max(1,Math.min(_.limit??10,100)),U=Math.max(0,Math.floor(_.offset??0)),g=U+D,I=BW($),j=gq($),N=_.semantic===!0||_.fake===!0||Boolean(_.modelRef),O=[],A=null,L=null,z=null,W=0,J=0,P=0,S=new Map;h(_.dbPath);let X=r(_.dbPath);try{let V=Math.max(g*3,20),Q=TW(X,j.and,V);if(Q.length===0&&j.or)Q=TW(X,j.or,V);W=Q.length,Q.forEach((Z,e)=>X0(S,Pq(Z,Iq(Z.rank,e))));let T=Oq(X,I,Math.max(g,10)),q=Aq(X,I,Math.max(g,10)),K=Jq(_.legacyStorePath,I,Math.max(g,10));J=T.length+q.length,W+=K.length,K.forEach(({item:Z,score:e})=>X0(S,ZW(Z,e))),T.forEach((Z)=>X0(S,zq(Z,I))),q.forEach((Z)=>X0(S,Sq(Z,I)))}finally{X.close()}if(N)try{let V=await $I({dbPath:_.dbPath,query:$,limit:Math.max(g*3,20),config:_.config,env:_.env,modelRef:_.modelRef,dimensions:_.dimensions,fake:_.fake,batchSize:_.batchSize,maxParallelCalls:_.maxParallelCalls});A=V.provider,L=V.model,z=V.dimensions,P=V.results.length;for(let Q of V.results){let T={kind:"source_chunk",id:Q.chunk_id,title:null,text:Q.text,score:0,scores:{semantic:jq(Q.score)},source:{uri:Q.source_uri,ref:Q.source_ref,kind:Q.provenance?.source_kind??null,revision:Q.revision,hash:Q.hash},citation:{chunk_id:Q.chunk_id,start_offset:Q.provenance?.start_offset??null,end_offset:Q.provenance?.end_offset??null},artifact:null,provenance:Q.provenance,reasons:["semantic_match"]};T.score=R0(T.scores,T.citation),X0(S,T)}}catch(V){O.push(`semantic_search_failed: ${V instanceof Error?V.message:String(V)}`)}let R=bW(Array.from(S.values())).slice(U,U+D);return{query:$,limit:D,offset:U,mode:{keyword:!0,catalog:!0,semantic:N},semantic_provider:A,semantic_model:L,semantic_dimensions:z,counts:{keyword_results:W,catalog_results:J,semantic_results:P,merged_results:R.length},warnings:O,results:R}}async function II(_){return j4(FW(_.legacyStorePath),_,["knowledge_db_missing"])}async function j4(_,$,D=[]){let U=$.query.trim();if(!U)throw Error("Search query is required.");let g=Math.max(1,Math.min($.limit??10,100)),I=Math.max(0,Math.floor($.offset??0)),j=BW(U),N=$.semantic===!0||$.fake===!0||Boolean($.modelRef),O=new Map,A=MW(_,j,Math.max(I+g,10));A.forEach(({item:W,score:J})=>X0(O,ZW(W,J)));let L=[...D];if(N)L.push("semantic_search_requires_local_catalog");let z=bW(Array.from(O.values())).slice(I,I+g);return{query:U,limit:g,offset:I,mode:{keyword:!0,catalog:!0,semantic:N},semantic_provider:null,semantic_model:null,semantic_dimensions:null,counts:{keyword_results:A.length,catalog_results:0,semantic_results:0,merged_results:z.length},warnings:L,results:z}}function HW(_,$){return`${_}_${Wq("sha256").update($).digest("hex").slice(0,20)}`}function kW(_){return _.normalize("NFKC").trim().replace(/\s+/g," ").toLowerCase()}function Xq(_){return Array.from(new Set(kW(_).match(/[\p{L}\p{N}_]+/gu)??[])).slice(0,16)}function Rq(_){return[_.title,_.text].filter(Boolean).join(" ").toLowerCase()}function Gq(_,$){if($.length===0)return 0;let D=Rq(_),U=$.filter((g)=>D.includes(g)).length;return Number((U/$.length).toFixed(6))}function Yq(_){if(!_)return!0;if("read_only"in _)return _.read_only===!0;if("read_only_sources"in _)return _.read_only_sources===!0;return!0}function CW(_){if(!_)return!1;if("stale"in _&&_.stale)return!0;if("status"in _)return NE(_.status);return!1}function Qq(_){if(CW(_.provenance))return 0;if(_.source?.hash||_.source?.revision)return 1;if(_.artifact?.hash)return 0.85;if(_.provenance&&"source_refs"in _.provenance&&_.provenance.source_refs.length>0)return 0.75;return 0.55}function Tq(_){if(_.citation?.chunk_id&&(_.source?.uri||_.artifact?.uri))return 1;if(_.provenance&&"citation_required"in _.provenance&&_.provenance.citation_required)return 0.75;if(_.artifact?.uri)return 0.65;return 0.35}function qq(_){if(_.kind==="wiki_chunk")return 0.85;if(_.kind==="source_chunk")return 0.8;if(_.kind==="legacy_item")return 0.6;if(_.kind==="wiki_page")return 0.65;return 0.55}function Bq(_,$){let D={base_score:_.score,exact_score:Gq(_,$),citation_score:Tq(_),freshness_score:Qq(_),authority_score:qq(_)},U=Math.min(1,D.base_score*0.65+D.exact_score*0.1+D.citation_score*0.1+D.freshness_score*0.1+D.authority_score*0.05),g=new Set(_.reasons);if(D.exact_score>0.5)g.add("exact_term");if(D.citation_score>=0.75)g.add("cited_source");if(D.freshness_score>=0.85)g.add("fresh_source");return{..._,score:Number(U.toFixed(6)),reasons:Array.from(g),rerank:{...D,final_score:Number(U.toFixed(6))}}}function vW(_,$){let D=_.text??_.title;if(!D)return null;let U=D.replace(/\s+/g," ").trim();return U.length<=$?U:`${U.slice(0,Math.max(0,$-1)).trim()}...`}function Vq(_){return{id:HW("cite",`${_.kind}\x00${_.id}\x00${_.source?.uri??""}\x00${_.artifact?.uri??""}`),result_id:_.id,kind:_.kind,source_uri:_.source?.uri??null,source_ref:_.source?.ref??null,artifact_uri:_.artifact?.uri??null,artifact_path:_.artifact?.path??null,revision:_.source?.revision??null,hash:_.source?.hash??_.artifact?.hash??null,chunk_id:_.citation?.chunk_id??null,start_offset:_.citation?.start_offset??null,end_offset:_.citation?.end_offset??null,quote:vW(_,500),provenance:_.provenance}}function Kq(_,$,D){let U=vW(_,D);if(!U)return null;return{id:HW("excerpt",`${_.kind}\x00${_.id}`),result_id:_.id,citation_id:$.id,kind:_.kind,text:U,score:_.score}}function jI(_){return _.map(()=>"?").join(", ")}function Fq(_,$){let D=$.map((N)=>N.citation?.chunk_id).filter((N)=>Boolean(N)),U=$.filter((N)=>N.kind==="wiki_page").map((N)=>N.id),g=[],I=[];if(D.length===0&&U.length===0)return{citations:g,backlinks:I};let j=r(_);try{if(D.length>0)g.push(...j.query(`SELECT id, wiki_page_id, chunk_id, source_uri, quote, start_offset, end_offset + LIMIT ?`).all(...M3($,U.length),g)}function H3(_){if(!_||!A7(_))return[];try{let $=JSON.parse(O7(_,"utf8"));if(!$||!Array.isArray($.items))return[];return $.items.filter((g)=>{return Boolean(g&&typeof g==="object"&&typeof g.id==="string"&&typeof g.title==="string"&&typeof g.content==="string")})}catch{return[]}}function Q7(_){return[_.id,_.short_id,_.title,_.content,_.url,..._.tags??[]].filter(($)=>typeof $==="string"&&$.length>0).join(" ").toLowerCase()}function k3(_,$,g){if($.length===0)return[];return _.filter((U)=>U.archived!==!0).map((U)=>({item:U,haystack:Q7(U)})).filter(({haystack:U})=>$.some((D)=>U.includes(D))).map(({item:U,haystack:D})=>({item:U,score:TN(D,$)})).sort((U,D)=>D.score-U.score||U.item.id.localeCompare(D.item.id)).slice(0,g)}function T7(_,$,g){return k3(H3(_),$,g)}function K7(_,$){let g=gI(_.chunk_metadata_json),U=R7(_),D=U$(g,["source_ref"]),I=_.source_uri??U$(g,["source_uri"]),j=Boolean(_.wiki_page_id),E={kind:j?"wiki_chunk":"source_chunk",id:_.chunk_id,title:j?_.wiki_title:_.source_title,text:_.text,score:0,scores:{keyword:$},source:I||D?{uri:I,ref:D,kind:_.source_kind??U$(g,["source_kind"]),revision:_.revision??U$(g,["revision"]),hash:_.hash??U$(g,["hash"])}:null,citation:{chunk_id:_.chunk_id,start_offset:_.start_offset,end_offset:_.end_offset},artifact:j?{uri:_.wiki_artifact_uri,path:_.wiki_path,hash:_.wiki_content_hash,shard_key:_.wiki_path}:null,provenance:U,reasons:["keyword_match"]};return E.score=G4(E.scores,E.citation),E}function qN(_,$){let g=`knowledge://item/${encodeURIComponent(_.id)}`,U={kind:"legacy_item",id:_.id,title:_.title,text:_.content,score:0,scores:{keyword:$},source:{uri:g,ref:g,kind:"legacy_item",revision:null,hash:null},citation:null,artifact:null,provenance:null,reasons:["legacy_note_match","keyword_match"]};return U.score=G4(U.scores,U.citation),U}function q7(_,$){let g=gI(_.metadata_json),U=TN(`${_.path} ${_.title} ${_.artifact_uri??""} ${_.metadata_json}`.toLowerCase(),$),D={kind:"wiki_page",id:_.id,title:_.title,text:null,score:0,scores:{catalog:U},source:null,citation:null,artifact:{uri:_.artifact_uri,path:_.path,hash:_.content_hash,shard_key:_.path},provenance:KN(g),reasons:["wiki_catalog_match"]};return D.score=G4(D.scores,D.citation),D}function B7(_,$){let g=gI(_.metadata_json),U=TN(`${_.kind} ${_.name} ${_.shard_key??""} ${_.artifact_uri??""} ${_.metadata_json}`.toLowerCase(),$),D={kind:"knowledge_index",id:_.id,title:_.name,text:null,score:0,scores:{catalog:U},source:null,citation:null,artifact:{uri:_.artifact_uri,path:U$(g,["artifact_key"]),hash:U$(g,["content_hash"]),shard_key:_.shard_key},provenance:KN(g),reasons:["index_catalog_match"]};return D.score=G4(D.scores,D.citation),D}function R4(_,$){let g=`${$.kind}:${$.id}`,U=_.get(g);if(!U){_.set(g,$);return}U.scores={keyword:Math.max(U.scores.keyword??0,$.scores.keyword??0)||void 0,semantic:Math.max(U.scores.semantic??0,$.scores.semantic??0)||void 0,catalog:Math.max(U.scores.catalog??0,$.scores.catalog??0)||void 0},U.reasons=r3([...U.reasons,...$.reasons]),U.text=U.text??$.text,U.title=U.title??$.title,U.source=U.source??$.source,U.citation=U.citation??$.citation,U.artifact=U.artifact??$.artifact,U.provenance=U.provenance??$.provenance,U.score=G4(U.scores,U.citation)}function C3(_){let $={source_chunk:0,wiki_chunk:1,legacy_item:2,wiki_page:3,knowledge_index:4};return _.sort((g,U)=>{if(U.score!==g.score)return U.score-g.score;return $[g.kind]-$[U.kind]||g.id.localeCompare(U.id)})}async function UI(_){let $=_.query.trim();if(!$)throw Error("Search query is required.");let g=Math.max(1,Math.min(_.limit??10,100)),U=Math.max(0,Math.floor(_.offset??0)),D=U+g,I=b3($),j=L7($),E=_.semantic===!0||_.fake===!0||Boolean(_.modelRef),A=[],O=null,P=null,W=null,z=0,S=0,L=0,J=new Map;c(_.dbPath);let R=v(_.dbPath);try{let B=Math.max(D*3,20),Q=F3(R,j.and,B);if(Q.length===0&&j.or)Q=F3(R,j.or,B);z=Q.length,Q.forEach((F,o)=>R4(J,K7(F,J7(F.rank,o))));let T=X7(R,I,Math.max(D,10)),K=Y7(R,I,Math.max(D,10)),V=T7(_.legacyStorePath,I,Math.max(D,10));S=T.length+K.length,z+=V.length,V.forEach(({item:F,score:o})=>R4(J,qN(F,o))),T.forEach((F)=>R4(J,q7(F,I))),K.forEach((F)=>R4(J,B7(F,I)))}finally{R.close()}if(E)try{let B=await $I({dbPath:_.dbPath,query:$,limit:Math.max(D*3,20),config:_.config,env:_.env,modelRef:_.modelRef,dimensions:_.dimensions,fake:_.fake,batchSize:_.batchSize,maxParallelCalls:_.maxParallelCalls});O=B.provider,P=B.model,W=B.dimensions,L=B.results.length;for(let Q of B.results){let T={kind:"source_chunk",id:Q.chunk_id,title:null,text:Q.text,score:0,scores:{semantic:z7(Q.score)},source:{uri:Q.source_uri,ref:Q.source_ref,kind:Q.provenance?.source_kind??null,revision:Q.revision,hash:Q.hash},citation:{chunk_id:Q.chunk_id,start_offset:Q.provenance?.start_offset??null,end_offset:Q.provenance?.end_offset??null},artifact:null,provenance:Q.provenance,reasons:["semantic_match"]};T.score=G4(T.scores,T.citation),R4(J,T)}}catch(B){A.push(`semantic_search_failed: ${B instanceof Error?B.message:String(B)}`)}let G=C3(Array.from(J.values())).slice(U,U+g);return{query:$,limit:g,offset:U,mode:{keyword:!0,catalog:!0,semantic:E},semantic_provider:O,semantic_model:P,semantic_dimensions:W,counts:{keyword_results:z,catalog_results:S,semantic_results:L,merged_results:G.length},warnings:A,results:G}}async function II(_){return BN(H3(_.legacyStorePath),_,["knowledge_db_missing"])}async function BN(_,$,g=[]){let U=$.query.trim();if(!U)throw Error("Search query is required.");let D=Math.max(1,Math.min($.limit??10,100)),I=Math.max(0,Math.floor($.offset??0)),j=b3(U),E=$.semantic===!0||$.fake===!0||Boolean($.modelRef),A=new Map,O=k3(_,j,Math.max(I+D,10));O.forEach(({item:z,score:S})=>R4(A,qN(z,S)));let P=[...g];if(E)P.push("semantic_search_requires_local_catalog");let W=C3(Array.from(A.values())).slice(I,I+D);return{query:U,limit:D,offset:I,mode:{keyword:!0,catalog:!0,semantic:E},semantic_provider:null,semantic_model:null,semantic_dimensions:null,counts:{keyword_results:O.length,catalog_results:0,semantic_results:0,merged_results:W.length},warnings:P,results:W}}function VN(_,$,g=[],U=_.length){let D=$.query.trim();if(!D)throw Error("Search query is required.");let I=Math.max(1,Math.min($.limit??10,100)),j=Math.max(0,Math.floor($.offset??0)),E=_.map(({item:A,rank:O})=>qN(A,O));return{query:D,limit:I,offset:j,mode:{keyword:!0,catalog:!0,semantic:$.semantic===!0},semantic_provider:null,semantic_model:null,semantic_dimensions:null,counts:{keyword_results:U,catalog_results:0,semantic_results:0,merged_results:E.length},warnings:g,results:E}}function v3(_,$){return`${_}_${V7("sha256").update($).digest("hex").slice(0,20)}`}function w3(_){return _.normalize("NFKC").trim().replace(/\s+/g," ").toLowerCase()}function F7(_){return Array.from(new Set(w3(_).match(/[\p{L}\p{N}_]+/gu)??[])).slice(0,16)}function r7(_){return[_.title,_.text].filter(Boolean).join(" ").toLowerCase()}function b7(_,$){if($.length===0)return 0;let g=r7(_),U=$.filter((D)=>g.includes(D)).length;return Number((U/$.length).toFixed(6))}function M7(_){if(!_)return!0;if("read_only"in _)return _.read_only===!0;if("read_only_sources"in _)return _.read_only_sources===!0;return!0}function u3(_){if(!_)return!1;if("stale"in _&&_.stale)return!0;if("status"in _)return AN(_.status);return!1}function Z7(_){if(u3(_.provenance))return 0;if(_.source?.hash||_.source?.revision)return 1;if(_.artifact?.hash)return 0.85;if(_.provenance&&"source_refs"in _.provenance&&_.provenance.source_refs.length>0)return 0.75;return 0.55}function H7(_){if(_.citation?.chunk_id&&(_.source?.uri||_.artifact?.uri))return 1;if(_.provenance&&"citation_required"in _.provenance&&_.provenance.citation_required)return 0.75;if(_.artifact?.uri)return 0.65;return 0.35}function k7(_){if(_.kind==="wiki_chunk")return 0.85;if(_.kind==="source_chunk")return 0.8;if(_.kind==="legacy_item")return 0.6;if(_.kind==="wiki_page")return 0.65;return 0.55}function C7(_,$){let g={base_score:_.score,exact_score:b7(_,$),citation_score:H7(_),freshness_score:Z7(_),authority_score:k7(_)},U=Math.min(1,g.base_score*0.65+g.exact_score*0.1+g.citation_score*0.1+g.freshness_score*0.1+g.authority_score*0.05),D=new Set(_.reasons);if(g.exact_score>0.5)D.add("exact_term");if(g.citation_score>=0.75)D.add("cited_source");if(g.freshness_score>=0.85)D.add("fresh_source");return{..._,score:Number(U.toFixed(6)),reasons:Array.from(D),rerank:{...g,final_score:Number(U.toFixed(6))}}}function f3(_,$){let g=_.text??_.title;if(!g)return null;let U=g.replace(/\s+/g," ").trim();return U.length<=$?U:`${U.slice(0,Math.max(0,$-1)).trim()}...`}function v7(_){return{id:v3("cite",`${_.kind}\x00${_.id}\x00${_.source?.uri??""}\x00${_.artifact?.uri??""}`),result_id:_.id,kind:_.kind,source_uri:_.source?.uri??null,source_ref:_.source?.ref??null,artifact_uri:_.artifact?.uri??null,artifact_path:_.artifact?.path??null,revision:_.source?.revision??null,hash:_.source?.hash??_.artifact?.hash??null,chunk_id:_.citation?.chunk_id??null,start_offset:_.citation?.start_offset??null,end_offset:_.citation?.end_offset??null,quote:f3(_,500),provenance:_.provenance}}function w7(_,$,g){let U=f3(_,g);if(!U)return null;return{id:v3("excerpt",`${_.kind}\x00${_.id}`),result_id:_.id,citation_id:$.id,kind:_.kind,text:U,score:_.score}}function jI(_){return _.map(()=>"?").join(", ")}function u7(_,$){let g=$.map((E)=>E.citation?.chunk_id).filter((E)=>Boolean(E)),U=$.filter((E)=>E.kind==="wiki_page").map((E)=>E.id),D=[],I=[];if(g.length===0&&U.length===0)return{citations:D,backlinks:I};let j=v(_);try{if(g.length>0)D.push(...j.query(`SELECT id, wiki_page_id, chunk_id, source_uri, quote, start_offset, end_offset FROM citations - WHERE chunk_id IN (${jI(D)}) + WHERE chunk_id IN (${jI(g)}) ORDER BY created_at DESC - LIMIT 50`).all(...D));if(U.length>0)g.push(...j.query(`SELECT id, wiki_page_id, chunk_id, source_uri, quote, start_offset, end_offset + LIMIT 50`).all(...g));if(U.length>0)D.push(...j.query(`SELECT id, wiki_page_id, chunk_id, source_uri, quote, start_offset, end_offset FROM citations WHERE wiki_page_id IN (${jI(U)}) ORDER BY created_at DESC LIMIT 50`).all(...U)),I.push(...j.query(`SELECT from_page_id, to_page_id, label FROM wiki_backlinks WHERE from_page_id IN (${jI(U)}) OR to_page_id IN (${jI(U)}) - LIMIT 50`).all(...U,...U))}finally{j.close()}return{citations:g,backlinks:I}}function G0(_,$={}){let D=Math.max(200,Math.min($.contextChars??1200,4000)),U=Xq(_.query),g=[..._.warnings],I=new Set,j=new Set,O=_.results.filter((z)=>{if(!Yq(z.provenance))return g.push(`permission_filtered: ${z.kind}:${z.id}`),I.add("Dropped a result because provenance was not read-only."),!1;if(CW(z.provenance))return g.push(`stale_filtered: ${z.kind}:${z.id}`),j.add("Dropped a stale result whose source status requires reindexing."),!1;return!0}).map((z)=>Bq(z,U)).sort((z,W)=>W.score-z.score||z.id.localeCompare(W.id)).slice(0,_.limit),A=O.map(Vq),L=O.map((z,W)=>Kq(z,A[W],D)).filter((z)=>Boolean(z));for(let z of O){if(z.provenance&&"read_only"in z.provenance&&z.provenance.read_only)I.add("All source-backed excerpts are read-only and citation-required.");if(z.rerank.freshness_score>=0.85)j.add("Fresh source revision/hash or artifact hash is present for top context.")}return{query:_.query,normalized_query:kW(_.query),created_at:new Date().toISOString(),mode:_.mode,warnings:g,search_counts:_.counts,results:O,citations:A,excerpts:L,graph:$.dbPath?Fq($.dbPath,O):{citations:[],backlinks:[]},notes:{permissions:Array.from(I),freshness:Array.from(j)}}}async function Y0(_){let $=await UI(_);return G0($,{dbPath:_.dbPath,contextChars:_.contextChars})}async function NI(_,$){let D=await j4(_,$);return G0(D,{contextChars:$.contextChars})}function Q0(_){let $=_.trim().split(/\s+/).filter(Boolean).length;return Math.max(1,Math.ceil($*1.25))}function qE(_){return`C${_+1}`}function fW(_,$){if($.excerpts.length===0)return`No indexed knowledge matched the prompt: ${_}`;return[`Found ${$.excerpts.length} relevant knowledge excerpt(s) for: ${_}`,"",...$.excerpts.slice(0,5).map((U,g)=>{let I=$.citations.find((N)=>N.id===U.citation_id),j=I?.source_ref??I?.source_uri??I?.artifact_path??I?.artifact_uri??"unknown source";return`[${qE(g)}] ${U.text} (${j})`})].join(` -`)}function wW(_,$){let D=$.citations.map((g,I)=>({id:qE(I),source_ref:g.source_ref,source_uri:g.source_uri,artifact_path:g.artifact_path,revision:g.revision,hash:g.hash,quote:g.quote})),U=$.excerpts.map((g,I)=>({id:qE(I),kind:g.kind,text:g.text,score:g.score}));return[`Prompt: ${_}`,"","Use only the provided context. Cite claims with citation ids like [C1]. If context is insufficient, say what is missing.","",`Context excerpts: + LIMIT 50`).all(...U,...U))}finally{j.close()}return{citations:D,backlinks:I}}function D6(_,$={}){let g=Math.max(200,Math.min($.contextChars??1200,4000)),U=F7(_.query),D=[..._.warnings],I=new Set,j=new Set,A=_.results.filter((W)=>{if(!M7(W.provenance))return D.push(`permission_filtered: ${W.kind}:${W.id}`),I.add("Dropped a result because provenance was not read-only."),!1;if(u3(W.provenance))return D.push(`stale_filtered: ${W.kind}:${W.id}`),j.add("Dropped a stale result whose source status requires reindexing."),!1;return!0}).map((W)=>C7(W,U)).sort((W,z)=>z.score-W.score||W.id.localeCompare(z.id)).slice(0,_.limit),O=A.map(v7),P=A.map((W,z)=>w7(W,O[z],g)).filter((W)=>Boolean(W));for(let W of A){if(W.provenance&&"read_only"in W.provenance&&W.provenance.read_only)I.add("All source-backed excerpts are read-only and citation-required.");if(W.rerank.freshness_score>=0.85)j.add("Fresh source revision/hash or artifact hash is present for top context.")}return{query:_.query,normalized_query:w3(_.query),created_at:new Date().toISOString(),mode:_.mode,warnings:D,search_counts:_.counts,results:A,citations:O,excerpts:P,graph:$.dbPath?u7($.dbPath,A):{citations:[],backlinks:[]},notes:{permissions:Array.from(I),freshness:Array.from(j)}}}async function X4(_){let $=await UI(_);return D6($,{dbPath:_.dbPath,contextChars:_.contextChars})}async function x3(_,$){let g=await BN(_,$);return D6(g,{contextChars:$.contextChars})}function Y4(_){let $=_.trim().split(/\s+/).filter(Boolean).length;return Math.max(1,Math.ceil($*1.25))}function rN(_){return`C${_+1}`}function c3(_,$){if($.excerpts.length===0)return`No indexed knowledge matched the prompt: ${_}`;return[`Found ${$.excerpts.length} relevant knowledge excerpt(s) for: ${_}`,"",...$.excerpts.slice(0,5).map((U,D)=>{let I=$.citations.find((E)=>E.id===U.citation_id),j=I?.source_ref??I?.source_uri??I?.artifact_path??I?.artifact_uri??"unknown source";return`[${rN(D)}] ${U.text} (${j})`})].join(` +`)}function h3(_,$){let g=$.citations.map((D,I)=>({id:rN(I),source_ref:D.source_ref,source_uri:D.source_uri,artifact_path:D.artifact_path,revision:D.revision,hash:D.hash,quote:D.quote})),U=$.excerpts.map((D,I)=>({id:rN(I),kind:D.kind,text:D.text,score:D.score}));return[`Prompt: ${_}`,"","Use only the provided context. Cite claims with citation ids like [C1]. If context is insufficient, say what is missing.","",`Context excerpts: ${JSON.stringify(U,null,2)}`,"",`Citations: -${JSON.stringify(D,null,2)}`].join(` -`)}function uW(_,$){if($.citations.length===0)return[];return[{kind:"answer_note",title:_.length>80?`${_.slice(0,77)}...`:_,citations:$.citations.map((D)=>D.id),requires_approval:!0}]}function Mq(_,$){let D=r(_);try{D.run(`INSERT INTO runs (id, type, prompt, status, provider, model, metadata_json, created_at, updated_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.runId,"knowledge-prompt",$.prompt,$.status,$.provider,$.model,JSON.stringify($.metadata),$.now,$.now])}finally{D.close()}}function TE(_,$){let D=r(_);try{D.run(`INSERT INTO run_events (id, run_id, level, event, metadata_json, created_at) - VALUES (?, ?, ?, ?, ?, ?)`,[`evt_${BE()}`,$.runId,$.level,$.event,JSON.stringify($.metadata),$.now])}finally{D.close()}}function rW(_,$){let D=r(_);try{D.run(`UPDATE runs +${JSON.stringify(g,null,2)}`].join(` +`)}function n3(_,$){if($.citations.length===0)return[];return[{kind:"answer_note",title:_.length>80?`${_.slice(0,77)}...`:_,citations:$.citations.map((g)=>g.id),requires_approval:!0}]}function f7(_,$){let g=v(_);try{g.run(`INSERT INTO runs (id, type, prompt, status, provider, model, metadata_json, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.runId,"knowledge-prompt",$.prompt,$.status,$.provider,$.model,JSON.stringify($.metadata),$.now,$.now])}finally{g.close()}}function FN(_,$){let g=v(_);try{g.run(`INSERT INTO run_events (id, run_id, level, event, metadata_json, created_at) + VALUES (?, ?, ?, ?, ?, ?)`,[`evt_${bN()}`,$.runId,$.level,$.event,JSON.stringify($.metadata),$.now])}finally{g.close()}}function y3(_,$){let g=v(_);try{g.run(`UPDATE runs SET status = ?, provider = ?, model = ?, metadata_json = ?, updated_at = ? - WHERE id = ?`,[$.status,$.provider,$.model,JSON.stringify($.metadata),$.now,$.runId])}finally{D.close()}}function Zq(_,$,D,U,g,I,j={}){let N=r(_);try{W0(N,{run_id:$,provider:U,model:g,input_tokens:D.input_tokens,output_tokens:D.output_tokens,cost_usd:D.cost_usd,metadata:j,created_at:I})}finally{N.close()}}async function xW(_){let $=_.prompt.trim();if(!$)throw Error("Knowledge prompt is required.");let D=(_.now??new Date).toISOString(),U=`run_${BE()}`,g=G$(_.modelRef??"default",_.config),I=f_(g);h(_.dbPath),Mq(_.dbPath,{runId:U,prompt:$,status:_.generate?"running":"dry_run",provider:_.generate?I.provider:"local",model:_.generate?I.model:"context-draft",metadata:{semantic:_.semantic===!0||_.fake===!0||Boolean(_.modelRef),approve_write:_.approveWrite===!0,generated:_.generate===!0},now:D});let{prompt:j,generate:N,approveWrite:O,now:A,...L}=_,z=await Y0({...L,query:$});TE(_.dbPath,{runId:U,level:"info",event:"context_retrieved",metadata:{results:z.results.length,citations:z.citations.length,warnings:z.warnings},now:D});let W=fW($,z),J=!1,P="local",S="context-draft",X={input_tokens:Q0($)+z.excerpts.reduce((Q,T)=>Q+Q0(T.text),0),output_tokens:Q0(W),cost_usd:0},G=[...z.warnings];if(_.generate)try{if(_.fake)J=!0,P=I.provider,S=I.model,W=`Fake generated answer for: ${$} + WHERE id = ?`,[$.status,$.provider,$.model,JSON.stringify($.metadata),$.now,$.runId])}finally{g.close()}}function x7(_,$,g,U,D,I,j={}){let E=v(_);try{z4(E,{run_id:$,provider:U,model:D,input_tokens:g.input_tokens,output_tokens:g.output_tokens,cost_usd:g.cost_usd,metadata:j,created_at:I})}finally{E.close()}}async function d3(_){let $=_.prompt.trim();if(!$)throw Error("Knowledge prompt is required.");let g=(_.now??new Date).toISOString(),U=`run_${bN()}`,D=G$(_.modelRef??"default",_.config),I=C_(D);c(_.dbPath),f7(_.dbPath,{runId:U,prompt:$,status:_.generate?"running":"dry_run",provider:_.generate?I.provider:"local",model:_.generate?I.model:"context-draft",metadata:{semantic:_.semantic===!0||_.fake===!0||Boolean(_.modelRef),approve_write:_.approveWrite===!0,generated:_.generate===!0},now:g});let{prompt:j,generate:E,approveWrite:A,now:O,...P}=_,W=await X4({...P,query:$});FN(_.dbPath,{runId:U,level:"info",event:"context_retrieved",metadata:{results:W.results.length,citations:W.citations.length,warnings:W.warnings},now:g});let z=c3($,W),S=!1,L="local",J="context-draft",R={input_tokens:Y4($)+W.excerpts.reduce((Q,T)=>Q+Y4(T.text),0),output_tokens:Y4(z),cost_usd:0},X=[...W.warnings];if(_.generate)try{if(_.fake)S=!0,L=I.provider,J=I.model,z=`Fake generated answer for: ${$} -${W}`;else{let{generateText:Q}=await import("ai"),T=await yD(g,{config:_.config,env:_.env}),q=await Q({model:T,system:"You answer company knowledge-base prompts using only provided context and citation ids.",prompt:wW($,z)});J=!0,P=I.provider,S=I.model,W=q.text;let K=U4({provider:P,model:S,usage:q.usage,providerMetadata:q.providerMetadata});X={input_tokens:K.input_tokens,output_tokens:K.output_tokens,cost_usd:K.cost_usd}}}catch(Q){throw TE(_.dbPath,{runId:U,level:"error",event:"answer_generation_failed",metadata:{message:Q instanceof Error?Q.message:String(Q)},now:D}),rW(_.dbPath,{runId:U,status:"failed",provider:I.provider,model:I.model,metadata:{generated:!1,error:Q instanceof Error?Q.message:String(Q)},now:D}),Q}let R=uW($,z),V={approved:_.approveWrite===!0,durable_writes_performed:!1,reason:_.approveWrite?"Approval flag recorded; durable wiki writing is deferred to the wiki compile task.":"Dry-run mode: proposed wiki updates require approval before durable writes."};return TE(_.dbPath,{runId:U,level:"info",event:J?"answer_generated":"answer_drafted",metadata:{provider:P,model:S,proposed_updates:R.length,durable_writes_performed:!1},now:D}),Zq(_.dbPath,U,X,P,S,D,{generated:J,citations:z.citations.length}),rW(_.dbPath,{runId:U,status:J?"completed":"dry_run",provider:P,model:S,metadata:{generated:J,citations:z.citations.length,proposed_updates:R.length,approve_write:_.approveWrite===!0},now:D}),{run_id:U,prompt:$,generated:J,provider:P,model:S,answer:W,context:z,citations:z.citations,proposed_wiki_updates:R,write_policy:V,usage:X,warnings:G}}async function yW(_,$){let D=$.prompt.trim();if(!D)throw Error("Knowledge prompt is required.");let U=`run_${BE()}`,g=G$($.modelRef??"default",$.config),I=f_(g),{prompt:j,generate:N,approveWrite:O,now:A,...L}=$,z=await NI(_,{...L,query:D}),W=fW(D,z),J=!1,P="local",S="context-draft",X={input_tokens:Q0(D)+z.excerpts.reduce((Q,T)=>Q+Q0(T.text),0),output_tokens:Q0(W),cost_usd:0},G=[...z.warnings];if($.generate)if($.fake)J=!0,P=I.provider,S=I.model,W=`Fake generated answer for: ${D} +${z}`;else{let{generateText:Q}=await import("ai"),T=await x0(D,{config:_.config,env:_.env}),K=await Q({model:T,system:"You answer company knowledge-base prompts using only provided context and citation ids.",prompt:h3($,W)});S=!0,L=I.provider,J=I.model,z=K.text;let V=jg({provider:L,model:J,usage:K.usage,providerMetadata:K.providerMetadata});R={input_tokens:V.input_tokens,output_tokens:V.output_tokens,cost_usd:V.cost_usd}}}catch(Q){throw FN(_.dbPath,{runId:U,level:"error",event:"answer_generation_failed",metadata:{message:Q instanceof Error?Q.message:String(Q)},now:g}),y3(_.dbPath,{runId:U,status:"failed",provider:I.provider,model:I.model,metadata:{generated:!1,error:Q instanceof Error?Q.message:String(Q)},now:g}),Q}let G=n3($,W),B={approved:_.approveWrite===!0,durable_writes_performed:!1,reason:_.approveWrite?"Approval flag recorded; durable wiki writing is deferred to the wiki compile task.":"Dry-run mode: proposed wiki updates require approval before durable writes."};return FN(_.dbPath,{runId:U,level:"info",event:S?"answer_generated":"answer_drafted",metadata:{provider:L,model:J,proposed_updates:G.length,durable_writes_performed:!1},now:g}),x7(_.dbPath,U,R,L,J,g,{generated:S,citations:W.citations.length}),y3(_.dbPath,{runId:U,status:S?"completed":"dry_run",provider:L,model:J,metadata:{generated:S,citations:W.citations.length,proposed_updates:G.length,approve_write:_.approveWrite===!0},now:g}),{run_id:U,prompt:$,generated:S,provider:L,model:J,answer:z,context:W,citations:W.citations,proposed_wiki_updates:G,write_policy:B,usage:R,warnings:X}}async function m3(_,$,g){let U=$.prompt.trim();if(!U)throw Error("Knowledge prompt is required.");let D=`run_${bN()}`,I=G$($.modelRef??"default",$.config),j=C_(I),{prompt:E,generate:A,approveWrite:O,now:P,...W}=$,z=g?D6(g,{contextChars:$.contextChars}):await x3(_,{...W,query:U}),S=c3(U,z),L=!1,J="local",R="context-draft",X={input_tokens:Y4(U)+z.excerpts.reduce((T,K)=>T+Y4(K.text),0),output_tokens:Y4(S),cost_usd:0},G=[...z.warnings];if($.generate)if($.fake)L=!0,J=j.provider,R=j.model,S=`Fake generated answer for: ${U} -${W}`;else{let{generateText:Q}=await import("ai"),T=await yD(g,{config:$.config,env:$.env}),q=await Q({model:T,system:"You answer company knowledge-base prompts using only provided context and citation ids.",prompt:wW(D,z)});J=!0,P=I.provider,S=I.model,W=q.text;let K=U4({provider:P,model:S,usage:q.usage,providerMetadata:q.providerMetadata});X={input_tokens:K.input_tokens,output_tokens:K.output_tokens,cost_usd:K.cost_usd}}let R=uW(D,z),V={approved:$.approveWrite===!0,durable_writes_performed:!1,reason:$.approveWrite?"Approval flag recorded; durable wiki writes require the local catalog (wiki compile) and are not available in cloud mode.":"Dry-run mode: proposed wiki updates require approval before durable writes."};return{run_id:U,prompt:D,generated:J,provider:P,model:S,answer:W,context:z,citations:z.citations,proposed_wiki_updates:R,write_policy:V,usage:X,warnings:G}}import{createHash as bq}from"crypto";var Hq=1200,kq=6,Cq=12000,vq=50,hW=800;function q0(_,$,D=16){return`${_}_${bq("sha256").update($).digest("hex").slice(0,D)}`}function KE(_){return _.normalize("NFKC").trim().replace(/\s+/g," ")}function FE(_){return KE(_).toLowerCase()}function rq(_){return Array.from(new Set(FE(_).match(/[\p{L}\p{N}_]+/gu)??[])).slice(0,24)}function D6(_,$){let D=KE(_);if(D.length<=$)return D;let U="...";if($<=U.length)return D.slice(0,Math.max(0,$));return`${D.slice(0,$-U.length).trim()}${U}`}function cW(_){if(!_)return{};try{let $=JSON.parse(_);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch{return{}}}function ME(_){return/(?:api[_-]?key|secret|token|password|private[_-]?key|credential)/i.test(_)}function VE(_){return Object.keys(_).filter(($)=>!ME($)).sort().slice(0,12)}function fq(_,$){for(let D of $){if(ME(D))continue;let U=_[D];if(typeof U==="string"&&U.trim())return U.trim()}return null}function hD(_,$){if(!_)return null;let D=u_(_,$).text;try{let U=new URL(D),g=["token","access_token","api_key","apikey","key","secret","password","signature","sig"];for(let I of g)U.searchParams.delete(I);for(let[I]of U.searchParams)if(ME(I))U.searchParams.delete(I);return U.toString()}catch{return D}}function w$(_,$,D){return hD(fq(_,$),D)}function EI(_){let $=[];for(let D of VE(_).slice(0,6)){let U=_[D];if(typeof U==="string"&&U.trim())$.push(`${D}=${D6(U,80)}`);else if(typeof U==="number"||typeof U==="boolean")$.push(`${D}=${String(U)}`);else if(U&&typeof U==="object")$.push(`${D}={...}`)}return $.join("; ")}function wq(_){if(!_.trim())return 0;return Math.max(1,Math.ceil(_.length/4))}function nW(_){return wq(JSON.stringify(_))}function uq(_){if(!Number.isFinite(_??NaN))return Hq;let $=Math.floor(_);if($D.includes(g)).length;return Number((U/$.length).toFixed(6))}function yq(_){return["This pack is read-only and performs no durable writes.","Use citation ids and refs instead of pasting raw artifacts into prompts.","Resolve source or artifact refs explicitly only when raw content is needed and allowed.","Run generated knowledge writes through approval-gated commands before applying.",_==="loops"||_==="runs"?"Run evidence is summarized from knowledge run ledgers; raw run artifacts remain referenced, not embedded.":"Search evidence is derived from indexed chunks/wiki catalog rows with citation metadata."]}function hq(_,$,D){let U=hD($.source_ref,D),g=hD($.source_uri,D),I=hD($.artifact_uri,D),j=hD($.artifact_path,D),N=U??g??j??I??$.id,O=$.quote?T0($.quote,D,_<3?220:140):null;return{citation:{id:q0("cite",`${$.id}\x00${N}`,12),kind:$.artifact_uri||$.artifact_path?"artifact":"source",ref:N,source_ref:U,source_uri:g,artifact_uri:I,artifact_path:j,run_id:null,run_event_id:null,revision:$.revision??null,hash:$.hash??null,chunk_id:$.chunk_id??null,offsets:{start:$.start_offset??null,end:$.end_offset??null},quote_preview:O?.text??null},redactions:O?.redactions??0}}async function cq(_,$){let D=(_.query??_.topic??"").trim();if(!D)throw Error("Context pack query is required for search source.");let{config:U,dbPath:g,limit:I,semantic:j,modelRef:N,dimensions:O,fake:A,env:L,batchSize:z,maxParallelCalls:W,legacyStorePath:J}=_,P=await Y0({dbPath:g,config:U,legacyStorePath:J,query:D,limit:Math.max($,I??$),semantic:j,modelRef:N,dimensions:O,fake:A,env:L,batchSize:z,maxParallelCalls:W,contextChars:Math.min(_.contextChars??700,1200)}),S=new Map,X=0;P.citations.forEach((Q,T)=>{let q=hq(T,Q,_.safetyPolicy);X+=q.redactions,S.set(Q.id,q.citation)});let G=P.excerpts.slice(0,Math.max($*2,$)).map((Q)=>{let T=P.results.find((e)=>e.id===Q.result_id),q=Q.citation_id?S.get(Q.citation_id):null,K=T0(Q.text,_.safetyPolicy,520);X+=K.redactions;let Z=T?.title??q?.ref??Q.kind;return{id:q0("ev",`${Q.kind}\x00${Q.result_id}\x00${Q.citation_id??""}`,14),kind:Q.kind,title:D6(Z,100),text_preview:K.text,score:Number(Q.score.toFixed(6)),citation_ids:q?[q.id]:[],provenance:{source:"search",record_ref:`${Q.kind}:${Q.result_id}`,created_at:P.created_at,updated_at:null,metadata_keys:[]}}}),R=new Set(G.flatMap((Q)=>Q.citation_ids));return{citations:Array.from(S.values()).filter((Q)=>R.has(Q.id)),evidence:G,duplicateCandidates:[],redactions:X,warnings:P.warnings,available:P.excerpts.length}}function nq(_,$,D){if($)return _.query(`SELECT id, type, prompt, status, provider, model, cost_tokens, cost_usd, metadata_json, created_at, updated_at +${S}`;else{let{generateText:T}=await import("ai"),K=await x0(I,{config:$.config,env:$.env}),V=await T({model:K,system:"You answer company knowledge-base prompts using only provided context and citation ids.",prompt:h3(U,z)});L=!0,J=j.provider,R=j.model,S=V.text;let F=jg({provider:J,model:R,usage:V.usage,providerMetadata:V.providerMetadata});X={input_tokens:F.input_tokens,output_tokens:F.output_tokens,cost_usd:F.cost_usd}}let B=n3(U,z),Q={approved:$.approveWrite===!0,durable_writes_performed:!1,reason:$.approveWrite?"Approval flag recorded; durable wiki writes require the local catalog (wiki compile) and are not available in cloud mode.":"Dry-run mode: proposed wiki updates require approval before durable writes."};return{run_id:D,prompt:U,generated:L,provider:J,model:R,answer:S,context:z,citations:z.citations,proposed_wiki_updates:B,write_policy:Q,usage:X,warnings:G}}import{createHash as y7}from"crypto";var c7=1200,h7=6,n7=12000,d7=50,i3=800;function T4(_,$,g=16){return`${_}_${y7("sha256").update($).digest("hex").slice(0,g)}`}function ZN(_){return _.normalize("NFKC").trim().replace(/\s+/g," ")}function HN(_){return ZN(_).toLowerCase()}function m7(_){return Array.from(new Set(HN(_).match(/[\p{L}\p{N}_]+/gu)??[])).slice(0,24)}function U6(_,$){let g=ZN(_);if(g.length<=$)return g;let U="...";if($<=U.length)return g.slice(0,Math.max(0,$));return`${g.slice(0,$-U.length).trim()}${U}`}function l3(_){if(!_)return{};try{let $=JSON.parse(_);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch{return{}}}function kN(_){return/(?:api[_-]?key|secret|token|password|private[_-]?key|credential)/i.test(_)}function MN(_){return Object.keys(_).filter(($)=>!kN($)).sort().slice(0,12)}function i7(_,$){for(let g of $){if(kN(g))continue;let U=_[g];if(typeof U==="string"&&U.trim())return U.trim()}return null}function y0(_,$){if(!_)return null;let g=w_(_,$).text;try{let U=new URL(g),D=["token","access_token","api_key","apikey","key","secret","password","signature","sig"];for(let I of D)U.searchParams.delete(I);for(let[I]of U.searchParams)if(kN(I))U.searchParams.delete(I);return U.toString()}catch{return g}}function w$(_,$,g){return y0(i7(_,$),g)}function EI(_){let $=[];for(let g of MN(_).slice(0,6)){let U=_[g];if(typeof U==="string"&&U.trim())$.push(`${g}=${U6(U,80)}`);else if(typeof U==="number"||typeof U==="boolean")$.push(`${g}=${String(U)}`);else if(U&&typeof U==="object")$.push(`${g}={...}`)}return $.join("; ")}function l7(_){if(!_.trim())return 0;return Math.max(1,Math.ceil(_.length/4))}function t3(_){return l7(JSON.stringify(_))}function t7(_){if(!Number.isFinite(_??NaN))return c7;let $=Math.floor(_);if($g.includes(D)).length;return Number((U/$.length).toFixed(6))}function p7(_){return["This pack is read-only and performs no durable writes.","Use citation ids and refs instead of pasting raw artifacts into prompts.","Resolve source or artifact refs explicitly only when raw content is needed and allowed.","Run generated knowledge writes through approval-gated commands before applying.",_==="loops"||_==="runs"?"Run evidence is summarized from knowledge run ledgers; raw run artifacts remain referenced, not embedded.":"Search evidence is derived from indexed chunks/wiki catalog rows with citation metadata."]}function e7(_,$,g){let U=y0($.source_ref,g),D=y0($.source_uri,g),I=y0($.artifact_uri,g),j=y0($.artifact_path,g),E=U??D??j??I??$.id,A=$.quote?Q4($.quote,g,_<3?220:140):null;return{citation:{id:T4("cite",`${$.id}\x00${E}`,12),kind:$.artifact_uri||$.artifact_path?"artifact":"source",ref:E,source_ref:U,source_uri:D,artifact_uri:I,artifact_path:j,run_id:null,run_event_id:null,revision:$.revision??null,hash:$.hash??null,chunk_id:$.chunk_id??null,offsets:{start:$.start_offset??null,end:$.end_offset??null},quote_preview:A?.text??null},redactions:A?.redactions??0}}async function a7(_,$){let g=(_.query??_.topic??"").trim();if(!g)throw Error("Context pack query is required for search source.");let{config:U,dbPath:D,limit:I,semantic:j,modelRef:E,dimensions:A,fake:O,env:P,batchSize:W,maxParallelCalls:z,legacyStorePath:S}=_,L=await X4({dbPath:D,config:U,legacyStorePath:S,query:g,limit:Math.max($,I??$),semantic:j,modelRef:E,dimensions:A,fake:O,env:P,batchSize:W,maxParallelCalls:z,contextChars:Math.min(_.contextChars??700,1200)}),J=new Map,R=0;L.citations.forEach((Q,T)=>{let K=e7(T,Q,_.safetyPolicy);R+=K.redactions,J.set(Q.id,K.citation)});let X=L.excerpts.slice(0,Math.max($*2,$)).map((Q)=>{let T=L.results.find((o)=>o.id===Q.result_id),K=Q.citation_id?J.get(Q.citation_id):null,V=Q4(Q.text,_.safetyPolicy,520);R+=V.redactions;let F=T?.title??K?.ref??Q.kind;return{id:T4("ev",`${Q.kind}\x00${Q.result_id}\x00${Q.citation_id??""}`,14),kind:Q.kind,title:U6(F,100),text_preview:V.text,score:Number(Q.score.toFixed(6)),citation_ids:K?[K.id]:[],provenance:{source:"search",record_ref:`${Q.kind}:${Q.result_id}`,created_at:L.created_at,updated_at:null,metadata_keys:[]}}}),G=new Set(X.flatMap((Q)=>Q.citation_ids));return{citations:Array.from(J.values()).filter((Q)=>G.has(Q.id)),evidence:X,duplicateCandidates:[],redactions:R,warnings:L.warnings,available:L.excerpts.length}}function s7(_,$,g){if($)return _.query(`SELECT id, type, prompt, status, provider, model, cost_tokens, cost_usd, metadata_json, created_at, updated_at FROM runs WHERE updated_at >= ? OR created_at >= ? ORDER BY updated_at DESC, created_at DESC - LIMIT ?`).all($,$,D);return _.query(`SELECT id, type, prompt, status, provider, model, cost_tokens, cost_usd, metadata_json, created_at, updated_at + LIMIT ?`).all($,$,g);return _.query(`SELECT id, type, prompt, status, provider, model, cost_tokens, cost_usd, metadata_json, created_at, updated_at FROM runs ORDER BY updated_at DESC, created_at DESC - LIMIT ?`).all(D)}function dq(_,$,D){if($.length===0)return[];let U=$.map(()=>"?").join(", ");return _.query(`SELECT id, run_id, level, event, metadata_json, created_at + LIMIT ?`).all(g)}function _q(_,$,g){if($.length===0)return[];let U=$.map(()=>"?").join(", ");return _.query(`SELECT id, run_id, level, event, metadata_json, created_at FROM run_events WHERE run_id IN (${U}) ORDER BY created_at DESC - LIMIT ?`).all(...$,D)}function mq(_,$){return`${_.type} ${_.metadata_json} ${$.map((U)=>`${U.event} ${U.metadata_json}`).join(" ")}`.toLowerCase().includes("loop")}function iq(_,$,D){let U=w$($,["source_ref","source_uri","evidence_uri","receipt_uri"],D),g=w$($,["artifact_uri"],D),I=w$($,["artifact_path","artifact_key"],D),j=U??g??I??`knowledge://project/runs/${_.id}`,N=_.prompt?T0(_.prompt,D,180).text:null;return{id:q0("cite",`run\x00${_.id}\x00${j}`,12),kind:g||I?"artifact":"run",ref:j,source_ref:U?.startsWith("open-files://")?U:null,source_uri:U&&!U.startsWith("open-files://")?U:null,artifact_uri:g,artifact_path:I,run_id:_.id,run_event_id:null,revision:w$($,["revision"],D),hash:w$($,["hash","content_hash"],D),chunk_id:null,offsets:{start:null,end:null},quote_preview:N}}function lq(_,$,D){let U=w$($,["source_ref","source_uri","evidence_uri","receipt_uri"],D),g=w$($,["artifact_uri"],D),I=w$($,["artifact_path","artifact_key"],D),j=U??g??I??`knowledge://project/runs/${_.run_id}`,N=T0(_.event,D,160).text;return{id:q0("cite",`event\x00${_.id}\x00${j}`,12),kind:g||I?"artifact":"run_event",ref:j,source_ref:U?.startsWith("open-files://")?U:null,source_uri:U&&!U.startsWith("open-files://")?U:null,artifact_uri:g,artifact_path:I,run_id:_.run_id,run_event_id:_.id,revision:w$($,["revision"],D),hash:w$($,["hash","content_hash"],D),chunk_id:null,offsets:{start:null,end:null},quote_preview:N}}function lW(_){let $=new Map;for(let D of _){let U=FE(`${D.title} ${D.text_preview}`).replace(/\b(?:file|https?|s3):\/\/\S+/g,"").replace(/\b(?:run|evt|task|loop)_[a-z0-9_]+\b/g,"").replace(/[^a-z0-9 ]+/g,"").replace(/\b(?:run|event|completed|dry_run|pending)\b/g,"").replace(/\s+/g," ").trim().slice(0,220);if(!U)continue;$.set(U,[...$.get(U)??[],D.id])}return Array.from($.entries()).filter(([,D])=>D.length>1).map(([D,U])=>({id:q0("dup",D,12),reason:"normalized_text_match",evidence_ids:U,confidence:U.length>2?"high":"medium"}))}async function tq(_,$,D){let U=_.source==="loops"?"loops":"runs",g=(_.topic??_.query??"").trim(),I=rq(g),j=iW(_.since,D),N=j.warning?[j.warning]:[];h(_.dbPath);let O=r(_.dbPath);try{let A=nq(O,j.cutoff,Math.max($*8,40)),L=dq(O,A.map((G)=>G.id),Math.max($*12,80)),z=new Map;for(let G of L)z.set(G.run_id,[...z.get(G.run_id)??[],G]);let J=(U==="loops"?A.filter((G)=>mq(G,z.get(G.id)??[])):A).map((G)=>{let R=cW(G.metadata_json),V=`${G.type} ${G.status} ${G.prompt??""} ${EI(R)} ${(z.get(G.id)??[]).map((Q)=>`${Q.event} ${Q.metadata_json}`).join(" ")}`;return{row:G,metadata:R,score:dW(V,I),text:V}}).filter((G)=>I.length===0||G.score>0).sort((G,R)=>R.score-G.score||R.row.updated_at.localeCompare(G.row.updated_at)||G.row.id.localeCompare(R.row.id)),P=[],S=[],X=0;for(let G of J.slice(0,Math.max($*2,$))){let R=iq(G.row,G.metadata,_.safetyPolicy);P.push(R);let V=EI(G.metadata),Q=[G.row.prompt,V].filter(Boolean).join(" | ")||`${G.row.type} ${G.row.status}`,T=T0(Q,_.safetyPolicy,420);X+=T.redactions,S.push({id:`run:${G.row.id}`,kind:G.row.type,title:D6(`${G.row.type}: ${G.row.status}`,100),text_preview:T.text,score:G.score,citation_ids:[R.id],provenance:{source:U,record_ref:`knowledge://project/runs/${G.row.id}`,created_at:G.row.created_at,updated_at:G.row.updated_at,metadata_keys:VE(G.metadata)}});let q=(z.get(G.row.id)??[]).map((K)=>{let Z=cW(K.metadata_json),e=`${K.event} ${EI(Z)} ${K.metadata_json}`;return{event:K,metadata:Z,score:dW(e,I),text:e}}).filter((K)=>I.length===0||K.score>0).sort((K,Z)=>Z.score-K.score||Z.event.created_at.localeCompare(K.event.created_at)||K.event.id.localeCompare(Z.event.id)).slice(0,2);for(let K of q){let Z=lq(K.event,K.metadata,_.safetyPolicy);P.push(Z);let e=T0(`${K.event}: ${EI(K.metadata)}`,_.safetyPolicy,320);X+=e.redactions,S.push({id:`event:${K.event.id}`,kind:`run_event:${K.event.level}`,title:D6(K.event.event,100),text_preview:e.text,score:K.score,citation_ids:[Z.id],provenance:{source:U,record_ref:`knowledge://project/runs/${K.event.run_id}`,created_at:K.event.created_at,updated_at:null,metadata_keys:VE(K.metadata)}})}}return{citations:P,evidence:S,duplicateCandidates:_.dedupe?lW(S):[],redactions:X,warnings:N,available:J.length}}finally{O.close()}}function oq(_){let $=_.purpose==="proposal"?`Proposal context: ${D6(_.query||"loop evidence",80)}`:`Knowledge context: ${D6(_.query,80)}`,D=_.evidence.slice(0,8).map((I)=>I.id),U=_.duplicates.slice(0,5).map((I)=>I.id),g=_.evidence.slice(0,5).map((I)=>`${I.id}: ${I.title}`);if(_.evidence.length===0)g.push("No matching bounded evidence was found.");return{title:$,bullets:g,evidence_ids:D,duplicate_candidate_ids:U,next_actions:_.source==="loops"?["Review duplicate_candidates before drafting a new proposal.","Use cited run refs for provenance; inspect a run only when more detail is needed.","Keep proposal writes approval-gated and idempotent."]:["Use evidence_ids and citation_ids in prompts instead of raw excerpts when possible.","Inspect cited refs only if the bounded preview is insufficient.","Use knowledge build/file-answer only with explicit approval for durable writes."]}}function tW(_){let $=new Set(_.evidence.flatMap((D)=>D.citation_ids));_.citations=_.citations.filter((D)=>$.has(D.id))}function mW(_){_.outline.evidence_ids=_.evidence.slice(0,8).map(($)=>$.id),_.outline.bullets=_.evidence.length>0?_.evidence.slice(0,5).map(($)=>`${$.id}: ${$.title}`):["No matching bounded evidence was found."],_.outline.duplicate_candidate_ids=_.duplicate_candidates.slice(0,5).map(($)=>$.id)}function pq(_){let $=_.budgets.max_tokens,D=new Set(_.warnings);while(nW(_)>$){let U=_.evidence.map((I,j)=>({entry:I,index:j})).filter(({entry:I})=>I.text_preview.length>180).sort((I,j)=>j.entry.text_preview.length-I.entry.text_preview.length)[0];if(U){U.entry.text_preview=D6(U.entry.text_preview,180),D.add("text_preview_truncated_for_token_budget");continue}let g=_.citations.filter((I)=>(I.quote_preview?.length??0)>120).sort((I,j)=>(j.quote_preview?.length??0)-(I.quote_preview?.length??0))[0];if(g?.quote_preview){g.quote_preview=D6(g.quote_preview,120),D.add("citation_quote_truncated_for_token_budget");continue}if(_.evidence.length>0){_.evidence.pop(),_.budgets.items_truncated+=1,_.duplicate_candidates=_.duplicate_candidates.map((I)=>({...I,evidence_ids:I.evidence_ids.filter((j)=>_.evidence.some((N)=>N.id===j))})).filter((I)=>I.evidence_ids.length>1),mW(_),D.add("evidence_truncated_for_token_budget"),tW(_);continue}if(_.outline.next_actions.length>1){_.outline.next_actions.pop(),D.add("outline_truncated_for_token_budget");continue}D.add("token_budget_floor_exceeded");break}if(_.warnings=Array.from(D).sort(),_.budgets.items_included=_.evidence.length,mW(_),_.budgets.estimated_tokens=nW(_),_.budgets.token_budget_exceeded=_.budgets.estimated_tokens>$,_.budgets.token_budget_exceeded)throw Error(`Unable to build context pack within ${$} token budget; increase --max-tokens.`);return _.message=`${_.evidence.length} bounded evidence item(s), estimated ${_.budgets.estimated_tokens}/${$} token(s)`,_}async function oW(_){let $=_.now??new Date,D=_.source??"search",U=_.purpose??(D==="loops"||D==="runs"?"proposal":"agent_context"),g=uq(_.maxTokens),I=xq(_.maxItems,_.limit),j=KE(_.query??_.topic??"");if(U==="proposal"&&D!=="search"&&!j)throw Error("Proposal context requires --topic or a positional topic.");if(D!=="search")h(_.dbPath);let N=iW(_.since,$).cutoff??_.since??"",O=D==="search"?await cq(_,I):await tq(_,I,$),A=O.evidence.sort((P,S)=>S.score-P.score||P.id.localeCompare(S.id)).slice(0,I),L=O.citations.filter((P,S,X)=>X.findIndex((G)=>G.id===P.id)===S).sort((P,S)=>P.id.localeCompare(S.id)),z=_.dedupe?lW(A):O.duplicateCandidates.filter((P)=>P.evidence_ids.every((S)=>A.some((X)=>X.id===S))),W=oq({source:D,purpose:U,query:j,evidence:A,duplicates:z}),J={ok:!0,format:"knowledge-agent-context-pack",version:1,created_at:$.toISOString(),source:D,purpose:U,query:j,topic:_.topic??null,since:_.since??null,dry_run:!0,idempotency_key:q0("ctx",[D,U,j,N,_.dedupe===!0?"dedupe":"no-dedupe",_.semantic===!0?"semantic":"keyword",_.modelRef??"",_.limit??"",g,I,A.map((P)=>P.id).join(","),L.map((P)=>P.id).join(",")].join("\x00"),20),budgets:{max_tokens:g,estimated_tokens:0,max_items:I,items_included:A.length,items_available:O.available,items_truncated:Math.max(0,O.available-A.length),token_budget_exceeded:!1},safety:{raw_artifact_content_included:!1,durable_writes_performed:!1,redactions:O.redactions,reminders:yq(D)},citations:L,evidence:A,duplicate_candidates:z,outline:W,warnings:O.warnings,message:`${A.length} bounded evidence item(s), estimated under ${g} token(s)`};return tW(J),pq(J)}import{randomUUID as GR}from"crypto";import{createHash as eq,randomUUID as aq}from"crypto";import{existsSync as sq,readFileSync as _B}from"fs";import{hostname as $X}from"os";import{fileURLToPath as DX}from"url";import{extname as $B,relative as gX,resolve as pW,sep as DB}from"path";var LI=["sources","wiki_pages","source_revisions","chunks","chunk_embeddings","wiki_backlinks","citations","knowledge_indexes","runs","run_events","provider_usage","redaction_findings","storage_objects","audit_events","approval_gates","vector_index_entries","reindex_queue","knowledge_machines","knowledge_sync_snapshots","knowledge_sync_changes","knowledge_sync_conflicts","knowledge_sync_table_clocks","knowledge_sync_imports"],K6=2,F6=1,iD={sources:["id"],wiki_pages:["id"],source_revisions:["id"],chunks:["id"],chunk_embeddings:["id"],wiki_backlinks:["from_page_id","to_page_id"],citations:["id"],knowledge_indexes:["id"],runs:["id"],run_events:["id"],provider_usage:["id"],redaction_findings:["id"],storage_objects:["id"],audit_events:["id"],approval_gates:["id"],vector_index_entries:["id"],reindex_queue:["id"],knowledge_machines:["machine_id"],knowledge_sync_snapshots:["id"],knowledge_sync_changes:["id"],knowledge_sync_conflicts:["id"],knowledge_sync_table_clocks:["table_name","machine_id"],knowledge_sync_imports:["bundle_id"]},lD=new Set(["storage_objects","knowledge_sync_changes","knowledge_sync_table_clocks","knowledge_sync_imports"]);function u$(_=new Date){return _.toISOString()}function vE(_){return`${_}_${Date.now().toString(36)}_${aq().slice(0,8)}`}function UX(_){let $=_?.trim();if($)return $;return process.env.HASNA_MACHINE_ID??process.env.OPEN_MACHINES_MACHINE_ID??process.env.MACHINE_ID??$X()}function V0(_){if(Array.isArray(_))return`[${_.map(V0).join(",")}]`;if(_&&typeof _==="object"){let $=_;return`{${Object.keys($).sort().map((D)=>`${JSON.stringify(D)}:${V0($[D])}`).join(",")}}`}return JSON.stringify(_)}function nD(_){return`sha256:${eq("sha256").update(_).digest("hex")}`}function OI(_,$){return _.query(`SELECT COUNT(*) AS n FROM ${$}`).get()?.n??0}function PI(_,$){try{return JSON.parse(_)}catch{return $}}function j$(_){return`"${_.replace(/"/g,'""')}"`}function gB(_){if(_===void 0||_===null)return null;if(typeof _==="string"||typeof _==="number"||typeof _==="bigint"||typeof _==="boolean")return _;if(_ instanceof Date)return _.toISOString();if(Buffer.isBuffer(_)||_ instanceof Uint8Array)return _;if(typeof _==="object")return JSON.stringify(_);return String(_)}function IX(_,$){return $.filter((D)=>J$(_,D))}function J$(_,$){let D=_.query("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get($);return Boolean(D)}function UB(_,$){let D=_.query(`PRAGMA table_info(${j$($)})`).all();return new Set(D.map((U)=>U.name))}function IB(_,$,D){let U=UB(_,$);return D.filter((g)=>U.has(g))}function jX(_){if(!_||_.length===0)return[...LI];let $=new Set(LI),D=_.map((g)=>g.trim()).filter(Boolean),U=D.filter((g)=>!$.has(g));if(U.length>0)throw Error(`Unknown knowledge sync table(s): ${U.join(", ")}`);return D}function E4(_,$){return iD[_].map((U)=>`${U}=${JSON.stringify($[U]??null)}`).join("&")}var jB=new Set(["raw","raw_bytes","raw_content","content_base64","source_bytes","source_content","body_bytes"]);function dD(_,$=0){if($>8)return"[truncated-depth]";if(typeof _==="string")return _.length>4000?`${_.slice(0,4000)}...[truncated]`:_;if(_===null||typeof _!=="object")return _;if(Array.isArray(_))return _.slice(0,50).map((U)=>dD(U,$+1));let D={};for(let[U,g]of Object.entries(_)){if(jB.has(U.toLowerCase()))continue;D[U]=dD(g,$+1)}return D}function cD(_){if(!_)return null;return dD(_)}function rE(_){return nD(V0(_))}function NB(_,$){let D={};for(let[U,g]of Object.entries(_))if(U==="artifact_uri"&&typeof g==="string"&&$.has(g))D[U]=`artifact:${$.get(g)}`;else D[U]=g;return D}function N4(_,$=new Map){return rE(NB(_,$))}function NX(_,$){if(!J$(_,$))return[];return _.query(`SELECT * FROM ${j$($)} ORDER BY rowid ASC`).all()}function JI(_,$,D=new Map){return rE($.map((U)=>({key:E4(_,U),hash:N4(U,D)})).sort((U,g)=>U.key.localeCompare(g.key)))}function mD(_,$,D){return _.query("SELECT * FROM knowledge_sync_table_clocks WHERE table_name = ? AND machine_id = ?").get($,D)??null}function EB(_){if(!J$(_,"knowledge_sync_table_clocks"))return[];return _.query("SELECT * FROM knowledge_sync_table_clocks ORDER BY table_name ASC, machine_id ASC").all()}function zI(_,$){let D=$.now??u$(),g=mD(_,$.table,$.machineId)?.created_at??D;_.query(` + LIMIT ?`).all(...$,g)}function $q(_,$){return`${_.type} ${_.metadata_json} ${$.map((U)=>`${U.event} ${U.metadata_json}`).join(" ")}`.toLowerCase().includes("loop")}function gq(_,$,g){let U=w$($,["source_ref","source_uri","evidence_uri","receipt_uri"],g),D=w$($,["artifact_uri"],g),I=w$($,["artifact_path","artifact_key"],g),j=U??D??I??`knowledge://project/runs/${_.id}`,E=_.prompt?Q4(_.prompt,g,180).text:null;return{id:T4("cite",`run\x00${_.id}\x00${j}`,12),kind:D||I?"artifact":"run",ref:j,source_ref:U?.startsWith("open-files://")?U:null,source_uri:U&&!U.startsWith("open-files://")?U:null,artifact_uri:D,artifact_path:I,run_id:_.id,run_event_id:null,revision:w$($,["revision"],g),hash:w$($,["hash","content_hash"],g),chunk_id:null,offsets:{start:null,end:null},quote_preview:E}}function Dq(_,$,g){let U=w$($,["source_ref","source_uri","evidence_uri","receipt_uri"],g),D=w$($,["artifact_uri"],g),I=w$($,["artifact_path","artifact_key"],g),j=U??D??I??`knowledge://project/runs/${_.run_id}`,E=Q4(_.event,g,160).text;return{id:T4("cite",`event\x00${_.id}\x00${j}`,12),kind:D||I?"artifact":"run_event",ref:j,source_ref:U?.startsWith("open-files://")?U:null,source_uri:U&&!U.startsWith("open-files://")?U:null,artifact_uri:D,artifact_path:I,run_id:_.run_id,run_event_id:_.id,revision:w$($,["revision"],g),hash:w$($,["hash","content_hash"],g),chunk_id:null,offsets:{start:null,end:null},quote_preview:E}}function a3(_){let $=new Map;for(let g of _){let U=HN(`${g.title} ${g.text_preview}`).replace(/\b(?:file|https?|s3):\/\/\S+/g,"").replace(/\b(?:run|evt|task|loop)_[a-z0-9_]+\b/g,"").replace(/[^a-z0-9 ]+/g,"").replace(/\b(?:run|event|completed|dry_run|pending)\b/g,"").replace(/\s+/g," ").trim().slice(0,220);if(!U)continue;$.set(U,[...$.get(U)??[],g.id])}return Array.from($.entries()).filter(([,g])=>g.length>1).map(([g,U])=>({id:T4("dup",g,12),reason:"normalized_text_match",evidence_ids:U,confidence:U.length>2?"high":"medium"}))}async function Uq(_,$,g){let U=_.source==="loops"?"loops":"runs",D=(_.topic??_.query??"").trim(),I=m7(D),j=e3(_.since,g),E=j.warning?[j.warning]:[];c(_.dbPath);let A=v(_.dbPath);try{let O=s7(A,j.cutoff,Math.max($*8,40)),P=_q(A,O.map((X)=>X.id),Math.max($*12,80)),W=new Map;for(let X of P)W.set(X.run_id,[...W.get(X.run_id)??[],X]);let S=(U==="loops"?O.filter((X)=>$q(X,W.get(X.id)??[])):O).map((X)=>{let G=l3(X.metadata_json),B=`${X.type} ${X.status} ${X.prompt??""} ${EI(G)} ${(W.get(X.id)??[]).map((Q)=>`${Q.event} ${Q.metadata_json}`).join(" ")}`;return{row:X,metadata:G,score:o3(B,I),text:B}}).filter((X)=>I.length===0||X.score>0).sort((X,G)=>G.score-X.score||G.row.updated_at.localeCompare(X.row.updated_at)||X.row.id.localeCompare(G.row.id)),L=[],J=[],R=0;for(let X of S.slice(0,Math.max($*2,$))){let G=gq(X.row,X.metadata,_.safetyPolicy);L.push(G);let B=EI(X.metadata),Q=[X.row.prompt,B].filter(Boolean).join(" | ")||`${X.row.type} ${X.row.status}`,T=Q4(Q,_.safetyPolicy,420);R+=T.redactions,J.push({id:`run:${X.row.id}`,kind:X.row.type,title:U6(`${X.row.type}: ${X.row.status}`,100),text_preview:T.text,score:X.score,citation_ids:[G.id],provenance:{source:U,record_ref:`knowledge://project/runs/${X.row.id}`,created_at:X.row.created_at,updated_at:X.row.updated_at,metadata_keys:MN(X.metadata)}});let K=(W.get(X.row.id)??[]).map((V)=>{let F=l3(V.metadata_json),o=`${V.event} ${EI(F)} ${V.metadata_json}`;return{event:V,metadata:F,score:o3(o,I),text:o}}).filter((V)=>I.length===0||V.score>0).sort((V,F)=>F.score-V.score||F.event.created_at.localeCompare(V.event.created_at)||V.event.id.localeCompare(F.event.id)).slice(0,2);for(let V of K){let F=Dq(V.event,V.metadata,_.safetyPolicy);L.push(F);let o=Q4(`${V.event}: ${EI(V.metadata)}`,_.safetyPolicy,320);R+=o.redactions,J.push({id:`event:${V.event.id}`,kind:`run_event:${V.event.level}`,title:U6(V.event.event,100),text_preview:o.text,score:V.score,citation_ids:[F.id],provenance:{source:U,record_ref:`knowledge://project/runs/${V.event.run_id}`,created_at:V.event.created_at,updated_at:null,metadata_keys:MN(V.metadata)}})}}return{citations:L,evidence:J,duplicateCandidates:_.dedupe?a3(J):[],redactions:R,warnings:E,available:S.length}}finally{A.close()}}function Iq(_){let $=_.purpose==="proposal"?`Proposal context: ${U6(_.query||"loop evidence",80)}`:`Knowledge context: ${U6(_.query,80)}`,g=_.evidence.slice(0,8).map((I)=>I.id),U=_.duplicates.slice(0,5).map((I)=>I.id),D=_.evidence.slice(0,5).map((I)=>`${I.id}: ${I.title}`);if(_.evidence.length===0)D.push("No matching bounded evidence was found.");return{title:$,bullets:D,evidence_ids:g,duplicate_candidate_ids:U,next_actions:_.source==="loops"?["Review duplicate_candidates before drafting a new proposal.","Use cited run refs for provenance; inspect a run only when more detail is needed.","Keep proposal writes approval-gated and idempotent."]:["Use evidence_ids and citation_ids in prompts instead of raw excerpts when possible.","Inspect cited refs only if the bounded preview is insufficient.","Use knowledge build/file-answer only with explicit approval for durable writes."]}}function s3(_){let $=new Set(_.evidence.flatMap((g)=>g.citation_ids));_.citations=_.citations.filter((g)=>$.has(g.id))}function p3(_){_.outline.evidence_ids=_.evidence.slice(0,8).map(($)=>$.id),_.outline.bullets=_.evidence.length>0?_.evidence.slice(0,5).map(($)=>`${$.id}: ${$.title}`):["No matching bounded evidence was found."],_.outline.duplicate_candidate_ids=_.duplicate_candidates.slice(0,5).map(($)=>$.id)}function jq(_){let $=_.budgets.max_tokens,g=new Set(_.warnings);while(t3(_)>$){let U=_.evidence.map((I,j)=>({entry:I,index:j})).filter(({entry:I})=>I.text_preview.length>180).sort((I,j)=>j.entry.text_preview.length-I.entry.text_preview.length)[0];if(U){U.entry.text_preview=U6(U.entry.text_preview,180),g.add("text_preview_truncated_for_token_budget");continue}let D=_.citations.filter((I)=>(I.quote_preview?.length??0)>120).sort((I,j)=>(j.quote_preview?.length??0)-(I.quote_preview?.length??0))[0];if(D?.quote_preview){D.quote_preview=U6(D.quote_preview,120),g.add("citation_quote_truncated_for_token_budget");continue}if(_.evidence.length>0){_.evidence.pop(),_.budgets.items_truncated+=1,_.duplicate_candidates=_.duplicate_candidates.map((I)=>({...I,evidence_ids:I.evidence_ids.filter((j)=>_.evidence.some((E)=>E.id===j))})).filter((I)=>I.evidence_ids.length>1),p3(_),g.add("evidence_truncated_for_token_budget"),s3(_);continue}if(_.outline.next_actions.length>1){_.outline.next_actions.pop(),g.add("outline_truncated_for_token_budget");continue}g.add("token_budget_floor_exceeded");break}if(_.warnings=Array.from(g).sort(),_.budgets.items_included=_.evidence.length,p3(_),_.budgets.estimated_tokens=t3(_),_.budgets.token_budget_exceeded=_.budgets.estimated_tokens>$,_.budgets.token_budget_exceeded)throw Error(`Unable to build context pack within ${$} token budget; increase --max-tokens.`);return _.message=`${_.evidence.length} bounded evidence item(s), estimated ${_.budgets.estimated_tokens}/${$} token(s)`,_}async function _R(_){let $=_.now??new Date,g=_.source??"search",U=_.purpose??(g==="loops"||g==="runs"?"proposal":"agent_context"),D=t7(_.maxTokens),I=o7(_.maxItems,_.limit),j=ZN(_.query??_.topic??"");if(U==="proposal"&&g!=="search"&&!j)throw Error("Proposal context requires --topic or a positional topic.");if(g!=="search")c(_.dbPath);let E=e3(_.since,$).cutoff??_.since??"",A=g==="search"?await a7(_,I):await Uq(_,I,$),O=A.evidence.sort((L,J)=>J.score-L.score||L.id.localeCompare(J.id)).slice(0,I),P=A.citations.filter((L,J,R)=>R.findIndex((X)=>X.id===L.id)===J).sort((L,J)=>L.id.localeCompare(J.id)),W=_.dedupe?a3(O):A.duplicateCandidates.filter((L)=>L.evidence_ids.every((J)=>O.some((R)=>R.id===J))),z=Iq({source:g,purpose:U,query:j,evidence:O,duplicates:W}),S={ok:!0,format:"knowledge-agent-context-pack",version:1,created_at:$.toISOString(),source:g,purpose:U,query:j,topic:_.topic??null,since:_.since??null,dry_run:!0,idempotency_key:T4("ctx",[g,U,j,E,_.dedupe===!0?"dedupe":"no-dedupe",_.semantic===!0?"semantic":"keyword",_.modelRef??"",_.limit??"",D,I,O.map((L)=>L.id).join(","),P.map((L)=>L.id).join(",")].join("\x00"),20),budgets:{max_tokens:D,estimated_tokens:0,max_items:I,items_included:O.length,items_available:A.available,items_truncated:Math.max(0,A.available-O.length),token_budget_exceeded:!1},safety:{raw_artifact_content_included:!1,durable_writes_performed:!1,redactions:A.redactions,reminders:p7(g)},citations:P,evidence:O,duplicate_candidates:W,outline:z,warnings:A.warnings,message:`${O.length} bounded evidence item(s), estimated under ${D} token(s)`};return s3(S),jq(S)}import{randomUUID as qX}from"crypto";import{createHash as Eq,randomUUID as Nq}from"crypto";import{existsSync as Aq,readFileSync as Oq}from"fs";import{hostname as jR}from"os";import{fileURLToPath as ER}from"url";import{extname as Pq,relative as NR,resolve as $R,sep as Sq}from"path";var OI=["sources","wiki_pages","source_revisions","chunks","chunk_embeddings","wiki_backlinks","citations","knowledge_indexes","runs","run_events","provider_usage","redaction_findings","storage_objects","audit_events","approval_gates","vector_index_entries","reindex_queue","knowledge_machines","knowledge_sync_snapshots","knowledge_sync_changes","knowledge_sync_conflicts","knowledge_sync_table_clocks","knowledge_sync_imports"],F6=2,r6=1,m0={sources:["id"],wiki_pages:["id"],source_revisions:["id"],chunks:["id"],chunk_embeddings:["id"],wiki_backlinks:["from_page_id","to_page_id"],citations:["id"],knowledge_indexes:["id"],runs:["id"],run_events:["id"],provider_usage:["id"],redaction_findings:["id"],storage_objects:["id"],audit_events:["id"],approval_gates:["id"],vector_index_entries:["id"],reindex_queue:["id"],knowledge_machines:["machine_id"],knowledge_sync_snapshots:["id"],knowledge_sync_changes:["id"],knowledge_sync_conflicts:["id"],knowledge_sync_table_clocks:["table_name","machine_id"],knowledge_sync_imports:["bundle_id"]},i0=new Set(["storage_objects","knowledge_sync_changes","knowledge_sync_table_clocks","knowledge_sync_imports"]);function u$(_=new Date){return _.toISOString()}function xN(_){return`${_}_${Date.now().toString(36)}_${Nq().slice(0,8)}`}function AR(_){let $=_?.trim();if($)return $;return process.env.HASNA_MACHINE_ID??process.env.OPEN_MACHINES_MACHINE_ID??process.env.MACHINE_ID??jR()}function q4(_){if(Array.isArray(_))return`[${_.map(q4).join(",")}]`;if(_&&typeof _==="object"){let $=_;return`{${Object.keys($).sort().map((g)=>`${JSON.stringify(g)}:${q4($[g])}`).join(",")}}`}return JSON.stringify(_)}function h0(_){return`sha256:${Eq("sha256").update(_).digest("hex")}`}function NI(_,$){return _.query(`SELECT COUNT(*) AS n FROM ${$}`).get()?.n??0}function SI(_,$){try{return JSON.parse(_)}catch{return $}}function I$(_){return`"${_.replace(/"/g,'""')}"`}function Lq(_){if(_===void 0||_===null)return null;if(typeof _==="string"||typeof _==="number"||typeof _==="bigint"||typeof _==="boolean")return _;if(_ instanceof Date)return _.toISOString();if(Buffer.isBuffer(_)||_ instanceof Uint8Array)return _;if(typeof _==="object")return JSON.stringify(_);return String(_)}function OR(_,$){return $.filter((g)=>P$(_,g))}function P$(_,$){let g=_.query("SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?").get($);return Boolean(g)}function Wq(_,$){let g=_.query(`PRAGMA table_info(${I$($)})`).all();return new Set(g.map((U)=>U.name))}function Jq(_,$,g){let U=Wq(_,$);return g.filter((D)=>U.has(D))}function PR(_){if(!_||_.length===0)return[...OI];let $=new Set(OI),g=_.map((D)=>D.trim()).filter(Boolean),U=g.filter((D)=>!$.has(D));if(U.length>0)throw Error(`Unknown knowledge sync table(s): ${U.join(", ")}`);return g}function Ag(_,$){return m0[_].map((U)=>`${U}=${JSON.stringify($[U]??null)}`).join("&")}var zq=new Set(["raw","raw_bytes","raw_content","content_base64","source_bytes","source_content","body_bytes"]);function n0(_,$=0){if($>8)return"[truncated-depth]";if(typeof _==="string")return _.length>4000?`${_.slice(0,4000)}...[truncated]`:_;if(_===null||typeof _!=="object")return _;if(Array.isArray(_))return _.slice(0,50).map((U)=>n0(U,$+1));let g={};for(let[U,D]of Object.entries(_)){if(zq.has(U.toLowerCase()))continue;g[U]=n0(D,$+1)}return g}function c0(_){if(!_)return null;return n0(_)}function yN(_){return h0(q4(_))}function Rq(_,$){let g={};for(let[U,D]of Object.entries(_))if(U==="artifact_uri"&&typeof D==="string"&&$.has(D))g[U]=`artifact:${$.get(D)}`;else g[U]=D;return g}function Ng(_,$=new Map){return yN(Rq(_,$))}function SR(_,$){if(!P$(_,$))return[];return _.query(`SELECT * FROM ${I$($)} ORDER BY rowid ASC`).all()}function PI(_,$,g=new Map){return yN($.map((U)=>({key:Ag(_,U),hash:Ng(U,g)})).sort((U,D)=>U.key.localeCompare(D.key)))}function d0(_,$,g){return _.query("SELECT * FROM knowledge_sync_table_clocks WHERE table_name = ? AND machine_id = ?").get($,g)??null}function Gq(_){if(!P$(_,"knowledge_sync_table_clocks"))return[];return _.query("SELECT * FROM knowledge_sync_table_clocks ORDER BY table_name ASC, machine_id ASC").all()}function LI(_,$){let g=$.now??u$(),D=d0(_,$.table,$.machineId)?.created_at??g;_.query(` INSERT INTO knowledge_sync_table_clocks ( table_name, machine_id, logical_clock, high_water_hash, high_water_bundle_id, origin_machine_id, updated_by_machine_id, last_applied_at, metadata_json, @@ -843,17 +843,17 @@ ${W}`;else{let{generateText:Q}=await import("ai"),T=await yD(g,{config:$.config, last_applied_at = excluded.last_applied_at, metadata_json = excluded.metadata_json, updated_at = excluded.updated_at - `).run($.table,$.machineId,$.logicalClock,$.highWaterHash,$.highWaterBundleId??null,$.originMachineId??$.machineId,$.updatedByMachineId??$.machineId,$.lastAppliedAt??D,JSON.stringify($.metadata??{}),g,D);let I=mD(_,$.table,$.machineId);if(!I)throw Error(`Failed to record sync clock for ${$.table}:${$.machineId}`);return I}function OB(_,$){let D=mD(_,$.table,$.machineId),U=D?.high_water_hash===$.highWaterHash?D.logical_clock:(D?.logical_clock??0)+1,g=$.record?zI(_,{table:$.table,machineId:$.machineId,logicalClock:U,highWaterHash:$.highWaterHash,highWaterBundleId:null,originMachineId:D?.origin_machine_id??$.machineId,updatedByMachineId:$.machineId,lastAppliedAt:$.now,metadata:{source:"export",row_count:$.rowCount},now:$.now}):{table_name:$.table,machine_id:$.machineId,logical_clock:U,high_water_hash:$.highWaterHash,high_water_bundle_id:D?.high_water_bundle_id??null,origin_machine_id:D?.origin_machine_id??$.machineId,updated_by_machine_id:$.machineId,last_applied_at:$.now,metadata_json:"{}",created_at:D?.created_at??$.now,updated_at:$.now};return{table:$.table,machine_id:$.machineId,logical_clock:g.logical_clock,high_water_hash:$.highWaterHash,high_water_bundle_id:g.high_water_bundle_id,row_count:$.rowCount,updated_at:g.updated_at}}function AB(_,$,D,U,g){if($.high_water_bundle_id=D,!U)return;zI(_,{table:$.table,machineId:$.machine_id,logicalClock:$.logical_clock,highWaterHash:$.high_water_hash,highWaterBundleId:D,originMachineId:$.machine_id,updatedByMachineId:$.machine_id,lastAppliedAt:g,metadata:{source:"export",row_count:$.row_count},now:g})}function EX(_,$){return _.table_clocks?.find((D)=>D.table===$)??null}function LB(_,$){if(!_||!$)return!1;return $.logical_clock<_.logical_clock}function JB(_,$,D){if(D.length===0)return 0;let U=IB(_,$,Object.keys(D[0]));if(U.length===0)return 0;let g=iD[$],I=U.map(j$).join(", "),j=U.map(()=>"?").join(", "),N=g.map(j$).join(", "),O=U.filter((J)=>!g.includes(J)),A=g[0],L=O.length>0?O.map((J)=>`${j$(J)} = excluded.${j$(J)}`).join(", "):`${j$(A)} = excluded.${j$(A)}`,z=_.query(`INSERT INTO ${j$($)} (${I}) VALUES (${j}) - ON CONFLICT (${N}) DO UPDATE SET ${L}`);return _.transaction((J)=>{for(let P of J)z.run(...U.map((S)=>gB(P[S])))})(D),D.length}function OX(_,$){let D=iD[_],U=[],g=$;for(let I=0;I=0?O.slice(0,z):O;try{U.push(JSON.parse(W))}catch{return null}g=z>=0&&L?O.slice(z+1):""}return g.length===0?U:null}function AX(_){return iD[_].map(($)=>`${j$($)} = ?`).join(" AND ")}function PB(_,$,D){if(!J$(_,"knowledge_sync_changes"))return new Map;let U=_.query(`SELECT entity_id, next_hash + `).run($.table,$.machineId,$.logicalClock,$.highWaterHash,$.highWaterBundleId??null,$.originMachineId??$.machineId,$.updatedByMachineId??$.machineId,$.lastAppliedAt??g,JSON.stringify($.metadata??{}),D,g);let I=d0(_,$.table,$.machineId);if(!I)throw Error(`Failed to record sync clock for ${$.table}:${$.machineId}`);return I}function Xq(_,$){let g=d0(_,$.table,$.machineId),U=g?.high_water_hash===$.highWaterHash?g.logical_clock:(g?.logical_clock??0)+1,D=$.record?LI(_,{table:$.table,machineId:$.machineId,logicalClock:U,highWaterHash:$.highWaterHash,highWaterBundleId:null,originMachineId:g?.origin_machine_id??$.machineId,updatedByMachineId:$.machineId,lastAppliedAt:$.now,metadata:{source:"export",row_count:$.rowCount},now:$.now}):{table_name:$.table,machine_id:$.machineId,logical_clock:U,high_water_hash:$.highWaterHash,high_water_bundle_id:g?.high_water_bundle_id??null,origin_machine_id:g?.origin_machine_id??$.machineId,updated_by_machine_id:$.machineId,last_applied_at:$.now,metadata_json:"{}",created_at:g?.created_at??$.now,updated_at:$.now};return{table:$.table,machine_id:$.machineId,logical_clock:D.logical_clock,high_water_hash:$.highWaterHash,high_water_bundle_id:D.high_water_bundle_id,row_count:$.rowCount,updated_at:D.updated_at}}function Yq(_,$,g,U,D){if($.high_water_bundle_id=g,!U)return;LI(_,{table:$.table,machineId:$.machine_id,logicalClock:$.logical_clock,highWaterHash:$.high_water_hash,highWaterBundleId:g,originMachineId:$.machine_id,updatedByMachineId:$.machine_id,lastAppliedAt:D,metadata:{source:"export",row_count:$.row_count},now:D})}function LR(_,$){return _.table_clocks?.find((g)=>g.table===$)??null}function Qq(_,$){if(!_||!$)return!1;return $.logical_clock<_.logical_clock}function Tq(_,$,g){if(g.length===0)return 0;let U=Jq(_,$,Object.keys(g[0]));if(U.length===0)return 0;let D=m0[$],I=U.map(I$).join(", "),j=U.map(()=>"?").join(", "),E=D.map(I$).join(", "),A=U.filter((S)=>!D.includes(S)),O=D[0],P=A.length>0?A.map((S)=>`${I$(S)} = excluded.${I$(S)}`).join(", "):`${I$(O)} = excluded.${I$(O)}`,W=_.query(`INSERT INTO ${I$($)} (${I}) VALUES (${j}) + ON CONFLICT (${E}) DO UPDATE SET ${P}`);return _.transaction((S)=>{for(let L of S)W.run(...U.map((J)=>Lq(L[J])))})(g),g.length}function WR(_,$){let g=m0[_],U=[],D=$;for(let I=0;I=0?A.slice(0,W):A;try{U.push(JSON.parse(z))}catch{return null}D=W>=0&&P?A.slice(W+1):""}return D.length===0?U:null}function JR(_){return m0[_].map(($)=>`${I$($)} = ?`).join(" AND ")}function Kq(_,$,g){if(!P$(_,"knowledge_sync_changes"))return new Map;let U=_.query(`SELECT entity_id, next_hash FROM knowledge_sync_changes WHERE origin_machine_id = ? AND entity_kind = ? - ORDER BY created_at ASC, id ASC`).all(D,$),g=new Map;for(let I of U)g.set(I.entity_id,I.next_hash);return g}function zB(_,$){if(J$(_,"chunks_fts"))_.query("DELETE FROM chunks_fts WHERE chunk_id = ?").run($);if(J$(_,"chunk_embeddings"))_.query("DELETE FROM chunk_embeddings WHERE chunk_id = ?").run($);if(J$(_,"vector_index_entries"))_.query("DELETE FROM vector_index_entries WHERE chunk_id = ?").run($);if(J$(_,"citations"))_.query("DELETE FROM citations WHERE chunk_id = ?").run($)}function SB(_,$,D){let U=OX($,D);if(!U)return!1;let g=AX($),I=_.query(`SELECT * FROM ${j$($)} WHERE ${g} LIMIT 1`).get(...U);if(!I)return!1;if($==="chunks"&&typeof I.id==="string")zB(_,I.id);return _.query(`DELETE FROM ${j$($)} WHERE ${g}`).run(...U),!0}function WB(_,$){if(!J$(_,"chunks_fts"))return;for(let D of $){let U=typeof D.id==="string"?D.id:null,g=typeof D.text==="string"?D.text:null;if(!U||g===null)continue;let I="",j="",N=typeof D.source_revision_id==="string"?D.source_revision_id:null;if(N){let O=_.query(`SELECT s.title, s.uri + ORDER BY created_at ASC, id ASC`).all(g,$),D=new Map;for(let I of U)D.set(I.entity_id,I.next_hash);return D}function qq(_,$){if(P$(_,"chunks_fts"))_.query("DELETE FROM chunks_fts WHERE chunk_id = ?").run($);if(P$(_,"chunk_embeddings"))_.query("DELETE FROM chunk_embeddings WHERE chunk_id = ?").run($);if(P$(_,"vector_index_entries"))_.query("DELETE FROM vector_index_entries WHERE chunk_id = ?").run($);if(P$(_,"citations"))_.query("DELETE FROM citations WHERE chunk_id = ?").run($)}function Bq(_,$,g){let U=WR($,g);if(!U)return!1;let D=JR($),I=_.query(`SELECT * FROM ${I$($)} WHERE ${D} LIMIT 1`).get(...U);if(!I)return!1;if($==="chunks"&&typeof I.id==="string")qq(_,I.id);return _.query(`DELETE FROM ${I$($)} WHERE ${D}`).run(...U),!0}function Vq(_,$){if(!P$(_,"chunks_fts"))return;for(let g of $){let U=typeof g.id==="string"?g.id:null,D=typeof g.text==="string"?g.text:null;if(!U||D===null)continue;let I="",j="",E=typeof g.source_revision_id==="string"?g.source_revision_id:null;if(E){let A=_.query(`SELECT s.title, s.uri FROM source_revisions sr JOIN sources s ON s.id = sr.source_id WHERE sr.id = ? - LIMIT 1`).get(N);I=O?.title??"",j=O?.uri??""}if(!j&&typeof D.metadata_json==="string"){let O=PI(D.metadata_json,{});j=typeof O.source_uri==="string"?O.source_uri:""}_.query("DELETE FROM chunks_fts WHERE chunk_id = ?").run(U),_.query("INSERT INTO chunks_fts (chunk_id, text, title, source_uri) VALUES (?, ?, ?, ?)").run(U,g,I,j)}}function XB(_,$,D){if($==="chunks")WB(_,D)}function RB(_,$){let D=gX(_,$);return D!==".."&&!D.startsWith("..")&&!D.startsWith(`..${DB}`)}function GB(_,$){let D=PI(_.metadata_json,{});if(typeof D.key==="string")return D.key;if(!_.artifact_uri.startsWith("file://"))return null;try{let U=DX(_.artifact_uri),g=pW($),I=pW(U);if(!RB(g,I))return null;let j=gX(g,I).replace(/\\/g,"/");return j?f$(j):null}catch{return null}}var YB=new Set([".csv",".html",".json",".jsonl",".log",".md",".txt",".xml",".yaml",".yml"]);function QB(_,$){let D=_?.toLowerCase()??"";if(D.startsWith("text/"))return!0;if(/(json|markdown|xml|yaml|csv)/.test(D))return!0;return $?YB.has($B($).toLowerCase()):!1}function O4(_){let $=new Map;for(let D of _)if(D.key)$.set(D.artifact_uri,D.key);return $}function B6(_){return rE({key:_.key,kind:_.kind,hash:_.hash,size_bytes:_.size_bytes})}function SI(_){return _.key??_.artifact_uri}function TB(_,$){return _.artifact_uri.startsWith("s3://")&&$.artifact_store.type==="s3"&&_.artifact_uri.startsWith($.artifact_store.uri_prefix)}function LX(_){return Object.fromEntries(LI.map(($)=>[$,J$(_,$)?OI(_,$):0]))}function qB(_){return _.query(`SELECT artifact_uri, kind, hash, size_bytes + LIMIT 1`).get(E);I=A?.title??"",j=A?.uri??""}if(!j&&typeof g.metadata_json==="string"){let A=SI(g.metadata_json,{});j=typeof A.source_uri==="string"?A.source_uri:""}_.query("DELETE FROM chunks_fts WHERE chunk_id = ?").run(U),_.query("INSERT INTO chunks_fts (chunk_id, text, title, source_uri) VALUES (?, ?, ?, ?)").run(U,D,I,j)}}function Fq(_,$,g){if($==="chunks")Vq(_,g)}function rq(_,$){let g=NR(_,$);return g!==".."&&!g.startsWith("..")&&!g.startsWith(`..${Sq}`)}function bq(_,$){let g=SI(_.metadata_json,{});if(typeof g.key==="string")return g.key;if(!_.artifact_uri.startsWith("file://"))return null;try{let U=ER(_.artifact_uri),D=$R($),I=$R(U);if(!rq(D,I))return null;let j=NR(D,I).replace(/\\/g,"/");return j?v$(j):null}catch{return null}}var Mq=new Set([".csv",".html",".json",".jsonl",".log",".md",".txt",".xml",".yaml",".yml"]);function Zq(_,$){let g=_?.toLowerCase()??"";if(g.startsWith("text/"))return!0;if(/(json|markdown|xml|yaml|csv)/.test(g))return!0;return $?Mq.has(Pq($).toLowerCase()):!1}function Og(_){let $=new Map;for(let g of _)if(g.key)$.set(g.artifact_uri,g.key);return $}function B6(_){return yN({key:_.key,kind:_.kind,hash:_.hash,size_bytes:_.size_bytes})}function WI(_){return _.key??_.artifact_uri}function Hq(_,$){return _.artifact_uri.startsWith("s3://")&&$.artifact_store.type==="s3"&&_.artifact_uri.startsWith($.artifact_store.uri_prefix)}function zR(_){return Object.fromEntries(OI.map(($)=>[$,P$(_,$)?NI(_,$):0]))}function kq(_){return _.query(`SELECT artifact_uri, kind, hash, size_bytes FROM storage_objects - ORDER BY artifact_uri ASC`).all()}function BB(_,$){return{machine_id:_.machine_id,hostname:_.hostname,platform:_.platform,user_label:_.user,workspace_home:_.workspace_path,tailscale_dns:_.tailscale.dns_name,tailscale_ips_json:JSON.stringify(_.tailscale.ips),ssh_target:_.ssh.command_target,last_seen_at:_.local||_.tailscale.online===!0||_.heartbeat_status==="online"?$:_.last_heartbeat_at,capabilities_json:JSON.stringify({route_hints:_.route_hints,heartbeat_status:_.heartbeat_status,manifest_declared:_.manifest_declared}),metadata_json:JSON.stringify({..._.metadata,source:_.source,tags:_.tags,tailscale:_.tailscale,ssh:_.ssh}),created_at:$,updated_at:$}}function ZE(_){if(!_)return{};try{let $=JSON.parse(_);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch{return{}}}function VB(_){if(!_)return[];try{let $=JSON.parse(_);return Array.isArray($)?$:[]}catch{return[]}}function V6(_){return _&&typeof _==="object"&&!Array.isArray(_)?_:{}}function AI(_){return Object.fromEntries(Object.entries(_).filter(([,$])=>$!==void 0))}function B0(_){if(Array.isArray(_))return`[${_.map(B0).join(",")}]`;if(_&&typeof _==="object")return`{${Object.entries(_).filter(([,$])=>$!==void 0).sort(([$],[D])=>$.localeCompare(D)).map(([$,D])=>`${JSON.stringify($)}:${B0(D)}`).join(",")}}`;return JSON.stringify(_)}function eW(_){let{recorded_at:$,...D}=_;return D}function M_(_){return typeof _==="string"&&_.length>0?_:null}function KB(_){return typeof _==="number"&&Number.isFinite(_)?_:null}function aW(_){return typeof _==="boolean"?_:null}function FB(_){return Array.isArray(_)?_.filter(($)=>typeof $==="string"):[]}function JX(_){let $=V6(_),D=M_($.observed_at),U=M_($.source_authority);if(!D||!U)return null;return{observed_at:D,verified_at:M_($.verified_at),expires_at:M_($.expires_at),ttl_ms:KB($.ttl_ms),source_authority:U,confidence:M_($.confidence),cacheable:$.cacheable===!0,stale:$.stale===!0,reasons:FB($.reasons)}}function PX(_,$){if(!_||_.stale)return!1;if(!_.expires_at)return!0;let D=Date.parse(_.expires_at),U=Date.parse($);return Number.isNaN(D)||Number.isNaN(U)||D>U}function MB(_,$){return M_($.source)===_.source&&M_($.target)===_.target&&M_($.route)===_.route&&M_($.target_kind)===_.targetKind&&M_($.confidence)===_.confidence}function ZB(_,$){return M_($.source)===_.source&&M_($.requested_machine_id)===_.requested_machine_id&&M_($.machine_id)===_.machine_id&&M_($.project_id)===_.project_id&&M_($.repo_name)===_.repo_name&&M_($.project_root)===_.project_root&&M_($.project_root_source)===_.project_root_source&&M_($.workspace_root)===_.workspace_root&&M_($.workspace_root_source)===_.workspace_root_source&&M_($.open_files_root)===_.open_files_root&&M_($.open_files_root_source)===_.open_files_root_source&&M_($.trust_status)===_.trust_status&&M_($.auth_status)===_.auth_status&&aW($.current)===_.current&&aW($.primary)===_.primary}function bB(_,$,D){if(!_)return null;let U=JX($.cacheability);if(U&&PX(U,D)&&MB(_,$))return{..._,cacheability:U};return _}function HB(_,$,D){if(!_)return null;let U=JX($.cacheability);if(U&&PX(U,D)&&ZB(_,$))return{..._,cacheability:U};return _}function kB(_){return _.workspace?.machine_id??_.workspace?.requested_machine_id??_.machineId??_.route?.target??$X()}function CB(_,$){let D=new Set,U=Array.isArray($.sources)?$.sources:[];for(let g of U)if(typeof g==="string")D.add(g);if(typeof $.source==="string")D.add($.source);if(_.route?.source)D.add(_.route.source);if(_.workspace?.source)D.add(_.workspace.source);return D.add("knowledge"),[...D].sort()}function sW(_,$){if($?.target&&($.route==="tailscale"||$.targetKind==="tailscale"))return $.target;return _?.tailscale_dns??null}function vB(_,$,D){let U=V6($.resolver_evidence),g=_.route?AI({source:_.route.source,target:_.route.target,route:_.route.route,target_kind:_.route.targetKind,confidence:_.route.confidence,adapter:_.route.adapter,evidence:_.route.evidence,cacheability:_.route.cacheability,warnings:_.route.warnings}):V6(U.route),I=_.workspace?AI({source:_.workspace.source,requested_machine_id:_.workspace.requested_machine_id,machine_id:_.workspace.machine_id,project_id:_.workspace.project_id,repo_name:_.workspace.repo_name,project_root:_.workspace.project_root,project_root_source:_.workspace.project_root_source,workspace_root:_.workspace.workspace_root,workspace_root_source:_.workspace.workspace_root_source,open_files_root:_.workspace.open_files_root,open_files_root_source:_.workspace.open_files_root_source,trust_status:_.workspace.trust_status,auth_status:_.workspace.auth_status,current:_.workspace.current,primary:_.workspace.primary,diagnostics:_.workspace.diagnostics,repair_hints:_.workspace.repair_hints,evidence:_.workspace.evidence,cacheability:_.workspace.cacheability,warnings:_.workspace.warnings}):V6(U.workspace);return AI({...U,recorded_at:D,route:g,workspace:I})}function zX(_,$){h(_);let D=r(_);try{let U=kB($),g=D.query("SELECT * FROM knowledge_machines WHERE machine_id = ?").get(U)??null,I=u$($.now),j=ZE(g?.capabilities_json),N=ZE(g?.metadata_json),O=V6(j.resolver),A=V6(N.resolver_evidence),L=V6(A.route),z=V6(A.workspace),W=bB($.route?.source==="registry"?null:$.route??null,L,I),J=HB($.workspace?.source==="registry"?null:$.workspace??null,z,I),P={...$,route:W,workspace:J},S={...j,resolver:AI({...O,route_source:W?.source??O.route_source,route_kind:W?.route??O.route_kind,route_target_kind:W?.targetKind??O.route_target_kind,route_confidence:W?.confidence??O.route_confidence,route_cacheable:W?.cacheability?.cacheable??O.route_cacheable,route_stale:W?.cacheability?.stale??O.route_stale,route_expires_at:W?.cacheability?.expires_at??O.route_expires_at,route_observed_at:W?.cacheability?.observed_at??O.route_observed_at,route_source_authority:W?.cacheability?.source_authority??O.route_source_authority,workspace_source:J?.source??O.workspace_source,project_root_source:J?.project_root_source??O.project_root_source,workspace_root_source:J?.workspace_root_source??O.workspace_root_source,open_files_root_source:J?.open_files_root_source??O.open_files_root_source,trust_status:J?.trust_status??O.trust_status,auth_status:J?.auth_status??O.auth_status,workspace_cacheable:J?.cacheability?.cacheable??O.workspace_cacheable,workspace_stale:J?.cacheability?.stale??O.workspace_stale,workspace_expires_at:J?.cacheability?.expires_at??O.workspace_expires_at,workspace_observed_at:J?.cacheability?.observed_at??O.workspace_observed_at,workspace_source_authority:J?.cacheability?.source_authority??O.workspace_source_authority}),route_fallback:Boolean(W?.target??g?.ssh_target),workspace_fallback:Boolean(J?.project_root??g?.workspace_home)},X=vB(P,N,I);if(g){let R=A;if(g.workspace_home===(J?.project_root??g.workspace_home??null)&&g.tailscale_dns===sW(g,W)&&g.ssh_target===(W?.target??g.ssh_target??null)&&B0(ZE(g.capabilities_json))===B0(S)&&B0(eW(R))===B0(eW(X)))return g}let G={machine_id:U,hostname:g?.hostname??null,platform:g?.platform??null,user_label:g?.user_label??null,workspace_home:J?.project_root??g?.workspace_home??null,tailscale_dns:sW(g,W),tailscale_ips_json:JSON.stringify(VB(g?.tailscale_ips_json)),ssh_target:W?.target??g?.ssh_target??null,last_seen_at:I,capabilities_json:JSON.stringify(S),metadata_json:JSON.stringify({...N,source:"knowledge",sources:CB(P,N),resolver_evidence:X}),created_at:g?.created_at??I,updated_at:I};return SX(D,G),G}finally{D.close()}}function SX(_,$){_.query(` + ORDER BY artifact_uri ASC`).all()}function Cq(_,$){return{machine_id:_.machine_id,hostname:_.hostname,platform:_.platform,user_label:_.user,workspace_home:_.workspace_path,tailscale_dns:_.tailscale.dns_name,tailscale_ips_json:JSON.stringify(_.tailscale.ips),ssh_target:_.ssh.command_target,last_seen_at:_.local||_.tailscale.online===!0||_.heartbeat_status==="online"?$:_.last_heartbeat_at,capabilities_json:JSON.stringify({route_hints:_.route_hints,heartbeat_status:_.heartbeat_status,manifest_declared:_.manifest_declared}),metadata_json:JSON.stringify({..._.metadata,source:_.source,tags:_.tags,tailscale:_.tailscale,ssh:_.ssh}),created_at:$,updated_at:$}}function CN(_){if(!_)return{};try{let $=JSON.parse(_);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch{return{}}}function vq(_){if(!_)return[];try{let $=JSON.parse(_);return Array.isArray($)?$:[]}catch{return[]}}function V6(_){return _&&typeof _==="object"&&!Array.isArray(_)?_:{}}function AI(_){return Object.fromEntries(Object.entries(_).filter(([,$])=>$!==void 0))}function K4(_){if(Array.isArray(_))return`[${_.map(K4).join(",")}]`;if(_&&typeof _==="object")return`{${Object.entries(_).filter(([,$])=>$!==void 0).sort(([$],[g])=>$.localeCompare(g)).map(([$,g])=>`${JSON.stringify($)}:${K4(g)}`).join(",")}}`;return JSON.stringify(_)}function gR(_){let{recorded_at:$,...g}=_;return g}function V_(_){return typeof _==="string"&&_.length>0?_:null}function wq(_){return typeof _==="number"&&Number.isFinite(_)?_:null}function DR(_){return typeof _==="boolean"?_:null}function uq(_){return Array.isArray(_)?_.filter(($)=>typeof $==="string"):[]}function RR(_){let $=V6(_),g=V_($.observed_at),U=V_($.source_authority);if(!g||!U)return null;return{observed_at:g,verified_at:V_($.verified_at),expires_at:V_($.expires_at),ttl_ms:wq($.ttl_ms),source_authority:U,confidence:V_($.confidence),cacheable:$.cacheable===!0,stale:$.stale===!0,reasons:uq($.reasons)}}function GR(_,$){if(!_||_.stale)return!1;if(!_.expires_at)return!0;let g=Date.parse(_.expires_at),U=Date.parse($);return Number.isNaN(g)||Number.isNaN(U)||g>U}function fq(_,$){return V_($.source)===_.source&&V_($.target)===_.target&&V_($.route)===_.route&&V_($.target_kind)===_.targetKind&&V_($.confidence)===_.confidence}function xq(_,$){return V_($.source)===_.source&&V_($.requested_machine_id)===_.requested_machine_id&&V_($.machine_id)===_.machine_id&&V_($.project_id)===_.project_id&&V_($.repo_name)===_.repo_name&&V_($.project_root)===_.project_root&&V_($.project_root_source)===_.project_root_source&&V_($.workspace_root)===_.workspace_root&&V_($.workspace_root_source)===_.workspace_root_source&&V_($.open_files_root)===_.open_files_root&&V_($.open_files_root_source)===_.open_files_root_source&&V_($.trust_status)===_.trust_status&&V_($.auth_status)===_.auth_status&&DR($.current)===_.current&&DR($.primary)===_.primary}function yq(_,$,g){if(!_)return null;let U=RR($.cacheability);if(U&&GR(U,g)&&fq(_,$))return{..._,cacheability:U};return _}function cq(_,$,g){if(!_)return null;let U=RR($.cacheability);if(U&&GR(U,g)&&xq(_,$))return{..._,cacheability:U};return _}function hq(_){return _.workspace?.machine_id??_.workspace?.requested_machine_id??_.machineId??_.route?.target??jR()}function nq(_,$){let g=new Set,U=Array.isArray($.sources)?$.sources:[];for(let D of U)if(typeof D==="string")g.add(D);if(typeof $.source==="string")g.add($.source);if(_.route?.source)g.add(_.route.source);if(_.workspace?.source)g.add(_.workspace.source);return g.add("knowledge"),[...g].sort()}function UR(_,$){if($?.target&&($.route==="tailscale"||$.targetKind==="tailscale"))return $.target;return _?.tailscale_dns??null}function dq(_,$,g){let U=V6($.resolver_evidence),D=_.route?AI({source:_.route.source,target:_.route.target,route:_.route.route,target_kind:_.route.targetKind,confidence:_.route.confidence,adapter:_.route.adapter,evidence:_.route.evidence,cacheability:_.route.cacheability,warnings:_.route.warnings}):V6(U.route),I=_.workspace?AI({source:_.workspace.source,requested_machine_id:_.workspace.requested_machine_id,machine_id:_.workspace.machine_id,project_id:_.workspace.project_id,repo_name:_.workspace.repo_name,project_root:_.workspace.project_root,project_root_source:_.workspace.project_root_source,workspace_root:_.workspace.workspace_root,workspace_root_source:_.workspace.workspace_root_source,open_files_root:_.workspace.open_files_root,open_files_root_source:_.workspace.open_files_root_source,trust_status:_.workspace.trust_status,auth_status:_.workspace.auth_status,current:_.workspace.current,primary:_.workspace.primary,diagnostics:_.workspace.diagnostics,repair_hints:_.workspace.repair_hints,evidence:_.workspace.evidence,cacheability:_.workspace.cacheability,warnings:_.workspace.warnings}):V6(U.workspace);return AI({...U,recorded_at:g,route:D,workspace:I})}function XR(_,$){c(_);let g=v(_);try{let U=hq($),D=g.query("SELECT * FROM knowledge_machines WHERE machine_id = ?").get(U)??null,I=u$($.now),j=CN(D?.capabilities_json),E=CN(D?.metadata_json),A=V6(j.resolver),O=V6(E.resolver_evidence),P=V6(O.route),W=V6(O.workspace),z=yq($.route?.source==="registry"?null:$.route??null,P,I),S=cq($.workspace?.source==="registry"?null:$.workspace??null,W,I),L={...$,route:z,workspace:S},J={...j,resolver:AI({...A,route_source:z?.source??A.route_source,route_kind:z?.route??A.route_kind,route_target_kind:z?.targetKind??A.route_target_kind,route_confidence:z?.confidence??A.route_confidence,route_cacheable:z?.cacheability?.cacheable??A.route_cacheable,route_stale:z?.cacheability?.stale??A.route_stale,route_expires_at:z?.cacheability?.expires_at??A.route_expires_at,route_observed_at:z?.cacheability?.observed_at??A.route_observed_at,route_source_authority:z?.cacheability?.source_authority??A.route_source_authority,workspace_source:S?.source??A.workspace_source,project_root_source:S?.project_root_source??A.project_root_source,workspace_root_source:S?.workspace_root_source??A.workspace_root_source,open_files_root_source:S?.open_files_root_source??A.open_files_root_source,trust_status:S?.trust_status??A.trust_status,auth_status:S?.auth_status??A.auth_status,workspace_cacheable:S?.cacheability?.cacheable??A.workspace_cacheable,workspace_stale:S?.cacheability?.stale??A.workspace_stale,workspace_expires_at:S?.cacheability?.expires_at??A.workspace_expires_at,workspace_observed_at:S?.cacheability?.observed_at??A.workspace_observed_at,workspace_source_authority:S?.cacheability?.source_authority??A.workspace_source_authority}),route_fallback:Boolean(z?.target??D?.ssh_target),workspace_fallback:Boolean(S?.project_root??D?.workspace_home)},R=dq(L,E,I);if(D){let G=O;if(D.workspace_home===(S?.project_root??D.workspace_home??null)&&D.tailscale_dns===UR(D,z)&&D.ssh_target===(z?.target??D.ssh_target??null)&&K4(CN(D.capabilities_json))===K4(J)&&K4(gR(G))===K4(gR(R)))return D}let X={machine_id:U,hostname:D?.hostname??null,platform:D?.platform??null,user_label:D?.user_label??null,workspace_home:S?.project_root??D?.workspace_home??null,tailscale_dns:UR(D,z),tailscale_ips_json:JSON.stringify(vq(D?.tailscale_ips_json)),ssh_target:z?.target??D?.ssh_target??null,last_seen_at:I,capabilities_json:JSON.stringify(J),metadata_json:JSON.stringify({...E,source:"knowledge",sources:nq(L,E),resolver_evidence:R}),created_at:D?.created_at??I,updated_at:I};return YR(g,X),X}finally{g.close()}}function YR(_,$){_.query(` INSERT INTO knowledge_machines ( machine_id, hostname, platform, user_label, workspace_home, tailscale_dns, tailscale_ips_json, ssh_target, last_seen_at, capabilities_json, @@ -871,15 +871,15 @@ ${W}`;else{let{generateText:Q}=await import("ai"),T=await yD(g,{config:$.config, capabilities_json = excluded.capabilities_json, metadata_json = excluded.metadata_json, updated_at = excluded.updated_at - `).run($.machine_id,$.hostname,$.platform,$.user_label,$.workspace_home,$.tailscale_dns,$.tailscale_ips_json,$.ssh_target,$.last_seen_at,$.capabilities_json,$.metadata_json,$.created_at,$.updated_at)}function rB(_,$,D=u$()){for(let U of $.machines)SX(_,BB(U,D));return $.machines.length}function fE(_){h(_);let $=r(_);try{return $.query("SELECT * FROM knowledge_machines ORDER BY machine_id ASC").all()}finally{$.close()}}function tD(_){h(_.dbPath);let $=r(_.dbPath),D=[],U=u$(_.now),g=UX(_.machineId),I=_.recordClocks!==!1;try{let j=IX($,jX(_.tables)),O=$.query(`SELECT id, artifact_uri, kind, content_type, hash, size_bytes, metadata_json + `).run($.machine_id,$.hostname,$.platform,$.user_label,$.workspace_home,$.tailscale_dns,$.tailscale_ips_json,$.ssh_target,$.last_seen_at,$.capabilities_json,$.metadata_json,$.created_at,$.updated_at)}function mq(_,$,g=u$()){for(let U of $.machines)YR(_,Cq(U,g));return $.machines.length}function cN(_){c(_);let $=v(_);try{return $.query("SELECT * FROM knowledge_machines ORDER BY machine_id ASC").all()}finally{$.close()}}function l0(_){c(_.dbPath);let $=v(_.dbPath),g=[],U=u$(_.now),D=AR(_.machineId),I=_.recordClocks!==!1;try{let j=OR($,PR(_.tables)),A=$.query(`SELECT id, artifact_uri, kind, content_type, hash, size_bytes, metadata_json FROM storage_objects - ORDER BY artifact_uri ASC`).all().map((P)=>{let S=GB(P,_.storage.local_layout.directories.artifacts),X={...P,key:S};if(_.includeArtifactContent!==!1&&S&&P.artifact_uri.startsWith("file://"))try{let G=DX(P.artifact_uri);if(sq(G))if(!QB(P.content_type,S))D.push(`artifact_content_not_embedded_binary:${P.id}`);else{let R=_B(G,"utf8"),V=q_(R);if(V!==R)D.push(`artifact_content_redacted:${P.id}`);X.content_base64=Buffer.from(V,"utf8").toString("base64"),X.hash=nD(V),X.size_bytes=Buffer.byteLength(V)}else D.push(`artifact_missing:${P.artifact_uri}`)}catch(G){D.push(`artifact_read_failed:${P.artifact_uri}:${G instanceof Error?G.message:String(G)}`)}else if(_.includeArtifactContent!==!1&&P.artifact_uri.startsWith("s3://"))D.push(`artifact_content_not_embedded:${P.artifact_uri}`);return X=q_(X),X}),A=O4(O),L=j.filter((P)=>!lD.has(P)).map((P)=>({table:P,primary_keys:iD[P],rows:NX($,P).map((S)=>q_(S))})),z=L.map((P)=>OB($,{table:P.table,machineId:g,highWaterHash:JI(P.table,P.rows,A),rowCount:P.rows.length,record:I,now:U})),W=nD(V0({source:{scope:_.scope,workspace_home:q_(_.workspaceHome),sqlite_schema_version:r_($),machine_id:g,artifact_root_uri:q_(_.storage.artifact_store.uri_prefix)},tables:L.map((P)=>({table:P.table,primary_keys:P.primary_keys,rows:P.rows.map((S)=>({key:E4(P.table,S),hash:N4(S,A)})).sort((S,X)=>S.key.localeCompare(X.key))})),table_clocks:z.map((P)=>({table:P.table,machine_id:P.machine_id,logical_clock:P.logical_clock,high_water_hash:P.high_water_hash,row_count:P.row_count})),artifacts:O.map((P)=>({identity:SI(P),fingerprint:B6(P)})).sort((P,S)=>P.identity.localeCompare(S.identity))})),J=`syncbundle_${W.replace("sha256:","").slice(0,32)}`;for(let P of z)AB($,P,J,I,U);return{ok:!0,format:"knowledge-sync-bundle",version:1,protocol_version:K6,min_protocol_version:F6,bundle_id:J,content_hash:W,generated_at:U,source:{scope:_.scope,workspace_home:q_(_.workspaceHome),sqlite_schema_version:r_($),machine_id:g,artifact_root_uri:q_(_.storage.artifact_store.uri_prefix)},table_clocks:z,tables:L,artifacts:O,warnings:q_(D),message:`${L.reduce((P,S)=>P+S.rows.length,0)} row(s), ${O.length} artifact(s) exported`}}finally{$.close()}}function fB(_,$){let D=typeof _.protocol_version==="number"?_.protocol_version:null,U=typeof _.min_protocol_version==="number"?_.min_protocol_version:null;if(D===null||U===null||DK6)throw Error(`Unsupported ${$} protocol. Expected knowledge sync protocol v${K6} with min v${F6}.`)}function wB(_){if(!_||_.format!=="knowledge-sync-bundle"||_.version!==1)throw Error("Invalid knowledge sync bundle.");fB(_,"knowledge sync bundle")}function wE(_,$){return _.tables.find((D)=>D.table===$)??null}function WX(_){if(typeof _.content_hash==="string"&&_.content_hash.length>0)return _.content_hash;return nD(V0({source:_.source,tables:_.tables.map(($)=>({table:$.table,rows:$.rows.map((D)=>({key:E4($.table,D),hash:N4(D,O4(_.artifacts))})).sort((D,U)=>D.key.localeCompare(U.key))})),artifacts:_.artifacts.map(($)=>({identity:SI($),fingerprint:B6($)})).sort(($,D)=>$.identity.localeCompare(D.identity))}))}function uB(_){if(typeof _.bundle_id==="string"&&_.bundle_id.length>0)return _.bundle_id;return`syncbundle_${WX(_).replace("sha256:","").slice(0,32)}`}function xB(_,$){return new Map($.map((D)=>[E4(_,D),D]))}function yB(_){return new Map(_.artifacts.map(($)=>[SI($),$]))}async function hB(_){let $=yB(_.targetBundle),D=new Map,U=[],g={source_artifacts:_.bundle.artifacts.length,target_artifacts:_.targetBundle.artifacts.length,copied:0,skipped:0,conflicts:0,missing_content:0};for(let I of _.bundle.artifacts){let j=SI(I),N=$.get(j);if(N&&B6(N)===B6(I)){if(N.artifact_uri)D.set(I.artifact_uri,N.artifact_uri);g.skipped+=1;continue}if(N&&B6(N)!==B6(I)){let P={entityKind:"storage_object",entityId:j,localMachineId:_.localMachineId,remoteMachineId:_.bundle.source.machine_id??"unknown",localHash:B6(N),remoteHash:B6(I),metadata:{direction:_.direction,target_artifact_uri:N.artifact_uri,source_artifact_uri:I.artifact_uri,local_artifact:dD(N),remote_artifact:dD(I)}};if(kE(_.db,P)){g.skipped+=1;continue}g.conflicts+=1,U.push(P);continue}let O=Boolean(I.key&&I.content_base64),A=TB(I,_.targetStorage);if(!O&&!A){g.missing_content+=1,_.warnings.push(`artifact_content_missing:${I.artifact_uri}`);continue}if(_.dryRun){g.copied+=1;continue}let L=I.artifact_uri;if(O&&I.key&&I.content_base64)L=(await _.targetStore.put({key:I.key,body:Buffer.from(I.content_base64,"base64"),content_type:I.content_type??void 0})).uri,D.set(I.artifact_uri,L);else if(A)D.set(I.artifact_uri,L);let z=PI(I.metadata_json,{}),W=typeof z.artifact_modified_at==="string"?z.artifact_modified_at:void 0,J={uri:L,key:I.key??z.key??I.artifact_uri,kind:I.kind,content_type:I.content_type??void 0,hash:I.hash??void 0,size_bytes:I.size_bytes??void 0,modified_at:W,metadata:{...z,synced_from_artifact_uri:I.artifact_uri,synced_from_machine_id:_.bundle.source.machine_id??void 0}};s$(_.db,[J]),g.copied+=1}return{result:g,uriMap:D,conflicts:U}}function bE(_,$){let D={..._};if(typeof D.artifact_uri==="string"&&$.has(D.artifact_uri))D.artifact_uri=$.get(D.artifact_uri);return D}function cB(_,$){let D=u$();_.query(` + ORDER BY artifact_uri ASC`).all().map((L)=>{let J=bq(L,_.storage.local_layout.directories.artifacts),R={...L,key:J};if(_.includeArtifactContent!==!1&&J&&L.artifact_uri.startsWith("file://"))try{let X=ER(L.artifact_uri);if(Aq(X))if(!Zq(L.content_type,J))g.push(`artifact_content_not_embedded_binary:${L.id}`);else{let G=Oq(X,"utf8"),B=T_(G);if(B!==G)g.push(`artifact_content_redacted:${L.id}`);R.content_base64=Buffer.from(B,"utf8").toString("base64"),R.hash=h0(B),R.size_bytes=Buffer.byteLength(B)}else g.push(`artifact_missing:${L.artifact_uri}`)}catch(X){g.push(`artifact_read_failed:${L.artifact_uri}:${X instanceof Error?X.message:String(X)}`)}else if(_.includeArtifactContent!==!1&&L.artifact_uri.startsWith("s3://"))g.push(`artifact_content_not_embedded:${L.artifact_uri}`);return R=T_(R),R}),O=Og(A),P=j.filter((L)=>!i0.has(L)).map((L)=>({table:L,primary_keys:m0[L],rows:SR($,L).map((J)=>T_(J))})),W=P.map((L)=>Xq($,{table:L.table,machineId:D,highWaterHash:PI(L.table,L.rows,O),rowCount:L.rows.length,record:I,now:U})),z=h0(q4({source:{scope:_.scope,workspace_home:T_(_.workspaceHome),sqlite_schema_version:k_($),machine_id:D,artifact_root_uri:T_(_.storage.artifact_store.uri_prefix)},tables:P.map((L)=>({table:L.table,primary_keys:L.primary_keys,rows:L.rows.map((J)=>({key:Ag(L.table,J),hash:Ng(J,O)})).sort((J,R)=>J.key.localeCompare(R.key))})),table_clocks:W.map((L)=>({table:L.table,machine_id:L.machine_id,logical_clock:L.logical_clock,high_water_hash:L.high_water_hash,row_count:L.row_count})),artifacts:A.map((L)=>({identity:WI(L),fingerprint:B6(L)})).sort((L,J)=>L.identity.localeCompare(J.identity))})),S=`syncbundle_${z.replace("sha256:","").slice(0,32)}`;for(let L of W)Yq($,L,S,I,U);return{ok:!0,format:"knowledge-sync-bundle",version:1,protocol_version:F6,min_protocol_version:r6,bundle_id:S,content_hash:z,generated_at:U,source:{scope:_.scope,workspace_home:T_(_.workspaceHome),sqlite_schema_version:k_($),machine_id:D,artifact_root_uri:T_(_.storage.artifact_store.uri_prefix)},table_clocks:W,tables:P,artifacts:A,warnings:T_(g),message:`${P.reduce((L,J)=>L+J.rows.length,0)} row(s), ${A.length} artifact(s) exported`}}finally{$.close()}}function iq(_,$){let g=typeof _.protocol_version==="number"?_.protocol_version:null,U=typeof _.min_protocol_version==="number"?_.min_protocol_version:null;if(g===null||U===null||gF6)throw Error(`Unsupported ${$} protocol. Expected knowledge sync protocol v${F6} with min v${r6}.`)}function lq(_){if(!_||_.format!=="knowledge-sync-bundle"||_.version!==1)throw Error("Invalid knowledge sync bundle.");iq(_,"knowledge sync bundle")}function hN(_,$){return _.tables.find((g)=>g.table===$)??null}function QR(_){if(typeof _.content_hash==="string"&&_.content_hash.length>0)return _.content_hash;return h0(q4({source:_.source,tables:_.tables.map(($)=>({table:$.table,rows:$.rows.map((g)=>({key:Ag($.table,g),hash:Ng(g,Og(_.artifacts))})).sort((g,U)=>g.key.localeCompare(U.key))})),artifacts:_.artifacts.map(($)=>({identity:WI($),fingerprint:B6($)})).sort(($,g)=>$.identity.localeCompare(g.identity))}))}function tq(_){if(typeof _.bundle_id==="string"&&_.bundle_id.length>0)return _.bundle_id;return`syncbundle_${QR(_).replace("sha256:","").slice(0,32)}`}function oq(_,$){return new Map($.map((g)=>[Ag(_,g),g]))}function pq(_){return new Map(_.artifacts.map(($)=>[WI($),$]))}async function eq(_){let $=pq(_.targetBundle),g=new Map,U=[],D={source_artifacts:_.bundle.artifacts.length,target_artifacts:_.targetBundle.artifacts.length,copied:0,skipped:0,conflicts:0,missing_content:0};for(let I of _.bundle.artifacts){let j=WI(I),E=$.get(j);if(E&&B6(E)===B6(I)){if(E.artifact_uri)g.set(I.artifact_uri,E.artifact_uri);D.skipped+=1;continue}if(E&&B6(E)!==B6(I)){let L={entityKind:"storage_object",entityId:j,localMachineId:_.localMachineId,remoteMachineId:_.bundle.source.machine_id??"unknown",localHash:B6(E),remoteHash:B6(I),metadata:{direction:_.direction,target_artifact_uri:E.artifact_uri,source_artifact_uri:I.artifact_uri,local_artifact:n0(E),remote_artifact:n0(I)}};if(uN(_.db,L)){D.skipped+=1;continue}D.conflicts+=1,U.push(L);continue}let A=Boolean(I.key&&I.content_base64),O=Hq(I,_.targetStorage);if(!A&&!O){D.missing_content+=1,_.warnings.push(`artifact_content_missing:${I.artifact_uri}`);continue}if(_.dryRun){D.copied+=1;continue}let P=I.artifact_uri;if(A&&I.key&&I.content_base64)P=(await _.targetStore.put({key:I.key,body:Buffer.from(I.content_base64,"base64"),content_type:I.content_type??void 0})).uri,g.set(I.artifact_uri,P);else if(O)g.set(I.artifact_uri,P);let W=SI(I.metadata_json,{}),z=typeof W.artifact_modified_at==="string"?W.artifact_modified_at:void 0,S={uri:P,key:I.key??W.key??I.artifact_uri,kind:I.kind,content_type:I.content_type??void 0,hash:I.hash??void 0,size_bytes:I.size_bytes??void 0,modified_at:z,metadata:{...W,synced_from_artifact_uri:I.artifact_uri,synced_from_machine_id:_.bundle.source.machine_id??void 0}};_6(_.db,[S]),D.copied+=1}return{result:D,uriMap:g,conflicts:U}}function vN(_,$){let g={..._};if(typeof g.artifact_uri==="string"&&$.has(g.artifact_uri))g.artifact_uri=$.get(g.artifact_uri);return g}function aq(_,$){let g=u$();_.query(` INSERT INTO knowledge_sync_changes ( id, origin_machine_id, updated_by_machine_id, entity_kind, entity_id, operation, base_hash, next_hash, source_ref, source_revision_id, artifact_uri, logical_clock, bundle_id, metadata_json, created_at ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - `).run(vE("syncchg"),$.sourceMachineId,$.localMachineId,$.entityKind,$.entityId,$.direction,null,$.nextHash,typeof $.row?.source_ref==="string"?$.row.source_ref:typeof $.row?.source_uri==="string"?$.row.source_uri:null,typeof $.row?.source_revision_id==="string"?$.row.source_revision_id:null,typeof $.row?.artifact_uri==="string"?$.row.artifact_uri:null,$.logicalClock,$.bundleId,JSON.stringify({source_machine_id:$.sourceMachineId,bundle_id:$.bundleId}),D)}function kE(_,$){let D=$.localHash??"",U=$.remoteHash??"";if(_.query(` + `).run(xN("syncchg"),$.sourceMachineId,$.localMachineId,$.entityKind,$.entityId,$.direction,null,$.nextHash,typeof $.row?.source_ref==="string"?$.row.source_ref:typeof $.row?.source_uri==="string"?$.row.source_uri:null,typeof $.row?.source_revision_id==="string"?$.row.source_revision_id:null,typeof $.row?.artifact_uri==="string"?$.row.artifact_uri:null,$.logicalClock,$.bundleId,JSON.stringify({source_machine_id:$.sourceMachineId,bundle_id:$.bundleId}),g)}function uN(_,$){let g=$.localHash??"",U=$.remoteHash??"";if(_.query(` SELECT id FROM knowledge_sync_conflicts WHERE entity_kind = ? AND entity_id = ? @@ -890,7 +890,7 @@ ${W}`;else{let{generateText:Q}=await import("ai"),T=await yD(g,{config:$.config, AND status IN ('resolved', 'ignored') AND resolved_at IS NOT NULL LIMIT 1 - `).get($.entityKind,$.entityId,$.localMachineId,$.remoteMachineId,D,U))return!0;let I=_.query(` + `).get($.entityKind,$.entityId,$.localMachineId,$.remoteMachineId,g,U))return!0;let I=_.query(` SELECT id FROM knowledge_sync_conflicts WHERE entity_kind = ? AND entity_id = ? @@ -901,7 +901,7 @@ ${W}`;else{let{generateText:Q}=await import("ai"),T=await yD(g,{config:$.config, AND status IN ('resolved', 'ignored') AND resolved_at IS NOT NULL LIMIT 1 - `).get($.entityKind,$.entityId,$.remoteMachineId,$.localMachineId,U,D);return Boolean(I)}function HE(_,$){if(_.query(` + `).get($.entityKind,$.entityId,$.remoteMachineId,$.localMachineId,U,g);return Boolean(I)}function wN(_,$){if(_.query(` SELECT id FROM knowledge_sync_conflicts WHERE entity_kind = ? AND entity_id = ? @@ -918,7 +918,7 @@ ${W}`;else{let{generateText:Q}=await import("ai"),T=await yD(g,{config:$.config, local_hash, remote_hash, base_hash, status, resolution_strategy, proposed_patch_uri, approved_by, resolved_at, metadata_json, created_at ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - `).run(vE("syncconf"),$.entityKind,$.entityId,$.localMachineId,$.remoteMachineId,$.localHash??null,$.remoteHash??null,$.baseHash??null,$.status??"open",$.resolutionStrategy??null,$.proposedPatchUri??null,$.approvedBy??null,$.resolvedAt??null,JSON.stringify($.metadata??{}),U),!0}function nB(_,$){return _.query("SELECT * FROM knowledge_sync_imports WHERE bundle_id = ?").get($)??null}function dB(_,$){let D=$.now??u$();_.query(` + `).run(xN("syncconf"),$.entityKind,$.entityId,$.localMachineId,$.remoteMachineId,$.localHash??null,$.remoteHash??null,$.baseHash??null,$.status??"open",$.resolutionStrategy??null,$.proposedPatchUri??null,$.approvedBy??null,$.resolvedAt??null,JSON.stringify($.metadata??{}),U),!0}function sq(_,$){return _.query("SELECT * FROM knowledge_sync_imports WHERE bundle_id = ?").get($)??null}function _B(_,$){let g=$.now??u$();_.query(` INSERT INTO knowledge_sync_imports ( bundle_id, source_machine_id, target_machine_id, direction, status, content_hash, table_clocks_json, tables_json, generated_at, applied_at, @@ -928,13 +928,13 @@ ${W}`;else{let{generateText:Q}=await import("ai"),T=await yD(g,{config:$.config, status = excluded.status, applied_at = excluded.applied_at, metadata_json = excluded.metadata_json - `).run($.bundleId,$.sourceMachineId,$.targetMachineId,$.direction,$.status,$.contentHash,JSON.stringify($.bundle.table_clocks??[]),JSON.stringify($.tableResults),$.bundle.generated_at,D,JSON.stringify({conflicts:$.conflicts,artifacts:$.artifacts,source_workspace_home:$.bundle.source.workspace_home}))}function mB(_){return{ok:!0,protocol_version:K6,min_protocol_version:F6,dry_run:!1,direction:_.direction,source:_.bundle.source,target:{scope:_.targetScope,workspace_home:_.targetWorkspaceHome,sqlite_schema_version:_.targetBundle.source.sqlite_schema_version,artifact_root_uri:_.targetStorage.artifact_store.uri_prefix},tables:_.bundle.tables.filter(($)=>!lD.has($.table)).map(($)=>({table:$.table,source_rows:$.rows.length,target_rows:wE(_.targetBundle,$.table)?.rows.length??0,inserted:0,updated:0,deleted:0,skipped:$.rows.length,conflicts:0,stale_skipped:0})),artifacts:{source_artifacts:_.bundle.artifacts.length,target_artifacts:_.targetBundle.artifacts.length,copied:0,skipped:_.bundle.artifacts.length,conflicts:0,missing_content:0},conflicts_created:0,bundle_id:_.bundleId,replayed:!0,clocks:{advanced:0,stale_tables:0},warnings:[..._.warnings,`bundle_replay_skipped:${_.bundleId}`],message:`Skipped already-applied bundle ${_.bundleId}`}}function iB(_,$){let D=O4(_.artifacts),U=O4($.artifacts);for(let g of _.tables){if(lD.has(g.table))continue;let I=wE($,g.table),N=EX(_,g.table)?.high_water_hash??JI(g.table,g.rows,D);if(JI(g.table,I?.rows??[],U)!==N)return!1}return!0}async function WI(_){wB(_.bundle),h(_.targetDbPath);let $=[..._.bundle.warnings],D=_.dryRun===!0,U=UX(_.localMachineId),g=_.bundle.source.machine_id??"unknown",I=uB(_.bundle),j=WX(_.bundle),N=_.targetBundle??tD({dbPath:_.targetDbPath,scope:_.targetScope,workspaceHome:_.targetWorkspaceHome,storage:_.targetStorage,machineId:U,includeArtifactContent:!1,recordClocks:!D}),O=r(_.targetDbPath);try{if(!D&&nB(O,I)&&iB(_.bundle,N))return mB({bundle:_.bundle,targetBundle:N,targetScope:_.targetScope,targetWorkspaceHome:_.targetWorkspaceHome,targetStorage:_.targetStorage,direction:_.direction,warnings:$,bundleId:I});let A=await hB({db:O,bundle:_.bundle,targetBundle:N,targetStorage:_.targetStorage,targetStore:_.targetStore,dryRun:D,direction:_.direction,localMachineId:U,warnings:$}),L=O4(_.bundle.artifacts),z=O4(N.artifacts),W=[],J=0,P=0,S=0;for(let R of _.bundle.tables){if(R.table==="storage_objects"||lD.has(R.table))continue;if(!J$(O,R.table))continue;let V=EX(_.bundle,R.table),Q=mD(O,R.table,g),T=wE(N,R.table),q=xB(R.table,T?.rows??[]),K=new Set(R.rows.map((I_)=>E4(R.table,I_))),Z=PB(O,R.table,g),e=[],g_={table:R.table,source_rows:R.rows.length,target_rows:T?.rows.length??0,inserted:0,updated:0,deleted:0,skipped:0,conflicts:0,stale_skipped:0};if(!V)$.push(`legacy_clock_missing:${R.table}`);else if(LB(Q,V)){S+=1,g_.skipped+=R.rows.length,g_.stale_skipped=R.rows.length,$.push(`stale_table_skipped:${R.table}:${g}:${V.logical_clock}`),W.push(g_);continue}for(let I_ of R.rows){let J_=E4(R.table,I_),a=q.get(J_),v_=N4(I_,L);if(!a){g_.inserted+=1,e.push(bE(I_,A.uriMap));continue}let V_=N4(a,z);if(V_===v_){g_.skipped+=1;continue}let G_=Z.get(J_);if(Z.has(J_)&&G_===V_){g_.updated+=1,e.push(bE(I_,A.uriMap));continue}let H_={entityKind:R.table,entityId:J_,localMachineId:U,remoteMachineId:g,localHash:V_,remoteHash:v_,baseHash:Q?.high_water_hash??null,metadata:{direction:_.direction,bundle_id:I,incoming_logical_clock:V?.logical_clock??null,current_logical_clock:Q?.logical_clock??null,source_workspace_home:_.bundle.source.workspace_home,target_workspace_home:_.targetWorkspaceHome,local_row:cD(a),remote_row:cD(I_)}};if(kE(O,H_)){g_.skipped+=1;continue}if(g_.conflicts+=1,!D&&HE(O,H_))J+=1}if(!D&&e.length>0){let I_=e.map((J_)=>bE(J_,A.uriMap));JB(O,R.table,I_),XB(O,R.table,I_);for(let J_ of I_)cB(O,{direction:_.direction,sourceMachineId:_.bundle.source.machine_id??"unknown",localMachineId:U,entityKind:R.table,entityId:E4(R.table,J_),nextHash:N4(J_,O4(_.bundle.artifacts)),logicalClock:V?.logical_clock??0,bundleId:I,row:J_})}for(let[I_,J_]of Z){if(K.has(I_))continue;let a=q.get(I_);if(!a)continue;let v_=N4(a,z);if(J_&&v_!==J_){let V_={entityKind:R.table,entityId:I_,localMachineId:U,remoteMachineId:g,localHash:v_,remoteHash:null,baseHash:J_,metadata:{direction:_.direction,bundle_id:I,reason:"remote_owned_row_missing_from_incoming_bundle",source_workspace_home:_.bundle.source.workspace_home,target_workspace_home:_.targetWorkspaceHome,local_row:cD(a),remote_row:null}};if(kE(O,V_)){g_.skipped+=1;continue}if(g_.conflicts+=1,!D&&HE(O,V_))J+=1;continue}if(g_.deleted+=1,!D)SB(O,R.table,I_)}if(!D&&V)zI(O,{table:R.table,machineId:g,logicalClock:V.logical_clock,highWaterHash:V.high_water_hash,highWaterBundleId:I,originMachineId:g,updatedByMachineId:U,lastAppliedAt:u$(),metadata:{source:"import",direction:_.direction,row_count:R.rows.length,inserted:g_.inserted,updated:g_.updated,deleted:g_.deleted,skipped:g_.skipped,conflicts:g_.conflicts}}),P+=1;W.push(g_)}for(let R of A.conflicts)if(!D){if(HE(O,{...R,baseHash:R.baseHash??null,metadata:{...R.metadata,bundle_id:I}}))J+=1}let X=W.reduce((R,V)=>R+V.inserted,0),G=W.reduce((R,V)=>R+V.conflicts,0)+A.result.conflicts;if(!D)dB(O,{bundle:_.bundle,bundleId:I,contentHash:j,sourceMachineId:g,targetMachineId:U,direction:_.direction,status:G===0?"applied":"conflicted",tableResults:W,conflicts:G,artifacts:A.result});return{ok:G===0,protocol_version:K6,min_protocol_version:F6,dry_run:D,direction:_.direction,source:_.bundle.source,target:{scope:_.targetScope,workspace_home:_.targetWorkspaceHome,sqlite_schema_version:r_(O),artifact_root_uri:_.targetStorage.artifact_store.uri_prefix},tables:W,artifacts:A.result,conflicts_created:J,bundle_id:I,replayed:!1,clocks:{advanced:P,stale_tables:S},warnings:$,message:`${_.dryRun?"Would import":"Imported"} ${X} row(s), copied ${A.result.copied} artifact(s), ${G} conflict(s)`}}finally{O.close()}}function XX(_){h(_.dbPath);let $=r(_.dbPath),D=u$(_.now);try{let U=_.topology?rB($,_.topology,D):0,g=LX($),I=q_(qB($)),j=_.machineId??_.topology?.local_machine_id??"unknown",N=q_(_.storage.artifact_store.uri_prefix),O=q_(_.workspaceHome),A=nD(V0({machine_id:j,scope:_.scope,workspace_home:O,sqlite_schema_version:r_($),artifact_root_uri:N,tables:g,artifacts:I})),L={id:vE("syncsnap"),machine_id:j,scope:_.scope,workspace_home:O,sqlite_schema_version:r_($),artifact_root_uri:N,content_hash:A,tables_json:JSON.stringify(g),artifact_hashes_json:JSON.stringify(I),created_at:D};$.query(` + `).run($.bundleId,$.sourceMachineId,$.targetMachineId,$.direction,$.status,$.contentHash,JSON.stringify($.bundle.table_clocks??[]),JSON.stringify($.tableResults),$.bundle.generated_at,g,JSON.stringify({conflicts:$.conflicts,artifacts:$.artifacts,source_workspace_home:$.bundle.source.workspace_home}))}function $B(_){return{ok:!0,protocol_version:F6,min_protocol_version:r6,dry_run:!1,direction:_.direction,source:_.bundle.source,target:{scope:_.targetScope,workspace_home:_.targetWorkspaceHome,sqlite_schema_version:_.targetBundle.source.sqlite_schema_version,artifact_root_uri:_.targetStorage.artifact_store.uri_prefix},tables:_.bundle.tables.filter(($)=>!i0.has($.table)).map(($)=>({table:$.table,source_rows:$.rows.length,target_rows:hN(_.targetBundle,$.table)?.rows.length??0,inserted:0,updated:0,deleted:0,skipped:$.rows.length,conflicts:0,stale_skipped:0})),artifacts:{source_artifacts:_.bundle.artifacts.length,target_artifacts:_.targetBundle.artifacts.length,copied:0,skipped:_.bundle.artifacts.length,conflicts:0,missing_content:0},conflicts_created:0,bundle_id:_.bundleId,replayed:!0,clocks:{advanced:0,stale_tables:0},warnings:[..._.warnings,`bundle_replay_skipped:${_.bundleId}`],message:`Skipped already-applied bundle ${_.bundleId}`}}function gB(_,$){let g=Og(_.artifacts),U=Og($.artifacts);for(let D of _.tables){if(i0.has(D.table))continue;let I=hN($,D.table),E=LR(_,D.table)?.high_water_hash??PI(D.table,D.rows,g);if(PI(D.table,I?.rows??[],U)!==E)return!1}return!0}async function JI(_){lq(_.bundle),c(_.targetDbPath);let $=[..._.bundle.warnings],g=_.dryRun===!0,U=AR(_.localMachineId),D=_.bundle.source.machine_id??"unknown",I=tq(_.bundle),j=QR(_.bundle),E=_.targetBundle??l0({dbPath:_.targetDbPath,scope:_.targetScope,workspaceHome:_.targetWorkspaceHome,storage:_.targetStorage,machineId:U,includeArtifactContent:!1,recordClocks:!g}),A=v(_.targetDbPath);try{if(!g&&sq(A,I)&&gB(_.bundle,E))return $B({bundle:_.bundle,targetBundle:E,targetScope:_.targetScope,targetWorkspaceHome:_.targetWorkspaceHome,targetStorage:_.targetStorage,direction:_.direction,warnings:$,bundleId:I});let O=await eq({db:A,bundle:_.bundle,targetBundle:E,targetStorage:_.targetStorage,targetStore:_.targetStore,dryRun:g,direction:_.direction,localMachineId:U,warnings:$}),P=Og(_.bundle.artifacts),W=Og(E.artifacts),z=[],S=0,L=0,J=0;for(let G of _.bundle.tables){if(G.table==="storage_objects"||i0.has(G.table))continue;if(!P$(A,G.table))continue;let B=LR(_.bundle,G.table),Q=d0(A,G.table,D),T=hN(E,G.table),K=oq(G.table,T?.rows??[]),V=new Set(G.rows.map((j_)=>Ag(G.table,j_))),F=Kq(A,G.table,D),o=[],I_={table:G.table,source_rows:G.rows.length,target_rows:T?.rows.length??0,inserted:0,updated:0,deleted:0,skipped:0,conflicts:0,stale_skipped:0};if(!B)$.push(`legacy_clock_missing:${G.table}`);else if(Qq(Q,B)){J+=1,I_.skipped+=G.rows.length,I_.stale_skipped=G.rows.length,$.push(`stale_table_skipped:${G.table}:${D}:${B.logical_clock}`),z.push(I_);continue}for(let j_ of G.rows){let p=Ag(G.table,j_),$$=K.get(p),H_=Ng(j_,P);if(!$$){I_.inserted+=1,o.push(vN(j_,O.uriMap));continue}let i$=Ng($$,W);if(i$===H_){I_.skipped+=1;continue}let Q_=F.get(p);if(F.has(p)&&Q_===i$){I_.updated+=1,o.push(vN(j_,O.uriMap));continue}let M_={entityKind:G.table,entityId:p,localMachineId:U,remoteMachineId:D,localHash:i$,remoteHash:H_,baseHash:Q?.high_water_hash??null,metadata:{direction:_.direction,bundle_id:I,incoming_logical_clock:B?.logical_clock??null,current_logical_clock:Q?.logical_clock??null,source_workspace_home:_.bundle.source.workspace_home,target_workspace_home:_.targetWorkspaceHome,local_row:c0($$),remote_row:c0(j_)}};if(uN(A,M_)){I_.skipped+=1;continue}if(I_.conflicts+=1,!g&&wN(A,M_))S+=1}if(!g&&o.length>0){let j_=o.map((p)=>vN(p,O.uriMap));Tq(A,G.table,j_),Fq(A,G.table,j_);for(let p of j_)aq(A,{direction:_.direction,sourceMachineId:_.bundle.source.machine_id??"unknown",localMachineId:U,entityKind:G.table,entityId:Ag(G.table,p),nextHash:Ng(p,Og(_.bundle.artifacts)),logicalClock:B?.logical_clock??0,bundleId:I,row:p})}for(let[j_,p]of F){if(V.has(j_))continue;let $$=K.get(j_);if(!$$)continue;let H_=Ng($$,W);if(p&&H_!==p){let i$={entityKind:G.table,entityId:j_,localMachineId:U,remoteMachineId:D,localHash:H_,remoteHash:null,baseHash:p,metadata:{direction:_.direction,bundle_id:I,reason:"remote_owned_row_missing_from_incoming_bundle",source_workspace_home:_.bundle.source.workspace_home,target_workspace_home:_.targetWorkspaceHome,local_row:c0($$),remote_row:null}};if(uN(A,i$)){I_.skipped+=1;continue}if(I_.conflicts+=1,!g&&wN(A,i$))S+=1;continue}if(I_.deleted+=1,!g)Bq(A,G.table,j_)}if(!g&&B)LI(A,{table:G.table,machineId:D,logicalClock:B.logical_clock,highWaterHash:B.high_water_hash,highWaterBundleId:I,originMachineId:D,updatedByMachineId:U,lastAppliedAt:u$(),metadata:{source:"import",direction:_.direction,row_count:G.rows.length,inserted:I_.inserted,updated:I_.updated,deleted:I_.deleted,skipped:I_.skipped,conflicts:I_.conflicts}}),L+=1;z.push(I_)}for(let G of O.conflicts)if(!g){if(wN(A,{...G,baseHash:G.baseHash??null,metadata:{...G.metadata,bundle_id:I}}))S+=1}let R=z.reduce((G,B)=>G+B.inserted,0),X=z.reduce((G,B)=>G+B.conflicts,0)+O.result.conflicts;if(!g)_B(A,{bundle:_.bundle,bundleId:I,contentHash:j,sourceMachineId:D,targetMachineId:U,direction:_.direction,status:X===0?"applied":"conflicted",tableResults:z,conflicts:X,artifacts:O.result});return{ok:X===0,protocol_version:F6,min_protocol_version:r6,dry_run:g,direction:_.direction,source:_.bundle.source,target:{scope:_.targetScope,workspace_home:_.targetWorkspaceHome,sqlite_schema_version:k_(A),artifact_root_uri:_.targetStorage.artifact_store.uri_prefix},tables:z,artifacts:O.result,conflicts_created:S,bundle_id:I,replayed:!1,clocks:{advanced:L,stale_tables:J},warnings:$,message:`${_.dryRun?"Would import":"Imported"} ${R} row(s), copied ${O.result.copied} artifact(s), ${X} conflict(s)`}}finally{A.close()}}function TR(_){c(_.dbPath);let $=v(_.dbPath),g=u$(_.now);try{let U=_.topology?mq($,_.topology,g):0,D=zR($),I=T_(kq($)),j=_.machineId??_.topology?.local_machine_id??"unknown",E=T_(_.storage.artifact_store.uri_prefix),A=T_(_.workspaceHome),O=h0(q4({machine_id:j,scope:_.scope,workspace_home:A,sqlite_schema_version:k_($),artifact_root_uri:E,tables:D,artifacts:I})),P={id:xN("syncsnap"),machine_id:j,scope:_.scope,workspace_home:A,sqlite_schema_version:k_($),artifact_root_uri:E,content_hash:O,tables_json:JSON.stringify(D),artifact_hashes_json:JSON.stringify(I),created_at:g};$.query(` INSERT INTO knowledge_sync_snapshots ( id, machine_id, scope, workspace_home, sqlite_schema_version, artifact_root_uri, content_hash, tables_json, artifact_hashes_json, created_at ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - `).run(L.id,L.machine_id,L.scope,L.workspace_home,L.sqlite_schema_version,L.artifact_root_uri,L.content_hash,L.tables_json,L.artifact_hashes_json,L.created_at);let z=new Map;for(let W of IX($,jX()).filter((J)=>!lD.has(J))){let J=NX($,W).map((G)=>q_(G)),P=JI(W,J,z),S=mD($,W,j),X=S?.high_water_hash===P?S.logical_clock:(S?.logical_clock??0)+1;zI($,{table:W,machineId:j,logicalClock:X,highWaterHash:P,highWaterBundleId:L.id,originMachineId:S?.origin_machine_id??j,updatedByMachineId:j,lastAppliedAt:D,metadata:{source:"snapshot",row_count:J.length},now:D})}return{ok:!0,snapshot:{...L,tables:g,artifact_hashes:I},machines_upserted:U,message:`Recorded sync snapshot ${L.id}`}}finally{$.close()}}function RX(_){h(_.dbPath);let $=r(_.dbPath);try{let D=$.query("SELECT * FROM knowledge_machines ORDER BY machine_id ASC").all(),U=$.query("SELECT * FROM knowledge_sync_snapshots ORDER BY created_at DESC LIMIT 1").get()??null,g=$.query("SELECT status, COUNT(*) AS count FROM knowledge_sync_conflicts GROUP BY status ORDER BY status").all(),I=$.query("SELECT operation, COUNT(*) AS count FROM knowledge_sync_changes GROUP BY operation ORDER BY operation").all(),j=EB($),N=$.query("SELECT * FROM knowledge_sync_imports ORDER BY applied_at DESC LIMIT 1").get()??null,O=g.reduce((L,z)=>L+z.count,0),A=g.filter((L)=>L.status!=="resolved"&&L.status!=="ignored").reduce((L,z)=>L+z.count,0);return{ok:!0,scope:_.scope,workspace_home:q_(_.workspaceHome),sqlite_schema_version:r_($),local_machine_id:_.localMachineId??null,machines:{total:D.length,rows:q_(D)},snapshots:{total:OI($,"knowledge_sync_snapshots"),latest:q_(U)},changes:{total:OI($,"knowledge_sync_changes"),by_operation:I},clocks:{total:j.length,rows:j},imports:{total:OI($,"knowledge_sync_imports"),latest:q_(N)},conflicts:{total:O,by_status:g,open:A},table_counts:LX($),message:`${D.length} machine(s), ${A} open sync conflict(s)`}}finally{$.close()}}function uE(_){return{..._,metadata:PI(_.metadata_json,{})}}function XI(_,$){h(_);let D=r(_);try{let U=D.query("SELECT * FROM knowledge_sync_conflicts WHERE id = ?").get($);return U?uE(U):null}finally{D.close()}}function GX(_,$={}){h(_);let D=r(_),U=Math.max(1,Math.min($.limit??50,200));try{return($.status?D.query("SELECT * FROM knowledge_sync_conflicts WHERE status = ? ORDER BY created_at DESC LIMIT ?").all($.status,U):D.query("SELECT * FROM knowledge_sync_conflicts ORDER BY created_at DESC LIMIT ?").all(U)).map(uE)}finally{D.close()}}function lB(_){return LI.includes(_)?_:null}function tB(_,$){let D=lB($.entity_kind);if(!D||!J$(_,D))return null;let U=OX(D,$.entity_id);if(!U)return null;let g=AX(D);return _.query(`SELECT * FROM ${j$(D)} WHERE ${g} LIMIT 1`).get(...U)}function oB(_,$){for(let D of $){let U=_[D];if(U&&typeof U==="object"&&!Array.isArray(U))return cD(U)}return null}function _X(_,$){if(typeof $!=="string")return;let D=$.trim();if(!D)return;if(D.startsWith("open-files://")||D.startsWith("s3://")||D.startsWith("file://")||D.startsWith("https://")||D.startsWith("http://"))_.add(D)}function CE(_,$=new Set,D=0){if(D>8||_===null||_===void 0)return $;if(typeof _==="string")return _X($,_),$;if(Array.isArray(_)){for(let U of _)CE(U,$,D+1);return $}if(typeof _==="object")for(let[U,g]of Object.entries(_)){if(U==="source_ref"||U==="source_uri"||U==="artifact_uri"||U.endsWith("_uri"))_X($,g);CE(g,$,D+1)}return $}function YX(_){let $=[{id:"conflict",kind:"metadata",ref:`knowledge-sync-conflict://${_.conflict.id}`,hash:_.conflict.base_hash,quote:`Conflict on ${_.conflict.entity_kind}:${_.conflict.entity_id}`}];if(_.localRow)$.push({id:"local-row",kind:"row",ref:`${_.conflict.entity_kind}:${_.conflict.entity_id}:local`,hash:_.conflict.local_hash,quote:JSON.stringify(_.localRow).slice(0,300)});if(_.remoteRow)$.push({id:"remote-row",kind:"row",ref:`${_.conflict.entity_kind}:${_.conflict.entity_id}:remote`,hash:_.conflict.remote_hash,quote:JSON.stringify(_.remoteRow).slice(0,300)});return _.sourceRefs.slice(0,10).forEach((D,U)=>{$.push({id:`source-${U+1}`,kind:D.startsWith("file://")||D.startsWith("s3://")?"artifact":"source_ref",ref:D,hash:null,quote:null})}),$}function QX(_,$){let D=XI(_,$);if(!D)throw Error(`Sync conflict not found: ${$}`);h(_);let U=r(_);try{let g=cD(tB(U,D)),I=oB(D.metadata,["remote_row","source_row","incoming_row"]),N=[...CE({conflict:{entity_kind:D.entity_kind,entity_id:D.entity_id,metadata:D.metadata},local_row:g,remote_row:I})].slice(0,25),O=[{name:"knowledge_sync_conflict_get",input:{id:$},output_summary:`${D.entity_kind}:${D.entity_id} status=${D.status}`},{name:"knowledge_catalog_row_get",input:{table:D.entity_kind,key:D.entity_id},output_summary:g?"local row found":"local row unavailable"},{name:"knowledge_source_ref_extract",input:{id:$},output_summary:`${N.length} source/artifact ref(s) found`}];return{conflict:D,local_row:g,remote_row:I,source_refs:N,citations:YX({conflict:D,localRow:g,remoteRow:I,sourceRefs:N}),read_only_tools:O}}finally{U.close()}}function oD(_,$){let D=XI(_,$);if(!D)throw Error(`Sync conflict not found: ${$}`);let U=D.entity_kind==="wiki_pages"?"manual-merge":"review-and-select",g=[`Conflict ${D.id} affects ${D.entity_kind}:${D.entity_id}.`,`Local machine ${D.local_machine_id} has ${D.local_hash??"unknown hash"}.`,`Remote machine ${D.remote_machine_id} has ${D.remote_hash??"unknown hash"}.`].join(" "),I=["Review this knowledge sync conflict before any durable write.",`Entity: ${D.entity_kind}:${D.entity_id}`,`Local machine/hash: ${D.local_machine_id} / ${D.local_hash??"unknown"}`,`Remote machine/hash: ${D.remote_machine_id} / ${D.remote_hash??"unknown"}`,`Base hash: ${D.base_hash??"unknown"}`,`Metadata: ${JSON.stringify(D.metadata)}`,"Return a concise merge recommendation with citations to the competing records. Do not write changes without approval."].join(` -`);return{ok:!0,conflict:D,requires_approval:!0,mode:"deterministic",proposed_strategy:U,summary:g,merge_prompt:I,proposed_patch:null,citations:YX({conflict:D,localRow:null,remoteRow:null,sourceRefs:[]}),confidence:null,agent:null,warnings:D.status==="resolved"?["conflict_already_resolved"]:[],message:`Prepared approval-gated merge proposal for ${D.id}`}}function TX(_,$){h(_);let D=r(_),U=u$();try{let g=D.query("SELECT * FROM knowledge_sync_conflicts WHERE id = ?").get($.id);if(!g)throw Error(`Sync conflict not found: ${$.id}`);D.query(` + `).run(P.id,P.machine_id,P.scope,P.workspace_home,P.sqlite_schema_version,P.artifact_root_uri,P.content_hash,P.tables_json,P.artifact_hashes_json,P.created_at);let W=new Map;for(let z of OR($,PR()).filter((S)=>!i0.has(S))){let S=SR($,z).map((X)=>T_(X)),L=PI(z,S,W),J=d0($,z,j),R=J?.high_water_hash===L?J.logical_clock:(J?.logical_clock??0)+1;LI($,{table:z,machineId:j,logicalClock:R,highWaterHash:L,highWaterBundleId:P.id,originMachineId:J?.origin_machine_id??j,updatedByMachineId:j,lastAppliedAt:g,metadata:{source:"snapshot",row_count:S.length},now:g})}return{ok:!0,snapshot:{...P,tables:D,artifact_hashes:I},machines_upserted:U,message:`Recorded sync snapshot ${P.id}`}}finally{$.close()}}function KR(_){c(_.dbPath);let $=v(_.dbPath);try{let g=$.query("SELECT * FROM knowledge_machines ORDER BY machine_id ASC").all(),U=$.query("SELECT * FROM knowledge_sync_snapshots ORDER BY created_at DESC LIMIT 1").get()??null,D=$.query("SELECT status, COUNT(*) AS count FROM knowledge_sync_conflicts GROUP BY status ORDER BY status").all(),I=$.query("SELECT operation, COUNT(*) AS count FROM knowledge_sync_changes GROUP BY operation ORDER BY operation").all(),j=Gq($),E=$.query("SELECT * FROM knowledge_sync_imports ORDER BY applied_at DESC LIMIT 1").get()??null,A=D.reduce((P,W)=>P+W.count,0),O=D.filter((P)=>P.status!=="resolved"&&P.status!=="ignored").reduce((P,W)=>P+W.count,0);return{ok:!0,scope:_.scope,workspace_home:T_(_.workspaceHome),sqlite_schema_version:k_($),local_machine_id:_.localMachineId??null,machines:{total:g.length,rows:T_(g)},snapshots:{total:NI($,"knowledge_sync_snapshots"),latest:T_(U)},changes:{total:NI($,"knowledge_sync_changes"),by_operation:I},clocks:{total:j.length,rows:j},imports:{total:NI($,"knowledge_sync_imports"),latest:T_(E)},conflicts:{total:A,by_status:D,open:O},table_counts:zR($),message:`${g.length} machine(s), ${O} open sync conflict(s)`}}finally{$.close()}}function nN(_){return{..._,metadata:SI(_.metadata_json,{})}}function zI(_,$){c(_);let g=v(_);try{let U=g.query("SELECT * FROM knowledge_sync_conflicts WHERE id = ?").get($);return U?nN(U):null}finally{g.close()}}function qR(_,$={}){c(_);let g=v(_),U=Math.max(1,Math.min($.limit??50,200));try{return($.status?g.query("SELECT * FROM knowledge_sync_conflicts WHERE status = ? ORDER BY created_at DESC LIMIT ?").all($.status,U):g.query("SELECT * FROM knowledge_sync_conflicts ORDER BY created_at DESC LIMIT ?").all(U)).map(nN)}finally{g.close()}}function DB(_){return OI.includes(_)?_:null}function UB(_,$){let g=DB($.entity_kind);if(!g||!P$(_,g))return null;let U=WR(g,$.entity_id);if(!U)return null;let D=JR(g);return _.query(`SELECT * FROM ${I$(g)} WHERE ${D} LIMIT 1`).get(...U)}function IB(_,$){for(let g of $){let U=_[g];if(U&&typeof U==="object"&&!Array.isArray(U))return c0(U)}return null}function IR(_,$){if(typeof $!=="string")return;let g=$.trim();if(!g)return;if(g.startsWith("open-files://")||g.startsWith("s3://")||g.startsWith("file://")||g.startsWith("https://")||g.startsWith("http://"))_.add(g)}function fN(_,$=new Set,g=0){if(g>8||_===null||_===void 0)return $;if(typeof _==="string")return IR($,_),$;if(Array.isArray(_)){for(let U of _)fN(U,$,g+1);return $}if(typeof _==="object")for(let[U,D]of Object.entries(_)){if(U==="source_ref"||U==="source_uri"||U==="artifact_uri"||U.endsWith("_uri"))IR($,D);fN(D,$,g+1)}return $}function BR(_){let $=[{id:"conflict",kind:"metadata",ref:`knowledge-sync-conflict://${_.conflict.id}`,hash:_.conflict.base_hash,quote:`Conflict on ${_.conflict.entity_kind}:${_.conflict.entity_id}`}];if(_.localRow)$.push({id:"local-row",kind:"row",ref:`${_.conflict.entity_kind}:${_.conflict.entity_id}:local`,hash:_.conflict.local_hash,quote:JSON.stringify(_.localRow).slice(0,300)});if(_.remoteRow)$.push({id:"remote-row",kind:"row",ref:`${_.conflict.entity_kind}:${_.conflict.entity_id}:remote`,hash:_.conflict.remote_hash,quote:JSON.stringify(_.remoteRow).slice(0,300)});return _.sourceRefs.slice(0,10).forEach((g,U)=>{$.push({id:`source-${U+1}`,kind:g.startsWith("file://")||g.startsWith("s3://")?"artifact":"source_ref",ref:g,hash:null,quote:null})}),$}function VR(_,$){let g=zI(_,$);if(!g)throw Error(`Sync conflict not found: ${$}`);c(_);let U=v(_);try{let D=c0(UB(U,g)),I=IB(g.metadata,["remote_row","source_row","incoming_row"]),E=[...fN({conflict:{entity_kind:g.entity_kind,entity_id:g.entity_id,metadata:g.metadata},local_row:D,remote_row:I})].slice(0,25),A=[{name:"knowledge_sync_conflict_get",input:{id:$},output_summary:`${g.entity_kind}:${g.entity_id} status=${g.status}`},{name:"knowledge_catalog_row_get",input:{table:g.entity_kind,key:g.entity_id},output_summary:D?"local row found":"local row unavailable"},{name:"knowledge_source_ref_extract",input:{id:$},output_summary:`${E.length} source/artifact ref(s) found`}];return{conflict:g,local_row:D,remote_row:I,source_refs:E,citations:BR({conflict:g,localRow:D,remoteRow:I,sourceRefs:E}),read_only_tools:A}}finally{U.close()}}function t0(_,$){let g=zI(_,$);if(!g)throw Error(`Sync conflict not found: ${$}`);let U=g.entity_kind==="wiki_pages"?"manual-merge":"review-and-select",D=[`Conflict ${g.id} affects ${g.entity_kind}:${g.entity_id}.`,`Local machine ${g.local_machine_id} has ${g.local_hash??"unknown hash"}.`,`Remote machine ${g.remote_machine_id} has ${g.remote_hash??"unknown hash"}.`].join(" "),I=["Review this knowledge sync conflict before any durable write.",`Entity: ${g.entity_kind}:${g.entity_id}`,`Local machine/hash: ${g.local_machine_id} / ${g.local_hash??"unknown"}`,`Remote machine/hash: ${g.remote_machine_id} / ${g.remote_hash??"unknown"}`,`Base hash: ${g.base_hash??"unknown"}`,`Metadata: ${JSON.stringify(g.metadata)}`,"Return a concise merge recommendation with citations to the competing records. Do not write changes without approval."].join(` +`);return{ok:!0,conflict:g,requires_approval:!0,mode:"deterministic",proposed_strategy:U,summary:D,merge_prompt:I,proposed_patch:null,citations:BR({conflict:g,localRow:null,remoteRow:null,sourceRefs:[]}),confidence:null,agent:null,warnings:g.status==="resolved"?["conflict_already_resolved"]:[],message:`Prepared approval-gated merge proposal for ${g.id}`}}function FR(_,$){c(_);let g=v(_),U=u$();try{let D=g.query("SELECT * FROM knowledge_sync_conflicts WHERE id = ?").get($.id);if(!D)throw Error(`Sync conflict not found: ${$.id}`);g.query(` UPDATE knowledge_sync_conflicts SET status = 'resolved', resolution_strategy = ?, @@ -942,27 +942,27 @@ ${W}`;else{let{generateText:Q}=await import("ai"),T=await yD(g,{config:$.config, approved_by = ?, resolved_at = ? WHERE id = ? - `).run($.strategy,$.proposedPatchUri??g.proposed_patch_uri,$.approvedBy,U,$.id);let I=D.query("SELECT * FROM knowledge_sync_conflicts WHERE id = ?").get($.id);if(!I)throw Error(`Sync conflict not found after resolve: ${$.id}`);return uE(I)}finally{D.close()}}function eP(_){let D=(typeof _==="string"?_:JSON.stringify(_)).trim().split(/\s+/).filter(Boolean).length;return Math.max(1,Math.ceil(D*1.25))}function wF(_){let $=r(_.dbPath);try{$.run(`INSERT INTO runs (id, type, prompt, status, provider, model, metadata_json, created_at, updated_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[_.runId,"sync-conflict-proposal",_.prompt,_.status,_.provider,_.model,JSON.stringify(_.metadata),_.now,_.now])}finally{$.close()}}function RR(_){let $=r(_.dbPath);try{$.run(`UPDATE runs + `).run($.strategy,$.proposedPatchUri??D.proposed_patch_uri,$.approvedBy,U,$.id);let I=g.query("SELECT * FROM knowledge_sync_conflicts WHERE id = ?").get($.id);if(!I)throw Error(`Sync conflict not found after resolve: ${$.id}`);return nN(I)}finally{g.close()}}function gW(_){let g=(typeof _==="string"?_:JSON.stringify(_)).trim().split(/\s+/).filter(Boolean).length;return Math.max(1,Math.ceil(g*1.25))}function lF(_){let $=v(_.dbPath);try{$.run(`INSERT INTO runs (id, type, prompt, status, provider, model, metadata_json, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[_.runId,"sync-conflict-proposal",_.prompt,_.status,_.provider,_.model,JSON.stringify(_.metadata),_.now,_.now])}finally{$.close()}}function KX(_){let $=v(_.dbPath);try{$.run(`UPDATE runs SET status = ?, provider = ?, model = ?, cost_tokens = ?, cost_usd = ?, metadata_json = ?, updated_at = ? - WHERE id = ?`,[_.status,_.provider,_.model,_.usage.input_tokens+_.usage.output_tokens,_.usage.cost_usd,JSON.stringify(_.metadata),_.now,_.runId])}finally{$.close()}}function aP(_){let $=r(_.dbPath);try{$.run(`INSERT INTO run_events (id, run_id, level, event, metadata_json, created_at) - VALUES (?, ?, ?, ?, ?, ?)`,[`event_${GR()}`,_.runId,_.level,_.event,JSON.stringify(_.metadata),_.now])}finally{$.close()}}function uF(_,$,D,U){let g=r(_);try{W0(g,{...D,run_id:$,created_at:U})}finally{g.close()}}function xF(_){return["Build an approval-gated merge proposal for this knowledge sync conflict.","Use only the supplied JSON evidence. Do not claim to inspect external files or write changes.","Return a patch recommendation that a human can review before approval.","",`Deterministic proposal: + WHERE id = ?`,[_.status,_.provider,_.model,_.usage.input_tokens+_.usage.output_tokens,_.usage.cost_usd,JSON.stringify(_.metadata),_.now,_.runId])}finally{$.close()}}function DW(_){let $=v(_.dbPath);try{$.run(`INSERT INTO run_events (id, run_id, level, event, metadata_json, created_at) + VALUES (?, ?, ?, ?, ?, ?)`,[`event_${qX()}`,_.runId,_.level,_.event,JSON.stringify(_.metadata),_.now])}finally{$.close()}}function tF(_,$,g,U){let D=v(_);try{z4(D,{...g,run_id:$,created_at:U})}finally{D.close()}}function oF(_){return["Build an approval-gated merge proposal for this knowledge sync conflict.","Use only the supplied JSON evidence. Do not claim to inspect external files or write changes.","Return a patch recommendation that a human can review before approval.","",`Deterministic proposal: ${JSON.stringify({proposed_strategy:_.deterministic.proposed_strategy,summary:_.deterministic.summary,warnings:_.deterministic.warnings},null,2)}`,"",`Conflict evidence: ${JSON.stringify(_.evidence,null,2)}`].join(` -`)}function yF(_){let $=typeof _==="number"&&Number.isFinite(_)?_:0.5;return Math.max(0,Math.min(1,$))}function hF(_,$){let D=_.kind==="choose_local"||_.kind==="choose_remote"||_.kind==="no_op"||_.kind==="custom"||_.kind==="manual_merge"?_.kind:"manual_merge";return{kind:D,target:typeof _.target==="string"&&_.target?_.target:$,strategy:typeof _.strategy==="string"&&_.strategy?_.strategy:D.replace("_","-"),summary:typeof _.summary==="string"&&_.summary?_.summary:"Review both sides before applying a merge.",diff:typeof _.diff==="string"&&_.diff?_.diff:null,metadata:_.metadata&&typeof _.metadata==="object"&&!Array.isArray(_.metadata)?_.metadata:{}}}function cF(_){let $=`${_.conflict.entity_kind}:${_.conflict.entity_id}`,D=Boolean(_.local_row&&_.remote_row);return{kind:D?"manual_merge":"custom",target:$,strategy:D?"manual-merge":"review-and-select",summary:D?`Fake AI proposal: compare local and remote ${$} row snapshots, then apply a reviewed manual merge.`:`Fake AI proposal: inspect ${$} with available conflict metadata before selecting a side.`,diff:D?[`--- ${$} local`,`+++ ${$} remote`,"@@ review-required @@",JSON.stringify({local:_.local_row,remote:_.remote_row},null,2).slice(0,1200)].join(` -`):null,metadata:{fake:!0,local_hash:_.conflict.local_hash,remote_hash:_.conflict.remote_hash,source_refs:_.source_refs}}}async function YR(_){let $=(_.now??new Date).toISOString();h(_.dbPath);let D=oD(_.dbPath,_.id),U=QX(_.dbPath,_.id),g=G$(_.modelRef??"default",_.config),I=f_(g),j=`run_${GR()}`,N=xF({deterministic:D,evidence:U});wF({dbPath:_.dbPath,runId:j,prompt:N,provider:I.provider,model:I.model,status:_.fake?"dry_run":"running",metadata:{conflict_id:_.id,mode:"ai",fake:_.fake===!0,read_only_tools:U.read_only_tools.map((W)=>W.name)},now:$}),aP({dbPath:_.dbPath,runId:j,level:"info",event:"conflict_evidence_retrieved",metadata:{citations:U.citations.length,source_refs:U.source_refs.length,read_only_tools:U.read_only_tools},now:$});let O,A,L=0.5,z={input_tokens:eP(N),output_tokens:0,cost_usd:0};if(_.fake)O=cF(U),A=O.summary,z.output_tokens=eP(A)+eP(O.diff??"");else try{let{generateObject:W}=await import("ai"),{z:J}=await Promise.resolve().then(() => (XR(),WR)),P=await yD(g,{config:_.config,env:_.env}),S=J.object({summary:J.string(),confidence:J.number().min(0).max(1),proposed_patch:J.object({kind:J.enum(["manual_merge","choose_local","choose_remote","no_op","custom"]),target:J.string(),strategy:J.string(),summary:J.string(),diff:J.string().nullable(),metadata:J.record(J.string(),J.unknown()).default({})})}),X=await W({model:P,schema:S,system:"You are a read-only knowledge sync conflict proposal agent. You produce reviewable proposals only; never approve or apply writes.",prompt:N});A=X.object.summary,L=yF(X.object.confidence),O=hF(X.object.proposed_patch,`${U.conflict.entity_kind}:${U.conflict.entity_id}`);let G=U4({provider:I.provider,model:I.model,usage:X.usage,providerMetadata:X.providerMetadata});z={input_tokens:G.input_tokens,output_tokens:G.output_tokens,cost_usd:G.cost_usd},uF(_.dbPath,j,G,$)}catch(W){throw aP({dbPath:_.dbPath,runId:j,level:"error",event:"conflict_proposal_generation_failed",metadata:{message:W instanceof Error?W.message:String(W)},now:$}),RR({dbPath:_.dbPath,runId:j,status:"failed",provider:I.provider,model:I.model,usage:z,metadata:{conflict_id:_.id,mode:"ai",error:W instanceof Error?W.message:String(W)},now:$}),W}return RR({dbPath:_.dbPath,runId:j,status:_.fake?"dry_run":"completed",provider:I.provider,model:I.model,usage:z,metadata:{conflict_id:_.id,mode:"ai",fake:_.fake===!0,confidence:L,proposed_strategy:O.strategy,citation_count:U.citations.length},now:$}),aP({dbPath:_.dbPath,runId:j,level:"info",event:_.fake?"fake_conflict_proposal_generated":"conflict_proposal_generated",metadata:{strategy:O.strategy,confidence:L,patch_kind:O.kind},now:$}),{...D,mode:"ai",proposed_strategy:O.strategy,summary:A,proposed_patch:O,citations:U.citations,confidence:L,agent:{generated:!0,provider:I.provider,model:I.model,run_id:j,read_only_tools:U.read_only_tools,usage:z},warnings:[...D.warnings,...U.remote_row?[]:["remote_row_snapshot_unavailable"]],message:`Prepared AI SDK approval-gated merge proposal for ${_.id}`}}import{createHash as nF,randomUUID as dF}from"crypto";import{existsSync as mF,readFileSync as iF}from"fs";import{basename as lF}from"path";function bj(_,$){return`${_}_${nF("sha256").update($).digest("hex").slice(0,20)}`}function a0(_){return _&&typeof _==="object"&&!Array.isArray(_)?_:void 0}function S_(_){return typeof _==="string"&&_.length>0?_:void 0}function tF(_){let $=S_(_.source_ref)??S_(_.source_uri)??S_(_.uri);if($)return $;let D=S_(_.file_id);if(D){let I=S_(_.revision_id)??S_(_.revision),j=`open-files://file/${encodeURIComponent(D)}`;return I?`${j}/revision/${encodeURIComponent(I)}`:j}let U=S_(_.source_id),g=S_(_.path);if(U&&g)return`open-files://source/${encodeURIComponent(U)}/path/${encodeURIComponent(g)}`;throw Error("Outbox event is missing source_ref, file_id, or source_id/path.")}function oF(_,$){if($.kind==="open-files"&&$.entity==="file"&&$.revision_id)return _.replace(/\/revision\/[^/]+$/,"");return _}function pF(_){return S_(_.hash)??S_(_.checksum)??S_(_.sha256)??null}function eF(_,$,D){return S_(_.revision_id)??S_(_.revision)??S_(_.version_id)??($.kind==="open-files"?$.revision_id:void 0)??D??null}function aF(_){return S_(_.previous_revision_id)??S_(_.previous_revision)??S_(_.previous_version_id)??null}function sF(_){return(S_(_.event_type)??S_(_.event)??S_(_.type)??S_(_.action)??S_(_.change_type)??"changed").toLowerCase()}function _M(_){let $=S_(_.path);return S_(_.title)??S_(_.name)??($?lF($):null)}function $M(_,$){let D=tF(_),U=A$(D),g=pF(_);return{raw:_,eventType:sF(_),sourceRef:D,sourceUri:oF(D,U),kind:U.kind,title:_M(_),revision:eF(_,U,g),previousRevision:aF(_),hash:g,status:S_(_.status)?.toLowerCase()??null,updatedAt:S_(_.updated_at)??$,acl:_.permissions??_.acl??void 0}}function DM(_){let $=_.trim();if(!$)return[];if($.startsWith("[")){let D=JSON.parse($);if(!Array.isArray(D))throw Error("Outbox array parse failed.");return D.map((U)=>{let g=a0(U);if(!g)throw Error("Outbox array entries must be objects.");return g})}if($.startsWith("{"))try{let D=JSON.parse($),U=a0(D);if(!U)throw Error("Outbox object parse failed.");if(Array.isArray(U.events))return U.events.map((g)=>{let I=a0(g);if(!I)throw Error("Outbox events entries must be objects.");return I});if("source_ref"in U||"source_uri"in U||"file_id"in U)return[U]}catch(D){let U=$.split(/\r?\n/).filter((g)=>g.trim().length>0);if(U.length<=1)throw D;return U.map((g)=>{let I=a0(JSON.parse(g));if(!I)throw Error("Outbox JSONL entries must be objects.");return I})}return $.split(/\r?\n/).filter((D)=>D.trim().length>0).map((D)=>{let U=a0(JSON.parse(D));if(!U)throw Error("Outbox JSONL entries must be objects.");return U})}async function gM(_,$,D){let U=new URL(_),g=U.hostname,I=decodeURIComponent(U.pathname.replace(/^\/+/,""));if(!g||!I)throw Error(`Invalid S3 outbox URI: ${_}`);if(D)q6(_,D);let[{S3Client:j,GetObjectCommand:N},{fromIni:O}]=await Promise.all([import("@aws-sdk/client-s3"),import("@aws-sdk/credential-providers")]),A=$?.storage.type==="s3"&&$.storage.s3?.bucket===g?$.storage.s3:void 0,z=await new j({region:A?.region,credentials:A?.profile?O({profile:A.profile}):void 0,maxAttempts:A?.max_attempts}).send(new N({Bucket:g,Key:I}));if(!z.Body)return"";return await z.Body.transformToString()}async function UM(_,$,D){if(_.startsWith("s3://"))return gM(_,$,D);if(!mF(_))throw Error(`Outbox not found: ${_}`);return iF(_,"utf8")}function QR(_,$){let D={};if(_)try{D=a0(JSON.parse(_))??{}}catch{D={}}return JSON.stringify({...D,...$})}function IM(_,$,D){let U=bj("src",$.sourceUri);_.run(`INSERT INTO sources (id, uri, kind, title, metadata_json, acl_json, created_at, updated_at) +`)}function pF(_){let $=typeof _==="number"&&Number.isFinite(_)?_:0.5;return Math.max(0,Math.min(1,$))}function eF(_,$){let g=_.kind==="choose_local"||_.kind==="choose_remote"||_.kind==="no_op"||_.kind==="custom"||_.kind==="manual_merge"?_.kind:"manual_merge";return{kind:g,target:typeof _.target==="string"&&_.target?_.target:$,strategy:typeof _.strategy==="string"&&_.strategy?_.strategy:g.replace("_","-"),summary:typeof _.summary==="string"&&_.summary?_.summary:"Review both sides before applying a merge.",diff:typeof _.diff==="string"&&_.diff?_.diff:null,metadata:_.metadata&&typeof _.metadata==="object"&&!Array.isArray(_.metadata)?_.metadata:{}}}function aF(_){let $=`${_.conflict.entity_kind}:${_.conflict.entity_id}`,g=Boolean(_.local_row&&_.remote_row);return{kind:g?"manual_merge":"custom",target:$,strategy:g?"manual-merge":"review-and-select",summary:g?`Fake AI proposal: compare local and remote ${$} row snapshots, then apply a reviewed manual merge.`:`Fake AI proposal: inspect ${$} with available conflict metadata before selecting a side.`,diff:g?[`--- ${$} local`,`+++ ${$} remote`,"@@ review-required @@",JSON.stringify({local:_.local_row,remote:_.remote_row},null,2).slice(0,1200)].join(` +`):null,metadata:{fake:!0,local_hash:_.conflict.local_hash,remote_hash:_.conflict.remote_hash,source_refs:_.source_refs}}}async function BX(_){let $=(_.now??new Date).toISOString();c(_.dbPath);let g=t0(_.dbPath,_.id),U=VR(_.dbPath,_.id),D=G$(_.modelRef??"default",_.config),I=C_(D),j=`run_${qX()}`,E=oF({deterministic:g,evidence:U});lF({dbPath:_.dbPath,runId:j,prompt:E,provider:I.provider,model:I.model,status:_.fake?"dry_run":"running",metadata:{conflict_id:_.id,mode:"ai",fake:_.fake===!0,read_only_tools:U.read_only_tools.map((z)=>z.name)},now:$}),DW({dbPath:_.dbPath,runId:j,level:"info",event:"conflict_evidence_retrieved",metadata:{citations:U.citations.length,source_refs:U.source_refs.length,read_only_tools:U.read_only_tools},now:$});let A,O,P=0.5,W={input_tokens:gW(E),output_tokens:0,cost_usd:0};if(_.fake)A=aF(U),O=A.summary,W.output_tokens=gW(O)+gW(A.diff??"");else try{let{generateObject:z}=await import("ai"),{z:S}=await Promise.resolve().then(() => (TX(),QX)),L=await x0(D,{config:_.config,env:_.env}),J=S.object({summary:S.string(),confidence:S.number().min(0).max(1),proposed_patch:S.object({kind:S.enum(["manual_merge","choose_local","choose_remote","no_op","custom"]),target:S.string(),strategy:S.string(),summary:S.string(),diff:S.string().nullable(),metadata:S.record(S.string(),S.unknown()).default({})})}),R=await z({model:L,schema:J,system:"You are a read-only knowledge sync conflict proposal agent. You produce reviewable proposals only; never approve or apply writes.",prompt:E});O=R.object.summary,P=pF(R.object.confidence),A=eF(R.object.proposed_patch,`${U.conflict.entity_kind}:${U.conflict.entity_id}`);let X=jg({provider:I.provider,model:I.model,usage:R.usage,providerMetadata:R.providerMetadata});W={input_tokens:X.input_tokens,output_tokens:X.output_tokens,cost_usd:X.cost_usd},tF(_.dbPath,j,X,$)}catch(z){throw DW({dbPath:_.dbPath,runId:j,level:"error",event:"conflict_proposal_generation_failed",metadata:{message:z instanceof Error?z.message:String(z)},now:$}),KX({dbPath:_.dbPath,runId:j,status:"failed",provider:I.provider,model:I.model,usage:W,metadata:{conflict_id:_.id,mode:"ai",error:z instanceof Error?z.message:String(z)},now:$}),z}return KX({dbPath:_.dbPath,runId:j,status:_.fake?"dry_run":"completed",provider:I.provider,model:I.model,usage:W,metadata:{conflict_id:_.id,mode:"ai",fake:_.fake===!0,confidence:P,proposed_strategy:A.strategy,citation_count:U.citations.length},now:$}),DW({dbPath:_.dbPath,runId:j,level:"info",event:_.fake?"fake_conflict_proposal_generated":"conflict_proposal_generated",metadata:{strategy:A.strategy,confidence:P,patch_kind:A.kind},now:$}),{...g,mode:"ai",proposed_strategy:A.strategy,summary:O,proposed_patch:A,citations:U.citations,confidence:P,agent:{generated:!0,provider:I.provider,model:I.model,run_id:j,read_only_tools:U.read_only_tools,usage:W},warnings:[...g.warnings,...U.remote_row?[]:["remote_row_snapshot_unavailable"]],message:`Prepared AI SDK approval-gated merge proposal for ${_.id}`}}import{createHash as sF,randomUUID as _r}from"crypto";import{existsSync as $r,readFileSync as gr}from"fs";import{basename as Dr}from"path";function bj(_,$){return`${_}_${sF("sha256").update($).digest("hex").slice(0,20)}`}function e4(_){return _&&typeof _==="object"&&!Array.isArray(_)?_:void 0}function W_(_){return typeof _==="string"&&_.length>0?_:void 0}function Ur(_){let $=W_(_.source_ref)??W_(_.source_uri)??W_(_.uri);if($)return $;let g=W_(_.file_id);if(g){let I=W_(_.revision_id)??W_(_.revision),j=`open-files://file/${encodeURIComponent(g)}`;return I?`${j}/revision/${encodeURIComponent(I)}`:j}let U=W_(_.source_id),D=W_(_.path);if(U&&D)return`open-files://source/${encodeURIComponent(U)}/path/${encodeURIComponent(D)}`;throw Error("Outbox event is missing source_ref, file_id, or source_id/path.")}function Ir(_,$){if($.kind==="open-files"&&$.entity==="file"&&$.revision_id)return _.replace(/\/revision\/[^/]+$/,"");return _}function jr(_){return W_(_.hash)??W_(_.checksum)??W_(_.sha256)??null}function Er(_,$,g){return W_(_.revision_id)??W_(_.revision)??W_(_.version_id)??($.kind==="open-files"?$.revision_id:void 0)??g??null}function Nr(_){return W_(_.previous_revision_id)??W_(_.previous_revision)??W_(_.previous_version_id)??null}function Ar(_){return(W_(_.event_type)??W_(_.event)??W_(_.type)??W_(_.action)??W_(_.change_type)??"changed").toLowerCase()}function Or(_){let $=W_(_.path);return W_(_.title)??W_(_.name)??($?Dr($):null)}function Pr(_,$){let g=Ur(_),U=A$(g),D=jr(_);return{raw:_,eventType:Ar(_),sourceRef:g,sourceUri:Ir(g,U),kind:U.kind,title:Or(_),revision:Er(_,U,D),previousRevision:Nr(_),hash:D,status:W_(_.status)?.toLowerCase()??null,updatedAt:W_(_.updated_at)??$,acl:_.permissions??_.acl??void 0}}function Sr(_){let $=_.trim();if(!$)return[];if($.startsWith("[")){let g=JSON.parse($);if(!Array.isArray(g))throw Error("Outbox array parse failed.");return g.map((U)=>{let D=e4(U);if(!D)throw Error("Outbox array entries must be objects.");return D})}if($.startsWith("{"))try{let g=JSON.parse($),U=e4(g);if(!U)throw Error("Outbox object parse failed.");if(Array.isArray(U.events))return U.events.map((D)=>{let I=e4(D);if(!I)throw Error("Outbox events entries must be objects.");return I});if("source_ref"in U||"source_uri"in U||"file_id"in U)return[U]}catch(g){let U=$.split(/\r?\n/).filter((D)=>D.trim().length>0);if(U.length<=1)throw g;return U.map((D)=>{let I=e4(JSON.parse(D));if(!I)throw Error("Outbox JSONL entries must be objects.");return I})}return $.split(/\r?\n/).filter((g)=>g.trim().length>0).map((g)=>{let U=e4(JSON.parse(g));if(!U)throw Error("Outbox JSONL entries must be objects.");return U})}async function Lr(_,$,g){let U=new URL(_),D=U.hostname,I=decodeURIComponent(U.pathname.replace(/^\/+/,""));if(!D||!I)throw Error(`Invalid S3 outbox URI: ${_}`);if(g)q6(_,g);let[{S3Client:j,GetObjectCommand:E},{fromIni:A}]=await Promise.all([import("@aws-sdk/client-s3"),import("@aws-sdk/credential-providers")]),O=$?.storage.type==="s3"&&$.storage.s3?.bucket===D?$.storage.s3:void 0,W=await new j({region:O?.region,credentials:O?.profile?A({profile:O.profile}):void 0,maxAttempts:O?.max_attempts}).send(new E({Bucket:D,Key:I}));if(!W.Body)return"";return await W.Body.transformToString()}async function Wr(_,$,g){if(_.startsWith("s3://"))return Lr(_,$,g);if(!$r(_))throw Error(`Outbox not found: ${_}`);return gr(_,"utf8")}function VX(_,$){let g={};if(_)try{g=e4(JSON.parse(_))??{}}catch{g={}}return JSON.stringify({...g,...$})}function Jr(_,$,g){let U=bj("src",$.sourceUri);_.run(`INSERT INTO sources (id, uri, kind, title, metadata_json, acl_json, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(uri) DO UPDATE SET kind = excluded.kind, title = COALESCE(excluded.title, sources.title), - updated_at = excluded.updated_at`,[U,$.sourceUri,$.kind,$.title,JSON.stringify({source_ref:$.sourceRef,source_uri:$.sourceUri,status:$.status,last_outbox_event:$.eventType}),JSON.stringify($.acl??{}),D,$.updatedAt]);let g=_.query("SELECT id, metadata_json, acl_json FROM sources WHERE uri = ?").get($.sourceUri);if(!g)throw Error(`Failed to upsert source for outbox event: ${$.sourceUri}`);let I={source_ref:$.sourceRef,source_uri:$.sourceUri,last_outbox_event:$.eventType,last_outbox_at:$.updatedAt};if($.status)I.status=$.status;if(S_($.raw.path))I.path=$.raw.path;return _.run("UPDATE sources SET metadata_json = ?, acl_json = CASE WHEN ? IS NULL THEN acl_json ELSE ? END, updated_at = ? WHERE id = ?",[QR(g.metadata_json,I),$.acl===void 0?null:JSON.stringify($.acl),$.acl===void 0?null:JSON.stringify($.acl),$.updatedAt,g.id]),g.id}function jM(_,$,D,U){if(!D.revision)return null;let g=bj("rev",`${$}\x00${D.revision}`),I={source_ref:D.sourceRef,source_uri:D.sourceUri,status:D.status,last_outbox_event:D.eventType,reindex_required:!0};return _.run(`INSERT INTO source_revisions (id, source_id, revision, hash, extracted_text_uri, metadata_json, created_at) + updated_at = excluded.updated_at`,[U,$.sourceUri,$.kind,$.title,JSON.stringify({source_ref:$.sourceRef,source_uri:$.sourceUri,status:$.status,last_outbox_event:$.eventType}),JSON.stringify($.acl??{}),g,$.updatedAt]);let D=_.query("SELECT id, metadata_json, acl_json FROM sources WHERE uri = ?").get($.sourceUri);if(!D)throw Error(`Failed to upsert source for outbox event: ${$.sourceUri}`);let I={source_ref:$.sourceRef,source_uri:$.sourceUri,last_outbox_event:$.eventType,last_outbox_at:$.updatedAt};if($.status)I.status=$.status;if(W_($.raw.path))I.path=$.raw.path;return _.run("UPDATE sources SET metadata_json = ?, acl_json = CASE WHEN ? IS NULL THEN acl_json ELSE ? END, updated_at = ? WHERE id = ?",[VX(D.metadata_json,I),$.acl===void 0?null:JSON.stringify($.acl),$.acl===void 0?null:JSON.stringify($.acl),$.updatedAt,D.id]),D.id}function zr(_,$,g,U){if(!g.revision)return null;let D=bj("rev",`${$}\x00${g.revision}`),I={source_ref:g.sourceRef,source_uri:g.sourceUri,status:g.status,last_outbox_event:g.eventType,reindex_required:!0};return _.run(`INSERT INTO source_revisions (id, source_id, revision, hash, extracted_text_uri, metadata_json, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) ON CONFLICT(source_id, revision) DO UPDATE SET hash = COALESCE(excluded.hash, source_revisions.hash), - metadata_json = excluded.metadata_json`,[g,$,D.revision,D.hash,S_(D.raw.extracted_text_ref)??null,JSON.stringify(I),U]),_.query("SELECT id FROM source_revisions WHERE source_id = ? AND revision = ?").get($,D.revision)?.id??null}function NM(_,$,D){if(D.previousRevision){let U=_.query("SELECT id FROM source_revisions WHERE source_id = ? AND revision = ?").all($,D.previousRevision).map((g)=>g.id);if(U.length>0)return U}if(D.revision)return _.query("SELECT id FROM source_revisions WHERE source_id = ? AND revision = ?").all($,D.revision).map((U)=>U.id);if(D.hash)return _.query("SELECT id FROM source_revisions WHERE source_id = ? AND hash = ?").all($,D.hash).map((U)=>U.id);return _.query("SELECT id FROM source_revisions WHERE source_id = ?").all($).map((U)=>U.id)}function EM(_,$){let D=_.query("SELECT id FROM chunks WHERE source_revision_id = ?").all($),U=0,g=0;for(let j of D){let N=_.query("SELECT COUNT(*) AS n FROM chunk_embeddings WHERE chunk_id = ?").get(j.id);U+=N?.n??0;let O=_.query("SELECT COUNT(*) AS n FROM vector_index_entries WHERE chunk_id = ?").get(j.id);g+=O?.n??0,_.run("DELETE FROM vector_index_entries WHERE chunk_id = ?",[j.id]),_.run("DELETE FROM chunk_embeddings WHERE chunk_id = ?",[j.id]),_.run("DELETE FROM chunks_fts WHERE chunk_id = ?",[j.id])}_.run("DELETE FROM chunks WHERE source_revision_id = ?",[$]);let I=_.query("SELECT metadata_json FROM source_revisions WHERE id = ?").get($);return _.run("UPDATE source_revisions SET metadata_json = ? WHERE id = ?",[QR(I?.metadata_json,{reindex_required:!0,invalidated_at:new Date().toISOString()}),$]),{chunksDeleted:D.length,embeddingsDeleted:U,vectorEntriesDeleted:g}}function OM(_,$){return $==="deleted"||["delete","deleted","remove","removed"].includes(_)}function AM(_){return["move","moved","rename","renamed","path_changed","canonical_key_changed"].includes(_)}function LM(_){return["permission","permissions","permission_changed","acl_changed","acl_revoked"].includes(_)}async function TR(_){let $=(_.now??new Date).toISOString();if(_.safetyPolicy)_6(_.dbPath,_.safetyPolicy);h(_.dbPath);let D=await UM(_.input,_.config,_.safetyPolicy),U=DM(D),g=r(_.dbPath),I=`run_${dF()}`;try{return g.transaction(()=>{g.run(`INSERT INTO runs (id, type, prompt, status, provider, model, metadata_json, created_at, updated_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[I,"open-files-outbox",_.input,"completed","local","open-files-outbox",JSON.stringify({path:_.input,events:U.length}),$,$]);let j=new Set,N=new Set,O=0,A=0,L=0,z=0,W=0,J=0,P=0;return X_(g,{event_type:"source_read",action:_.input.startsWith("s3://")?"s3_outbox_read":"local_outbox_read",target_uri:_.input,decision:"allow",metadata:{events:U.length,read_only:!0},created_at:$}),U.forEach((S,X)=>{let G=$M(S,$),R=IM(g,G,$);j.add(R);let V=jM(g,R,G,$);if(V)N.add(V);let Q=NM(g,R,G);for(let T of Q){N.add(T);let q=EM(g,T);O+=q.chunksDeleted,A+=q.embeddingsDeleted,L+=q.vectorEntriesDeleted,z+=1}if(OM(G.eventType,G.status))W+=1;if(AM(G.eventType))J+=1;if(LM(G.eventType)||G.acl!==void 0)P+=1;g.run(`INSERT INTO run_events (id, run_id, level, event, metadata_json, created_at) - VALUES (?, ?, ?, ?, ?, ?)`,[bj("evt",`${I}\x00${X}\x00${G.sourceRef}\x00${G.eventType}`),I,"info",G.eventType,JSON.stringify({source_ref:G.sourceRef,source_uri:G.sourceUri,revision:G.revision,hash:G.hash,status:G.status,affected_revisions:Q.length}),G.updatedAt])}),g.run(`INSERT INTO provider_usage (id, run_id, provider, model, input_tokens, output_tokens, cost_usd, metadata_json, created_at) - VALUES (?, ?, ?, ?, 0, 0, 0, ?, ?)`,[bj("usage",I),I,"local","open-files-outbox",JSON.stringify({note:"No model provider used for outbox invalidation."}),$]),X_(g,{event_type:"write",action:"knowledge_outbox_invalidation",target_uri:_.dbPath,decision:"allow",metadata:{run_id:I,events:U.length,sources:j.size,revisions:N.size,chunks_deleted:O,embeddings_deleted:A,vector_entries_deleted:L},created_at:$}),{path:_.input,db_path:_.dbPath,run_id:I,events_seen:U.length,sources_touched:j.size,revisions_touched:N.size,chunks_deleted:O,embeddings_deleted:A,vector_entries_deleted:L,stale_revisions:z,deleted_sources:W,moved_sources:J,permission_updates:P}})()}finally{g.close()}}import{spawnSync as VR}from"child_process";import{hostname as u4,platform as KR,userInfo as JM}from"os";var PM=1,zM="@hasna/machines",SM="@hasna/machines/consumer";function d(_){return typeof _==="string"&&_.length>0?_:null}function y6(_){return Array.isArray(_)?_.filter(($)=>typeof $==="string"):[]}function n_(_){return _&&typeof _==="object"&&!Array.isArray(_)?_:{}}function fj(_){return typeof _==="boolean"?_:null}function WM(_){return typeof _==="number"&&Number.isFinite(_)?_:null}function wj(_=KR()){let $=_.toLowerCase();if($==="darwin"||$==="macos")return"macos";if($==="win32"||$==="windows")return"windows";if($==="linux")return"linux";return _}function IU(_){let $=VR("bash",["-c",_],{encoding:"utf8",env:process.env});return{stdout:$.stdout||"",stderr:$.stderr||"",exitCode:$.status??1}}async function s0(_,$){return await _($)}async function jU(_,$){return(await s0($,`command -v ${_} >/dev/null 2>&1`)).exitCode===0}function XM(_){try{let $=JSON.parse(_);if(!$||typeof $!=="object")return null;return $}catch{return null}}function qR(_){if(!_)return null;return _.HostName??_.DNSName?.split(".")[0]??null}async function RM(_,$){let D=new Map;if(!await jU("tailscale",_))return $.push("tailscale_not_available"),{peers:D,selfKey:null};let U=await s0(_,"tailscale status --json");if(U.exitCode!==0)return $.push(`tailscale_status_failed:${U.stderr.trim()||U.exitCode}`),{peers:D,selfKey:null};let g=XM(U.stdout);if(!g)return $.push("tailscale_status_invalid_json"),{peers:D,selfKey:null};let I=(j)=>{let N=qR(j);if(N&&j)D.set(N,j)};I(g.Self);for(let j of Object.values(g.Peer??{}))I(j);return{peers:D,selfKey:qR(g.Self)}}function GM(_){return process.env.HASNA_MACHINE_ID??process.env.OPEN_MACHINES_MACHINE_ID??process.env.MACHINE_ID??_??u4()}function YM(_){let $=_.machineId===_.localMachineId||_.machineId===u4(),D=_.peer?.DNSName?.replace(/\.$/,"")??null,U=D??_.peer?.TailscaleIPs?.[0]??null,g=[];if($)g.push({kind:"local",target:"localhost",reachable:!0});if(U)g.push({kind:"tailscale",target:U,reachable:_.peer?.Online??null});let I=g.find((j)=>j.kind==="local")??g.find((j)=>j.kind==="tailscale")??null;return{machine_id:_.machineId,hostname:_.peer?.HostName??($?u4():_.machineId),local:$,platform:_.peer?.OS?wj(_.peer.OS):$?wj():null,os:_.peer?.OS??($?KR():null),user:$?JM().username:null,workspace_path:null,manifest_declared:!1,heartbeat_status:"unknown",last_heartbeat_at:null,tailscale:{dns_name:D,ips:_.peer?.TailscaleIPs??[],online:_.peer?.Online??null,active:_.peer?.Active??null,last_seen:_.peer?.LastSeen??null},ssh:{address:null,route:I?.kind==="local"?"local":I?.kind==="tailscale"?"tailscale":"unknown",command_target:I?.target??null},route_hints:g,tags:[],metadata:{},source:"local"}}function QM(_){if(!Array.isArray(_))return[];return _.map(($)=>{let D=n_($),U=d(D.kind)??"unknown";return{kind:U==="local"||U==="lan"||U==="tailscale"||U==="ssh"?U:"unknown",target:d(D.target)??"",reachable:fj(D.reachable)}}).filter(($)=>$.target.length>0)}function TM(_,$){let D=d(_.machine_id)??d(_.hostname)??"unknown",U=n_(_.tailscale),g=n_(_.ssh),I=d(_.heartbeat_status),j=d(g.route);return{machine_id:D,hostname:d(_.hostname),local:D===$,platform:d(_.platform),os:d(_.os),user:d(_.user),workspace_path:d(_.workspace_path),manifest_declared:_.manifest_declared===!0,heartbeat_status:I==="online"||I==="offline"?I:"unknown",last_heartbeat_at:d(_.last_heartbeat_at),tailscale:{dns_name:d(U.dns_name),ips:y6(U.ips),online:fj(U.online),active:fj(U.active),last_seen:d(U.last_seen)},ssh:{address:d(g.address),route:j==="local"||j==="lan"||j==="tailscale"?j:"unknown",command_target:d(g.command_target)},route_hints:QM(_.route_hints),tags:y6(_.tags),metadata:n_(_.metadata),source:"open-machines"}}function qM(_,$){return`${$} machine${$===1?"":"s"} discovered via ${_}`}function E$(_){let $=_ instanceof Error?_.message:String(_);return $.includes("Cannot find module '@hasna/machines'")||$.includes("Cannot find module '@hasna/machines/consumer'")?"module_not_found":$}function NU(_){return _.adapterMode??"auto"}function FR(_){let $=_?.MACHINES_CONSUMER_CONTRACT?.schema_version;if(typeof $==="number")return $;let D=_?.MACHINES_CONSUMER_CONTRACT_VERSION;return typeof D==="number"?D:null}function uj(_){return typeof _.schema_version==="number"?_.schema_version:null}function EU(_){return typeof _==="number"&&_>PM?_:null}function xj(_){return{package:zM,entrypoint:SM,mode:_.mode,implementation:_.implementation,contract_version:_.contractVersion??null,available:_.available,error:_.error??null}}function j_(_,$="adapter_disabled"){return xj({mode:_,implementation:"disabled",available:!1,error:$})}function yj(_,$){let D=EU(FR($));if(!D)return null;return xj({mode:_,implementation:"disabled",available:!1,error:`unsupported_contract_version:${D}`,contractVersion:D})}function hj(_){return xj({mode:_,implementation:"cli",available:!0})}function cj(_,$){return xj({mode:_,implementation:"sdk",available:!0,contractVersion:FR($)})}function nj(_){try{return JSON.parse(_)}catch{return null}}function x4(_){return`'${_.replace(/'/g,"'\\''")}'`}function dj(_){return["machines",..._].map(x4).join(" ")}function mj(_){return _==="local"||_==="localhost"||_===u4()||_===process.env.HASNA_MACHINE_ID||_===process.env.OPEN_MACHINES_MACHINE_ID||_===process.env.MACHINE_ID}function BM(_,$){let D=mj(_),U=D?$:`ssh ${x4(_)} ${x4($)}`,g=VR("bash",["-c",U],{encoding:"utf8",env:process.env});return{stdout:g.stdout||"",stderr:g.stderr||"",exitCode:g.status??1,source:D?"local":"ssh"}}async function MR(_,$,D){return await _($,D)}function f4(_,$){if($)return"ok";return _===!1?"warn":"fail"}function w4(_){return _.replace(/[^a-zA-Z0-9_.@/-]+/g,"-").replace(/^-+|-+$/g,"")}function VM(_){if(_==="@hasna/knowledge")return"knowledge";if(_==="@hasna/machines")return"machines";return _.split("/").pop()??_}function KM(_){return _.trim().split(/\r?\n/).find(Boolean)??""}function ZR(_){return _.match(/\b\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?\b/)?.[0]??null}function bR(_){let $={};for(let D of _.split(/\r?\n/)){let U=D.indexOf("=");if(U<=0)continue;$[D.slice(0,U)]=D.slice(U+1)}return $}function A6(_){return{id:_.id,kind:_.kind,status:_.status,target:_.target,expected:_.expected??null,actual:_.actual??null,detail:_.detail,source:_.source}}async function HR(_,$,D){let U=[`cmd=${x4($.command)}`,'path="$(command -v "$cmd" 2>/dev/null || true)"','printf "path=%s\\n" "$path"',`if [ -n "$path" ]; then version="$("$cmd" ${$.versionArgs??"--version"} 2>/dev/null || true)"; printf "version=%s\\n" "$version"; fi`].join("; "),g=await MR(D,_,U),I=bR(g.stdout);return{path:I.path||null,version:I.version?KM(I.version):null,stderr:g.stderr,source:g.source??(mj(_)?"local":"ssh")}}function BR(_){let $=_==="name"?String.raw`s/.*"name"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p`:String.raw`s/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p`;return[`if command -v bun >/dev/null 2>&1; then bun -e "const p=JSON.parse(await Bun.file(process.argv[1]).text()); console.log(p.${_} ?? '')" "$pkg" 2>/dev/null`,`elif command -v node >/dev/null 2>&1; then node -e "const fs=require('fs'); const p=JSON.parse(fs.readFileSync(process.argv[1], 'utf8')); console.log(p.${_} || '')" "$pkg" 2>/dev/null`,`else sed -n '${$}' "$pkg" | head -n 1`,"fi"].join("; ")}async function FM(_,$,D){let U=[`path=${x4($.path)}`,'printf "exists=%s\\n" "$(test -d "$path" && printf yes || printf no)"','pkg="$path/package.json"','printf "package_json=%s\\n" "$(test -f "$pkg" && printf yes || printf no)"',`if [ -f "$pkg" ]; then printf "package_name=%s\\n" "$(${BR("name")})"; printf "version=%s\\n" "$(${BR("version")})"; fi`].join("; "),g=await MR(D,_,U),I=bR(g.stdout);return{exists:I.exists==="yes",packageJson:I.package_json==="yes",packageName:I.package_name||null,version:I.version||null,stderr:g.stderr,source:g.source??(mj(_)?"local":"ssh")}}async function MM(_,$,D){let U=await HR(_,$,D),g=Boolean(U.path),I=[A6({id:`command:${w4($.command)}:path`,kind:"command",status:f4($.required,g),target:$.command,expected:"available",actual:U.path??"missing",detail:g?`found at ${U.path}`:U.stderr||"command missing",source:U.source})];if($.expectedVersion){let j=ZR(U.version??"");I.push(A6({id:`command:${w4($.command)}:version`,kind:"command",status:j===$.expectedVersion?"ok":f4($.required,!1),target:$.command,expected:$.expectedVersion,actual:j??U.version??"missing",detail:j?`version output: ${U.version}`:"version unavailable",source:U.source}))}return I}async function ZM(_,$,D){let U=$.command??VM($.name),g=await HR(_,{command:U,expectedVersion:$.expectedVersion,required:$.required},D),I=Boolean(g.path),j=[A6({id:`package:${w4($.name)}:command`,kind:"package",status:f4($.required,I),target:$.name,expected:U,actual:g.path??"missing",detail:I?`${U} found at ${g.path}`:`${U} command missing`,source:g.source})];if($.expectedVersion){let N=ZR(g.version??"");j.push(A6({id:`package:${w4($.name)}:version`,kind:"package",status:N===$.expectedVersion?"ok":f4($.required,!1),target:$.name,expected:$.expectedVersion,actual:N??g.version??"missing",detail:N?`version output: ${g.version}`:"version unavailable",source:g.source}))}return j}async function bM(_,$,D){let U=await FM(_,$,D),g=$.label??$.path,I=[A6({id:`workspace:${w4(g)}:path`,kind:"workspace",status:f4($.required,U.exists),target:g,expected:$.path,actual:U.exists?"exists":"missing",detail:U.exists?`workspace exists at ${$.path}`:U.stderr||`workspace missing at ${$.path}`,source:U.source})];if($.expectedPackageName)I.push(A6({id:`workspace:${w4(g)}:package-name`,kind:"workspace",status:U.packageName===$.expectedPackageName?"ok":f4($.required,!1),target:g,expected:$.expectedPackageName,actual:U.packageName??(U.packageJson?"missing-name":"missing-package-json"),detail:U.packageJson?"package.json inspected":"package.json missing",source:U.source}));if($.expectedVersion)I.push(A6({id:`workspace:${w4(g)}:version`,kind:"workspace",status:U.version===$.expectedVersion?"ok":f4($.required,!1),target:g,expected:$.expectedVersion,actual:U.version??(U.packageJson?"missing-version":"missing-package-json"),detail:U.packageJson?"package.json inspected":"package.json missing",source:U.source}));return I}function kR(_,$){return{..._,knowledge:{scope:$.knowledge?.scope??"global",app_path:l$,workspace_home:$.knowledge?.workspace_home??null},message:qM(_.source,_.machines.length)}}async function ij(){try{return await import("@hasna/machines/consumer")}catch(_){if(E$(_)!=="module_not_found")throw _;return await import("@hasna/machines")}}function CR(_,$,D){let U=n_(_);if(EU(uj(U)))return null;let g=Array.isArray(U.machines)?U.machines:null,I=d(U.local_machine_id);if(!g||!I)return null;let j={ok:!0,source:"open-machines",generated_at:d(U.generated_at)??($.now??new Date).toISOString(),local_machine_id:I,local_hostname:d(U.local_hostname)??u4(),current_platform:d(U.current_platform)??wj(),machines:g.map((N)=>TM(N,I)),warnings:y6(U.warnings),adapter:D};return kR(j,$)}function Hj(_){return _==="local"||_==="lan"||_==="tailscale"||_==="ssh"||_==="unknown"?_:null}function vR(_){let $=n_(_),D=d($.observed_at),U=d($.source_authority);if(!D||!U)return null;return{observed_at:D,verified_at:d($.verified_at),expires_at:d($.expires_at),ttl_ms:WM($.ttl_ms),source_authority:U,confidence:d($.confidence),cacheable:$.cacheable===!0,stale:$.stale===!0,reasons:y6($.reasons)}}function rR(_,$){let D=n_(_);if(EU(uj(D)))return null;let U=d(D.target)??d(D.command_target);if(D.ok!==!0||!U)return null;let g=typeof D.evidence==="object"&&D.evidence!==null?D.evidence:null,I=typeof g?.selected_hint==="object"&&g.selected_hint!==null?g.selected_hint:null;return{target:U,route:Hj(D.route),targetKind:Hj(I?.kind)??Hj(D.source)??Hj(D.route),confidence:d(D.confidence),source:"open-machines",adapter:$,evidence:g,cacheability:vR(D.cacheability),warnings:y6(D.warnings)}}function sP(_){let $=n_(_);return{path:d($.path),source:d($.source)??"unresolved"}}function HM(_){if(!Array.isArray(_))return[];return _.flatMap(($)=>{let D=n_($),U=d(D.id),g=d(D.status),I=d(D.severity),j=d(D.message);if(!U||!g||!I||!j)return[];return[{id:U,status:g,severity:I,message:j,path:d(D.path),source:d(D.source)??"unknown",path_exists:fj(D.path_exists)}]})}function kM(_){if(!Array.isArray(_))return[];return _.flatMap(($)=>{let D=n_($),U=d(D.id),g=d(D.reason),I=y6(D.command),j=d(D.shell_command),N=y6(D.apply_command),O=d(D.apply_shell_command);if(!U||!g||!I.length||!j||!N.length||!O)return[];return[{id:U,reason:g,command:I,shell_command:j,apply_command:N,apply_shell_command:O}]})}function CM(_){if(!(_.projectRootSource==="inferred"||_.openFilesRootSource==="inferred"||_.trustStatus==="untrusted"||_.authStatus==="unknown"||_.warnings.some((g)=>g.includes("inferred")||g.includes("untrusted")||g.includes("unknown_auth")||g.includes("missing"))))return[];let D=["machines","workspace","repair","--machine",_.requestedMachineId,"--project",_.projectId,"--repo",_.repoName,"--open-files-repo",_.openFilesRepoName??"open-files","--json"],U=[...D,"--apply"];return[{id:"machines_workspace_repair",reason:"Workspace paths or trust metadata need confirmation before remote knowledge sync.",command:D,shell_command:D.map(x4).join(" "),apply_command:U,apply_shell_command:U.map(x4).join(" ")}]}function fR(_,$,D){let U=n_(_);if(EU(uj(U)))return null;let g=n_(U.paths),I=n_(U.project),j=n_(U.machine),N=sP(g.project_root),O=sP(g.workspace_root),A=sP(g.open_files_root);if(U.ok!==!0||!N.path)return null;let L=typeof U.evidence==="object"&&U.evidence!==null?U.evidence:null,z=d(U.requested_machine_id)??$.machineId,W=d(I.project_id)??$.projectId??"open-knowledge",J=d(I.repo_name)??$.repoName??$.projectId??"open-knowledge",P=d(j.trust_status)??"unknown",S=d(j.auth_status)??"unknown",X=y6(U.warnings),G=HM(U.diagnostics),R=kM(U.repair_hints);return{ok:!0,source:"open-machines",adapter:D,requested_machine_id:z,machine_id:d(U.machine_id),project_id:W,repo_name:J,project_root:N.path,project_root_source:N.source,workspace_root:O.path,workspace_root_source:O.source,open_files_root:A.path,open_files_root_source:A.source,trust_status:P,auth_status:S,current:j.current===!0,primary:j.primary===!0,diagnostics:G,repair_hints:R.length?R:CM({requestedMachineId:z,projectId:W,repoName:J,openFilesRepoName:$.openFilesRepoName,warnings:X,projectRootSource:N.source,openFilesRootSource:A.source,trustStatus:P,authStatus:S}),evidence:L,cacheability:vR(U.cacheability),warnings:X}}async function kj(_,$){let D=_.runner??IU;if(!await jU("machines",D))return null;let U=["topology","--json"];if(_.includeTailscale===!1)U.push("--no-tailscale");let g=await s0(D,dj(U));if(g.exitCode!==0)return null;return CR(nj(g.stdout),_,$)}async function j6(_,$){let D=[];if($.error)D.push(`open_machines_unavailable:${$.error}`);let U=_.runner??IU,g=_.includeTailscale===!1?{peers:new Map,selfKey:null}:await RM(U,D),I=GM(g.selfKey),N=[...new Set([I,...g.peers.keys()])].sort().map((O)=>YM({machineId:O,localMachineId:I,peer:g.peers.get(O)}));return kR({ok:!0,source:"local",generated_at:(_.now??new Date).toISOString(),local_machine_id:I,local_hostname:u4(),current_platform:wj(),machines:N,warnings:D,adapter:$},_)}async function wR(_={}){let $=NU(_);if($==="disabled")return await j6(_,j_($));let D=hj($);try{if($!=="cli"){let g=await(_.loadOpenMachines??ij)(),I=yj($,g);if(I)return await j6(_,I);let j=cj($,g);if(g?.discoverMachineTopology){let N=g.discoverMachineTopology({includeTailscale:_.includeTailscale,runner:_.runner,now:_.now}),O=CR(N,_,j);if(O)return O;if($==="sdk")return await j6(_,j_($,"invalid_topology_shape"));return await kj(_,D)??await j6(_,j_($,"invalid_topology_shape"))}if($==="sdk")return await j6(_,j_($,"missing_discoverMachineTopology"));return await kj(_,D)??await j6(_,j_($,"missing_discoverMachineTopology"))}return await kj(_,D)??await j6(_,j_($,"machines_cli_unavailable"))}catch(U){if($==="sdk")return await j6(_,j_($,E$(U)));return await kj(_,D)??await j6(_,j_($,E$(U)))}}async function Cj(_,$){let D=_.runner??IU;if(!await jU("machines",D))return null;let U=["route","--machine",_.machineId,"--json"];if(_.includeTailscale===!1)U.push("--no-tailscale");let g=await s0(D,dj(U));if(g.exitCode!==0)return null;return rR(nj(g.stdout),$)}function N6(_,$){return{target:_,route:null,targetKind:null,confidence:null,source:"raw",adapter:$,evidence:null,cacheability:null,warnings:[]}}async function _3(_){let $=NU(_);if($==="disabled")return N6(_.machineId,j_($));let D=hj($);try{if($!=="cli"){let g=await(_.loadOpenMachines??ij)(),I=yj($,g);if(I)return N6(_.machineId,I);let j=cj($,g);if(g?.resolveMachineRoute){let N=rR(g.resolveMachineRoute(_.machineId,{includeTailscale:_.includeTailscale,runner:_.runner,now:_.now}),j);if(N)return N;if($==="sdk")return N6(_.machineId,j_($,"invalid_route_shape"));return await Cj(_,D)??N6(_.machineId,j_($,"invalid_route_shape"))}if($==="sdk")return N6(_.machineId,j_($,"missing_resolveMachineRoute"));return await Cj(_,D)??N6(_.machineId,j_($,"missing_resolveMachineRoute"))}return await Cj(_,D)??N6(_.machineId,j_($,"machines_cli_unavailable"))}catch(U){if($==="sdk")return{...N6(_.machineId,j_($,E$(U))),warnings:[E$(U)]};return await Cj(_,D)??{...N6(_.machineId,j_($,E$(U))),warnings:[E$(U)]}}}async function vj(_,$){let D=_.runner??IU;if(!await jU("machines",D))return null;let U=_.projectId??"open-knowledge",g=_.repoName??"open-knowledge",I=["workspace","resolve","--machine",_.machineId,"--project",U,"--repo",g,"--open-files-repo",_.openFilesRepoName??"open-files","--json"];if(_.includeTailscale===!1)I.push("--no-tailscale");let j=await s0(D,dj(I));if(j.exitCode!==0)return null;return fR(nj(j.stdout),_,$)}function vM(_){let $=_.peerWorkspace?.trim();if(!$)return null;return{ok:!0,source:"argument",adapter:j_(NU(_),"argument_override"),requested_machine_id:_.machineId,machine_id:_.machineId,project_id:_.projectId??"open-knowledge",repo_name:_.repoName??"open-knowledge",project_root:$,project_root_source:"argument",workspace_root:null,workspace_root_source:"unresolved",open_files_root:null,open_files_root_source:"unresolved",trust_status:"unknown",auth_status:"unknown",current:!1,primary:!1,diagnostics:[],repair_hints:[],evidence:null,cacheability:null,warnings:[]}}function E6(_,$,D){return{ok:!1,source:"raw",adapter:D,requested_machine_id:_.machineId,machine_id:null,project_id:_.projectId??"open-knowledge",repo_name:_.repoName??"open-knowledge",project_root:null,project_root_source:"unresolved",workspace_root:null,workspace_root_source:"unresolved",open_files_root:null,open_files_root_source:"unresolved",trust_status:"unknown",auth_status:"unknown",current:!1,primary:!1,diagnostics:[],repair_hints:[],evidence:null,cacheability:null,warnings:$}}async function lj(_){let $=vM(_);if($)return $;let D=NU(_);if(D==="disabled")return E6(_,["adapter_disabled"],j_(D));let U=hj(D);try{if(D!=="cli"){let I=await(_.loadOpenMachines??ij)(),j=yj(D,I);if(j)return E6(_,[`unsupported_contract_version:${j.contract_version}`],j);let N=cj(D,I);if(I?.resolveMachineWorkspace){let O=fR(I.resolveMachineWorkspace({machineId:_.machineId,projectId:_.projectId??"open-knowledge",repoName:_.repoName??"open-knowledge",openFilesRepoName:_.openFilesRepoName??"open-files",includeTailscale:_.includeTailscale,runner:_.runner,now:_.now}),_,N);if(O)return O;if(D==="sdk")return E6(_,["invalid_workspace_shape"],j_(D,"invalid_workspace_shape"));return await vj(_,U)??E6(_,["invalid_workspace_shape"],j_(D,"invalid_workspace_shape"))}if(D==="sdk")return E6(_,["missing_resolveMachineWorkspace"],j_(D,"missing_resolveMachineWorkspace"));return await vj(_,U)??E6(_,["missing_resolveMachineWorkspace"],j_(D,"missing_resolveMachineWorkspace"))}return await vj(_,U)??E6(_,["machines_cli_unavailable"],j_(D,"machines_cli_unavailable"))}catch(g){if(D==="sdk")return E6(_,[E$(g)],j_(D,E$(g)));return await vj(_,U)??E6(_,[E$(g)],j_(D,E$(g)))}}function uR(_,$){return{..._,knowledge:{scope:$.knowledge?.scope??"global",app_path:l$,workspace_home:$.knowledge?.workspace_home??null},message:_.ok?`Machine ${_.machine_id} passed knowledge preflight`:`Machine ${_.machine_id} failed knowledge preflight: ${_.summary.fail} failing check(s)`}}function xR(_,$,D){let U=n_(_);if(EU(uj(U)))return null;let g=Array.isArray(U.checks)?U.checks:null,I=d(U.machine_id)??d(U.machineId);if(!g||!I)return null;let j=g.map((O)=>{let A=n_(O),L=d(A.status),z=d(A.kind),W=d(A.source);return A6({id:d(A.id)??"unknown",kind:z==="command"||z==="package"||z==="workspace"?z:"command",status:L==="ok"||L==="warn"||L==="fail"?L:"fail",target:d(A.target)??"unknown",expected:d(A.expected),actual:d(A.actual),detail:d(A.detail)??"",source:W==="local"||W==="ssh"||W==="open-machines"?W:"open-machines"})}),N={ok:j.filter((O)=>O.status==="ok").length,warn:j.filter((O)=>O.status==="warn").length,fail:j.filter((O)=>O.status==="fail").length};return uR({ok:N.fail===0,source:"open-machines",machine_id:I,generated_at:d(U.generated_at)??($.now??new Date).toISOString(),checks:j,summary:N,adapter:D},$)}function rM(_){if(!_.runner)return IU;return async($)=>{let D=await _.runner?.("local",$);return{stdout:D?.stdout??"",stderr:D?.stderr??"",exitCode:D?.exitCode??1}}}function fM(_){return[_.name,_.command,_.expectedVersion].filter(($)=>Boolean($)).join(":")}function wM(_){let $=[_.expectedPackageName,_.expectedVersion].filter((U)=>Boolean(U)).join(":"),D=$?`${_.path}:${$}`:_.path;return _.label?`${_.label}=${D}`:D}async function rj(_,$){let D=rM(_);if(!await jU("machines",D))return null;let U=["compatibility","--json","--machine",_.machineId??"local"];for(let I of _.commands??[])U.push("--command",I.expectedVersion?`${I.command}:${I.expectedVersion}`:I.command);for(let I of _.packages??[])U.push("--package",fM(I));for(let I of _.workspaces??[])U.push("--workspace",wM(I));let g=await s0(D,dj(U));if(g.exitCode!==0)return null;return xR(nj(g.stdout),_,$)}async function O6(_,$){let D=_.machineId??u4(),U=_.runner??BM,g=_.commands??[{command:"bun",required:!0},{command:"knowledge",required:!0}],I=_.packages??[{name:"@hasna/knowledge",command:"knowledge",required:!0}],j=_.workspaces??[],N=[];for(let A of g)N.push(...await MM(D,A,U));for(let A of I)N.push(...await ZM(D,A,U));for(let A of j)N.push(...await bM(D,A,U));if($.error)N.push(A6({id:"adapter:@hasna/machines",kind:"package",status:"warn",target:"@hasna/machines",expected:"optional",actual:$.error,detail:"Using knowledge local/ssh compatibility fallback",source:mj(D)?"local":"ssh"}));let O={ok:N.filter((A)=>A.status==="ok").length,warn:N.filter((A)=>A.status==="warn").length,fail:N.filter((A)=>A.status==="fail").length};return uR({ok:O.fail===0,source:"local",machine_id:D,generated_at:(_.now??new Date).toISOString(),checks:N,summary:O,adapter:$},_)}async function yR(_={}){let $=NU(_);if($==="disabled")return await O6(_,j_($));let D=hj($);try{if($!=="cli"){let g=await(_.loadOpenMachines??ij)(),I=yj($,g);if(I)return await O6(_,I);let j=cj($,g);if(g?.checkMachineCompatibility){let N=g.checkMachineCompatibility({machineId:_.machineId,commands:_.commands,packages:_.packages,workspaces:_.workspaces,runner:_.runner,now:_.now}),O=xR(N,_,j);if(O)return O;if($==="sdk")return await O6(_,j_($,"invalid_compatibility_shape"));return await rj(_,D)??await O6(_,j_($,"invalid_compatibility_shape"))}if($==="sdk")return await O6(_,j_($,"missing_checkMachineCompatibility"));return await rj(_,D)??await O6(_,j_($,"missing_checkMachineCompatibility"))}return await rj(_,D)??await O6(_,j_($,"machines_cli_unavailable"))}catch(U){if($==="sdk")return await O6(_,j_($,E$(U)));return await rj(_,D)??await O6(_,j_($,E$(U)))}}import{createHash as hR}from"crypto";function D3(_,$,D=24){return`${_}_${hR("sha256").update($).digest("hex").slice(0,D)}`}function _D(_){return _.normalize("NFKC").trim().replace(/\s+/g," ")}function uM(_){return _D(_).toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"")}function V$(_,$){try{return JSON.parse(_)}catch{return $}}function h6(_){return{..._,record_kind:_.record_kind,source_kind:_.source_kind,status:_.status,source_refs:V$(_.source_refs_json,[]),evidence_refs:V$(_.evidence_refs_json,[]),requires_approval:_.requires_approval===1,checks:V$(_.checks_json,cR()),metadata:V$(_.metadata_json,{})}}function g3(_){return{..._,record_kind:_.record_kind,source_refs:V$(_.source_refs_json,[]),evidence_refs:V$(_.evidence_refs_json,[]),metadata:V$(_.metadata_json,{})}}function cR(){return{citations:{provided:0,valid:0,invalid:0,entries:[]},invalid_source_refs:[],stale_refs:[],duplicate_record_ids:[],duplicate_candidate_ids:[],conflicting_record_ids:[],conflicting_candidate_ids:[],approval_reasons:[]}}function xM(_){let $=typeof _==="string"?{ref:_}:_;return{ref:_D($.ref),citation_id:$.citation_id??null,chunk_id:$.chunk_id??null,revision:$.revision??null,hash:$.hash??null,observed_at:$.observed_at??null,expires_at:$.expires_at??null,status:$.status??null}}function nR(_){try{let $=new URL(_);return $.protocol.length>1&&($.hostname.length>0||$.pathname.length>0)}catch{return/^(?:cite|citation|chunk|run):[A-Za-z0-9._:-]+$/.test(_)}}function tj(_){return["deleted","stale","invalidated","reindex_required","expired","superseded"].includes((_??"").toLowerCase())}function $3(_){if(!_)return null;let $=V$(_,{});if($.stale===!0)return"stale";return typeof $.status==="string"?$.status:null}function yM(_){if(_.citation_id)return _.citation_id;return _.ref.match(/^(?:cite|citation):(.+)$/)?.[1]??null}function hM(_){if(_.chunk_id)return _.chunk_id;return _.ref.match(/^chunk:(.+)$/)?.[1]??null}function cM(_,$,D){let U=tj($.status)||Boolean($.expires_at&&$.expires_at<=D);if(!$.ref||!nR($.ref))return{ref:$.ref,valid:!1,resolved_by:"none",stale:U,reason:"invalid_reference"};let g=yM($),I=_.query(`SELECT c.id, c.source_uri, c.chunk_id, ch.metadata_json AS chunk_metadata_json, + metadata_json = excluded.metadata_json`,[D,$,g.revision,g.hash,W_(g.raw.extracted_text_ref)??null,JSON.stringify(I),U]),_.query("SELECT id FROM source_revisions WHERE source_id = ? AND revision = ?").get($,g.revision)?.id??null}function Rr(_,$,g){if(g.previousRevision){let U=_.query("SELECT id FROM source_revisions WHERE source_id = ? AND revision = ?").all($,g.previousRevision).map((D)=>D.id);if(U.length>0)return U}if(g.revision)return _.query("SELECT id FROM source_revisions WHERE source_id = ? AND revision = ?").all($,g.revision).map((U)=>U.id);if(g.hash)return _.query("SELECT id FROM source_revisions WHERE source_id = ? AND hash = ?").all($,g.hash).map((U)=>U.id);return _.query("SELECT id FROM source_revisions WHERE source_id = ?").all($).map((U)=>U.id)}function Gr(_,$){let g=_.query("SELECT id FROM chunks WHERE source_revision_id = ?").all($),U=0,D=0;for(let j of g){let E=_.query("SELECT COUNT(*) AS n FROM chunk_embeddings WHERE chunk_id = ?").get(j.id);U+=E?.n??0;let A=_.query("SELECT COUNT(*) AS n FROM vector_index_entries WHERE chunk_id = ?").get(j.id);D+=A?.n??0,_.run("DELETE FROM vector_index_entries WHERE chunk_id = ?",[j.id]),_.run("DELETE FROM chunk_embeddings WHERE chunk_id = ?",[j.id]),_.run("DELETE FROM chunks_fts WHERE chunk_id = ?",[j.id])}_.run("DELETE FROM chunks WHERE source_revision_id = ?",[$]);let I=_.query("SELECT metadata_json FROM source_revisions WHERE id = ?").get($);return _.run("UPDATE source_revisions SET metadata_json = ? WHERE id = ?",[VX(I?.metadata_json,{reindex_required:!0,invalidated_at:new Date().toISOString()}),$]),{chunksDeleted:g.length,embeddingsDeleted:U,vectorEntriesDeleted:D}}function Xr(_,$){return $==="deleted"||["delete","deleted","remove","removed"].includes(_)}function Yr(_){return["move","moved","rename","renamed","path_changed","canonical_key_changed"].includes(_)}function Qr(_){return["permission","permissions","permission_changed","acl_changed","acl_revoked"].includes(_)}async function FX(_){let $=(_.now??new Date).toISOString();if(_.safetyPolicy)$6(_.dbPath,_.safetyPolicy);c(_.dbPath);let g=await Wr(_.input,_.config,_.safetyPolicy),U=Sr(g),D=v(_.dbPath),I=`run_${_r()}`;try{return D.transaction(()=>{D.run(`INSERT INTO runs (id, type, prompt, status, provider, model, metadata_json, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[I,"open-files-outbox",_.input,"completed","local","open-files-outbox",JSON.stringify({path:_.input,events:U.length}),$,$]);let j=new Set,E=new Set,A=0,O=0,P=0,W=0,z=0,S=0,L=0;return z_(D,{event_type:"source_read",action:_.input.startsWith("s3://")?"s3_outbox_read":"local_outbox_read",target_uri:_.input,decision:"allow",metadata:{events:U.length,read_only:!0},created_at:$}),U.forEach((J,R)=>{let X=Pr(J,$),G=Jr(D,X,$);j.add(G);let B=zr(D,G,X,$);if(B)E.add(B);let Q=Rr(D,G,X);for(let T of Q){E.add(T);let K=Gr(D,T);A+=K.chunksDeleted,O+=K.embeddingsDeleted,P+=K.vectorEntriesDeleted,W+=1}if(Xr(X.eventType,X.status))z+=1;if(Yr(X.eventType))S+=1;if(Qr(X.eventType)||X.acl!==void 0)L+=1;D.run(`INSERT INTO run_events (id, run_id, level, event, metadata_json, created_at) + VALUES (?, ?, ?, ?, ?, ?)`,[bj("evt",`${I}\x00${R}\x00${X.sourceRef}\x00${X.eventType}`),I,"info",X.eventType,JSON.stringify({source_ref:X.sourceRef,source_uri:X.sourceUri,revision:X.revision,hash:X.hash,status:X.status,affected_revisions:Q.length}),X.updatedAt])}),D.run(`INSERT INTO provider_usage (id, run_id, provider, model, input_tokens, output_tokens, cost_usd, metadata_json, created_at) + VALUES (?, ?, ?, ?, 0, 0, 0, ?, ?)`,[bj("usage",I),I,"local","open-files-outbox",JSON.stringify({note:"No model provider used for outbox invalidation."}),$]),z_(D,{event_type:"write",action:"knowledge_outbox_invalidation",target_uri:_.dbPath,decision:"allow",metadata:{run_id:I,events:U.length,sources:j.size,revisions:E.size,chunks_deleted:A,embeddings_deleted:O,vector_entries_deleted:P},created_at:$}),{path:_.input,db_path:_.dbPath,run_id:I,events_seen:U.length,sources_touched:j.size,revisions_touched:E.size,chunks_deleted:A,embeddings_deleted:O,vector_entries_deleted:P,stale_revisions:W,deleted_sources:z,moved_sources:S,permission_updates:L}})()}finally{D.close()}}import{spawnSync as MX}from"child_process";import{hostname as xg,platform as ZX,userInfo as Tr}from"os";var Kr=1,qr="@hasna/machines",Br="@hasna/machines/consumer";function d(_){return typeof _==="string"&&_.length>0?_:null}function c6(_){return Array.isArray(_)?_.filter(($)=>typeof $==="string"):[]}function c_(_){return _&&typeof _==="object"&&!Array.isArray(_)?_:{}}function vj(_){return typeof _==="boolean"?_:null}function Vr(_){return typeof _==="number"&&Number.isFinite(_)?_:null}function wj(_=ZX()){let $=_.toLowerCase();if($==="darwin"||$==="macos")return"macos";if($==="win32"||$==="windows")return"windows";if($==="linux")return"linux";return _}function UU(_){let $=MX("bash",["-c",_],{encoding:"utf8",env:process.env});return{stdout:$.stdout||"",stderr:$.stderr||"",exitCode:$.status??1}}async function a4(_,$){return await _($)}async function IU(_,$){return(await a4($,`command -v ${_} >/dev/null 2>&1`)).exitCode===0}function Fr(_){try{let $=JSON.parse(_);if(!$||typeof $!=="object")return null;return $}catch{return null}}function rX(_){if(!_)return null;return _.HostName??_.DNSName?.split(".")[0]??null}async function rr(_,$){let g=new Map;if(!await IU("tailscale",_))return $.push("tailscale_not_available"),{peers:g,selfKey:null};let U=await a4(_,"tailscale status --json");if(U.exitCode!==0)return $.push(`tailscale_status_failed:${U.stderr.trim()||U.exitCode}`),{peers:g,selfKey:null};let D=Fr(U.stdout);if(!D)return $.push("tailscale_status_invalid_json"),{peers:g,selfKey:null};let I=(j)=>{let E=rX(j);if(E&&j)g.set(E,j)};I(D.Self);for(let j of Object.values(D.Peer??{}))I(j);return{peers:g,selfKey:rX(D.Self)}}function br(_){return process.env.HASNA_MACHINE_ID??process.env.OPEN_MACHINES_MACHINE_ID??process.env.MACHINE_ID??_??xg()}function Mr(_){let $=_.machineId===_.localMachineId||_.machineId===xg(),g=_.peer?.DNSName?.replace(/\.$/,"")??null,U=g??_.peer?.TailscaleIPs?.[0]??null,D=[];if($)D.push({kind:"local",target:"localhost",reachable:!0});if(U)D.push({kind:"tailscale",target:U,reachable:_.peer?.Online??null});let I=D.find((j)=>j.kind==="local")??D.find((j)=>j.kind==="tailscale")??null;return{machine_id:_.machineId,hostname:_.peer?.HostName??($?xg():_.machineId),local:$,platform:_.peer?.OS?wj(_.peer.OS):$?wj():null,os:_.peer?.OS??($?ZX():null),user:$?Tr().username:null,workspace_path:null,manifest_declared:!1,heartbeat_status:"unknown",last_heartbeat_at:null,tailscale:{dns_name:g,ips:_.peer?.TailscaleIPs??[],online:_.peer?.Online??null,active:_.peer?.Active??null,last_seen:_.peer?.LastSeen??null},ssh:{address:null,route:I?.kind==="local"?"local":I?.kind==="tailscale"?"tailscale":"unknown",command_target:I?.target??null},route_hints:D,tags:[],metadata:{},source:"local"}}function Zr(_){if(!Array.isArray(_))return[];return _.map(($)=>{let g=c_($),U=d(g.kind)??"unknown";return{kind:U==="local"||U==="lan"||U==="tailscale"||U==="ssh"?U:"unknown",target:d(g.target)??"",reachable:vj(g.reachable)}}).filter(($)=>$.target.length>0)}function Hr(_,$){let g=d(_.machine_id)??d(_.hostname)??"unknown",U=c_(_.tailscale),D=c_(_.ssh),I=d(_.heartbeat_status),j=d(D.route);return{machine_id:g,hostname:d(_.hostname),local:g===$,platform:d(_.platform),os:d(_.os),user:d(_.user),workspace_path:d(_.workspace_path),manifest_declared:_.manifest_declared===!0,heartbeat_status:I==="online"||I==="offline"?I:"unknown",last_heartbeat_at:d(_.last_heartbeat_at),tailscale:{dns_name:d(U.dns_name),ips:c6(U.ips),online:vj(U.online),active:vj(U.active),last_seen:d(U.last_seen)},ssh:{address:d(D.address),route:j==="local"||j==="lan"||j==="tailscale"?j:"unknown",command_target:d(D.command_target)},route_hints:Zr(_.route_hints),tags:c6(_.tags),metadata:c_(_.metadata),source:"open-machines"}}function kr(_,$){return`${$} machine${$===1?"":"s"} discovered via ${_}`}function E$(_){let $=_ instanceof Error?_.message:String(_);return $.includes("Cannot find module '@hasna/machines'")||$.includes("Cannot find module '@hasna/machines/consumer'")?"module_not_found":$}function jU(_){return _.adapterMode??"auto"}function HX(_){let $=_?.MACHINES_CONSUMER_CONTRACT?.schema_version;if(typeof $==="number")return $;let g=_?.MACHINES_CONSUMER_CONTRACT_VERSION;return typeof g==="number"?g:null}function uj(_){return typeof _.schema_version==="number"?_.schema_version:null}function EU(_){return typeof _==="number"&&_>Kr?_:null}function fj(_){return{package:qr,entrypoint:Br,mode:_.mode,implementation:_.implementation,contract_version:_.contractVersion??null,available:_.available,error:_.error??null}}function U_(_,$="adapter_disabled"){return fj({mode:_,implementation:"disabled",available:!1,error:$})}function xj(_,$){let g=EU(HX($));if(!g)return null;return fj({mode:_,implementation:"disabled",available:!1,error:`unsupported_contract_version:${g}`,contractVersion:g})}function yj(_){return fj({mode:_,implementation:"cli",available:!0})}function cj(_,$){return fj({mode:_,implementation:"sdk",available:!0,contractVersion:HX($)})}function hj(_){try{return JSON.parse(_)}catch{return null}}function yg(_){return`'${_.replace(/'/g,"'\\''")}'`}function nj(_){return["machines",..._].map(yg).join(" ")}function dj(_){return _==="local"||_==="localhost"||_===xg()||_===process.env.HASNA_MACHINE_ID||_===process.env.OPEN_MACHINES_MACHINE_ID||_===process.env.MACHINE_ID}function Cr(_,$){let g=dj(_),U=g?$:`ssh ${yg(_)} ${yg($)}`,D=MX("bash",["-c",U],{encoding:"utf8",env:process.env});return{stdout:D.stdout||"",stderr:D.stderr||"",exitCode:D.status??1,source:g?"local":"ssh"}}async function kX(_,$,g){return await _($,g)}function ug(_,$){if($)return"ok";return _===!1?"warn":"fail"}function fg(_){return _.replace(/[^a-zA-Z0-9_.@/-]+/g,"-").replace(/^-+|-+$/g,"")}function vr(_){if(_==="@hasna/knowledge")return"knowledge";if(_==="@hasna/machines")return"machines";return _.split("/").pop()??_}function wr(_){return _.trim().split(/\r?\n/).find(Boolean)??""}function CX(_){return _.match(/\b\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?\b/)?.[0]??null}function vX(_){let $={};for(let g of _.split(/\r?\n/)){let U=g.indexOf("=");if(U<=0)continue;$[g.slice(0,U)]=g.slice(U+1)}return $}function S6(_){return{id:_.id,kind:_.kind,status:_.status,target:_.target,expected:_.expected??null,actual:_.actual??null,detail:_.detail,source:_.source}}async function wX(_,$,g){let U=[`cmd=${yg($.command)}`,'path="$(command -v "$cmd" 2>/dev/null || true)"','printf "path=%s\\n" "$path"',`if [ -n "$path" ]; then version="$("$cmd" ${$.versionArgs??"--version"} 2>/dev/null || true)"; printf "version=%s\\n" "$version"; fi`].join("; "),D=await kX(g,_,U),I=vX(D.stdout);return{path:I.path||null,version:I.version?wr(I.version):null,stderr:D.stderr,source:D.source??(dj(_)?"local":"ssh")}}function bX(_){let $=_==="name"?String.raw`s/.*"name"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p`:String.raw`s/.*"version"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p`;return[`if command -v bun >/dev/null 2>&1; then bun -e "const p=JSON.parse(await Bun.file(process.argv[1]).text()); console.log(p.${_} ?? '')" "$pkg" 2>/dev/null`,`elif command -v node >/dev/null 2>&1; then node -e "const fs=require('fs'); const p=JSON.parse(fs.readFileSync(process.argv[1], 'utf8')); console.log(p.${_} || '')" "$pkg" 2>/dev/null`,`else sed -n '${$}' "$pkg" | head -n 1`,"fi"].join("; ")}async function ur(_,$,g){let U=[`path=${yg($.path)}`,'printf "exists=%s\\n" "$(test -d "$path" && printf yes || printf no)"','pkg="$path/package.json"','printf "package_json=%s\\n" "$(test -f "$pkg" && printf yes || printf no)"',`if [ -f "$pkg" ]; then printf "package_name=%s\\n" "$(${bX("name")})"; printf "version=%s\\n" "$(${bX("version")})"; fi`].join("; "),D=await kX(g,_,U),I=vX(D.stdout);return{exists:I.exists==="yes",packageJson:I.package_json==="yes",packageName:I.package_name||null,version:I.version||null,stderr:D.stderr,source:D.source??(dj(_)?"local":"ssh")}}async function fr(_,$,g){let U=await wX(_,$,g),D=Boolean(U.path),I=[S6({id:`command:${fg($.command)}:path`,kind:"command",status:ug($.required,D),target:$.command,expected:"available",actual:U.path??"missing",detail:D?`found at ${U.path}`:U.stderr||"command missing",source:U.source})];if($.expectedVersion){let j=CX(U.version??"");I.push(S6({id:`command:${fg($.command)}:version`,kind:"command",status:j===$.expectedVersion?"ok":ug($.required,!1),target:$.command,expected:$.expectedVersion,actual:j??U.version??"missing",detail:j?`version output: ${U.version}`:"version unavailable",source:U.source}))}return I}async function xr(_,$,g){let U=$.command??vr($.name),D=await wX(_,{command:U,expectedVersion:$.expectedVersion,required:$.required},g),I=Boolean(D.path),j=[S6({id:`package:${fg($.name)}:command`,kind:"package",status:ug($.required,I),target:$.name,expected:U,actual:D.path??"missing",detail:I?`${U} found at ${D.path}`:`${U} command missing`,source:D.source})];if($.expectedVersion){let E=CX(D.version??"");j.push(S6({id:`package:${fg($.name)}:version`,kind:"package",status:E===$.expectedVersion?"ok":ug($.required,!1),target:$.name,expected:$.expectedVersion,actual:E??D.version??"missing",detail:E?`version output: ${D.version}`:"version unavailable",source:D.source}))}return j}async function yr(_,$,g){let U=await ur(_,$,g),D=$.label??$.path,I=[S6({id:`workspace:${fg(D)}:path`,kind:"workspace",status:ug($.required,U.exists),target:D,expected:$.path,actual:U.exists?"exists":"missing",detail:U.exists?`workspace exists at ${$.path}`:U.stderr||`workspace missing at ${$.path}`,source:U.source})];if($.expectedPackageName)I.push(S6({id:`workspace:${fg(D)}:package-name`,kind:"workspace",status:U.packageName===$.expectedPackageName?"ok":ug($.required,!1),target:D,expected:$.expectedPackageName,actual:U.packageName??(U.packageJson?"missing-name":"missing-package-json"),detail:U.packageJson?"package.json inspected":"package.json missing",source:U.source}));if($.expectedVersion)I.push(S6({id:`workspace:${fg(D)}:version`,kind:"workspace",status:U.version===$.expectedVersion?"ok":ug($.required,!1),target:D,expected:$.expectedVersion,actual:U.version??(U.packageJson?"missing-version":"missing-package-json"),detail:U.packageJson?"package.json inspected":"package.json missing",source:U.source}));return I}function uX(_,$){return{..._,knowledge:{scope:$.knowledge?.scope??"global",app_path:l$,workspace_home:$.knowledge?.workspace_home??null},message:kr(_.source,_.machines.length)}}async function mj(){try{return await import("@hasna/machines/consumer")}catch(_){if(E$(_)!=="module_not_found")throw _;return await import("@hasna/machines")}}function fX(_,$,g){let U=c_(_);if(EU(uj(U)))return null;let D=Array.isArray(U.machines)?U.machines:null,I=d(U.local_machine_id);if(!D||!I)return null;let j={ok:!0,source:"open-machines",generated_at:d(U.generated_at)??($.now??new Date).toISOString(),local_machine_id:I,local_hostname:d(U.local_hostname)??xg(),current_platform:d(U.current_platform)??wj(),machines:D.map((E)=>Hr(E,I)),warnings:c6(U.warnings),adapter:g};return uX(j,$)}function Mj(_){return _==="local"||_==="lan"||_==="tailscale"||_==="ssh"||_==="unknown"?_:null}function xX(_){let $=c_(_),g=d($.observed_at),U=d($.source_authority);if(!g||!U)return null;return{observed_at:g,verified_at:d($.verified_at),expires_at:d($.expires_at),ttl_ms:Vr($.ttl_ms),source_authority:U,confidence:d($.confidence),cacheable:$.cacheable===!0,stale:$.stale===!0,reasons:c6($.reasons)}}function yX(_,$){let g=c_(_);if(EU(uj(g)))return null;let U=d(g.target)??d(g.command_target);if(g.ok!==!0||!U)return null;let D=typeof g.evidence==="object"&&g.evidence!==null?g.evidence:null,I=typeof D?.selected_hint==="object"&&D.selected_hint!==null?D.selected_hint:null;return{target:U,route:Mj(g.route),targetKind:Mj(I?.kind)??Mj(g.source)??Mj(g.route),confidence:d(g.confidence),source:"open-machines",adapter:$,evidence:D,cacheability:xX(g.cacheability),warnings:c6(g.warnings)}}function UW(_){let $=c_(_);return{path:d($.path),source:d($.source)??"unresolved"}}function cr(_){if(!Array.isArray(_))return[];return _.flatMap(($)=>{let g=c_($),U=d(g.id),D=d(g.status),I=d(g.severity),j=d(g.message);if(!U||!D||!I||!j)return[];return[{id:U,status:D,severity:I,message:j,path:d(g.path),source:d(g.source)??"unknown",path_exists:vj(g.path_exists)}]})}function hr(_){if(!Array.isArray(_))return[];return _.flatMap(($)=>{let g=c_($),U=d(g.id),D=d(g.reason),I=c6(g.command),j=d(g.shell_command),E=c6(g.apply_command),A=d(g.apply_shell_command);if(!U||!D||!I.length||!j||!E.length||!A)return[];return[{id:U,reason:D,command:I,shell_command:j,apply_command:E,apply_shell_command:A}]})}function nr(_){if(!(_.projectRootSource==="inferred"||_.openFilesRootSource==="inferred"||_.trustStatus==="untrusted"||_.authStatus==="unknown"||_.warnings.some((D)=>D.includes("inferred")||D.includes("untrusted")||D.includes("unknown_auth")||D.includes("missing"))))return[];let g=["machines","workspace","repair","--machine",_.requestedMachineId,"--project",_.projectId,"--repo",_.repoName,"--open-files-repo",_.openFilesRepoName??"open-files","--json"],U=[...g,"--apply"];return[{id:"machines_workspace_repair",reason:"Workspace paths or trust metadata need confirmation before remote knowledge sync.",command:g,shell_command:g.map(yg).join(" "),apply_command:U,apply_shell_command:U.map(yg).join(" ")}]}function cX(_,$,g){let U=c_(_);if(EU(uj(U)))return null;let D=c_(U.paths),I=c_(U.project),j=c_(U.machine),E=UW(D.project_root),A=UW(D.workspace_root),O=UW(D.open_files_root);if(U.ok!==!0||!E.path)return null;let P=typeof U.evidence==="object"&&U.evidence!==null?U.evidence:null,W=d(U.requested_machine_id)??$.machineId,z=d(I.project_id)??$.projectId??"open-knowledge",S=d(I.repo_name)??$.repoName??$.projectId??"open-knowledge",L=d(j.trust_status)??"unknown",J=d(j.auth_status)??"unknown",R=c6(U.warnings),X=cr(U.diagnostics),G=hr(U.repair_hints);return{ok:!0,source:"open-machines",adapter:g,requested_machine_id:W,machine_id:d(U.machine_id),project_id:z,repo_name:S,project_root:E.path,project_root_source:E.source,workspace_root:A.path,workspace_root_source:A.source,open_files_root:O.path,open_files_root_source:O.source,trust_status:L,auth_status:J,current:j.current===!0,primary:j.primary===!0,diagnostics:X,repair_hints:G.length?G:nr({requestedMachineId:W,projectId:z,repoName:S,openFilesRepoName:$.openFilesRepoName,warnings:R,projectRootSource:E.source,openFilesRootSource:O.source,trustStatus:L,authStatus:J}),evidence:P,cacheability:xX(U.cacheability),warnings:R}}async function Zj(_,$){let g=_.runner??UU;if(!await IU("machines",g))return null;let U=["topology","--json"];if(_.includeTailscale===!1)U.push("--no-tailscale");let D=await a4(g,nj(U));if(D.exitCode!==0)return null;return fX(hj(D.stdout),_,$)}async function N6(_,$){let g=[];if($.error)g.push(`open_machines_unavailable:${$.error}`);let U=_.runner??UU,D=_.includeTailscale===!1?{peers:new Map,selfKey:null}:await rr(U,g),I=br(D.selfKey),E=[...new Set([I,...D.peers.keys()])].sort().map((A)=>Mr({machineId:A,localMachineId:I,peer:D.peers.get(A)}));return uX({ok:!0,source:"local",generated_at:(_.now??new Date).toISOString(),local_machine_id:I,local_hostname:xg(),current_platform:wj(),machines:E,warnings:g,adapter:$},_)}async function hX(_={}){let $=jU(_);if($==="disabled")return await N6(_,U_($));let g=yj($);try{if($!=="cli"){let D=await(_.loadOpenMachines??mj)(),I=xj($,D);if(I)return await N6(_,I);let j=cj($,D);if(D?.discoverMachineTopology){let E=D.discoverMachineTopology({includeTailscale:_.includeTailscale,runner:_.runner,now:_.now}),A=fX(E,_,j);if(A)return A;if($==="sdk")return await N6(_,U_($,"invalid_topology_shape"));return await Zj(_,g)??await N6(_,U_($,"invalid_topology_shape"))}if($==="sdk")return await N6(_,U_($,"missing_discoverMachineTopology"));return await Zj(_,g)??await N6(_,U_($,"missing_discoverMachineTopology"))}return await Zj(_,g)??await N6(_,U_($,"machines_cli_unavailable"))}catch(U){if($==="sdk")return await N6(_,U_($,E$(U)));return await Zj(_,g)??await N6(_,U_($,E$(U)))}}async function Hj(_,$){let g=_.runner??UU;if(!await IU("machines",g))return null;let U=["route","--machine",_.machineId,"--json"];if(_.includeTailscale===!1)U.push("--no-tailscale");let D=await a4(g,nj(U));if(D.exitCode!==0)return null;return yX(hj(D.stdout),$)}function A6(_,$){return{target:_,route:null,targetKind:null,confidence:null,source:"raw",adapter:$,evidence:null,cacheability:null,warnings:[]}}async function IW(_){let $=jU(_);if($==="disabled")return A6(_.machineId,U_($));let g=yj($);try{if($!=="cli"){let D=await(_.loadOpenMachines??mj)(),I=xj($,D);if(I)return A6(_.machineId,I);let j=cj($,D);if(D?.resolveMachineRoute){let E=yX(D.resolveMachineRoute(_.machineId,{includeTailscale:_.includeTailscale,runner:_.runner,now:_.now}),j);if(E)return E;if($==="sdk")return A6(_.machineId,U_($,"invalid_route_shape"));return await Hj(_,g)??A6(_.machineId,U_($,"invalid_route_shape"))}if($==="sdk")return A6(_.machineId,U_($,"missing_resolveMachineRoute"));return await Hj(_,g)??A6(_.machineId,U_($,"missing_resolveMachineRoute"))}return await Hj(_,g)??A6(_.machineId,U_($,"machines_cli_unavailable"))}catch(U){if($==="sdk")return{...A6(_.machineId,U_($,E$(U))),warnings:[E$(U)]};return await Hj(_,g)??{...A6(_.machineId,U_($,E$(U))),warnings:[E$(U)]}}}async function kj(_,$){let g=_.runner??UU;if(!await IU("machines",g))return null;let U=_.projectId??"open-knowledge",D=_.repoName??"open-knowledge",I=["workspace","resolve","--machine",_.machineId,"--project",U,"--repo",D,"--open-files-repo",_.openFilesRepoName??"open-files","--json"];if(_.includeTailscale===!1)I.push("--no-tailscale");let j=await a4(g,nj(I));if(j.exitCode!==0)return null;return cX(hj(j.stdout),_,$)}function dr(_){let $=_.peerWorkspace?.trim();if(!$)return null;return{ok:!0,source:"argument",adapter:U_(jU(_),"argument_override"),requested_machine_id:_.machineId,machine_id:_.machineId,project_id:_.projectId??"open-knowledge",repo_name:_.repoName??"open-knowledge",project_root:$,project_root_source:"argument",workspace_root:null,workspace_root_source:"unresolved",open_files_root:null,open_files_root_source:"unresolved",trust_status:"unknown",auth_status:"unknown",current:!1,primary:!1,diagnostics:[],repair_hints:[],evidence:null,cacheability:null,warnings:[]}}function O6(_,$,g){return{ok:!1,source:"raw",adapter:g,requested_machine_id:_.machineId,machine_id:null,project_id:_.projectId??"open-knowledge",repo_name:_.repoName??"open-knowledge",project_root:null,project_root_source:"unresolved",workspace_root:null,workspace_root_source:"unresolved",open_files_root:null,open_files_root_source:"unresolved",trust_status:"unknown",auth_status:"unknown",current:!1,primary:!1,diagnostics:[],repair_hints:[],evidence:null,cacheability:null,warnings:$}}async function ij(_){let $=dr(_);if($)return $;let g=jU(_);if(g==="disabled")return O6(_,["adapter_disabled"],U_(g));let U=yj(g);try{if(g!=="cli"){let I=await(_.loadOpenMachines??mj)(),j=xj(g,I);if(j)return O6(_,[`unsupported_contract_version:${j.contract_version}`],j);let E=cj(g,I);if(I?.resolveMachineWorkspace){let A=cX(I.resolveMachineWorkspace({machineId:_.machineId,projectId:_.projectId??"open-knowledge",repoName:_.repoName??"open-knowledge",openFilesRepoName:_.openFilesRepoName??"open-files",includeTailscale:_.includeTailscale,runner:_.runner,now:_.now}),_,E);if(A)return A;if(g==="sdk")return O6(_,["invalid_workspace_shape"],U_(g,"invalid_workspace_shape"));return await kj(_,U)??O6(_,["invalid_workspace_shape"],U_(g,"invalid_workspace_shape"))}if(g==="sdk")return O6(_,["missing_resolveMachineWorkspace"],U_(g,"missing_resolveMachineWorkspace"));return await kj(_,U)??O6(_,["missing_resolveMachineWorkspace"],U_(g,"missing_resolveMachineWorkspace"))}return await kj(_,U)??O6(_,["machines_cli_unavailable"],U_(g,"machines_cli_unavailable"))}catch(D){if(g==="sdk")return O6(_,[E$(D)],U_(g,E$(D)));return await kj(_,U)??O6(_,[E$(D)],U_(g,E$(D)))}}function nX(_,$){return{..._,knowledge:{scope:$.knowledge?.scope??"global",app_path:l$,workspace_home:$.knowledge?.workspace_home??null},message:_.ok?`Machine ${_.machine_id} passed knowledge preflight`:`Machine ${_.machine_id} failed knowledge preflight: ${_.summary.fail} failing check(s)`}}function dX(_,$,g){let U=c_(_);if(EU(uj(U)))return null;let D=Array.isArray(U.checks)?U.checks:null,I=d(U.machine_id)??d(U.machineId);if(!D||!I)return null;let j=D.map((A)=>{let O=c_(A),P=d(O.status),W=d(O.kind),z=d(O.source);return S6({id:d(O.id)??"unknown",kind:W==="command"||W==="package"||W==="workspace"?W:"command",status:P==="ok"||P==="warn"||P==="fail"?P:"fail",target:d(O.target)??"unknown",expected:d(O.expected),actual:d(O.actual),detail:d(O.detail)??"",source:z==="local"||z==="ssh"||z==="open-machines"?z:"open-machines"})}),E={ok:j.filter((A)=>A.status==="ok").length,warn:j.filter((A)=>A.status==="warn").length,fail:j.filter((A)=>A.status==="fail").length};return nX({ok:E.fail===0,source:"open-machines",machine_id:I,generated_at:d(U.generated_at)??($.now??new Date).toISOString(),checks:j,summary:E,adapter:g},$)}function mr(_){if(!_.runner)return UU;return async($)=>{let g=await _.runner?.("local",$);return{stdout:g?.stdout??"",stderr:g?.stderr??"",exitCode:g?.exitCode??1}}}function ir(_){return[_.name,_.command,_.expectedVersion].filter(($)=>Boolean($)).join(":")}function lr(_){let $=[_.expectedPackageName,_.expectedVersion].filter((U)=>Boolean(U)).join(":"),g=$?`${_.path}:${$}`:_.path;return _.label?`${_.label}=${g}`:g}async function Cj(_,$){let g=mr(_);if(!await IU("machines",g))return null;let U=["compatibility","--json","--machine",_.machineId??"local"];for(let I of _.commands??[])U.push("--command",I.expectedVersion?`${I.command}:${I.expectedVersion}`:I.command);for(let I of _.packages??[])U.push("--package",ir(I));for(let I of _.workspaces??[])U.push("--workspace",lr(I));let D=await a4(g,nj(U));if(D.exitCode!==0)return null;return dX(hj(D.stdout),_,$)}async function P6(_,$){let g=_.machineId??xg(),U=_.runner??Cr,D=_.commands??[{command:"bun",required:!0},{command:"knowledge",required:!0}],I=_.packages??[{name:"@hasna/knowledge",command:"knowledge",required:!0}],j=_.workspaces??[],E=[];for(let O of D)E.push(...await fr(g,O,U));for(let O of I)E.push(...await xr(g,O,U));for(let O of j)E.push(...await yr(g,O,U));if($.error)E.push(S6({id:"adapter:@hasna/machines",kind:"package",status:"warn",target:"@hasna/machines",expected:"optional",actual:$.error,detail:"Using knowledge local/ssh compatibility fallback",source:dj(g)?"local":"ssh"}));let A={ok:E.filter((O)=>O.status==="ok").length,warn:E.filter((O)=>O.status==="warn").length,fail:E.filter((O)=>O.status==="fail").length};return nX({ok:A.fail===0,source:"local",machine_id:g,generated_at:(_.now??new Date).toISOString(),checks:E,summary:A,adapter:$},_)}async function mX(_={}){let $=jU(_);if($==="disabled")return await P6(_,U_($));let g=yj($);try{if($!=="cli"){let D=await(_.loadOpenMachines??mj)(),I=xj($,D);if(I)return await P6(_,I);let j=cj($,D);if(D?.checkMachineCompatibility){let E=D.checkMachineCompatibility({machineId:_.machineId,commands:_.commands,packages:_.packages,workspaces:_.workspaces,runner:_.runner,now:_.now}),A=dX(E,_,j);if(A)return A;if($==="sdk")return await P6(_,U_($,"invalid_compatibility_shape"));return await Cj(_,g)??await P6(_,U_($,"invalid_compatibility_shape"))}if($==="sdk")return await P6(_,U_($,"missing_checkMachineCompatibility"));return await Cj(_,g)??await P6(_,U_($,"missing_checkMachineCompatibility"))}return await Cj(_,g)??await P6(_,U_($,"machines_cli_unavailable"))}catch(U){if($==="sdk")return await P6(_,U_($,E$(U)));return await Cj(_,g)??await P6(_,U_($,E$(U)))}}import{createHash as iX}from"crypto";function EW(_,$,g=24){return`${_}_${iX("sha256").update($).digest("hex").slice(0,g)}`}function s4(_){return _.normalize("NFKC").trim().replace(/\s+/g," ")}function tr(_){return s4(_).toLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/g,"")}function q$(_,$){try{return JSON.parse(_)}catch{return $}}function h6(_){return{..._,record_kind:_.record_kind,source_kind:_.source_kind,status:_.status,source_refs:q$(_.source_refs_json,[]),evidence_refs:q$(_.evidence_refs_json,[]),requires_approval:_.requires_approval===1,checks:q$(_.checks_json,lX()),metadata:q$(_.metadata_json,{})}}function NW(_){return{..._,record_kind:_.record_kind,source_refs:q$(_.source_refs_json,[]),evidence_refs:q$(_.evidence_refs_json,[]),metadata:q$(_.metadata_json,{})}}function lX(){return{citations:{provided:0,valid:0,invalid:0,entries:[]},invalid_source_refs:[],stale_refs:[],duplicate_record_ids:[],duplicate_candidate_ids:[],conflicting_record_ids:[],conflicting_candidate_ids:[],approval_reasons:[]}}function or(_){let $=typeof _==="string"?{ref:_}:_;return{ref:s4($.ref),citation_id:$.citation_id??null,chunk_id:$.chunk_id??null,revision:$.revision??null,hash:$.hash??null,observed_at:$.observed_at??null,expires_at:$.expires_at??null,status:$.status??null}}function tX(_){try{let $=new URL(_);return $.protocol.length>1&&($.hostname.length>0||$.pathname.length>0)}catch{return/^(?:cite|citation|chunk|run):[A-Za-z0-9._:-]+$/.test(_)}}function lj(_){return["deleted","stale","invalidated","reindex_required","expired","superseded"].includes((_??"").toLowerCase())}function jW(_){if(!_)return null;let $=q$(_,{});if($.stale===!0)return"stale";return typeof $.status==="string"?$.status:null}function pr(_){if(_.citation_id)return _.citation_id;return _.ref.match(/^(?:cite|citation):(.+)$/)?.[1]??null}function er(_){if(_.chunk_id)return _.chunk_id;return _.ref.match(/^chunk:(.+)$/)?.[1]??null}function ar(_,$,g){let U=lj($.status)||Boolean($.expires_at&&$.expires_at<=g);if(!$.ref||!tX($.ref))return{ref:$.ref,valid:!1,resolved_by:"none",stale:U,reason:"invalid_reference"};let D=pr($),I=_.query(`SELECT c.id, c.source_uri, c.chunk_id, ch.metadata_json AS chunk_metadata_json, sr.hash AS revision_hash, sr.revision, sr.id AS source_revision_id, sr.source_id, sr.created_at AS revision_created_at, (SELECT MAX(newest.created_at) FROM source_revisions newest WHERE newest.source_id = sr.source_id) AS latest_revision_at @@ -971,46 +971,46 @@ ${JSON.stringify(_.evidence,null,2)}`].join(` LEFT JOIN source_revisions sr ON sr.id = ch.source_revision_id WHERE c.id = ? OR c.source_uri = ? ORDER BY c.created_at DESC - LIMIT 1`).get(g,$.ref);if(I){let A=Boolean($.hash&&I.revision_hash&&$.hash!==I.revision_hash),L=Boolean($.revision&&I.revision&&$.revision!==I.revision),z=Boolean(I.revision_created_at&&I.latest_revision_at&&I.revision_created_at!nR(z)),j.citations.entries=U.map((z)=>cM(_,z,D)),j.citations.provided=U.length,j.citations.valid=j.citations.entries.filter((z)=>z.valid).length,j.citations.invalid=j.citations.entries.length-j.citations.valid,j.stale_refs=j.citations.entries.filter((z)=>z.stale).map((z)=>z.ref),j.duplicate_record_ids=_.query(`SELECT id FROM durable_knowledge_records + WHERE ch.id = ?`).get(j);if(!O)return{ref:$.ref,valid:!1,resolved_by:"none",stale:U,reason:"chunk_not_found"};let P=Boolean($.hash&&O.hash&&$.hash!==O.hash||$.revision&&O.revision&&$.revision!==O.revision),W=U||lj(jW(O.metadata_json))||P;return{ref:$.ref,valid:!0,resolved_by:"chunk",stale:W,reason:P?"source_version_mismatch":W?"stale_chunk":null}}let E=_.query("SELECT metadata_json FROM sources WHERE uri = ? LIMIT 1").get($.ref);if(E){let O=U||lj(jW(E.metadata_json));return{ref:$.ref,valid:!0,resolved_by:"source",stale:O,reason:O?"stale_source":null}}let A=$.ref.match(/^knowledge:\/\/project\/runs\/([^/?#]+)/);if(A){if(!_.query("SELECT id FROM runs WHERE id = ?").get(decodeURIComponent(A[1])))return{ref:$.ref,valid:!1,resolved_by:"none",stale:U,reason:"run_not_found"};return{ref:$.ref,valid:!0,resolved_by:"run",stale:U,reason:U?"expired_evidence":null}}return{ref:$.ref,valid:!0,resolved_by:"external_uri",stale:U,reason:U?"expired_evidence":null}}function n6(_,$){return _.query("SELECT * FROM knowledge_promotion_candidates WHERE id = ?").get($)??null}function AW(_,$,g){let U=q$($.evidence_refs_json,[]),D=q$($.source_refs_json,[]),I=q$($.metadata_json,{}),j=lX();j.invalid_source_refs=D.filter((W)=>!tX(W)),j.citations.entries=U.map((W)=>ar(_,W,g)),j.citations.provided=U.length,j.citations.valid=j.citations.entries.filter((W)=>W.valid).length,j.citations.invalid=j.citations.entries.length-j.citations.valid,j.stale_refs=j.citations.entries.filter((W)=>W.stale).map((W)=>W.ref),j.duplicate_record_ids=_.query(`SELECT id FROM durable_knowledge_records WHERE record_kind = ? AND content_hash = ? AND status IN ('active', 'conflicted') - ORDER BY created_at`).all($.record_kind,$.content_hash).map((z)=>z.id),j.duplicate_candidate_ids=_.query(`SELECT id FROM knowledge_promotion_candidates + ORDER BY created_at`).all($.record_kind,$.content_hash).map((W)=>W.id),j.duplicate_candidate_ids=_.query(`SELECT id FROM knowledge_promotion_candidates WHERE id <> ? AND record_kind = ? AND content_hash = ? AND status NOT IN ('rejected') - ORDER BY created_at`).all($.id,$.record_kind,$.content_hash).map((z)=>z.id),j.conflicting_record_ids=_.query(`SELECT id FROM durable_knowledge_records + ORDER BY created_at`).all($.id,$.record_kind,$.content_hash).map((W)=>W.id),j.conflicting_record_ids=_.query(`SELECT id FROM durable_knowledge_records WHERE record_kind = ? AND canonical_key = ? AND content_hash <> ? AND status IN ('active', 'conflicted') - ORDER BY created_at`).all($.record_kind,$.canonical_key,$.content_hash).map((z)=>z.id),j.conflicting_candidate_ids=_.query(`SELECT id FROM knowledge_promotion_candidates + ORDER BY created_at`).all($.record_kind,$.canonical_key,$.content_hash).map((W)=>W.id),j.conflicting_candidate_ids=_.query(`SELECT id FROM knowledge_promotion_candidates WHERE id <> ? AND record_kind = ? AND canonical_key = ? AND content_hash <> ? AND status IN ('ready', 'needs_approval', 'promoted') - ORDER BY created_at`).all($.id,$.record_kind,$.canonical_key,$.content_hash).map((z)=>z.id);let N=j.duplicate_record_ids[0]??j.duplicate_candidate_ids[0]??null,O=g.length===0||U.length===0||j.invalid_source_refs.length>0||j.citations.invalid>0;if($.record_kind==="decision"||$.record_kind==="claim")j.approval_reasons.push(`${$.record_kind}_requires_review`);if(I.requested_approval===!0)j.approval_reasons.push("explicit_approval_request");if(j.stale_refs.length>0)j.approval_reasons.push("stale_evidence");if(j.conflicting_record_ids.length>0||j.conflicting_candidate_ids.length>0)j.approval_reasons.push("conflicting_knowledge");let A=j.approval_reasons.length>0,L=N?"duplicate":O?"blocked":A?"needs_approval":"ready";return _.run(`UPDATE knowledge_promotion_candidates + ORDER BY created_at`).all($.id,$.record_kind,$.canonical_key,$.content_hash).map((W)=>W.id);let E=j.duplicate_record_ids[0]??j.duplicate_candidate_ids[0]??null,A=D.length===0||U.length===0||j.invalid_source_refs.length>0||j.citations.invalid>0;if($.record_kind==="decision"||$.record_kind==="claim")j.approval_reasons.push(`${$.record_kind}_requires_review`);if(I.requested_approval===!0)j.approval_reasons.push("explicit_approval_request");if(j.stale_refs.length>0)j.approval_reasons.push("stale_evidence");if(j.conflicting_record_ids.length>0||j.conflicting_candidate_ids.length>0)j.approval_reasons.push("conflicting_knowledge");let O=j.approval_reasons.length>0,P=E?"duplicate":A?"blocked":O?"needs_approval":"ready";return _.run(`UPDATE knowledge_promotion_candidates SET status = ?, requires_approval = ?, checks_json = ?, duplicate_of = ?, updated_at = ?, reviewed_at = ? - WHERE id = ?`,[L,A?1:0,JSON.stringify(j),N,D,D,$.id]),h6(c6(_,$.id))}function dR(_,$){let D=["lesson","decision","claim"],U=["memento","session","report"];if(!D.includes($.kind))throw Error("Promotion kind must be lesson, decision, or claim.");if(!U.includes($.sourceKind))throw Error("Promotion source kind must be memento, session, or report.");let g=u_(_D($.title)),I=u_(_D($.content));if(!g.text)throw Error("Promotion title is required.");if(!I.text)throw Error("Promotion content is required.");let j=Array.from(new Set($.sourceRefs.map(_D).filter(Boolean))).sort(),N=$.evidenceRefs.map(xM).filter((S)=>S.ref.length>0).sort((S,X)=>S.ref.localeCompare(X.ref)),O=uM($.canonicalKey??g.text);if(!O)throw Error("Promotion canonical key is empty after normalization.");let A=`sha256:${hR("sha256").update(`${$.kind}\x00${_D(I.text).toLowerCase()}`).digest("hex")}`,L=D3("promote",[$.sourceKind,$.kind,O,A,...j].join("\x00")),z=D3("promotion",L),W=($.now??new Date).toISOString(),J={...$.metadata??{},requested_approval:$.requiresApproval===!0,confidence:$.confidence??null,valid_from:$.validFrom??W,valid_to:$.validTo??null,redactions:g.findings.length+I.findings.length};h(_);let P=r(_);try{let S=P.query("SELECT * FROM knowledge_promotion_candidates WHERE idempotency_key = ?").get(L);if(S)return{created:!1,candidate:h6(S)};P.run(`INSERT INTO knowledge_promotion_candidates ( + WHERE id = ?`,[P,O?1:0,JSON.stringify(j),E,g,g,$.id]),h6(n6(_,$.id))}function oX(_,$){let g=["lesson","decision","claim"],U=["memento","session","report"];if(!g.includes($.kind))throw Error("Promotion kind must be lesson, decision, or claim.");if(!U.includes($.sourceKind))throw Error("Promotion source kind must be memento, session, or report.");let D=w_(s4($.title)),I=w_(s4($.content));if(!D.text)throw Error("Promotion title is required.");if(!I.text)throw Error("Promotion content is required.");let j=Array.from(new Set($.sourceRefs.map(s4).filter(Boolean))).sort(),E=$.evidenceRefs.map(or).filter((J)=>J.ref.length>0).sort((J,R)=>J.ref.localeCompare(R.ref)),A=tr($.canonicalKey??D.text);if(!A)throw Error("Promotion canonical key is empty after normalization.");let O=`sha256:${iX("sha256").update(`${$.kind}\x00${s4(I.text).toLowerCase()}`).digest("hex")}`,P=EW("promote",[$.sourceKind,$.kind,A,O,...j].join("\x00")),W=EW("promotion",P),z=($.now??new Date).toISOString(),S={...$.metadata??{},requested_approval:$.requiresApproval===!0,confidence:$.confidence??null,valid_from:$.validFrom??z,valid_to:$.validTo??null,redactions:D.findings.length+I.findings.length};c(_);let L=v(_);try{let J=L.query("SELECT * FROM knowledge_promotion_candidates WHERE idempotency_key = ?").get(P);if(J)return{created:!1,candidate:h6(J)};L.run(`INSERT INTO knowledge_promotion_candidates ( id, record_kind, title, content, canonical_key, content_hash, source_kind, source_refs_json, evidence_refs_json, status, requires_approval, checks_json, idempotency_key, metadata_json, created_at, updated_at - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending', 0, '{}', ?, ?, ?, ?)`,[z,$.kind,g.text,I.text,O,A,$.sourceKind,JSON.stringify(j),JSON.stringify(N),L,JSON.stringify(J),W,W]);let X=[...g.findings,...I.findings];if(X.length>0)z0(P,{source_uri:j[0]??`knowledge://promotion/${z}`,findings:X,metadata:{promotion_candidate_id:z},created_at:W});return X_(P,{event_type:"knowledge_promotion",action:"enqueue_promotion",target_uri:`knowledge://promotion/${z}`,decision:"info",metadata:{record_kind:$.kind,source_kind:$.sourceKind,source_refs:j},created_at:W}),{created:!0,candidate:U3(P,c6(P,z),W)}}finally{P.close()}}function mR(_,$){h(_);let D=r(_);try{let U=c6(D,$);return U?h6(U):null}finally{D.close()}}function iR(_,$={}){h(_);let D=Math.max(1,Math.min($.limit??50,200)),U=[],g=[];if($.status==="inbox"||!$.status)U.push("status IN ('ready', 'needs_approval', 'blocked')");else U.push("status = ?"),g.push($.status);if($.kind)U.push("record_kind = ?"),g.push($.kind);let I=r(_);try{return I.query(`SELECT * FROM knowledge_promotion_candidates + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending', 0, '{}', ?, ?, ?, ?)`,[W,$.kind,D.text,I.text,A,O,$.sourceKind,JSON.stringify(j),JSON.stringify(E),P,JSON.stringify(S),z,z]);let R=[...D.findings,...I.findings];if(R.length>0)W4(L,{source_uri:j[0]??`knowledge://promotion/${W}`,findings:R,metadata:{promotion_candidate_id:W},created_at:z});return z_(L,{event_type:"knowledge_promotion",action:"enqueue_promotion",target_uri:`knowledge://promotion/${W}`,decision:"info",metadata:{record_kind:$.kind,source_kind:$.sourceKind,source_refs:j},created_at:z}),{created:!0,candidate:AW(L,n6(L,W),z)}}finally{L.close()}}function pX(_,$){c(_);let g=v(_);try{let U=n6(g,$);return U?h6(U):null}finally{g.close()}}function eX(_,$={}){c(_);let g=Math.max(1,Math.min($.limit??50,200)),U=[],D=[];if($.status==="inbox"||!$.status)U.push("status IN ('ready', 'needs_approval', 'blocked')");else U.push("status = ?"),D.push($.status);if($.kind)U.push("record_kind = ?"),D.push($.kind);let I=v(_);try{return I.query(`SELECT * FROM knowledge_promotion_candidates WHERE ${U.join(" AND ")} ORDER BY updated_at DESC, created_at DESC - LIMIT ?`).all(...g,D).map(h6)}finally{I.close()}}function lR(_,$,D=new Date){h(_);let U=r(_);try{let g=c6(U,$);if(!g)throw Error(`Promotion candidate not found: ${$}`);if(g.status==="promoted"||g.status==="rejected")return h6(g);return U3(U,g,D.toISOString())}finally{U.close()}}function tR(_,$,D={}){h(_);let U=r(_),g=(D.now??new Date).toISOString();try{let I=c6(U,$);if(!I)throw Error(`Promotion candidate not found: ${$}`);if(I.status==="promoted"&&I.promoted_record_id){let J=U.query("SELECT * FROM durable_knowledge_records WHERE id = ?").get(I.promoted_record_id);return{ok:!0,promoted:!1,requires_approval:I.requires_approval===1,candidate:h6(I),record:J?g3(J):null,approval_id:null,reason:"already_promoted"}}if(I.status==="rejected")throw Error(`Promotion candidate ${$} was rejected.`);let j=U3(U,I,g);if(j.status==="duplicate")return{ok:!0,promoted:!1,requires_approval:!1,candidate:j,record:null,approval_id:null,reason:"duplicate"};if(j.status==="blocked")return{ok:!1,promoted:!1,requires_approval:!1,candidate:j,record:null,approval_id:null,reason:"citation_check_failed"};if(j.requires_approval&&!D.approveWrite)return{ok:!1,promoted:!1,requires_approval:!0,candidate:j,record:null,approval_id:null,reason:"approval_required"};if(j.requires_approval&&!D.approvedBy?.trim())throw Error("Promotion approval requires --approved-by .");let N=j.requires_approval?D.approvedBy.trim():null,O=null;if(j.requires_approval)O=iU(U,{action:"promote_durable_knowledge",target_uri:`knowledge://promotion/${j.id}`,reason:j.checks.approval_reasons.join(", "),approved_by:N,metadata:{promotion_candidate_id:j.id,checks:j.checks},created_at:g}).id;let A=D3("durable",j.id),L={...j.metadata,promotion_candidate_id:j.id,source_kind:j.source_kind,checks:j.checks,approval_id:O,provenance:U$({generated_from:`knowledge://promotion/${j.id}`,artifact_key:`durable/${j.record_kind}/${j.canonical_key}`,source_refs:j.source_refs,citation_required:!0})};U.run(`INSERT INTO durable_knowledge_records ( + LIMIT ?`).all(...D,g).map(h6)}finally{I.close()}}function aX(_,$,g=new Date){c(_);let U=v(_);try{let D=n6(U,$);if(!D)throw Error(`Promotion candidate not found: ${$}`);if(D.status==="promoted"||D.status==="rejected")return h6(D);return AW(U,D,g.toISOString())}finally{U.close()}}function sX(_,$,g={}){c(_);let U=v(_),D=(g.now??new Date).toISOString();try{let I=n6(U,$);if(!I)throw Error(`Promotion candidate not found: ${$}`);if(I.status==="promoted"&&I.promoted_record_id){let S=U.query("SELECT * FROM durable_knowledge_records WHERE id = ?").get(I.promoted_record_id);return{ok:!0,promoted:!1,requires_approval:I.requires_approval===1,candidate:h6(I),record:S?NW(S):null,approval_id:null,reason:"already_promoted"}}if(I.status==="rejected")throw Error(`Promotion candidate ${$} was rejected.`);let j=AW(U,I,D);if(j.status==="duplicate")return{ok:!0,promoted:!1,requires_approval:!1,candidate:j,record:null,approval_id:null,reason:"duplicate"};if(j.status==="blocked")return{ok:!1,promoted:!1,requires_approval:!1,candidate:j,record:null,approval_id:null,reason:"citation_check_failed"};if(j.requires_approval&&!g.approveWrite)return{ok:!1,promoted:!1,requires_approval:!0,candidate:j,record:null,approval_id:null,reason:"approval_required"};if(j.requires_approval&&!g.approvedBy?.trim())throw Error("Promotion approval requires --approved-by .");let E=j.requires_approval?g.approvedBy.trim():null,A=null;if(j.requires_approval)A=iU(U,{action:"promote_durable_knowledge",target_uri:`knowledge://promotion/${j.id}`,reason:j.checks.approval_reasons.join(", "),approved_by:E,metadata:{promotion_candidate_id:j.id,checks:j.checks},created_at:D}).id;let O=EW("durable",j.id),P={...j.metadata,promotion_candidate_id:j.id,source_kind:j.source_kind,checks:j.checks,approval_id:A,provenance:D$({generated_from:`knowledge://promotion/${j.id}`,artifact_key:`durable/${j.record_kind}/${j.canonical_key}`,source_refs:j.source_refs,citation_required:!0})};U.run(`INSERT INTO durable_knowledge_records ( id, record_kind, title, content, canonical_key, content_hash, status, source_refs_json, evidence_refs_json, confidence, valid_from, valid_to, promoted_from_candidate_id, approved_by, metadata_json, created_at, updated_at - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[A,j.record_kind,j.title,j.content,j.canonical_key,j.content_hash,j.checks.conflicting_record_ids.length>0?"conflicted":"active",JSON.stringify(j.source_refs),JSON.stringify(j.evidence_refs),typeof j.metadata.confidence==="number"?j.metadata.confidence:null,typeof j.metadata.valid_from==="string"?j.metadata.valid_from:g,typeof j.metadata.valid_to==="string"?j.metadata.valid_to:null,j.id,N,JSON.stringify(L),g,g]),U.run(`UPDATE knowledge_promotion_candidates + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[O,j.record_kind,j.title,j.content,j.canonical_key,j.content_hash,j.checks.conflicting_record_ids.length>0?"conflicted":"active",JSON.stringify(j.source_refs),JSON.stringify(j.evidence_refs),typeof j.metadata.confidence==="number"?j.metadata.confidence:null,typeof j.metadata.valid_from==="string"?j.metadata.valid_from:D,typeof j.metadata.valid_to==="string"?j.metadata.valid_to:null,j.id,E,JSON.stringify(P),D,D]),U.run(`UPDATE knowledge_promotion_candidates SET status = 'promoted', approved_by = ?, promoted_record_id = ?, promoted_at = ?, updated_at = ? - WHERE id = ?`,[N,A,g,g,j.id]),X_(U,{event_type:"knowledge_promotion",action:"promote_durable_knowledge",target_uri:`knowledge://durable/${A}`,decision:"allow",metadata:{promotion_candidate_id:j.id,approval_id:O,source_refs:j.source_refs},created_at:g});let z=h6(c6(U,j.id)),W=U.query("SELECT * FROM durable_knowledge_records WHERE id = ?").get(A);return{ok:!0,promoted:!0,requires_approval:j.requires_approval,candidate:z,record:g3(W),approval_id:O,reason:null}}finally{U.close()}}function oR(_,$,D={}){h(_);let U=r(_),g=(D.now??new Date).toISOString();try{let I=c6(U,$);if(!I)throw Error(`Promotion candidate not found: ${$}`);if(I.status==="promoted")throw Error(`Promotion candidate ${$} is already promoted.`);return U.run(`UPDATE knowledge_promotion_candidates + WHERE id = ?`,[E,O,D,D,j.id]),z_(U,{event_type:"knowledge_promotion",action:"promote_durable_knowledge",target_uri:`knowledge://durable/${O}`,decision:"allow",metadata:{promotion_candidate_id:j.id,approval_id:A,source_refs:j.source_refs},created_at:D});let W=h6(n6(U,j.id)),z=U.query("SELECT * FROM durable_knowledge_records WHERE id = ?").get(O);return{ok:!0,promoted:!0,requires_approval:j.requires_approval,candidate:W,record:NW(z),approval_id:A,reason:null}}finally{U.close()}}function _5(_,$,g={}){c(_);let U=v(_),D=(g.now??new Date).toISOString();try{let I=n6(U,$);if(!I)throw Error(`Promotion candidate not found: ${$}`);if(I.status==="promoted")throw Error(`Promotion candidate ${$} is already promoted.`);return U.run(`UPDATE knowledge_promotion_candidates SET status = 'rejected', approved_by = ?, updated_at = ?, reviewed_at = ? - WHERE id = ?`,[D.rejectedBy?.trim()||null,g,g,$]),X_(U,{event_type:"knowledge_promotion",action:"reject_promotion",target_uri:`knowledge://promotion/${$}`,decision:"deny",metadata:{rejected_by:D.rejectedBy??null},created_at:g}),h6(c6(U,$))}finally{U.close()}}function pR(_,$={}){h(_);let D=[],U=[];if($.kind)D.push("record_kind = ?"),U.push($.kind);if($.status)D.push("status = ?"),U.push($.status);let g=Math.max(1,Math.min($.limit??50,200)),I=r(_);try{return I.query(`SELECT * FROM durable_knowledge_records - ${D.length?`WHERE ${D.join(" AND ")}`:""} + WHERE id = ?`,[g.rejectedBy?.trim()||null,D,D,$]),z_(U,{event_type:"knowledge_promotion",action:"reject_promotion",target_uri:`knowledge://promotion/${$}`,decision:"deny",metadata:{rejected_by:g.rejectedBy??null},created_at:D}),h6(n6(U,$))}finally{U.close()}}function $5(_,$={}){c(_);let g=[],U=[];if($.kind)g.push("record_kind = ?"),U.push($.kind);if($.status)g.push("status = ?"),U.push($.status);let D=Math.max(1,Math.min($.limit??50,200)),I=v(_);try{return I.query(`SELECT * FROM durable_knowledge_records + ${g.length?`WHERE ${g.join(" AND ")}`:""} ORDER BY updated_at DESC, created_at DESC - LIMIT ?`).all(...U,g).map(g3)}finally{I.close()}}import{createHash as nM,randomUUID as eR}from"crypto";function dM(_,$){return`${_}_${nM("sha256").update($).digest("hex").slice(0,20)}`}function mM(_){let $=r(_);try{let D=$.query("SELECT status, COUNT(*) AS n FROM reindex_queue GROUP BY status ORDER BY status").all();return Object.fromEntries(D.map((U)=>[U.status,U.n]))}finally{$.close()}}function aR(_,$){let D=I4($.modelRef,$.config),U=f_(D),g=r(_);try{return g.query(`SELECT c.id AS chunk_id, c.source_revision_id, s.uri AS source_uri + LIMIT ?`).all(...U,D).map(NW)}finally{I.close()}}import{createHash as sr,randomUUID as g5}from"crypto";function _b(_,$){return`${_}_${sr("sha256").update($).digest("hex").slice(0,20)}`}function $b(_){let $=v(_);try{let g=$.query("SELECT status, COUNT(*) AS n FROM reindex_queue GROUP BY status ORDER BY status").all();return Object.fromEntries(g.map((U)=>[U.status,U.n]))}finally{$.close()}}function D5(_,$){let g=Eg($.modelRef,$.config),U=C_(g),D=v(_);try{return D.query(`SELECT c.id AS chunk_id, c.source_revision_id, s.uri AS source_uri FROM chunks c LEFT JOIN source_revisions sr ON sr.id = c.source_revision_id LEFT JOIN sources s ON s.id = sr.source_id LEFT JOIN vector_index_entries v ON v.chunk_id = c.id AND v.provider = ? AND v.model = ? WHERE v.id IS NULL - ORDER BY c.created_at ASC, c.ordinal ASC`).all(U.provider,U.model)}finally{g.close()}}function sR(_){h(_.dbPath);let $=r(_.dbPath);try{let D=$.query("SELECT MAX(version) AS version FROM schema_versions").get()?.version??0,U=$.query("SELECT COUNT(*) AS n FROM chunks").get()?.n??0,g=$.query("SELECT COUNT(*) AS n FROM vector_index_entries").get()?.n??0,I=aR(_.dbPath,_).length,j=$.query(`SELECT COUNT(*) AS n FROM source_revisions - WHERE metadata_json LIKE '%"reindex_required":true%' OR metadata_json LIKE '%"status":"stale"%'`).get()?.n??0;return{schema_version:D,chunks:U,vector_entries:g,missing_embeddings:I,queued:mM(_.dbPath),stale_revisions:j}}finally{$.close()}}function I3(_){h(_.dbPath);let $=(_.now??new Date).toISOString(),D=_.reason??"missing_embedding",U=aR(_.dbPath,_),g=r(_.dbPath),I=0,j=0;try{g.transaction(()=>{for(let O of U){let A=dM("rq",`embedding\x00${O.chunk_id}\x00${D}`);if(g.query("SELECT id FROM reindex_queue WHERE kind = ? AND target_id = ? AND reason = ?").get("embedding",O.chunk_id,D)){j+=1;continue}g.run(`INSERT INTO reindex_queue (id, kind, target_id, source_uri, reason, status, metadata_json, created_at, updated_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[A,"embedding",O.chunk_id,O.source_uri,D,"pending",JSON.stringify({source_revision_id:O.source_revision_id}),$,$]),I+=1}})()}finally{g.close()}return{enqueued:I,already_queued:j,reason:D}}function iM(_){let $=r(_);try{let D=$.query("SELECT COUNT(*) AS n FROM chunk_embeddings").get()?.n??0,U=$.query("SELECT COUNT(*) AS n FROM vector_index_entries").get()?.n??0;return $.run("DELETE FROM vector_index_entries"),$.run("DELETE FROM chunk_embeddings"),{embeddings:D,vectorEntries:U}}finally{$.close()}}function lM(_,$,D){let U=I4($.modelRef,$.config),g=f_(U),I=r(_);try{return I.run(`UPDATE reindex_queue + ORDER BY c.created_at ASC, c.ordinal ASC`).all(U.provider,U.model)}finally{D.close()}}function U5(_){c(_.dbPath);let $=v(_.dbPath);try{let g=$.query("SELECT MAX(version) AS version FROM schema_versions").get()?.version??0,U=$.query("SELECT COUNT(*) AS n FROM chunks").get()?.n??0,D=$.query("SELECT COUNT(*) AS n FROM vector_index_entries").get()?.n??0,I=D5(_.dbPath,_).length,j=$.query(`SELECT COUNT(*) AS n FROM source_revisions + WHERE metadata_json LIKE '%"reindex_required":true%' OR metadata_json LIKE '%"status":"stale"%'`).get()?.n??0;return{schema_version:g,chunks:U,vector_entries:D,missing_embeddings:I,queued:$b(_.dbPath),stale_revisions:j}}finally{$.close()}}function OW(_){c(_.dbPath);let $=(_.now??new Date).toISOString(),g=_.reason??"missing_embedding",U=D5(_.dbPath,_),D=v(_.dbPath),I=0,j=0;try{D.transaction(()=>{for(let A of U){let O=_b("rq",`embedding\x00${A.chunk_id}\x00${g}`);if(D.query("SELECT id FROM reindex_queue WHERE kind = ? AND target_id = ? AND reason = ?").get("embedding",A.chunk_id,g)){j+=1;continue}D.run(`INSERT INTO reindex_queue (id, kind, target_id, source_uri, reason, status, metadata_json, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[O,"embedding",A.chunk_id,A.source_uri,g,"pending",JSON.stringify({source_revision_id:A.source_revision_id}),$,$]),I+=1}})()}finally{D.close()}return{enqueued:I,already_queued:j,reason:g}}function gb(_){let $=v(_);try{let g=$.query("SELECT COUNT(*) AS n FROM chunk_embeddings").get()?.n??0,U=$.query("SELECT COUNT(*) AS n FROM vector_index_entries").get()?.n??0;return $.run("DELETE FROM vector_index_entries"),$.run("DELETE FROM chunk_embeddings"),{embeddings:g,vectorEntries:U}}finally{$.close()}}function Db(_,$,g){let U=Eg($.modelRef,$.config),D=C_(U),I=v(_);try{return I.run(`UPDATE reindex_queue SET status = ?, updated_at = ? WHERE kind = ? AND status = ? @@ -1019,13 +1019,13 @@ ${JSON.stringify(_.evidence,null,2)}`].join(` WHERE v.chunk_id = reindex_queue.target_id AND v.provider = ? AND v.model = ? - )`,["completed",D,"embedding","pending",g.provider,g.model]).changes}finally{I.close()}}async function _9(_){h(_.dbPath);let $=(_.now??new Date).toISOString(),D=`run_${eR()}`,U=_.full?iM(_.dbPath):{embeddings:0,vectorEntries:0},g=I3({..._,reason:_.full?"full_embedding_rebuild":"missing_embedding"}),I=r(_.dbPath);try{I.run(`INSERT INTO runs (id, type, prompt, status, provider, model, metadata_json, created_at, updated_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[D,"embedding-refresh",_.full?"full":"incremental","running","local",I4(_.modelRef,_.config),JSON.stringify({full:_.full===!0,queued:g}),$,$])}finally{I.close()}let j=await _I({dbPath:_.dbPath,config:_.config,env:_.env,modelRef:_.modelRef,dimensions:_.dimensions,fake:_.fake,limit:_.limit,now:_.now}),N=lM(_.dbPath,_,$),O=r(_.dbPath);try{O.run("UPDATE runs SET status = ?, metadata_json = ?, updated_at = ? WHERE id = ?",["completed",JSON.stringify({full:_.full===!0,queued:g,indexed:j,completed_queue_items:N}),$,D]),O.run(`INSERT INTO run_events (id, run_id, level, event, metadata_json, created_at) - VALUES (?, ?, ?, ?, ?, ?)`,[`evt_${eR()}`,D,"info","embedding_refresh_completed",JSON.stringify({queued:g,indexed:j,completed_queue_items:N}),$])}finally{O.close()}return{run_id:D,full:_.full===!0,deleted_embeddings:U.embeddings,deleted_vector_entries:U.vectorEntries,queued:g,indexed:j,completed_queue_items:N}}import{createHash as g9}from"crypto";import{existsSync as U9,lstatSync as tM,readdirSync as oM,readFileSync as pM,statSync as eM}from"fs";import{basename as $D,extname as aM,join as sM,relative as _Z,resolve as O3,sep as $Z}from"path";import{pathToFileURL as $9}from"url";var DZ=100,gZ=25,UZ=262144,IZ=5,jZ=new Set([".md",".mdx",".txt",".json",".jsonc",".toml",".yaml",".yml"]),j3=new Set(["CODEWITH.md","AGENTS.md","CLAUDE.md","RULES.md","INSTRUCTIONS.md"]),NZ=new Set([".git","node_modules","dist","build",".codewith-worktrees",".connect",".secrets",".tmp","tmp","auth_profiles","profiles","preserved","backup","backups","cache","logs","runs"]),EZ=/(^|[._-])(secret|secrets|token|tokens|credential|credentials|password|passwd|private[_-]?key|id_rsa)([._-]|$)/i,oj=/(agent|rule|rules|instruction|instructions|global|operating|standard|knowledge)/i;function N3(_){return`sha256:${g9("sha256").update(_).digest("hex")}`}function OZ(_){return`sha256:${g9("sha256").update(_).digest("hex")}`}function OU(_){return _.split($Z).join("/")}function E3(_,$){let D=_Z(_,$);return D?OU(D):$D($)}function n6(_){return jZ.has(aM(_).toLowerCase())}function D9(_){return OU(_).split("/").some(($)=>EZ.test($))}function I9(_,$=220){let D=_.normalize("NFKC").trim().replace(/\s+/g," ");if(D.length<=$)return D;return`${D.slice(0,Math.max(0,$-1)).trim()}...`}function j9(_){if(!_)return 0;return _.split(/\r\n|\n|\r/).length}function N9(_){return{source_ref:_.sourceRef,source_path:_.sourcePath,line_start:_.lineCount>0?1:0,line_end:_.lineCount,content_hash:_.contentHash}}function AZ(){return[{base:".",maxDepth:0,spec:{family:"rule_doc",owner:"repository",scope:"global",precedence:{rank:10,label:"root-rule-doc"},tags:["global-rules","rule-doc"],include:(_)=>j3.has(_)}},{base:".codewith",spec:{family:"codewith",owner:"codewith",scope:"global",precedence:{rank:20,label:"codewith"},tags:["global-rules","codewith","agent-instructions"],include:(_)=>{let $=OU(_),D=$D($);if(j3.has(D)||$==="config.toml")return!0;if($.endsWith("/SKILL.md"))return!0;if(/^(rules|instructions|prompts|plans)\//.test($)&&n6($))return!0;return!1}}},{base:".claude",spec:{family:"claude",owner:"claude",scope:"global",precedence:{rank:30,label:"claude-rules"},tags:["global-rules","claude","agent-instructions"],include:(_)=>{let $=OU(_);return $==="CLAUDE.md"||/^rules\//.test($)&&n6($)}}},{base:".codex",spec:{family:"codex",owner:"codex",scope:"global",precedence:{rank:40,label:"codex"},tags:["global-rules","codex","agent-instructions"],include:(_)=>{let $=OU(_),D=$D($);if(j3.has(D)||D==="config.toml")return!0;return/^(rules|instructions|prompts)\//.test($)&&n6($)}}},{base:".opencode",spec:{family:"opencode",owner:"opencode",scope:"global",precedence:{rank:50,label:"opencode"},tags:["global-rules","opencode","agent-instructions"],include:(_)=>oj.test(_)&&n6(_)}},{base:".",maxDepth:0,spec:{family:"opencode",owner:"opencode",scope:"global",precedence:{rank:50,label:"opencode-config"},tags:["global-rules","opencode","config"],include:(_)=>["opencode.json","opencode.jsonc","opencode.toml","opencode.yaml","opencode.yml"].includes(_)}},{base:".hasna/prompts",spec:{family:"prompt",owner:"hasna",scope:"global",precedence:{rank:60,label:"selected-prompts"},tags:["global-rules","prompt"],include:(_)=>oj.test(_)&&n6(_)}},{base:".hasna/plans",spec:{family:"plan",owner:"hasna",scope:"global",precedence:{rank:65,label:"selected-plans"},tags:["global-rules","plan"],include:(_)=>oj.test(_)&&n6(_)}},{base:"docs",spec:{family:"rule_doc",owner:"repository",scope:"global",precedence:{rank:70,label:"rule-docs"},tags:["global-rules","rule-doc"],include:(_)=>oj.test(_)&&n6(_)}}]}function LZ(_,$){let D=new Map;for(let U of AZ()){let g=O3(_,U.base);if(!U9(g))continue;if(eM(g).isFile()){let j=$D(g);if(U.spec.include(j))D.set(g,{...U.spec,absPath:g});continue}E9({basePath:g,depth:0,maxDepth:U.maxDepth??IZ,spec:U.spec,candidates:D,skipped:$})}return[...D.values()].sort((U,g)=>{if(U.precedence.rank!==g.precedence.rank)return U.precedence.rank-g.precedence.rank;return U.absPath.localeCompare(g.absPath)})}function E9(_){let $=_.rootBasePath??_.basePath;if(_.depth>_.maxDepth)return;for(let D of oM(_.basePath,{withFileTypes:!0})){let U=sM(_.basePath,D.name),g=E3($,U);if(D.isSymbolicLink())continue;if(D.isDirectory()){if(NZ.has(D.name))continue;if(D9(g)){_.skipped.push({source_family:_.spec.family,source_path:U,reason:"sensitive_path"});continue}E9({..._,rootBasePath:$,basePath:U,depth:_.depth+1});continue}if(!D.isFile())continue;let I=E3(O3($),U);if(D9(I)){_.skipped.push({source_family:_.spec.family,source_path:U,reason:"sensitive_path"});continue}if(!_.spec.include(I))continue;if(!n6(U))continue;_.candidates.set(U,{..._.spec,absPath:U})}}function JZ(_){if((_.tags??[]).map((U)=>U.toLowerCase()).some((U)=>["rule","rules","agent","instructions","global-rules","global-agent-rules"].includes(U)))return!0;let D=`${_.title} -${_.content.slice(0,500)}`.toLowerCase();return/\b(agent|rule|rules|instruction|instructions|codewith|claude|codex|opencode)\b/.test(D)}function O9(_,$){let D={source_path:_.source_path,source_path_ref:_.source_path_ref,source_ref:_.source_ref,owner:_.owner,scope:_.scope,precedence:_.precedence,source_hash:_.source_hash,content_hash:_.content_hash,discovered_at:_.discovered_at,tags:_.tags,redaction_status:_.redaction_status,citations:_.citations};return{source_ref:_.source_ref,name:_.title,mime:"text/markdown",size:Buffer.byteLength($),hash:_.content_hash,revision:_.content_hash,status:"active",updated_at:_.discovered_at,permissions:{mode:"read_only",allowed_purposes:["knowledge_index","knowledge_answer","agent_context"]},rule_provenance:D,source_family:_.source_family,source_path_ref:_.source_path_ref,owner:_.owner,scope:_.scope,precedence:_.precedence,tags:_.tags,redaction_status:_.redaction_status,legacy_json_id:_.legacy_json_id??null,extracted_text:$}}function PZ(_){let $=tM(_.candidate.absPath),D=_.candidate.absPath,U=E3(_.root,D);if($.size>_.maxBytesPerFile){let J=$9(D).href;return{evidence:{source_family:_.candidate.family,title:$D(D),source_path:D,source_path_ref:U,source_ref:J,owner:_.candidate.owner,scope:_.candidate.scope,precedence:_.candidate.precedence,source_hash:"sha256:skipped-too-large",content_hash:"sha256:skipped-too-large",discovered_at:_.discoveredAt,tags:[..._.candidate.tags,"skipped"],redaction_status:"refused",redactions:[],citations:[],bytes:$.size,line_count:0,importable:!1,skipped_reason:"max_bytes_exceeded",preview:null},text:"",manifest:null}}let g=pM(D),I=g.toString("utf8"),j=u_(I,_.safetyPolicy),O=j.findings.some((J)=>J.severity==="high")?"refused":j.findings.length>0?"redacted":"clean",A=N3(j.text),L=$9(D).href,z=j9(j.text),W={source_family:_.candidate.family,title:$D(D),source_path:D,source_path_ref:U,source_ref:L,owner:_.candidate.owner,scope:_.candidate.scope,precedence:_.candidate.precedence,source_hash:OZ(g),content_hash:A,discovered_at:_.discoveredAt,tags:[..._.candidate.tags],redaction_status:O,redactions:j.findings.map((J)=>({type:J.type,severity:J.severity})),citations:[N9({sourceRef:L,sourcePath:D,lineCount:z,contentHash:A})],bytes:g.byteLength,line_count:z,importable:O!=="refused",skipped_reason:O==="refused"?"secret_refused":null,preview:O==="refused"?null:I9(j.text)};return{evidence:W,text:j.text,manifest:W.importable?O9(W,j.text):null}}function zZ(_){let $=u_(_.item.content,_.safetyPolicy),U=$.findings.some((A)=>A.severity==="high")?"refused":$.findings.length>0?"redacted":"clean",g=`open-files://source/legacy-json/path/${encodeURIComponent(_.item.id)}`,I=N3($.text),j=N3(_.item.content),N=j9($.text),O={source_family:"legacy_json",title:_.item.title,source_path:_.legacyStorePath,source_path_ref:`legacy-json:${_.item.id}`,source_ref:g,owner:"legacy-json",scope:_.scope,precedence:{rank:90,label:"legacy-json-note"},source_hash:j,content_hash:I,discovered_at:_.discoveredAt,tags:[...new Set(["global-rules","legacy-json",..._.item.tags??[]])],redaction_status:U,redactions:$.findings.map((A)=>({type:A.type,severity:A.severity})),citations:[N9({sourceRef:g,sourcePath:_.legacyStorePath,lineCount:N,contentHash:I})],bytes:Buffer.byteLength(_.item.content),line_count:N,importable:U!=="refused",skipped_reason:U==="refused"?"secret_refused":null,preview:U==="refused"?null:I9($.text),legacy_json_id:_.item.id};return{evidence:O,text:$.text,manifest:O.importable?O9(O,$.text):null}}function SZ(_){if(!_.legacyStorePath||!U9(_.legacyStorePath))return 0;let $=new Map(_.records.filter((D)=>D.legacy_json_id&&D.importable).map((D)=>[D.legacy_json_id,D]));if($.size===0)return 0;return r$(_.legacyStorePath,()=>{let D=I0(_.legacyStorePath);if(!D.exists)return 0;let U=0;for(let g of D.items){let I=$.get(g.id);if(!I)continue;let j=g.metadata??{};g.archived=!0,g.metadata={...j,knowledge_rules_import:{status:"deprecated_after_source_backed_promotion",deprecated_at:_.now,source_ref:I.source_ref,source_hash:I.source_hash,content_hash:I.content_hash,data_loss:!1}},g.tags=[...new Set([...g.tags??[],"deprecated:knowledge-rules-import"])],g.updated_at=_.now,U+=1}if(U>0)t$(_.legacyStorePath,{items:D.items});return U})}async function A9(_={}){let $=O3(_.root??process.cwd()),D=_.scope??"global",U=_.owner??"global-agent-rules-standard",g=_.dryRun!==!1,I=(_.now??new Date).toISOString(),j=Math.max(1,Math.min(_.maxItems??DZ,1000)),N=Math.max(1,Math.min(_.limit??gZ,100)),O=Math.max(1024,Math.min(_.maxBytesPerFile??UZ,2097152)),A=[],z=LZ($,A).slice(0,j).map((Z)=>PZ({root:$,candidate:{...Z,owner:Z.owner==="repository"?U:Z.owner,scope:D},discoveredAt:I,maxBytesPerFile:O,safetyPolicy:_.safetyPolicy})),J=(_.includeLegacy===!1||!_.legacyStorePath?{exists:!1,items:[]}:I0(_.legacyStorePath)).items.filter((Z)=>Z.archived!==!0&&JZ(Z)).slice(0,j),P=J.map((Z)=>zZ({item:Z,legacyStorePath:_.legacyStorePath,discoveredAt:I,scope:D,safetyPolicy:_.safetyPolicy})),S=[...z,...P].slice(0,j),X=S.map((Z)=>Z.evidence),R=S.filter((Z)=>Z.manifest).map((Z)=>Z.manifest),V=X.filter((Z)=>Z.redaction_status==="refused").length,Q=X.slice(0,N),T=A.slice(0,N),q=null,K=0;if(!g){if(!_.dbPath)throw Error("rules provenance apply mode requires dbPath.");if(R.length>0)q=await $4({dbPath:_.dbPath,items:R,sourceLabel:"knowledge://rules-provenance/global-agent-rules",readAction:"rules_provenance_import",allowFileSourceRefs:!0,safetyPolicy:_.safetyPolicy,now:_.now,maxItems:j});if(_.deprecateLegacy!==!1)K=SZ({legacyStorePath:_.legacyStorePath,records:X,now:I})}return{ok:V===0||R.length>0||g,workflow:"global-rules-provenance-import",dry_run:g,writes_performed:!g,root:$,scope:D,owner:U,discovered_at:I,max_items:j,evidence_limit:N,records_seen:X.length,records_importable:R.length,records_refused:V,records_skipped:A.length,evidence_truncated:X.length>Q.length,skipped_truncated:A.length>T.length,evidence:Q,skipped:T,import_result:q,legacy:{store_path:_.legacyStorePath??null,candidates:J.length,promoted:P.filter((Z)=>Z.manifest).length,deprecated:K,data_loss:!1},message:g?`Discovered ${X.length} rule source(s); ${R.length} importable, ${V} refused`:`Imported ${q?.items_seen??0} rule source(s); ${K} legacy note(s) deprecated`}}import{createHash as WZ,randomUUID as L9}from"crypto";function XZ(_){return`sha256:${WZ("sha256").update(_).digest("hex")}`}function J9(_){let $=_.trim().split(/\s+/).filter(Boolean).length;return Math.max(1,Math.ceil($*1.25))}function P9(_){return _&&typeof _==="object"&&!Array.isArray(_)?_:{}}function d6(_){return typeof _==="string"&&_.length>0?_:null}function RZ(_){let $=P9(_),D=d6($.url)??d6($.uri)??d6($.sourceUrl);if(!D)return null;return{url:D,title:d6($.title)??d6($.name),snippet:d6($.snippet)??d6($.text)??d6($.description),provider_metadata:$}}function pj(_,$){if(Array.isArray(_)){for(let g of _)pj(g,$);return}let D=RZ(_);if(D)$.set(D.url,D);let U=P9(_);for(let g of["sources","results","citations","annotations","output"])if(U[g])pj(U[g],$)}function GZ(_,$){return Array.from({length:Math.min($,3)},(D,U)=>({url:`https://example.com/knowledge-web-${U+1}`,title:`Fake web source ${U+1}`,snippet:`Deterministic web-search fixture for "${_}"`,provider_metadata:{fake:!0,rank:U+1}}))}async function YZ(_){let{generateText:$}=await import("ai"),{createOpenAI:D}=await import("@ai-sdk/openai"),U=$6(_.config,"openai"),g=D({apiKey:_.env[U.api_key_env],baseURL:U.base_url}),I=g.tools?.webSearch;if(!I)throw Error("OpenAI provider does not expose tools.webSearch.");return $({model:g(_.model),prompt:_.query,tools:{web_search:I({externalWebAccess:!0,searchContextSize:"medium",..._.domains.length>0?{allowedDomains:_.domains}:{}})},toolChoice:{type:"tool",toolName:"web_search"}})}async function QZ(_){let{generateText:$}=await import("ai"),{createAnthropic:D}=await import("@ai-sdk/anthropic"),U=$6(_.config,"anthropic"),g=D({apiKey:_.env[U.api_key_env],baseURL:U.base_url}),I=g.tools?.webSearch_20250305??g.tools?.webSearch;if(!I)throw Error("Anthropic provider does not expose a web search tool.");return $({model:g(_.model),prompt:_.query,tools:{web_search:I({maxUses:_.maxUses,..._.domains.length>0?{allowedDomains:_.domains}:{}})}})}async function TZ(_,$,D){if(!_.fileResults||$.length===0)return 0;let U=$.map((I)=>{let j=[I.title,I.snippet,I.url].filter(Boolean).join(` -`),N=XZ(j);return{source_ref:I.url,name:I.title??I.url,url:I.url,mime:"text/plain",hash:N,revision:N,status:"active",updated_at:D,permissions:{mode:"read_only",allowed_purposes:["knowledge_answer","knowledge_index"]},metadata:{source_ref:I.url,content_source:"provider_web_search",provider_metadata:I.provider_metadata},extracted_text:j}});return(await $4({dbPath:_.dbPath,items:U,sourceLabel:`web-search:${_.query}`,readAction:"provider_web_search_file_results",safetyPolicy:_.safetyPolicy,now:new Date(D)})).sources_upserted}async function z9(_){let $=_.query.trim();if(!$)throw Error("Web search query is required.");let D=_.env??process.env,U=(_.now??new Date).toISOString(),g=Math.max(1,Math.min(_.limit??5,20)),I=Math.max(1,Math.min(_.maxUses??3,10)),j=_.domains??[],N=G$(_.modelRef??(_.provider?`${_.provider}:${$6(_.config,_.provider).default_model}`:"default"),_.config),O=f_(N),A=_.provider??O.provider,L=O.provider===A?O.model:$6(_.config,A).default_model,z=`run_${L9()}`;if(!_.fake&&_.safetyPolicy)P0(_.safetyPolicy);if(!_.fake&&A!=="openai"&&A!=="anthropic")throw Error(`Provider ${A} does not expose native web search yet.`);if(!_.fake)g4(A,_.config,D);h(_.dbPath);let W=r(_.dbPath);try{W.run(`INSERT INTO runs (id, type, prompt, status, provider, model, metadata_json, created_at, updated_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[z,"provider-web-search",$,"running",A,L,JSON.stringify({domains:j,max_uses:I,fake:_.fake===!0}),U,U]),X_(W,{event_type:"source_read",action:_.fake?"fake_provider_web_search":"provider_web_search",target_uri:$,decision:"allow",metadata:{provider:A,model:L,domains:j,max_uses:I},created_at:U})}finally{W.close()}let J="",P=[],S={input_tokens:J9($),output_tokens:0,cost_usd:0},X=[];if(_.fake)P=GZ($,g),J=`Fake web search answer for: ${$}`,S.output_tokens=J9(J);else{let V=A==="openai"?await YZ({query:$,model:L,config:_.config,env:D,maxUses:I,domains:j}):await QZ({query:$,model:L,config:_.config,env:D,maxUses:I,domains:j});J=V.text;let Q=new Map;pj(V.sources,Q),pj(V.toolResults,Q),P=Array.from(Q.values()).slice(0,g);let T=U4({provider:A,model:L,usage:V.usage,providerMetadata:V.providerMetadata});S={input_tokens:T.input_tokens,output_tokens:T.output_tokens,cost_usd:T.cost_usd}}let G=await TZ(_,P,U),R=r(_.dbPath);try{R.run("UPDATE runs SET status = ?, metadata_json = ?, updated_at = ? WHERE id = ?",["completed",JSON.stringify({domains:j,max_uses:I,sources:P.length,filed_sources:G,fake:_.fake===!0}),U,z]),R.run(`INSERT INTO run_events (id, run_id, level, event, metadata_json, created_at) - VALUES (?, ?, ?, ?, ?, ?)`,[`evt_${L9()}`,z,"info","provider_web_search_completed",JSON.stringify({sources:P.length,filed_sources:G}),U]),W0(R,{run_id:z,provider:A,model:L,input_tokens:S.input_tokens,output_tokens:S.output_tokens,cost_usd:S.cost_usd,metadata:{web_search:!0,sources:P.length,filed_sources:G},created_at:U})}finally{R.close()}if(P.length===0)X.push("no_web_sources_returned");return{run_id:z,query:$,provider:A,model:L,answer:J,sources:P,filed_sources:G,usage:S,warnings:X}}import{createHash as qZ,randomUUID as BZ}from"crypto";function DD(_,$){return`${_}_${qZ("sha256").update($).digest("hex").slice(0,20)}`}function A3(_){return _.normalize("NFKC").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80)||"knowledge-page"}function VZ(_){return{year:String(_.getUTCFullYear()),month:String(_.getUTCMonth()+1).padStart(2,"0"),day:String(_.getUTCDate()).padStart(2,"0")}}function KZ(_){let $=_.trim().split(/\s+/).filter(Boolean).length;return Math.max(1,Math.ceil($*1.25))}function S9(_){if(!_)return{};try{let $=JSON.parse(_);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch{return{}}}function FZ(_){return Array.from(new Set((_??"").toLowerCase().match(/[\p{L}\p{N}_]+/gu)??[])).slice(0,12)}function W9(_){return _.replace(/[\\%_]/g,($)=>`\\${$}`)}function MZ(_,$){let D=Math.max(1,Math.min($.limit??10,50)),U=$.sourceRefs??[],g=FZ($.query),I=["c.kind = 'source'"],j=[];if(U.length>0){I.push(`(${U.map(()=>"(s.uri = ? OR c.metadata_json LIKE ?)").join(" OR ")})`);for(let N of U)j.push(N,`%${W9(N)}%`)}if(g.length>0){I.push(`(${g.map(()=>"lower(c.text) LIKE ? ESCAPE '\\'").join(" OR ")})`);for(let N of g)j.push(`%${W9(N)}%`)}return j.push(D),_.query(`SELECT + )`,["completed",g,"embedding","pending",D.provider,D.model]).changes}finally{I.close()}}async function I5(_){c(_.dbPath);let $=(_.now??new Date).toISOString(),g=`run_${g5()}`,U=_.full?gb(_.dbPath):{embeddings:0,vectorEntries:0},D=OW({..._,reason:_.full?"full_embedding_rebuild":"missing_embedding"}),I=v(_.dbPath);try{I.run(`INSERT INTO runs (id, type, prompt, status, provider, model, metadata_json, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[g,"embedding-refresh",_.full?"full":"incremental","running","local",Eg(_.modelRef,_.config),JSON.stringify({full:_.full===!0,queued:D}),$,$])}finally{I.close()}let j=await _I({dbPath:_.dbPath,config:_.config,env:_.env,modelRef:_.modelRef,dimensions:_.dimensions,fake:_.fake,limit:_.limit,now:_.now}),E=Db(_.dbPath,_,$),A=v(_.dbPath);try{A.run("UPDATE runs SET status = ?, metadata_json = ?, updated_at = ? WHERE id = ?",["completed",JSON.stringify({full:_.full===!0,queued:D,indexed:j,completed_queue_items:E}),$,g]),A.run(`INSERT INTO run_events (id, run_id, level, event, metadata_json, created_at) + VALUES (?, ?, ?, ?, ?, ?)`,[`evt_${g5()}`,g,"info","embedding_refresh_completed",JSON.stringify({queued:D,indexed:j,completed_queue_items:E}),$])}finally{A.close()}return{run_id:g,full:_.full===!0,deleted_embeddings:U.embeddings,deleted_vector_entries:U.vectorEntries,queued:D,indexed:j,completed_queue_items:E}}import{createHash as N5}from"crypto";import{existsSync as A5,lstatSync as Ub,readdirSync as Ib,readFileSync as jb,statSync as Eb}from"fs";import{basename as _0,extname as Nb,join as Ab,relative as Ob,resolve as WW,sep as Pb}from"path";import{pathToFileURL as j5}from"url";var Sb=100,Lb=25,Wb=262144,Jb=5,zb=new Set([".md",".mdx",".txt",".json",".jsonc",".toml",".yaml",".yml"]),PW=new Set(["CODEWITH.md","AGENTS.md","CLAUDE.md","RULES.md","INSTRUCTIONS.md"]),Rb=new Set([".git","node_modules","dist","build",".codewith-worktrees",".connect",".secrets",".tmp","tmp","auth_profiles","profiles","preserved","backup","backups","cache","logs","runs"]),Gb=/(^|[._-])(secret|secrets|token|tokens|credential|credentials|password|passwd|private[_-]?key|id_rsa)([._-]|$)/i,tj=/(agent|rule|rules|instruction|instructions|global|operating|standard|knowledge)/i;function SW(_){return`sha256:${N5("sha256").update(_).digest("hex")}`}function Xb(_){return`sha256:${N5("sha256").update(_).digest("hex")}`}function NU(_){return _.split(Pb).join("/")}function LW(_,$){let g=Ob(_,$);return g?NU(g):_0($)}function d6(_){return zb.has(Nb(_).toLowerCase())}function E5(_){return NU(_).split("/").some(($)=>Gb.test($))}function O5(_,$=220){let g=_.normalize("NFKC").trim().replace(/\s+/g," ");if(g.length<=$)return g;return`${g.slice(0,Math.max(0,$-1)).trim()}...`}function P5(_){if(!_)return 0;return _.split(/\r\n|\n|\r/).length}function S5(_){return{source_ref:_.sourceRef,source_path:_.sourcePath,line_start:_.lineCount>0?1:0,line_end:_.lineCount,content_hash:_.contentHash}}function Yb(){return[{base:".",maxDepth:0,spec:{family:"rule_doc",owner:"repository",scope:"global",precedence:{rank:10,label:"root-rule-doc"},tags:["global-rules","rule-doc"],include:(_)=>PW.has(_)}},{base:".codewith",spec:{family:"codewith",owner:"codewith",scope:"global",precedence:{rank:20,label:"codewith"},tags:["global-rules","codewith","agent-instructions"],include:(_)=>{let $=NU(_),g=_0($);if(PW.has(g)||$==="config.toml")return!0;if($.endsWith("/SKILL.md"))return!0;if(/^(rules|instructions|prompts|plans)\//.test($)&&d6($))return!0;return!1}}},{base:".claude",spec:{family:"claude",owner:"claude",scope:"global",precedence:{rank:30,label:"claude-rules"},tags:["global-rules","claude","agent-instructions"],include:(_)=>{let $=NU(_);return $==="CLAUDE.md"||/^rules\//.test($)&&d6($)}}},{base:".codex",spec:{family:"codex",owner:"codex",scope:"global",precedence:{rank:40,label:"codex"},tags:["global-rules","codex","agent-instructions"],include:(_)=>{let $=NU(_),g=_0($);if(PW.has(g)||g==="config.toml")return!0;return/^(rules|instructions|prompts)\//.test($)&&d6($)}}},{base:".opencode",spec:{family:"opencode",owner:"opencode",scope:"global",precedence:{rank:50,label:"opencode"},tags:["global-rules","opencode","agent-instructions"],include:(_)=>tj.test(_)&&d6(_)}},{base:".",maxDepth:0,spec:{family:"opencode",owner:"opencode",scope:"global",precedence:{rank:50,label:"opencode-config"},tags:["global-rules","opencode","config"],include:(_)=>["opencode.json","opencode.jsonc","opencode.toml","opencode.yaml","opencode.yml"].includes(_)}},{base:".hasna/prompts",spec:{family:"prompt",owner:"hasna",scope:"global",precedence:{rank:60,label:"selected-prompts"},tags:["global-rules","prompt"],include:(_)=>tj.test(_)&&d6(_)}},{base:".hasna/plans",spec:{family:"plan",owner:"hasna",scope:"global",precedence:{rank:65,label:"selected-plans"},tags:["global-rules","plan"],include:(_)=>tj.test(_)&&d6(_)}},{base:"docs",spec:{family:"rule_doc",owner:"repository",scope:"global",precedence:{rank:70,label:"rule-docs"},tags:["global-rules","rule-doc"],include:(_)=>tj.test(_)&&d6(_)}}]}function Qb(_,$){let g=new Map;for(let U of Yb()){let D=WW(_,U.base);if(!A5(D))continue;if(Eb(D).isFile()){let j=_0(D);if(U.spec.include(j))g.set(D,{...U.spec,absPath:D});continue}L5({basePath:D,depth:0,maxDepth:U.maxDepth??Jb,spec:U.spec,candidates:g,skipped:$})}return[...g.values()].sort((U,D)=>{if(U.precedence.rank!==D.precedence.rank)return U.precedence.rank-D.precedence.rank;return U.absPath.localeCompare(D.absPath)})}function L5(_){let $=_.rootBasePath??_.basePath;if(_.depth>_.maxDepth)return;for(let g of Ib(_.basePath,{withFileTypes:!0})){let U=Ab(_.basePath,g.name),D=LW($,U);if(g.isSymbolicLink())continue;if(g.isDirectory()){if(Rb.has(g.name))continue;if(E5(D)){_.skipped.push({source_family:_.spec.family,source_path:U,reason:"sensitive_path"});continue}L5({..._,rootBasePath:$,basePath:U,depth:_.depth+1});continue}if(!g.isFile())continue;let I=LW(WW($),U);if(E5(I)){_.skipped.push({source_family:_.spec.family,source_path:U,reason:"sensitive_path"});continue}if(!_.spec.include(I))continue;if(!d6(U))continue;_.candidates.set(U,{..._.spec,absPath:U})}}function Tb(_){if((_.tags??[]).map((U)=>U.toLowerCase()).some((U)=>["rule","rules","agent","instructions","global-rules","global-agent-rules"].includes(U)))return!0;let g=`${_.title} +${_.content.slice(0,500)}`.toLowerCase();return/\b(agent|rule|rules|instruction|instructions|codewith|claude|codex|opencode)\b/.test(g)}function W5(_,$){let g={source_path:_.source_path,source_path_ref:_.source_path_ref,source_ref:_.source_ref,owner:_.owner,scope:_.scope,precedence:_.precedence,source_hash:_.source_hash,content_hash:_.content_hash,discovered_at:_.discovered_at,tags:_.tags,redaction_status:_.redaction_status,citations:_.citations};return{source_ref:_.source_ref,name:_.title,mime:"text/markdown",size:Buffer.byteLength($),hash:_.content_hash,revision:_.content_hash,status:"active",updated_at:_.discovered_at,permissions:{mode:"read_only",allowed_purposes:["knowledge_index","knowledge_answer","agent_context"]},rule_provenance:g,source_family:_.source_family,source_path_ref:_.source_path_ref,owner:_.owner,scope:_.scope,precedence:_.precedence,tags:_.tags,redaction_status:_.redaction_status,legacy_json_id:_.legacy_json_id??null,extracted_text:$}}function Kb(_){let $=Ub(_.candidate.absPath),g=_.candidate.absPath,U=LW(_.root,g);if($.size>_.maxBytesPerFile){let S=j5(g).href;return{evidence:{source_family:_.candidate.family,title:_0(g),source_path:g,source_path_ref:U,source_ref:S,owner:_.candidate.owner,scope:_.candidate.scope,precedence:_.candidate.precedence,source_hash:"sha256:skipped-too-large",content_hash:"sha256:skipped-too-large",discovered_at:_.discoveredAt,tags:[..._.candidate.tags,"skipped"],redaction_status:"refused",redactions:[],citations:[],bytes:$.size,line_count:0,importable:!1,skipped_reason:"max_bytes_exceeded",preview:null},text:"",manifest:null}}let D=jb(g),I=D.toString("utf8"),j=w_(I,_.safetyPolicy),A=j.findings.some((S)=>S.severity==="high")?"refused":j.findings.length>0?"redacted":"clean",O=SW(j.text),P=j5(g).href,W=P5(j.text),z={source_family:_.candidate.family,title:_0(g),source_path:g,source_path_ref:U,source_ref:P,owner:_.candidate.owner,scope:_.candidate.scope,precedence:_.candidate.precedence,source_hash:Xb(D),content_hash:O,discovered_at:_.discoveredAt,tags:[..._.candidate.tags],redaction_status:A,redactions:j.findings.map((S)=>({type:S.type,severity:S.severity})),citations:[S5({sourceRef:P,sourcePath:g,lineCount:W,contentHash:O})],bytes:D.byteLength,line_count:W,importable:A!=="refused",skipped_reason:A==="refused"?"secret_refused":null,preview:A==="refused"?null:O5(j.text)};return{evidence:z,text:j.text,manifest:z.importable?W5(z,j.text):null}}function qb(_){let $=w_(_.item.content,_.safetyPolicy),U=$.findings.some((O)=>O.severity==="high")?"refused":$.findings.length>0?"redacted":"clean",D=`open-files://source/legacy-json/path/${encodeURIComponent(_.item.id)}`,I=SW($.text),j=SW(_.item.content),E=P5($.text),A={source_family:"legacy_json",title:_.item.title,source_path:_.legacyStorePath,source_path_ref:`legacy-json:${_.item.id}`,source_ref:D,owner:"legacy-json",scope:_.scope,precedence:{rank:90,label:"legacy-json-note"},source_hash:j,content_hash:I,discovered_at:_.discoveredAt,tags:[...new Set(["global-rules","legacy-json",..._.item.tags??[]])],redaction_status:U,redactions:$.findings.map((O)=>({type:O.type,severity:O.severity})),citations:[S5({sourceRef:D,sourcePath:_.legacyStorePath,lineCount:E,contentHash:I})],bytes:Buffer.byteLength(_.item.content),line_count:E,importable:U!=="refused",skipped_reason:U==="refused"?"secret_refused":null,preview:U==="refused"?null:O5($.text),legacy_json_id:_.item.id};return{evidence:A,text:$.text,manifest:A.importable?W5(A,$.text):null}}function Bb(_){if(!_.legacyStorePath||!A5(_.legacyStorePath))return 0;let $=new Map(_.records.filter((g)=>g.legacy_json_id&&g.importable).map((g)=>[g.legacy_json_id,g]));if($.size===0)return 0;return C$(_.legacyStorePath,()=>{let g=s6(_.legacyStorePath);if(!g.exists)return 0;let U=0;for(let D of g.items){let I=$.get(D.id);if(!I)continue;let j=D.metadata??{};D.archived=!0,D.metadata={...j,knowledge_rules_import:{status:"deprecated_after_source_backed_promotion",deprecated_at:_.now,source_ref:I.source_ref,source_hash:I.source_hash,content_hash:I.content_hash,data_loss:!1}},D.tags=[...new Set([...D.tags??[],"deprecated:knowledge-rules-import"])],D.updated_at=_.now,U+=1}if(U>0)t$(_.legacyStorePath,{items:g.items});return U})}async function J5(_={}){let $=WW(_.root??process.cwd()),g=_.scope??"global",U=_.owner??"global-agent-rules-standard",D=_.dryRun!==!1,I=(_.now??new Date).toISOString(),j=Math.max(1,Math.min(_.maxItems??Sb,1000)),E=Math.max(1,Math.min(_.limit??Lb,100)),A=Math.max(1024,Math.min(_.maxBytesPerFile??Wb,2097152)),O=[],W=Qb($,O).slice(0,j).map((F)=>Kb({root:$,candidate:{...F,owner:F.owner==="repository"?U:F.owner,scope:g},discoveredAt:I,maxBytesPerFile:A,safetyPolicy:_.safetyPolicy})),S=(_.includeLegacy===!1||!_.legacyStorePath?{exists:!1,items:[]}:s6(_.legacyStorePath)).items.filter((F)=>F.archived!==!0&&Tb(F)).slice(0,j),L=S.map((F)=>qb({item:F,legacyStorePath:_.legacyStorePath,discoveredAt:I,scope:g,safetyPolicy:_.safetyPolicy})),J=[...W,...L].slice(0,j),R=J.map((F)=>F.evidence),G=J.filter((F)=>F.manifest).map((F)=>F.manifest),B=R.filter((F)=>F.redaction_status==="refused").length,Q=R.slice(0,E),T=O.slice(0,E),K=null,V=0;if(!D){if(!_.dbPath)throw Error("rules provenance apply mode requires dbPath.");if(G.length>0)K=await Dg({dbPath:_.dbPath,items:G,sourceLabel:"knowledge://rules-provenance/global-agent-rules",readAction:"rules_provenance_import",allowFileSourceRefs:!0,safetyPolicy:_.safetyPolicy,now:_.now,maxItems:j});if(_.deprecateLegacy!==!1)V=Bb({legacyStorePath:_.legacyStorePath,records:R,now:I})}return{ok:B===0||G.length>0||D,workflow:"global-rules-provenance-import",dry_run:D,writes_performed:!D,root:$,scope:g,owner:U,discovered_at:I,max_items:j,evidence_limit:E,records_seen:R.length,records_importable:G.length,records_refused:B,records_skipped:O.length,evidence_truncated:R.length>Q.length,skipped_truncated:O.length>T.length,evidence:Q,skipped:T,import_result:K,legacy:{store_path:_.legacyStorePath??null,candidates:S.length,promoted:L.filter((F)=>F.manifest).length,deprecated:V,data_loss:!1},message:D?`Discovered ${R.length} rule source(s); ${G.length} importable, ${B} refused`:`Imported ${K?.items_seen??0} rule source(s); ${V} legacy note(s) deprecated`}}import{createHash as Vb,randomUUID as z5}from"crypto";function Fb(_){return`sha256:${Vb("sha256").update(_).digest("hex")}`}function R5(_){let $=_.trim().split(/\s+/).filter(Boolean).length;return Math.max(1,Math.ceil($*1.25))}function G5(_){return _&&typeof _==="object"&&!Array.isArray(_)?_:{}}function m6(_){return typeof _==="string"&&_.length>0?_:null}function rb(_){let $=G5(_),g=m6($.url)??m6($.uri)??m6($.sourceUrl);if(!g)return null;return{url:g,title:m6($.title)??m6($.name),snippet:m6($.snippet)??m6($.text)??m6($.description),provider_metadata:$}}function oj(_,$){if(Array.isArray(_)){for(let D of _)oj(D,$);return}let g=rb(_);if(g)$.set(g.url,g);let U=G5(_);for(let D of["sources","results","citations","annotations","output"])if(U[D])oj(U[D],$)}function bb(_,$){return Array.from({length:Math.min($,3)},(g,U)=>({url:`https://example.com/knowledge-web-${U+1}`,title:`Fake web source ${U+1}`,snippet:`Deterministic web-search fixture for "${_}"`,provider_metadata:{fake:!0,rank:U+1}}))}async function Mb(_){let{generateText:$}=await import("ai"),{createOpenAI:g}=await import("@ai-sdk/openai"),U=g6(_.config,"openai"),D=g({apiKey:_.env[U.api_key_env],baseURL:U.base_url}),I=D.tools?.webSearch;if(!I)throw Error("OpenAI provider does not expose tools.webSearch.");return $({model:D(_.model),prompt:_.query,tools:{web_search:I({externalWebAccess:!0,searchContextSize:"medium",..._.domains.length>0?{allowedDomains:_.domains}:{}})},toolChoice:{type:"tool",toolName:"web_search"}})}async function Zb(_){let{generateText:$}=await import("ai"),{createAnthropic:g}=await import("@ai-sdk/anthropic"),U=g6(_.config,"anthropic"),D=g({apiKey:_.env[U.api_key_env],baseURL:U.base_url}),I=D.tools?.webSearch_20250305??D.tools?.webSearch;if(!I)throw Error("Anthropic provider does not expose a web search tool.");return $({model:D(_.model),prompt:_.query,tools:{web_search:I({maxUses:_.maxUses,..._.domains.length>0?{allowedDomains:_.domains}:{}})}})}async function Hb(_,$,g){if(!_.fileResults||$.length===0)return 0;let U=$.map((I)=>{let j=[I.title,I.snippet,I.url].filter(Boolean).join(` +`),E=Fb(j);return{source_ref:I.url,name:I.title??I.url,url:I.url,mime:"text/plain",hash:E,revision:E,status:"active",updated_at:g,permissions:{mode:"read_only",allowed_purposes:["knowledge_answer","knowledge_index"]},metadata:{source_ref:I.url,content_source:"provider_web_search",provider_metadata:I.provider_metadata},extracted_text:j}});return(await Dg({dbPath:_.dbPath,items:U,sourceLabel:`web-search:${_.query}`,readAction:"provider_web_search_file_results",safetyPolicy:_.safetyPolicy,now:new Date(g)})).sources_upserted}async function X5(_){let $=_.query.trim();if(!$)throw Error("Web search query is required.");let g=_.env??process.env,U=(_.now??new Date).toISOString(),D=Math.max(1,Math.min(_.limit??5,20)),I=Math.max(1,Math.min(_.maxUses??3,10)),j=_.domains??[],E=G$(_.modelRef??(_.provider?`${_.provider}:${g6(_.config,_.provider).default_model}`:"default"),_.config),A=C_(E),O=_.provider??A.provider,P=A.provider===O?A.model:g6(_.config,O).default_model,W=`run_${z5()}`;if(!_.fake&&_.safetyPolicy)L4(_.safetyPolicy);if(!_.fake&&O!=="openai"&&O!=="anthropic")throw Error(`Provider ${O} does not expose native web search yet.`);if(!_.fake)Ig(O,_.config,g);c(_.dbPath);let z=v(_.dbPath);try{z.run(`INSERT INTO runs (id, type, prompt, status, provider, model, metadata_json, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[W,"provider-web-search",$,"running",O,P,JSON.stringify({domains:j,max_uses:I,fake:_.fake===!0}),U,U]),z_(z,{event_type:"source_read",action:_.fake?"fake_provider_web_search":"provider_web_search",target_uri:$,decision:"allow",metadata:{provider:O,model:P,domains:j,max_uses:I},created_at:U})}finally{z.close()}let S="",L=[],J={input_tokens:R5($),output_tokens:0,cost_usd:0},R=[];if(_.fake)L=bb($,D),S=`Fake web search answer for: ${$}`,J.output_tokens=R5(S);else{let B=O==="openai"?await Mb({query:$,model:P,config:_.config,env:g,maxUses:I,domains:j}):await Zb({query:$,model:P,config:_.config,env:g,maxUses:I,domains:j});S=B.text;let Q=new Map;oj(B.sources,Q),oj(B.toolResults,Q),L=Array.from(Q.values()).slice(0,D);let T=jg({provider:O,model:P,usage:B.usage,providerMetadata:B.providerMetadata});J={input_tokens:T.input_tokens,output_tokens:T.output_tokens,cost_usd:T.cost_usd}}let X=await Hb(_,L,U),G=v(_.dbPath);try{G.run("UPDATE runs SET status = ?, metadata_json = ?, updated_at = ? WHERE id = ?",["completed",JSON.stringify({domains:j,max_uses:I,sources:L.length,filed_sources:X,fake:_.fake===!0}),U,W]),G.run(`INSERT INTO run_events (id, run_id, level, event, metadata_json, created_at) + VALUES (?, ?, ?, ?, ?, ?)`,[`evt_${z5()}`,W,"info","provider_web_search_completed",JSON.stringify({sources:L.length,filed_sources:X}),U]),z4(G,{run_id:W,provider:O,model:P,input_tokens:J.input_tokens,output_tokens:J.output_tokens,cost_usd:J.cost_usd,metadata:{web_search:!0,sources:L.length,filed_sources:X},created_at:U})}finally{G.close()}if(L.length===0)R.push("no_web_sources_returned");return{run_id:W,query:$,provider:O,model:P,answer:S,sources:L,filed_sources:X,usage:J,warnings:R}}import{createHash as kb,randomUUID as Cb}from"crypto";function $0(_,$){return`${_}_${kb("sha256").update($).digest("hex").slice(0,20)}`}function JW(_){return _.normalize("NFKC").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,80)||"knowledge-page"}function vb(_){return{year:String(_.getUTCFullYear()),month:String(_.getUTCMonth()+1).padStart(2,"0"),day:String(_.getUTCDate()).padStart(2,"0")}}function wb(_){let $=_.trim().split(/\s+/).filter(Boolean).length;return Math.max(1,Math.ceil($*1.25))}function Y5(_){if(!_)return{};try{let $=JSON.parse(_);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch{return{}}}function ub(_){return Array.from(new Set((_??"").toLowerCase().match(/[\p{L}\p{N}_]+/gu)??[])).slice(0,12)}function Q5(_){return _.replace(/[\\%_]/g,($)=>`\\${$}`)}function fb(_,$){let g=Math.max(1,Math.min($.limit??10,50)),U=$.sourceRefs??[],D=ub($.query),I=["c.kind = 'source'"],j=[];if(U.length>0){I.push(`(${U.map(()=>"(s.uri = ? OR c.metadata_json LIKE ?)").join(" OR ")})`);for(let E of U)j.push(E,`%${Q5(E)}%`)}if(D.length>0){I.push(`(${D.map(()=>"lower(c.text) LIKE ? ESCAPE '\\'").join(" OR ")})`);for(let E of D)j.push(`%${Q5(E)}%`)}return j.push(g),_.query(`SELECT c.id AS chunk_id, c.text, c.start_offset, @@ -1041,10 +1041,10 @@ ${_.content.slice(0,500)}`.toLowerCase();return/\b(agent|rule|rules|instruction| JOIN sources s ON s.id = sr.source_id WHERE ${I.join(" AND ")} ORDER BY c.created_at ASC, c.ordinal ASC - LIMIT ?`).all(...j)}function X9(_,$=420){let D=_.replace(/\s+/g," ").trim();return D.length<=$?D:`${D.slice(0,$-1).trim()}...`}function ZZ(_,$){if(_.title?.trim())return _.title.trim();if(_.query?.trim())return _.query.trim();return $[0]?.source_title??"Compiled Knowledge"}function bZ(_,$,D){let U=$.map((I,j)=>{return`- [${`S${j+1}`}] ${I.source_title??I.source_uri??"Source"} (${I.source_uri??"unknown"}, revision ${I.revision??"unknown"}, hash ${I.hash??"unknown"})`}),g=$.map((I,j)=>{let N=`S${j+1}`;return[`## ${I.source_title??`Source ${j+1}`}`,"",X9(I.text),"",`Citation: [${N}]`].join(` -`)});return[`# ${_}`,"",`Generated at: ${D}`,"","## Sources","",...U,"",...g,""].join(` -`)}async function ej(_,$){let D=await _.put($);return{key:D.key,uri:D.uri,kind:$.key.startsWith("logs/")?"log":"wiki_page",content_type:$.content_type,modified_at:D.modified_at,...J0($.body),metadata:{...$.metadata??{}}}}async function R9(_,$,D){let{year:U,month:g,day:I}=VZ(D),j=`logs/${U}/${g}/${I}.jsonl`,N="";try{N=await _.getText(j)}catch{N=""}return ej(_,{key:j,body:`${N}${JSON.stringify($)} -`,content_type:"application/x-ndjson",metadata:{provenance:U$({generated_from:String($.event??"wiki_log"),artifact_key:j})}})}function L3(_,$){_.run(`INSERT INTO wiki_pages (id, path, title, artifact_uri, content_hash, status, metadata_json, created_at, updated_at) + LIMIT ?`).all(...j)}function T5(_,$=420){let g=_.replace(/\s+/g," ").trim();return g.length<=$?g:`${g.slice(0,$-1).trim()}...`}function xb(_,$){if(_.title?.trim())return _.title.trim();if(_.query?.trim())return _.query.trim();return $[0]?.source_title??"Compiled Knowledge"}function yb(_,$,g){let U=$.map((I,j)=>{return`- [${`S${j+1}`}] ${I.source_title??I.source_uri??"Source"} (${I.source_uri??"unknown"}, revision ${I.revision??"unknown"}, hash ${I.hash??"unknown"})`}),D=$.map((I,j)=>{let E=`S${j+1}`;return[`## ${I.source_title??`Source ${j+1}`}`,"",T5(I.text),"",`Citation: [${E}]`].join(` +`)});return[`# ${_}`,"",`Generated at: ${g}`,"","## Sources","",...U,"",...D,""].join(` +`)}async function pj(_,$){let g=await _.put($);return{key:g.key,uri:g.uri,kind:$.key.startsWith("logs/")?"log":"wiki_page",content_type:$.content_type,modified_at:g.modified_at,...S4($.body),metadata:{...$.metadata??{}}}}async function K5(_,$,g){let{year:U,month:D,day:I}=vb(g),j=`logs/${U}/${D}/${I}.jsonl`,E="";try{E=await _.getText(j)}catch{E=""}return pj(_,{key:j,body:`${E}${JSON.stringify($)} +`,content_type:"application/x-ndjson",metadata:{provenance:D$({generated_from:String($.event??"wiki_log"),artifact_key:j})}})}function zW(_,$){_.run(`INSERT INTO wiki_pages (id, path, title, artifact_uri, content_hash, status, metadata_json, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(path) DO UPDATE SET title = excluded.title, @@ -1052,41 +1052,41 @@ ${_.content.slice(0,500)}`.toLowerCase();return/\b(agent|rule|rules|instruction| content_hash = excluded.content_hash, status = excluded.status, metadata_json = excluded.metadata_json, - updated_at = excluded.updated_at`,[$.pageId,$.path,$.title,$.artifactUri,$.contentHash,"active",JSON.stringify({artifact_key:$.path,provenance:$.provenance}),$.now,$.now]);let D=_.query("SELECT id FROM chunks WHERE wiki_page_id = ?").all($.pageId);for(let g of D)_.run("DELETE FROM chunks_fts WHERE chunk_id = ?",[g.id]);_.run("DELETE FROM chunks WHERE wiki_page_id = ?",[$.pageId]);let U=DD("chk",`${$.pageId}\x00${$.contentHash}`);_.run(`INSERT INTO chunks (id, wiki_page_id, kind, ordinal, text, token_count, start_offset, end_offset, metadata_json, created_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[U,$.pageId,"wiki",0,$.body,KZ($.body),0,$.body.length,JSON.stringify({artifact_key:$.path,artifact_uri:$.artifactUri,content_hash:$.contentHash,provenance:$.provenance}),$.now]),_.run("INSERT INTO chunks_fts (chunk_id, text, title, source_uri) VALUES (?, ?, ?, ?)",[U,$.body,$.title,$.artifactUri])}function G9(_,$,D,U){_.run("DELETE FROM citations WHERE wiki_page_id = ?",[$]);for(let g of D)_.run(`INSERT INTO citations (id, wiki_page_id, chunk_id, source_uri, quote, start_offset, end_offset, metadata_json, created_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[DD("cit",`${$}\x00${g.source_uri}\x00${g.chunk_id??BZ()}`),$,g.chunk_id,g.source_uri,g.quote,g.start_offset,g.end_offset,JSON.stringify(g.metadata),U]);return D.length}function Y9(_,$){return _.run(`INSERT INTO knowledge_indexes (id, kind, name, artifact_uri, shard_key, metadata_json, created_at, updated_at) + updated_at = excluded.updated_at`,[$.pageId,$.path,$.title,$.artifactUri,$.contentHash,"active",JSON.stringify({artifact_key:$.path,provenance:$.provenance}),$.now,$.now]);let g=_.query("SELECT id FROM chunks WHERE wiki_page_id = ?").all($.pageId);for(let D of g)_.run("DELETE FROM chunks_fts WHERE chunk_id = ?",[D.id]);_.run("DELETE FROM chunks WHERE wiki_page_id = ?",[$.pageId]);let U=$0("chk",`${$.pageId}\x00${$.contentHash}`);_.run(`INSERT INTO chunks (id, wiki_page_id, kind, ordinal, text, token_count, start_offset, end_offset, metadata_json, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[U,$.pageId,"wiki",0,$.body,wb($.body),0,$.body.length,JSON.stringify({artifact_key:$.path,artifact_uri:$.artifactUri,content_hash:$.contentHash,provenance:$.provenance}),$.now]),_.run("INSERT INTO chunks_fts (chunk_id, text, title, source_uri) VALUES (?, ?, ?, ?)",[U,$.body,$.title,$.artifactUri])}function q5(_,$,g,U){_.run("DELETE FROM citations WHERE wiki_page_id = ?",[$]);for(let D of g)_.run(`INSERT INTO citations (id, wiki_page_id, chunk_id, source_uri, quote, start_offset, end_offset, metadata_json, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$0("cit",`${$}\x00${D.source_uri}\x00${D.chunk_id??Cb()}`),$,D.chunk_id,D.source_uri,D.quote,D.start_offset,D.end_offset,JSON.stringify(D.metadata),U]);return g.length}function B5(_,$){return _.run(`INSERT INTO knowledge_indexes (id, kind, name, artifact_uri, shard_key, metadata_json, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(kind, name, shard_key) DO UPDATE SET artifact_uri = excluded.artifact_uri, metadata_json = excluded.metadata_json, - updated_at = excluded.updated_at`,[DD("idx",`wiki-topic\x00${$.path}`),"wiki_topic",$.title,$.artifactUri,$.path,JSON.stringify({artifact_key:$.path,content_hash:$.contentHash}),$.now,$.now]),1}function HZ(_){return _.toLowerCase().match(/[a-z0-9][a-z0-9-]{2,}/)?.[0]??"knowledge"}async function Q9(_){let $=_.now??new Date,D=$.toISOString();h(_.dbPath);let U=r(_.dbPath),g;try{g=MZ(U,_)}finally{U.close()}if(g.length===0)throw Error("No source chunks matched wiki compile input.");let I=ZZ(_,g),N=`wiki/generated/${A3(I)}.md`,O=bZ(I,g,D),A=g.map((q)=>{let K=S9(q.metadata_json);return typeof K.source_ref==="string"?K.source_ref:q.source_uri}).filter((q)=>Boolean(q)),L=U$({generated_from:"wiki_compile",artifact_key:N,source_refs:A}),z=await ej(_.store,{key:N,body:O,content_type:"text/markdown",metadata:{generated_from:"wiki_compile"}}),W=DD("wiki",N),J=g.map((q)=>({chunk_id:q.chunk_id,source_uri:q.source_uri??"unknown",quote:X9(q.text,240),start_offset:q.start_offset,end_offset:q.end_offset,metadata:{source_revision_id:q.source_revision_id,revision:q.revision,hash:q.hash,source_ref:S9(q.metadata_json).source_ref??q.source_uri}})),P=HZ(I),S=`wiki/concepts/${A3(P)}.md`,X=[`# ${P}`,"",`Related page: [[${N}]]`,""].join(` -`),G=U$({generated_from:"wiki_compile_concept",artifact_key:S,source_refs:A}),R=await ej(_.store,{key:S,body:X,content_type:"text/markdown",metadata:{generated_from:"wiki_compile_concept"}}),V=DD("wiki",S),Q=await R9(_.store,{ts:D,event:"wiki_compile_completed",page_key:N,source_refs:A,chunks_seen:g.length},$),T=r(_.dbPath);try{s$(T,[z,R,Q],$),L3(T,{pageId:W,path:N,title:I,artifactUri:z.uri,contentHash:z.hash??"",body:O,provenance:L,now:D}),L3(T,{pageId:V,path:S,title:P,artifactUri:R.uri,contentHash:R.hash??"",body:X,provenance:G,now:D}),T.run(`INSERT OR REPLACE INTO wiki_backlinks (from_page_id, to_page_id, label, created_at) - VALUES (?, ?, ?, ?)`,[W,V,"concept",D]);let q=G9(T,W,J,D),K=Y9(T,{title:I,path:N,artifactUri:z.uri,contentHash:z.hash??"",now:D});return{page_id:W,path:N,artifact_uri:z.uri,content_hash:z.hash??"",chunks_seen:g.length,citations_written:q,concept_page_id:V,indexes_updated:K,log_key:Q.key,warnings:[]}}finally{T.close()}}async function T9(_){if(!_.approveWrite)return{approved:!1,durable_writes_performed:!1,page_id:null,path:null,artifact_uri:null,citations_written:0,log_key:null,message:"Dry-run: answer filing requires --approve-write."};let $=_.now??new Date,D=$.toISOString(),U=_.prompt.length>80?`${_.prompt.slice(0,77)}...`:_.prompt,I=`wiki/answers/${A3(U)}.md`,j=_.context.citations,N=[`# ${U}`,"",_.answer,"","## Citations","",...j.map((P,S)=>`- [C${S+1}] ${P.source_ref??P.source_uri??P.artifact_path??P.artifact_uri??"unknown"} ${P.hash?`(hash ${P.hash})`:""}`),""].join(` -`),O=j.map((P)=>P.source_ref??P.source_uri).filter((P)=>Boolean(P)),A=U$({generated_from:"knowledge_answer",artifact_key:I,source_refs:O}),L=await ej(_.store,{key:I,body:N,content_type:"text/markdown",metadata:{generated_from:"knowledge_answer"}}),z=await R9(_.store,{ts:D,event:"wiki_answer_filed",page_key:I,prompt:_.prompt,citations:j.length},$),W=DD("wiki",I),J=r(_.dbPath);try{s$(J,[L,z],$),L3(J,{pageId:W,path:I,title:U,artifactUri:L.uri,contentHash:L.hash??"",body:N,provenance:A,now:D});let P=G9(J,W,j.map((S)=>({chunk_id:S.chunk_id,source_uri:S.source_uri??S.artifact_uri??"unknown",quote:S.quote,start_offset:S.start_offset,end_offset:S.end_offset,metadata:{source_ref:S.source_ref,artifact_path:S.artifact_path,revision:S.revision,hash:S.hash}})),D);return Y9(J,{title:U,path:I,artifactUri:L.uri,contentHash:L.hash??"",now:D}),{approved:!0,durable_writes_performed:!0,page_id:W,path:I,artifact_uri:L.uri,citations_written:P,log_key:z.key,message:`Filed answer to ${I}`}}finally{J.close()}}function y4(_,$){_.push($)}function q9(_){h(_.dbPath);let $=r(_.dbPath),D=[];try{let U=$.query("SELECT COUNT(*) AS n FROM wiki_pages WHERE status = 'active'").get()?.n??0,g=$.query("SELECT COUNT(*) AS n FROM citations").get()?.n??0,I=$.query("SELECT COUNT(*) AS n FROM wiki_backlinks").get()?.n??0,j=$.query(`SELECT wp.id, wp.path + updated_at = excluded.updated_at`,[$0("idx",`wiki-topic\x00${$.path}`),"wiki_topic",$.title,$.artifactUri,$.path,JSON.stringify({artifact_key:$.path,content_hash:$.contentHash}),$.now,$.now]),1}function cb(_){return _.toLowerCase().match(/[a-z0-9][a-z0-9-]{2,}/)?.[0]??"knowledge"}async function V5(_){let $=_.now??new Date,g=$.toISOString();c(_.dbPath);let U=v(_.dbPath),D;try{D=fb(U,_)}finally{U.close()}if(D.length===0)throw Error("No source chunks matched wiki compile input.");let I=xb(_,D),E=`wiki/generated/${JW(I)}.md`,A=yb(I,D,g),O=D.map((K)=>{let V=Y5(K.metadata_json);return typeof V.source_ref==="string"?V.source_ref:K.source_uri}).filter((K)=>Boolean(K)),P=D$({generated_from:"wiki_compile",artifact_key:E,source_refs:O}),W=await pj(_.store,{key:E,body:A,content_type:"text/markdown",metadata:{generated_from:"wiki_compile"}}),z=$0("wiki",E),S=D.map((K)=>({chunk_id:K.chunk_id,source_uri:K.source_uri??"unknown",quote:T5(K.text,240),start_offset:K.start_offset,end_offset:K.end_offset,metadata:{source_revision_id:K.source_revision_id,revision:K.revision,hash:K.hash,source_ref:Y5(K.metadata_json).source_ref??K.source_uri}})),L=cb(I),J=`wiki/concepts/${JW(L)}.md`,R=[`# ${L}`,"",`Related page: [[${E}]]`,""].join(` +`),X=D$({generated_from:"wiki_compile_concept",artifact_key:J,source_refs:O}),G=await pj(_.store,{key:J,body:R,content_type:"text/markdown",metadata:{generated_from:"wiki_compile_concept"}}),B=$0("wiki",J),Q=await K5(_.store,{ts:g,event:"wiki_compile_completed",page_key:E,source_refs:O,chunks_seen:D.length},$),T=v(_.dbPath);try{_6(T,[W,G,Q],$),zW(T,{pageId:z,path:E,title:I,artifactUri:W.uri,contentHash:W.hash??"",body:A,provenance:P,now:g}),zW(T,{pageId:B,path:J,title:L,artifactUri:G.uri,contentHash:G.hash??"",body:R,provenance:X,now:g}),T.run(`INSERT OR REPLACE INTO wiki_backlinks (from_page_id, to_page_id, label, created_at) + VALUES (?, ?, ?, ?)`,[z,B,"concept",g]);let K=q5(T,z,S,g),V=B5(T,{title:I,path:E,artifactUri:W.uri,contentHash:W.hash??"",now:g});return{page_id:z,path:E,artifact_uri:W.uri,content_hash:W.hash??"",chunks_seen:D.length,citations_written:K,concept_page_id:B,indexes_updated:V,log_key:Q.key,warnings:[]}}finally{T.close()}}async function F5(_){if(!_.approveWrite)return{approved:!1,durable_writes_performed:!1,page_id:null,path:null,artifact_uri:null,citations_written:0,log_key:null,message:"Dry-run: answer filing requires --approve-write."};let $=_.now??new Date,g=$.toISOString(),U=_.prompt.length>80?`${_.prompt.slice(0,77)}...`:_.prompt,I=`wiki/answers/${JW(U)}.md`,j=_.context.citations,E=[`# ${U}`,"",_.answer,"","## Citations","",...j.map((L,J)=>`- [C${J+1}] ${L.source_ref??L.source_uri??L.artifact_path??L.artifact_uri??"unknown"} ${L.hash?`(hash ${L.hash})`:""}`),""].join(` +`),A=j.map((L)=>L.source_ref??L.source_uri).filter((L)=>Boolean(L)),O=D$({generated_from:"knowledge_answer",artifact_key:I,source_refs:A}),P=await pj(_.store,{key:I,body:E,content_type:"text/markdown",metadata:{generated_from:"knowledge_answer"}}),W=await K5(_.store,{ts:g,event:"wiki_answer_filed",page_key:I,prompt:_.prompt,citations:j.length},$),z=$0("wiki",I),S=v(_.dbPath);try{_6(S,[P,W],$),zW(S,{pageId:z,path:I,title:U,artifactUri:P.uri,contentHash:P.hash??"",body:E,provenance:O,now:g});let L=q5(S,z,j.map((J)=>({chunk_id:J.chunk_id,source_uri:J.source_uri??J.artifact_uri??"unknown",quote:J.quote,start_offset:J.start_offset,end_offset:J.end_offset,metadata:{source_ref:J.source_ref,artifact_path:J.artifact_path,revision:J.revision,hash:J.hash}})),g);return B5(S,{title:U,path:I,artifactUri:P.uri,contentHash:P.hash??"",now:g}),{approved:!0,durable_writes_performed:!0,page_id:z,path:I,artifact_uri:P.uri,citations_written:L,log_key:W.key,message:`Filed answer to ${I}`}}finally{S.close()}}function cg(_,$){_.push($)}function r5(_){c(_.dbPath);let $=v(_.dbPath),g=[];try{let U=$.query("SELECT COUNT(*) AS n FROM wiki_pages WHERE status = 'active'").get()?.n??0,D=$.query("SELECT COUNT(*) AS n FROM citations").get()?.n??0,I=$.query("SELECT COUNT(*) AS n FROM wiki_backlinks").get()?.n??0,j=$.query(`SELECT wp.id, wp.path FROM wiki_pages wp LEFT JOIN citations c ON c.wiki_page_id = wp.id WHERE wp.status = 'active' AND wp.path LIKE 'wiki/generated/%' GROUP BY wp.id - HAVING COUNT(c.id) = 0`).all();for(let J of j)y4(D,{type:"missing_citation",severity:"error",page_id:J.id,path:J.path,message:"Generated wiki page has no citations."});let N=$.query(`SELECT wp.id AS page_id, wp.path, c.source_uri, c.chunk_id + HAVING COUNT(c.id) = 0`).all();for(let S of j)cg(g,{type:"missing_citation",severity:"error",page_id:S.id,path:S.path,message:"Generated wiki page has no citations."});let E=$.query(`SELECT wp.id AS page_id, wp.path, c.source_uri, c.chunk_id FROM citations c JOIN wiki_pages wp ON wp.id = c.wiki_page_id LEFT JOIN chunks ch ON ch.id = c.chunk_id - WHERE ch.metadata_json LIKE '%"stale":true%' OR ch.metadata_json LIKE '%"status":"stale"%' OR ch.metadata_json LIKE '%"status":"deleted"%'`).all();for(let J of N)y4(D,{type:"stale_citation",severity:"warn",page_id:J.page_id,path:J.path,source_uri:J.source_uri,chunk_id:J.chunk_id??void 0,message:"Page cites a stale or deleted source chunk."});let O=$.query(`SELECT lower(title) AS title, COUNT(*) AS n + WHERE ch.metadata_json LIKE '%"stale":true%' OR ch.metadata_json LIKE '%"status":"stale"%' OR ch.metadata_json LIKE '%"status":"deleted"%'`).all();for(let S of E)cg(g,{type:"stale_citation",severity:"warn",page_id:S.page_id,path:S.path,source_uri:S.source_uri,chunk_id:S.chunk_id??void 0,message:"Page cites a stale or deleted source chunk."});let A=$.query(`SELECT lower(title) AS title, COUNT(*) AS n FROM wiki_pages WHERE status = 'active' GROUP BY lower(title) - HAVING COUNT(*) > 1`).all();for(let J of O)y4(D,{type:"duplicate_page",severity:"warn",message:`Duplicate active wiki title: ${J.title} (${J.n} pages).`});let A=$.query(`SELECT wp.id, wp.path + HAVING COUNT(*) > 1`).all();for(let S of A)cg(g,{type:"duplicate_page",severity:"warn",message:`Duplicate active wiki title: ${S.title} (${S.n} pages).`});let O=$.query(`SELECT wp.id, wp.path FROM wiki_pages wp LEFT JOIN wiki_backlinks wb1 ON wb1.from_page_id = wp.id LEFT JOIN wiki_backlinks wb2 ON wb2.to_page_id = wp.id WHERE wp.status = 'active' AND wp.path NOT IN ('wiki/README.md') GROUP BY wp.id - HAVING COUNT(wb1.to_page_id) = 0 AND COUNT(wb2.from_page_id) = 0`).all();for(let J of A)y4(D,{type:"orphan_page",severity:"info",page_id:J.id,path:J.path,message:"Wiki page has no backlinks."});let L=$.query(`SELECT wp.id AS page_id, wp.path, c.source_uri + HAVING COUNT(wb1.to_page_id) = 0 AND COUNT(wb2.from_page_id) = 0`).all();for(let S of O)cg(g,{type:"orphan_page",severity:"info",page_id:S.id,path:S.path,message:"Wiki page has no backlinks."});let P=$.query(`SELECT wp.id AS page_id, wp.path, c.source_uri FROM citations c JOIN wiki_pages wp ON wp.id = c.wiki_page_id LEFT JOIN sources s ON s.uri = c.source_uri - WHERE s.id IS NULL AND c.source_uri NOT LIKE 'file://%' AND c.source_uri NOT LIKE 's3://%' AND c.source_uri NOT LIKE 'https://%' AND c.source_uri NOT LIKE 'open-files://%'`).all();for(let J of L)y4(D,{type:"unresolved_source_ref",severity:"error",page_id:J.page_id,path:J.path,source_uri:J.source_uri,message:"Citation source URI cannot be resolved to a known or allowed source ref."});let z=$.query("SELECT id, path FROM wiki_pages WHERE lower(metadata_json) LIKE '%contradiction%'").all();for(let J of z)y4(D,{type:"contradiction_marker",severity:"warn",page_id:J.id,path:J.path,message:"Page metadata contains a contradiction marker."});let W=$.query(`SELECT c.id AS chunk_id, s.uri AS source_uri + WHERE s.id IS NULL AND c.source_uri NOT LIKE 'file://%' AND c.source_uri NOT LIKE 's3://%' AND c.source_uri NOT LIKE 'https://%' AND c.source_uri NOT LIKE 'open-files://%'`).all();for(let S of P)cg(g,{type:"unresolved_source_ref",severity:"error",page_id:S.page_id,path:S.path,source_uri:S.source_uri,message:"Citation source URI cannot be resolved to a known or allowed source ref."});let W=$.query("SELECT id, path FROM wiki_pages WHERE lower(metadata_json) LIKE '%contradiction%'").all();for(let S of W)cg(g,{type:"contradiction_marker",severity:"warn",page_id:S.id,path:S.path,message:"Page metadata contains a contradiction marker."});let z=$.query(`SELECT c.id AS chunk_id, s.uri AS source_uri FROM chunks c JOIN source_revisions sr ON sr.id = c.source_revision_id JOIN sources s ON s.id = sr.source_id @@ -1094,7 +1094,7 @@ ${_.content.slice(0,500)}`.toLowerCase();return/\b(agent|rule|rules|instruction| WHERE c.kind = 'source' GROUP BY c.id HAVING COUNT(cit.id) = 0 - LIMIT 25`).all();for(let J of W)y4(D,{type:"new_article_candidate",severity:"info",chunk_id:J.chunk_id,source_uri:J.source_uri??void 0,message:"Source chunk is indexed but not cited by any wiki page yet."});return{ok:D.every((J)=>J.severity!=="error"),issue_count:D.length,issues:D,counts:{active_pages:U,citations:g,backlinks:I,new_article_candidates:W.length}}}finally{$.close()}}import{createHash as kZ}from"crypto";function CZ(_){let $=String(_.getUTCFullYear()),D=String(_.getUTCMonth()+1).padStart(2,"0"),U=String(_.getUTCDate()).padStart(2,"0");return{year:$,month:D,day:U}}function J3(_,$){return`${_}_${kZ("sha256").update($).digest("hex").slice(0,20)}`}function vZ(_){let $=_.trim().split(/\s+/).filter(Boolean).length;return Math.max(1,Math.ceil($*1.25))}function rZ(){return`# Knowledge Agent Schema v1 + LIMIT 25`).all();for(let S of z)cg(g,{type:"new_article_candidate",severity:"info",chunk_id:S.chunk_id,source_uri:S.source_uri??void 0,message:"Source chunk is indexed but not cited by any wiki page yet."});return{ok:g.every((S)=>S.severity!=="error"),issue_count:g.length,issues:g,counts:{active_pages:U,citations:D,backlinks:I,new_article_candidates:z.length}}}finally{$.close()}}import{createHash as hb}from"crypto";function nb(_){let $=String(_.getUTCFullYear()),g=String(_.getUTCMonth()+1).padStart(2,"0"),U=String(_.getUTCDate()).padStart(2,"0");return{year:$,month:g,day:U}}function RW(_,$){return`${_}_${hb("sha256").update($).digest("hex").slice(0,20)}`}function db(_){let $=_.trim().split(/\s+/).filter(Boolean).length;return Math.max(1,Math.ceil($*1.25))}function mb(){return`# Knowledge Agent Schema v1 ## Source Rules @@ -1119,7 +1119,7 @@ ${_.content.slice(0,500)}`.toLowerCase();return/\b(agent|rule|rules|instruction| ## Lint Rules - Flag stale pages, missing citations, contradictions, orphan pages, duplicate pages, and unresolved source refs. -`}function fZ(){return`# Knowledge Index +`}function ib(){return`# Knowledge Index This is a compact orientation index for agents. It is not the full search index. @@ -1134,19 +1134,19 @@ This is a compact orientation index for agents. It is not the full search index. Raw source files are resolved through open-files. This app stores source refs, citations, chunks, generated wiki artifacts, indexes, and run records. -`}function B9(){return`# Wiki +`}function b5(){return`# Wiki Generated durable knowledge pages live here. Pages should be concise, cited, and organized for both humans and agents. -`}async function V9(_,$=new Date){let{year:D,month:U,day:g}=CZ($),I="schemas/v1.md",j="indexes/root.md",N="wiki/README.md",O=`logs/${D}/${U}/${g}.jsonl`,A={ts:$.toISOString(),event:"wiki_layout_initialized",schema_key:"schemas/v1.md",root_index_key:"indexes/root.md",wiki_readme_key:"wiki/README.md"},L=[{key:"schemas/v1.md",body:rZ(),content_type:"text/markdown"},{key:"indexes/root.md",body:fZ(),content_type:"text/markdown"},{key:"wiki/README.md",body:B9(),content_type:"text/markdown"},{key:O,body:`${JSON.stringify(A)} -`,content_type:"application/x-ndjson"}],z=await Promise.all(L.map(async(W)=>{let J=await _.put(W);return{key:J.key,uri:J.uri,kind:CS(W.key),content_type:W.content_type,modified_at:J.modified_at,metadata:{provenance:U$({generated_from:"wiki_layout_init",artifact_key:W.key,citation_required:W.key.startsWith("wiki/")||W.key.startsWith("indexes/")})},...J0(W.body)}}));return{schema_key:"schemas/v1.md",root_index_key:"indexes/root.md",wiki_readme_key:"wiki/README.md",log_key:O,artifacts:z,written:["schemas/v1.md","indexes/root.md","wiki/README.md",O]}}function P3(_){let $=_.metadata?.provenance;if($&&typeof $==="object"&&!Array.isArray($))return $;return U$({generated_from:"wiki_layout_init",artifact_key:_.key})}function wZ(_,$,D,U,g,I){let j=P3(U),N=J3("chk",`${$}\x00${U.hash??U.uri}`),O=_.query("SELECT id FROM chunks WHERE wiki_page_id = ?").all($);for(let A of O)_.run("DELETE FROM chunks_fts WHERE chunk_id = ?",[A.id]);_.run("DELETE FROM chunks WHERE wiki_page_id = ?",[$]),_.run(`INSERT INTO chunks (id, wiki_page_id, kind, ordinal, text, token_count, start_offset, end_offset, metadata_json, created_at) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[N,$,"wiki",0,g,vZ(g),0,g.length,JSON.stringify({artifact_key:U.key,artifact_uri:U.uri,content_hash:U.hash??null,provenance:j}),I]),_.run("INSERT INTO chunks_fts (chunk_id, text, title, source_uri) VALUES (?, ?, ?, ?)",[N,g,D,U.uri])}function K9(_,$,D=new Date){let U=D.toISOString(),g=$.find((j)=>j.key.endsWith("indexes/root.md")),I=$.find((j)=>j.key.endsWith("wiki/README.md"));if(g)_.run(`INSERT INTO knowledge_indexes (id, kind, name, artifact_uri, shard_key, metadata_json, created_at, updated_at) +`}async function M5(_,$=new Date){let{year:g,month:U,day:D}=nb($),I="schemas/v1.md",j="indexes/root.md",E="wiki/README.md",A=`logs/${g}/${U}/${D}.jsonl`,O={ts:$.toISOString(),event:"wiki_layout_initialized",schema_key:"schemas/v1.md",root_index_key:"indexes/root.md",wiki_readme_key:"wiki/README.md"},P=[{key:"schemas/v1.md",body:mb(),content_type:"text/markdown"},{key:"indexes/root.md",body:ib(),content_type:"text/markdown"},{key:"wiki/README.md",body:b5(),content_type:"text/markdown"},{key:A,body:`${JSON.stringify(O)} +`,content_type:"application/x-ndjson"}],W=await Promise.all(P.map(async(z)=>{let S=await _.put(z);return{key:S.key,uri:S.uri,kind:fz(z.key),content_type:z.content_type,modified_at:S.modified_at,metadata:{provenance:D$({generated_from:"wiki_layout_init",artifact_key:z.key,citation_required:z.key.startsWith("wiki/")||z.key.startsWith("indexes/")})},...S4(z.body)}}));return{schema_key:"schemas/v1.md",root_index_key:"indexes/root.md",wiki_readme_key:"wiki/README.md",log_key:A,artifacts:W,written:["schemas/v1.md","indexes/root.md","wiki/README.md",A]}}function GW(_){let $=_.metadata?.provenance;if($&&typeof $==="object"&&!Array.isArray($))return $;return D$({generated_from:"wiki_layout_init",artifact_key:_.key})}function lb(_,$,g,U,D,I){let j=GW(U),E=RW("chk",`${$}\x00${U.hash??U.uri}`),A=_.query("SELECT id FROM chunks WHERE wiki_page_id = ?").all($);for(let O of A)_.run("DELETE FROM chunks_fts WHERE chunk_id = ?",[O.id]);_.run("DELETE FROM chunks WHERE wiki_page_id = ?",[$]),_.run(`INSERT INTO chunks (id, wiki_page_id, kind, ordinal, text, token_count, start_offset, end_offset, metadata_json, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[E,$,"wiki",0,D,db(D),0,D.length,JSON.stringify({artifact_key:U.key,artifact_uri:U.uri,content_hash:U.hash??null,provenance:j}),I]),_.run("INSERT INTO chunks_fts (chunk_id, text, title, source_uri) VALUES (?, ?, ?, ?)",[E,D,g,U.uri])}function Z5(_,$,g=new Date){let U=g.toISOString(),D=$.find((j)=>j.key.endsWith("indexes/root.md")),I=$.find((j)=>j.key.endsWith("wiki/README.md"));if(D)_.run(`INSERT INTO knowledge_indexes (id, kind, name, artifact_uri, shard_key, metadata_json, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(kind, name, shard_key) DO UPDATE SET artifact_uri = excluded.artifact_uri, metadata_json = excluded.metadata_json, - updated_at = excluded.updated_at`,[J3("idx","root:indexes/root.md"),"root","root",g.uri,"root",JSON.stringify({artifact_key:g.key,content_hash:g.hash??null,provenance:P3(g)}),U,U]);if(I){let j=J3("wiki","wiki/README.md");_.run(`INSERT INTO wiki_pages (id, path, title, artifact_uri, content_hash, status, metadata_json, created_at, updated_at) + updated_at = excluded.updated_at`,[RW("idx","root:indexes/root.md"),"root","root",D.uri,"root",JSON.stringify({artifact_key:D.key,content_hash:D.hash??null,provenance:GW(D)}),U,U]);if(I){let j=RW("wiki","wiki/README.md");_.run(`INSERT INTO wiki_pages (id, path, title, artifact_uri, content_hash, status, metadata_json, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(path) DO UPDATE SET title = excluded.title, @@ -1154,13 +1154,13 @@ Pages should be concise, cited, and organized for both humans and agents. content_hash = excluded.content_hash, status = excluded.status, metadata_json = excluded.metadata_json, - updated_at = excluded.updated_at`,[j,"wiki/README.md","Wiki",I.uri,I.hash??null,"active",JSON.stringify({artifact_key:I.key,provenance:P3(I)}),U,U]),wZ(_,j,"Wiki",I,B9(),U)}}import{createHash as F9}from"crypto";import{cpSync as Y3,chmodSync as S3,existsSync as K$,lstatSync as k9,mkdirSync as aj,readdirSync as Q3,readFileSync as AU,renameSync as uZ,rmSync as _N,writeFileSync as M9}from"fs";import{dirname as W3,join as L6,relative as xZ}from"path";function X3(_,$=_){if(!K$(_))return[];let D=k9(_);if(D.isFile())return[xZ($,_)||"."];if(!D.isDirectory())return[];return Q3(_).flatMap((U)=>X3(L6(_,U),$)).sort()}function Z9(_,$){if($.length===0)return{sha256:null,bytes:0};let D=F9("sha256"),U=0;for(let g of $){let I=L6(_,g),j=AU(I),N=F9("sha256").update(j).digest("hex");U+=j.byteLength,D.update(g),D.update("\x00"),D.update(N),D.update("\x00")}return{sha256:D.digest("hex"),bytes:U}}function yZ(_){if(!K$(_))return null;let $=JSON.parse(AU(_,"utf8"));return Array.isArray($.items)?$.items.length:null}function hZ(_){if(!K$(_))return{exists:!1,integrity_check:null,table_counts:{}};let $=RS(_);try{let D=$.query("PRAGMA integrity_check").get(),U=D?Object.values(D)[0]??null:null,g=$.query("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name").all(),I={};for(let j of g){let N=`"${j.name.replaceAll('"','""')}"`,O=$.query(`SELECT COUNT(*) AS n FROM ${N}`).get();I[j.name]=O?.n??0}return{exists:!0,integrity_check:U,table_counts:I}}finally{$.close()}}function d_(_,$={}){let D=X3(_.home),U=Z9(_.home,D),g=X3(_.artifactsDir),I=Z9(_.artifactsDir,g),j=K$(_.knowledgeDbPath);return{path:_.home,exists:K$(_.home),file_count:D.length,total_bytes:U.bytes,tree_sha256:U.sha256,json_items:yZ(_.jsonStorePath),sqlite:$.includeSqlite===!1?{exists:j,integrity_check:null,table_counts:{}}:hZ(_.knowledgeDbPath),artifacts:{exists:K$(_.artifactsDir),file_count:g.length,total_bytes:I.bytes,tree_sha256:I.sha256},files:D}}function cZ(_,$){if(!$.exists)return!0;if($.files.filter((U)=>U!=="config.json").length>0)return!1;if(!$.files.includes("config.json"))return!0;try{return JSON.stringify(JSON.parse(AU(_.configPath,"utf8")))===JSON.stringify(MD())}catch{return!1}}function R3(_,$){return _.file_count===$.file_count&&_.total_bytes===$.total_bytes&&_.tree_sha256===$.tree_sha256&&_.json_items===$.json_items&&_.sqlite.integrity_check===$.sqlite.integrity_check&&JSON.stringify(_.sqlite.table_counts)===JSON.stringify($.sqlite.table_counts)&&_.artifacts.file_count===$.artifacts.file_count&&_.artifacts.total_bytes===$.artifacts.total_bytes&&_.artifacts.tree_sha256===$.artifacts.tree_sha256}function sj(_){return _.toISOString().replace(/[-:]/g,"").replace(/\.\d{3}Z$/,"Z")}function G3(_){if(Array.isArray(_))return`[${_.map(G3).join(",")}]`;if(_&&typeof _==="object")return`{${Object.entries(_).sort(([$],[D])=>$.localeCompare(D)).map(([$,D])=>`${JSON.stringify($)}:${G3(D)}`).join(",")}}`;return JSON.stringify(_)}function b9(_){return G3(_)}function z3(_){return typeof _.short_id==="string"&&_.short_id.trim().length>0?_.short_id:null}function h4(_){if(!K$(_))return{items:[]};let $=JSON.parse(AU(_,"utf8"));if(!$||!Array.isArray($.items))throw Error(`Invalid knowledge JSON store shape at ${_}`);return{items:$.items}}function H9(_,$){let D=new Map(_.items.map((L)=>[L.id,L])),U=new Map;for(let L of _.items){let z=U.get(L.id);if(z&&z.item.id!==L.id);U.set(L.id,{item:L,keyKind:"id",source:"current"});let W=z3(L);if(W&&!U.has(W))U.set(W,{item:L,keyKind:"short_id",source:"current"})}let g=[],I=0,j=0,N=0,O=[];for(let L of $.items){let z=D.get(L.id);if(z){if(b9(z)===b9(L))I+=1;else j+=1,g.push({type:"id_conflict",id:L.id,legacy_title:L.title,current_title:z.title});continue}let W=[{key:L.id,keyKind:"id"},...z3(L)?[{key:z3(L),keyKind:"short_id"}]:[]],J=!1;for(let{key:P,keyKind:S}of W){let X=U.get(P);if(!X)continue;if(S==="id"&&X.keyKind==="id")j+=1,g.push({type:"id_conflict",id:P,legacy_id:L.id,current_id:X.item.id,legacy_title:L.title,current_title:X.item.title});else N+=1,g.push({type:"short_id_conflict",id:P,legacy_id:L.id,current_id:X.item.id,legacy_title:L.title,current_title:X.item.title});J=!0}if(J)continue;O.push(L);for(let{key:P,keyKind:S}of W)U.set(P,{item:L,keyKind:S,source:"legacy"})}let A={items:[..._.items,...O]};return{stats:{current_items:_.items.length,legacy_items:$.items.length,duplicate_ids_identical:I,duplicate_ids_conflicting:j,short_id_conflicts:N,stranded_items:O.length,merged_items:g.length===0?O.length:0,expected_total_items:_.items.length+O.length,final_items:null},conflicts:g,mergedStore:A}}function nZ(_,$){let D=[...new Set(_)].sort(),U=(g)=>{if(g>=D.length)return $();return r$(D[g],()=>U(g+1),{createParent:!0})};return U(0)}function C9(_){let $=_.now??new Date,D=_.approveWrite!==!0,U=d_(_.legacy),g=d_(_.current),I={legacy_exists:U.exists,legacy_store_exists:K$(_.legacy.jsonStorePath),current_store_exists:K$(_.current.jsonStorePath),approval_present:_.approveWrite===!0&&Boolean(_.approvedBy),legacy_backup_written:!1,no_conflicts:!1,final_count_matches_expected:!1},j=[];if(!U.exists||!I.legacy_store_exists)return{ok:!0,dry_run:D,approval_required:!1,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:null,legacy_before:U,current_before:g,backup_after:null,current_after:g,merge:{current_items:h4(_.current.jsonStorePath).items.length,legacy_items:0,duplicate_ids_identical:0,duplicate_ids_conflicting:0,short_id_conflicts:0,stranded_items:0,merged_items:0,expected_total_items:h4(_.current.jsonStorePath).items.length,final_items:g.json_items},conflicts:[],checks:{...I,no_conflicts:!0,final_count_matches_expected:!0},warnings:j,message:`No legacy knowledge JSON store found at ${_.legacy.jsonStorePath}`};let N=h4(_.current.jsonStorePath),O=h4(_.legacy.jsonStorePath),A=H9(N,O);if(I.no_conflicts=A.conflicts.length===0,A.conflicts.length>0)j.push("merge_conflicts_detected");if(!I.approval_present)j.push("write_approval_required");if(D||!I.approval_present||A.conflicts.length>0)return{ok:A.conflicts.length===0,dry_run:!0,approval_required:!I.approval_present,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:`${_.legacy.home}.merge-backup-${sj($)}`,legacy_before:U,current_before:g,backup_after:null,current_after:null,merge:A.stats,conflicts:A.conflicts,checks:I,warnings:j,message:A.conflicts.length===0?`Dry run: would merge ${A.stats.stranded_items} legacy item(s) into ${_.current.jsonStorePath}`:`Refusing legacy merge with ${A.conflicts.length} conflict(s)`};return nZ([_.current.jsonStorePath,_.legacy.jsonStorePath],()=>{let L=h4(_.current.jsonStorePath),z=h4(_.legacy.jsonStorePath),W=H9(L,z);if(I.no_conflicts=W.conflicts.length===0,W.conflicts.length>0)return{ok:!1,dry_run:!0,approval_required:!1,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:null,legacy_before:d_(_.legacy),current_before:d_(_.current),backup_after:null,current_after:null,merge:W.stats,conflicts:W.conflicts,checks:I,warnings:[...j,"merge_conflicts_detected_after_lock"],message:`Refusing legacy merge with ${W.conflicts.length} conflict(s)`};if(W.stats.stranded_items===0)return W.stats.final_items=L.items.length,I.final_count_matches_expected=L.items.length===W.stats.expected_total_items,{ok:I.no_conflicts&&I.final_count_matches_expected,dry_run:!1,approval_required:!1,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:null,legacy_before:d_(_.legacy),current_before:d_(_.current),backup_after:null,current_after:d_(_.current),merge:W.stats,conflicts:[],checks:I,warnings:j,message:`Legacy merge already up to date for ${_.current.jsonStorePath}`};let J=`${_.legacy.home}.merge-backup-${sj($)}`;aj(W3(J),{recursive:!0}),Y3(_.legacy.home,J,{recursive:!0,force:!1,errorOnExist:!0,preserveTimestamps:!0});let P=g$(J),S=d_(P);if(I.legacy_backup_written=R3(d_(_.legacy),S),!I.legacy_backup_written)throw Error(`Legacy knowledge merge backup verification failed: ${J}`);t$(_.current.jsonStorePath,W.mergedStore);let X=h4(_.current.jsonStorePath);W.stats.final_items=X.items.length,I.final_count_matches_expected=X.items.length===W.stats.expected_total_items;let G=d_(_.current),R=I.legacy_backup_written&&I.no_conflicts&&I.final_count_matches_expected;return{ok:R,dry_run:!1,approval_required:!1,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:J,legacy_before:U,current_before:g,backup_after:S,current_after:G,merge:W.stats,conflicts:[],checks:I,warnings:j,message:R?`Merged ${W.stats.merged_items} legacy item(s) into ${_.current.jsonStorePath}`:`Merged legacy knowledge store, but verification failed for ${_.current.jsonStorePath}`}})}function dZ(_){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,_)}function T3(_){return _ instanceof Error&&/\b(EBUSY|EPERM)\b/.test(_.message)}function mZ(_){let $;for(let D=0;D<8;D+=1)try{_N(_,{recursive:!0,force:!1});return}catch(U){if($=U,!T3(U))throw U;dZ(50*(D+1))}throw $}function v9(_){if(!K$(_))return;let $=k9(_);if(S3(_,$.isDirectory()?448:384),!$.isDirectory())return;for(let D of Q3(_))v9(L6(_,D))}function iZ(_){return _==="TOMBSTONE.md"||_==="migration.json"||_==="knowledge.db"||_==="knowledge.db-shm"||_==="knowledge.db-wal"||_==="knowledge.db-journal"}function lZ(_){for(let $ of Q3(_)){if($==="TOMBSTONE.md"||$==="migration.json")continue;try{_N(L6(_,$),{recursive:!0,force:!1})}catch(D){if(!T3(D)||!$.startsWith("knowledge.db"))throw D}}}function tZ(_,$){try{uZ(_,$);return}catch(D){Y3(_,$,{recursive:!0,force:!1,errorOnExist:!0,preserveTimestamps:!0});try{mZ(_)}catch(U){if(T3(U)){lZ(_);return}throw _N($,{recursive:!0,force:!0}),U}if(D instanceof Error&&D.message.includes("EXDEV"))return}}function oZ(_,$,D){if(!$.exists)return!1;if(!$.files.includes("TOMBSTONE.md")||!$.files.includes("migration.json"))return!1;if($.files.some((U)=>!iZ(U)))return!1;try{let U=JSON.parse(AU(L6(_.home,"migration.json"),"utf8"));return U.new_path===D&&typeof U.backup_path==="string"}catch{return!1}}function r9(_){let $=_.now??new Date,D=_.approveWrite!==!0,U=d_(_.current),g=cZ(_.current,U),I=_.approveWrite===!0&&Boolean(_.approvedBy)&&(!U.exists||g),j=d_(_.legacy,{includeSqlite:!I}),N={legacy_exists:j.exists,current_absent_or_default_scaffold:!U.exists||g,approval_present:_.approveWrite===!0&&Boolean(_.approvedBy),legacy_is_tombstone:!1,backup_matches_legacy:!1,migrated_matches_backup:!1,tombstone_written:!1},O=[];if(!j.exists)return{ok:!0,dry_run:D,approval_required:!1,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:null,tombstone_path:null,legacy_before:j,current_before:U,backup_after:null,current_after:null,checks:N,warnings:O,message:`No legacy knowledge workspace found at ${_.legacy.home}`};if(N.legacy_is_tombstone=oZ(_.legacy,j,_.current.home),N.legacy_is_tombstone)return{ok:!0,dry_run:D,approval_required:!1,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:null,tombstone_path:L6(_.legacy.home,"TOMBSTONE.md"),legacy_before:j,current_before:U,backup_after:null,current_after:U,checks:{...N,tombstone_written:!0},warnings:O,message:`Legacy knowledge workspace already migrated to ${_.current.home}`};if(!N.current_absent_or_default_scaffold)O.push("current_workspace_contains_data");if(!N.approval_present)O.push("write_approval_required");if(D||!N.current_absent_or_default_scaffold||!N.approval_present)return{ok:N.current_absent_or_default_scaffold,dry_run:!0,approval_required:!0,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:`${_.legacy.home}.backup-${sj($)}`,tombstone_path:L6(_.legacy.home,"TOMBSTONE.md"),legacy_before:j,current_before:U,backup_after:null,current_after:null,checks:N,warnings:O,message:N.current_absent_or_default_scaffold?`Dry run: would migrate ${_.legacy.home} to ${_.current.home}`:`Cannot migrate while ${_.current.home} contains data`};let A=`${_.legacy.home}.backup-${sj($)}`;aj(W3(_.current.home),{recursive:!0}),aj(W3(A),{recursive:!0}),Y3(_.legacy.home,A,{recursive:!0,force:!1,errorOnExist:!0,preserveTimestamps:!0}),v9(A);let L=g$(A),z=d_(L,{includeSqlite:!1});if(N.backup_matches_legacy=R3(j,z),!N.backup_matches_legacy)throw Error(`Legacy knowledge backup verification failed: ${A}`);if(U.exists&&g)_N(_.current.home,{recursive:!0,force:!0});tZ(_.legacy.home,_.current.home);let W=d_(_.current,{includeSqlite:!1});N.migrated_matches_backup=R3(z,W);let J=d_(L),P=d_(_.current),S={...J,path:_.legacy.home};aj(_.legacy.home,{recursive:!0});let X=L6(_.legacy.home,"TOMBSTONE.md");M9(X,["# Migrated OpenKnowledge Workspace","",`Migrated at: ${$.toISOString()}`,`Approved by: ${_.approvedBy}`,`New path: ${_.current.home}`,`Backup path: ${A}`,"","This directory is a diagnostic tombstone only. OpenKnowledge reads and writes the canonical .hasna/knowledge workspace.",""].join(` -`),{mode:384}),S3(X,384);let G=L6(_.legacy.home,"migration.json");M9(G,`${JSON.stringify({migrated_at:$.toISOString(),approved_by:_.approvedBy,new_path:_.current.home,backup_path:A,legacy_before:S,backup_after:J,current_after:P},null,2)} -`,{mode:384}),S3(G,384),N.tombstone_written=K$(X);let R=N.backup_matches_legacy&&N.migrated_matches_backup&&N.tombstone_written;return{ok:R,dry_run:!1,approval_required:!1,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:A,tombstone_path:X,legacy_before:S,current_before:U,backup_after:J,current_after:P,checks:N,warnings:O,message:R?`Migrated legacy knowledge workspace to ${_.current.home}`:`Migrated legacy knowledge workspace, but verification failed for ${_.current.home}`}}function sZ(_){let $=p9(_);if(W_(f9($,"knowledge.db"))||W_(f9($,"config.json")))return g0($);return g0(g$(FN($)).home)}function q3(_){return`${aZ()}:${JU("sha256").update(_.home).digest("hex").slice(0,12)}`}function K3(_){return`'${_.replace(/'/g,"'\\''")}'`}function _b(_){return["knowledge",..._].map(K3).join(" ")}function w9(_,$){return`cd ${K3(_)} && knowledge ${$.map(K3).join(" ")}`}function e9(_){return!_||_==="local"||_==="localhost"}function LU(_,$){return{source:_.source,adapter:_.adapter,project_root:$,project_root_source:_.project_root_source,workspace_root:_.workspace_root,workspace_root_source:_.workspace_root_source,open_files_root:_.open_files_root,open_files_root_source:_.open_files_root_source,trust_status:_.trust_status,auth_status:_.auth_status,current:_.current,primary:_.primary,diagnostics:_.diagnostics,repair_hints:_.repair_hints,evidence:_.evidence,cacheability:_.cacheability,warnings:_.warnings}}function B3(_){return{source:_.source,adapter:_.adapter,target:_.target,route:_.route,target_kind:_.targetKind,confidence:_.confidence,evidence:_.evidence,cacheability:_.cacheability}}function $b(_){try{let $=JSON.parse(_);return Array.isArray($)?$.filter((D)=>typeof D==="string"):[]}catch{return[]}}function PU(_){return _&&typeof _==="object"&&!Array.isArray(_)?_:{}}function k_(_){return typeof _==="string"&&_.length>0?_:null}function Db(_){return typeof _==="number"&&Number.isFinite(_)?_:null}function $N(_){return typeof _==="boolean"?_:null}function gb(_){return Array.isArray(_)?_.filter(($)=>typeof $==="string"):[]}function a9(_,$,D){let U=PU(_),g=k_(U.observed_at)??k_($[`${D}_observed_at`]),I=k_(U.source_authority)??k_($[`${D}_source_authority`]);if(!g||!I)return null;return{observed_at:g,verified_at:k_(U.verified_at),expires_at:k_(U.expires_at)??k_($[`${D}_expires_at`]),ttl_ms:Db(U.ttl_ms),source_authority:I,confidence:k_(U.confidence)??(D==="route"?k_($.route_confidence):null),cacheable:$N(U.cacheable)??$N($[`${D}_cacheable`])??!1,stale:$N(U.stale)??$N($[`${D}_stale`])??!1,reasons:gb(U.reasons)}}function Ub(_,$){return _.machine_id===$||_.hostname===$||_.ssh_target===$||_.tailscale_dns===$||$b(_.tailscale_ips_json).includes($)}function u9(_,$){return fE(_).find((D)=>Ub(D,$))??null}function s9(_){return PU(c4(_.metadata_json).resolver_evidence)}function zU(_){return PU(c4(_.capabilities_json).resolver)}function _G(_){let $=zU(_),D=k_($.route_kind);if(D==="local"||D==="lan"||D==="tailscale"||D==="ssh"||D==="unknown")return D;if(_.tailscale_dns&&_.ssh_target===_.tailscale_dns)return"tailscale";return _.ssh_target?"ssh":"unknown"}function Ib(_){let $=zU(_),D=k_($.route_target_kind);if(D==="local"||D==="lan"||D==="tailscale"||D==="ssh"||D==="unknown")return D;return _G(_)}function jb(_){return k_(zU(_).route_confidence)??"medium"}function x9(_,$,D){let U=s9(_),g=PU(U.route),I=zU(_);return{target:_.ssh_target??_.tailscale_dns??_.hostname??_.machine_id,route:_G(_),targetKind:Ib(_),confidence:jb(_),source:"registry",adapter:D.adapter,evidence:{registry:!0,requested_machine_id:$,machine_id:_.machine_id,recorded_at:_.updated_at,route:g},cacheability:a9(g.cacheability,I,"route")??D.cacheability,warnings:[...new Set([...D.warnings,"registry_route_fallback"])]}}function y9(_,$,D){if(!_.workspace_home)return null;let U=s9(_),g=PU(U.workspace),I=zU(_);return{ok:!0,source:"registry",adapter:D.adapter,requested_machine_id:$,machine_id:_.machine_id,project_id:k_(g.project_id)??D.project_id,repo_name:k_(g.repo_name)??D.repo_name,project_root:_.workspace_home,project_root_source:k_(I.project_root_source)??"registry",workspace_root:k_(g.workspace_root),workspace_root_source:k_(I.workspace_root_source)??"registry",open_files_root:k_(g.open_files_root),open_files_root_source:k_(I.open_files_root_source)??"registry",trust_status:k_(I.trust_status)??"unknown",auth_status:k_(I.auth_status)??"unknown",current:!1,primary:!1,diagnostics:[],repair_hints:[],evidence:{registry:!0,requested_machine_id:$,machine_id:_.machine_id,recorded_at:_.updated_at,workspace:g},cacheability:a9(g.cacheability,I,"workspace")??D.cacheability,warnings:[...new Set([...D.warnings,"registry_workspace_fallback"])]}}function h9(_){if(!_)return null;let $=_.diagnostics.filter((U)=>U.severity!=="ok"),D=_.repair_hints[0];if(!$.length&&!_.warnings.length&&!D)return null;return[$.length?`workspace diagnostics: ${$.map((U)=>`${U.id}=${U.status}`).join(", ")}`:null,_.warnings.length?`warnings: ${_.warnings.join(", ")}`:null,D?`repair: ${D.shell_command}`:null].filter(Boolean).join("; ")}function DN(_){return{id:_.id,reason:_.reason,command:["knowledge",..._.args],shell_command:_b(_.args)}}function gN(_,$){let D=r(_);try{return Number(D.query($).get()?.count??0)}finally{D.close()}}function Nb(_,$){let D=gN(_,"SELECT COUNT(*) AS count FROM sources WHERE uri LIKE 'open-files://%'"),U=gN(_,"SELECT COUNT(*) AS count FROM sources WHERE metadata_json LIKE '%open-files://%' OR metadata_json LIKE '%source_ref%'"),g=gN(_,"SELECT COUNT(*) AS count FROM source_revisions WHERE extracted_text_uri IS NOT NULL"),I=gN(_,["SELECT COUNT(*) AS count FROM sources","WHERE metadata_json LIKE '%raw_bytes%'","OR metadata_json LIKE '%raw_content%'","OR metadata_json LIKE '%content_base64%'","OR metadata_json LIKE '%source_bytes%'"].join(" ")),j=I===0;return{ok:j,source_of_truth:"open-files",configured_root:$?.open_files_root??null,configured_root_source:$?.open_files_root_source??null,source_refs:{open_files:D,metadata_mentions:U},extracted_text_artifacts:g,raw_source_bytes_owned_by:"open-files",raw_payload_sentinel_hits:I,message:j?`${D} open-files source ref(s); raw source bytes remain owned by open-files`:`${I} raw source payload metadata sentinel(s) found`}}var Eb=new Set(["raw","raw_bytes","raw_content","content_base64","source_bytes","source_content","body","body_bytes"]);function F3(_,$=0){if($>8)return!1;if(!_||typeof _!=="object")return!1;if(Array.isArray(_))return _.some((D)=>F3(D,$+1));for(let[D,U]of Object.entries(_)){if(Eb.has(D.toLowerCase()))return!0;if(F3(U,$+1))return!0}return!1}function c4(_){try{let $=JSON.parse(_);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch{return{}}}function c9(_,$=20,D=200){if(!Number.isFinite(_)||_<=0)return $;return Math.min(Math.floor(_),D)}function Ob(_,$=220){let D=_??"";return D.length>$?`${D.slice(0,$)}...`:D}function S$(_,$=["metadata_json"]){return _.map((D)=>{let U={...D};for(let g of $){let I=U[g];if(typeof I==="string"){let j=g.endsWith("_json")?g.slice(0,-5):g;U[j]=c4(I),delete U[g]}}return U})}function UN(_){if(typeof _!=="string")return[];try{let $=JSON.parse(_);return Array.isArray($)?$:[]}catch{return[]}}function M3(_){if(typeof _!=="string")return{};return c4(_)}function Ab(_){let $={..._};return $.source_refs=UN($.source_refs_json),$.evidence_refs=UN($.evidence_refs_json),$.requires_approval=$.requires_approval===1||$.requires_approval===!0,$.checks=M3($.checks_json),$.metadata=M3($.metadata_json),delete $.source_refs_json,delete $.evidence_refs_json,delete $.checks_json,delete $.metadata_json,$}function Lb(_){let $={..._};return $.source_refs=UN($.source_refs_json),$.evidence_refs=UN($.evidence_refs_json),$.metadata=M3($.metadata_json),delete $.source_refs_json,delete $.evidence_refs_json,delete $.metadata_json,$}function p_(_,$,D=[]){return _.query($).all(...D)}function Jb(_){if(!W_(_))return{exists:!1,read_error:null,items:[]};try{let $=JSON.parse(eZ(_,"utf8"));if(!$||!Array.isArray($.items))return{exists:!0,read_error:"invalid_store_shape",items:[]};return{exists:!0,read_error:null,items:$.items}}catch($){return{exists:!0,read_error:$ instanceof Error?$.message:String($),items:[]}}}function n9(_){return{id:_.id,short_id:_.short_id??null,title:_.title,content_preview:Ob(_.content),url:_.url??null,tags:_.tags??[],metadata:_.metadata??{},archived:_.archived===!0,created_at:_.created_at,updated_at:_.updated_at}}function d9(){return{schema_version:0,sources:0,source_revisions:0,chunks:0,wiki_pages:0,citations:0,indexes:0,runs:0,run_events:0,redaction_findings:0,audit_events:0,approval_gates:0,storage_objects:0,embeddings:0,vector_entries:0,reindex_queue:0,knowledge_machines:0,sync_snapshots:0,sync_changes:0,sync_conflicts:0,sync_table_clocks:0,sync_imports:0,promotion_candidates:0,durable_records:0}}function $G(_,$,D=!1){return{query:_,limit:$,offset:0,mode:{keyword:!0,catalog:!0,semantic:D},semantic_provider:null,semantic_model:null,semantic_dimensions:null,counts:{keyword_results:0,catalog_results:0,semantic_results:0,merged_results:0},warnings:["knowledge_db_missing"],results:[]}}function Pb(_){return _.normalize("NFKC").trim().replace(/\s+/g," ").toLowerCase()}function zb(_,$,D=!1){let U=$G(_,$,D);return{query:_,normalized_query:Pb(_),created_at:new Date().toISOString(),mode:U.mode,warnings:U.warnings,search_counts:U.counts,results:[],citations:[],excerpts:[],graph:{citations:[],backlinks:[]},notes:{permissions:[],freshness:[]}}}function V3(_,$,D){let U=D??$.jsonStorePath;if(W_(U))return U;if(_==="global"){let g=FD();if(W_(g))return g}return U}function Sb(_){let $=JSON.stringify(_);return Math.max(1,Math.ceil($.length/4))}function Z3(_,$){let D=(_??"").normalize("NFKC").trim().replace(/\s+/g," ");if(D.length<=$)return D;return`${D.slice(0,Math.max(0,$-1)).trim()}...`}function m9(_,$,D){let U=u_(Z3(_,D),$);return{text:U.text,redactions:U.findings.length}}function i9(_,$,D){let U=_.now??new Date,g=_.source??"search",I=_.purpose??(g==="loops"||g==="runs"?"proposal":"agent_context"),j=(_.query??_.topic??$.query).normalize("NFKC").trim().replace(/\s+/g," "),N=Math.max(1,Math.min(_.maxItems??_.limit??8,50)),O=Math.max(500,Math.min(_.maxTokens??6000,1e5)),A=0,L=$.citations.slice(0,Math.max(N*2,N)).map((R,V)=>{let Q=m9(R.quote,D,V<3?220:140);A+=Q.redactions;let T=R.source_ref??R.source_uri??R.artifact_path??R.artifact_uri??R.id;return{id:`cite_${JU("sha256").update(`${R.id}\x00${T}`).digest("hex").slice(0,12)}`,kind:R.artifact_uri||R.artifact_path?"artifact":"source",ref:T,source_ref:R.source_ref,source_uri:R.source_uri,artifact_uri:R.artifact_uri,artifact_path:R.artifact_path,run_id:null,run_event_id:null,revision:R.revision,hash:R.hash,chunk_id:R.chunk_id,offsets:{start:R.start_offset,end:R.end_offset},quote_preview:Q.text}}),z=new Map($.citations.map((R,V)=>[R.id,L[V]])),W=$.excerpts.slice(0,Math.max(N*2,N)).map((R)=>{let V=$.results.find((q)=>q.id===R.result_id),Q=R.citation_id?z.get(R.citation_id):void 0,T=m9(R.text,D,520);return A+=T.redactions,{id:`ev_${JU("sha256").update(`${R.kind}\x00${R.result_id}\x00${R.citation_id??""}`).digest("hex").slice(0,14)}`,kind:R.kind,title:Z3(V?.title??Q?.ref??R.kind,100),text_preview:T.text,score:Number(R.score.toFixed(6)),citation_ids:Q?[Q.id]:[],provenance:{source:g,record_ref:`${R.kind}:${R.result_id}`,created_at:$.created_at,updated_at:null,metadata_keys:[]}}}).sort((R,V)=>V.score-R.score||R.id.localeCompare(V.id)).slice(0,N),J=new Set(W.flatMap((R)=>R.citation_ids)),P=L.filter((R)=>J.has(R.id)),S=Array.from(new Set($.warnings)),X=`ctx_${JU("sha256").update([g,I,j,S.join(","),W.map((R)=>R.id).join(",")].join("\x00")).digest("hex").slice(0,20)}`,G={ok:!0,format:"knowledge-agent-context-pack",version:1,created_at:U.toISOString(),source:g,purpose:I,query:j,topic:_.topic??null,since:_.since??null,dry_run:!0,idempotency_key:X,budgets:{max_tokens:O,estimated_tokens:0,max_items:N,items_included:W.length,items_available:$.excerpts.length,items_truncated:Math.max(0,$.excerpts.length-W.length),token_budget_exceeded:!1},safety:{raw_artifact_content_included:!1,durable_writes_performed:!1,redactions:A,reminders:["This pack is read-only and performs no durable writes.","Legacy JSON note evidence is bounded and redacted before inclusion."]},citations:P,evidence:W,duplicate_candidates:[],outline:{title:j?`Knowledge context: ${Z3(j,80)}`:"Knowledge context",bullets:W.length>0?W.slice(0,5).map((R)=>`${R.id}: ${R.title}`):["No matching bounded evidence was found."],evidence_ids:W.slice(0,8).map((R)=>R.id),duplicate_candidate_ids:[],next_actions:["Use evidence_ids and citation_ids in prompts instead of raw excerpts when possible.","Inspect cited refs only if the bounded preview is insufficient.","Use knowledge build/file-answer only with explicit approval for durable writes."]},warnings:S,message:`${W.length} bounded evidence item(s), estimated under ${O} token(s)`};return G.budgets.estimated_tokens=Sb(G),G.budgets.token_budget_exceeded=G.budgets.estimated_tokens>O,G.message=`${G.evidence.length} bounded evidence item(s), estimated ${G.budgets.estimated_tokens}/${O} token(s)`,G}function Wb(){return{schema_version:0,chunks:0,vector_entries:0,missing_embeddings:0,queued:{},stale_revisions:0}}function Xb(){return{total_embeddings:0,total_vector_entries:0,indexes:[]}}function Rb(_){return{ok:!0,scope:_.scope,workspace_home:_.workspaceHome,sqlite_schema_version:0,local_machine_id:_.localMachineId??null,machines:{total:0,rows:[]},snapshots:{total:0,latest:null},changes:{total:0,by_operation:[]},clocks:{total:0,rows:[]},imports:{total:0,latest:null},conflicts:{total:0,by_status:[],open:0},table_counts:{},message:"0 machine(s), 0 open sync conflict(s)"}}function l9(_){let $=_.now??new Date,D=_.source??"search",U=_.purpose??(D==="loops"||D==="runs"?"proposal":"agent_context"),g=(_.query??_.topic??"").normalize("NFKC").trim().replace(/\s+/g," "),I=Math.max(1,Math.min(_.maxItems??_.limit??8,50)),j=Math.max(500,Math.min(_.maxTokens??6000,1e5)),N=`ctx_${JU("sha256").update(["empty",D,U,g,_.topic??"",_.since??""].join("\x00")).digest("hex").slice(0,20)}`;return{ok:!0,format:"knowledge-agent-context-pack",version:1,created_at:$.toISOString(),source:D,purpose:U,query:g,topic:_.topic??null,since:_.since??null,dry_run:!0,idempotency_key:N,budgets:{max_tokens:j,estimated_tokens:0,max_items:I,items_included:0,items_available:0,items_truncated:0,token_budget_exceeded:!1},safety:{raw_artifact_content_included:!1,durable_writes_performed:!1,redactions:0,reminders:["This pack is read-only and performs no durable writes.","No knowledge.db exists for this scope yet."]},citations:[],evidence:[],duplicate_candidates:[],outline:{title:g?`Context for ${g}`:"Knowledge context",bullets:[],evidence_ids:[],duplicate_candidate_ids:[],next_actions:[]},warnings:["knowledge_db_missing"],message:`0 bounded evidence item(s), estimated 0/${j} token(s)`}}function b3(_){let $=_.artifact_store.s3?.prefix?.replace(/^\/+|\/+$/g,"");return $?`${$}/`:null}function Gb(_,$){let D=r(_);try{let U=D.query(`SELECT artifact_uri, kind, hash, size_bytes, metadata_json + updated_at = excluded.updated_at`,[j,"wiki/README.md","Wiki",I.uri,I.hash??null,"active",JSON.stringify({artifact_key:I.key,provenance:GW(I)}),U,U]),lb(_,j,"Wiki",I,b5(),U)}}import{createHash as H5}from"crypto";import{cpSync as BW,chmodSync as YW,existsSync as B$,lstatSync as u5,mkdirSync as ej,readdirSync as VW,readFileSync as AU,renameSync as tb,rmSync as sj,writeFileSync as k5}from"fs";import{dirname as QW,join as L6,relative as ob}from"path";function TW(_,$=_){if(!B$(_))return[];let g=u5(_);if(g.isFile())return[ob($,_)||"."];if(!g.isDirectory())return[];return VW(_).flatMap((U)=>TW(L6(_,U),$)).sort()}function C5(_,$){if($.length===0)return{sha256:null,bytes:0};let g=H5("sha256"),U=0;for(let D of $){let I=L6(_,D),j=AU(I),E=H5("sha256").update(j).digest("hex");U+=j.byteLength,g.update(D),g.update("\x00"),g.update(E),g.update("\x00")}return{sha256:g.digest("hex"),bytes:U}}function pb(_){if(!B$(_))return null;let $=JSON.parse(AU(_,"utf8"));return Array.isArray($.items)?$.items.length:null}function eb(_){if(!B$(_))return{exists:!1,integrity_check:null,table_counts:{}};let $=Kz(_);try{let g=$.query("PRAGMA integrity_check").get(),U=g?Object.values(g)[0]??null:null,D=$.query("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name").all(),I={};for(let j of D){let E=`"${j.name.replaceAll('"','""')}"`,A=$.query(`SELECT COUNT(*) AS n FROM ${E}`).get();I[j.name]=A?.n??0}return{exists:!0,integrity_check:U,table_counts:I}}finally{$.close()}}function h_(_,$={}){let g=TW(_.home),U=C5(_.home,g),D=TW(_.artifactsDir),I=C5(_.artifactsDir,D),j=B$(_.knowledgeDbPath);return{path:_.home,exists:B$(_.home),file_count:g.length,total_bytes:U.bytes,tree_sha256:U.sha256,json_items:pb(_.jsonStorePath),sqlite:$.includeSqlite===!1?{exists:j,integrity_check:null,table_counts:{}}:eb(_.knowledgeDbPath),artifacts:{exists:B$(_.artifactsDir),file_count:D.length,total_bytes:I.bytes,tree_sha256:I.sha256},files:g}}function ab(_,$){if(!$.exists)return!0;if($.files.filter((U)=>U!=="config.json").length>0)return!1;if(!$.files.includes("config.json"))return!0;try{return JSON.stringify(JSON.parse(AU(_.configPath,"utf8")))===JSON.stringify(F0())}catch{return!1}}function KW(_,$){return _.file_count===$.file_count&&_.total_bytes===$.total_bytes&&_.tree_sha256===$.tree_sha256&&_.json_items===$.json_items&&_.sqlite.integrity_check===$.sqlite.integrity_check&&JSON.stringify(_.sqlite.table_counts)===JSON.stringify($.sqlite.table_counts)&&_.artifacts.file_count===$.artifacts.file_count&&_.artifacts.total_bytes===$.artifacts.total_bytes&&_.artifacts.tree_sha256===$.artifacts.tree_sha256}function aj(_){return _.toISOString().replace(/[-:]/g,"").replace(/\.\d{3}Z$/,"Z")}function qW(_){if(Array.isArray(_))return`[${_.map(qW).join(",")}]`;if(_&&typeof _==="object")return`{${Object.entries(_).sort(([$],[g])=>$.localeCompare(g)).map(([$,g])=>`${JSON.stringify($)}:${qW(g)}`).join(",")}}`;return JSON.stringify(_)}function v5(_){return qW(_)}function XW(_){return typeof _.short_id==="string"&&_.short_id.trim().length>0?_.short_id:null}function hg(_){if(!B$(_))return{items:[]};let $=JSON.parse(AU(_,"utf8"));if(!$||!Array.isArray($.items))throw Error(`Invalid knowledge JSON store shape at ${_}`);return{items:$.items}}function w5(_,$){let g=new Map(_.items.map((P)=>[P.id,P])),U=new Map;for(let P of _.items){let W=U.get(P.id);if(W&&W.item.id!==P.id);U.set(P.id,{item:P,keyKind:"id",source:"current"});let z=XW(P);if(z&&!U.has(z))U.set(z,{item:P,keyKind:"short_id",source:"current"})}let D=[],I=0,j=0,E=0,A=[];for(let P of $.items){let W=g.get(P.id);if(W){if(v5(W)===v5(P))I+=1;else j+=1,D.push({type:"id_conflict",id:P.id,legacy_title:P.title,current_title:W.title});continue}let z=[{key:P.id,keyKind:"id"},...XW(P)?[{key:XW(P),keyKind:"short_id"}]:[]],S=!1;for(let{key:L,keyKind:J}of z){let R=U.get(L);if(!R)continue;if(J==="id"&&R.keyKind==="id")j+=1,D.push({type:"id_conflict",id:L,legacy_id:P.id,current_id:R.item.id,legacy_title:P.title,current_title:R.item.title});else E+=1,D.push({type:"short_id_conflict",id:L,legacy_id:P.id,current_id:R.item.id,legacy_title:P.title,current_title:R.item.title});S=!0}if(S)continue;A.push(P);for(let{key:L,keyKind:J}of z)U.set(L,{item:P,keyKind:J,source:"legacy"})}let O={items:[..._.items,...A]};return{stats:{current_items:_.items.length,legacy_items:$.items.length,duplicate_ids_identical:I,duplicate_ids_conflicting:j,short_id_conflicts:E,stranded_items:A.length,merged_items:D.length===0?A.length:0,expected_total_items:_.items.length+A.length,final_items:null},conflicts:D,mergedStore:O}}function sb(_,$){let g=[...new Set(_)].sort(),U=(D)=>{if(D>=g.length)return $();return C$(g[D],()=>U(D+1),{createParent:!0})};return U(0)}function f5(_){let $=_.now??new Date,g=_.approveWrite!==!0,U=h_(_.legacy),D=h_(_.current),I={legacy_exists:U.exists,legacy_store_exists:B$(_.legacy.jsonStorePath),current_store_exists:B$(_.current.jsonStorePath),approval_present:_.approveWrite===!0&&Boolean(_.approvedBy),legacy_backup_written:!1,no_conflicts:!1,final_count_matches_expected:!1},j=[];if(!U.exists||!I.legacy_store_exists)return{ok:!0,dry_run:g,approval_required:!1,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:null,legacy_before:U,current_before:D,backup_after:null,current_after:D,merge:{current_items:hg(_.current.jsonStorePath).items.length,legacy_items:0,duplicate_ids_identical:0,duplicate_ids_conflicting:0,short_id_conflicts:0,stranded_items:0,merged_items:0,expected_total_items:hg(_.current.jsonStorePath).items.length,final_items:D.json_items},conflicts:[],checks:{...I,no_conflicts:!0,final_count_matches_expected:!0},warnings:j,message:`No legacy knowledge JSON store found at ${_.legacy.jsonStorePath}`};let E=hg(_.current.jsonStorePath),A=hg(_.legacy.jsonStorePath),O=w5(E,A);if(I.no_conflicts=O.conflicts.length===0,O.conflicts.length>0)j.push("merge_conflicts_detected");if(!I.approval_present)j.push("write_approval_required");if(g||!I.approval_present||O.conflicts.length>0)return{ok:O.conflicts.length===0,dry_run:!0,approval_required:!I.approval_present,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:`${_.legacy.home}.merge-backup-${aj($)}`,legacy_before:U,current_before:D,backup_after:null,current_after:null,merge:O.stats,conflicts:O.conflicts,checks:I,warnings:j,message:O.conflicts.length===0?`Dry run: would merge ${O.stats.stranded_items} legacy item(s) into ${_.current.jsonStorePath}`:`Refusing legacy merge with ${O.conflicts.length} conflict(s)`};return sb([_.current.jsonStorePath,_.legacy.jsonStorePath],()=>{let P=hg(_.current.jsonStorePath),W=hg(_.legacy.jsonStorePath),z=w5(P,W);if(I.no_conflicts=z.conflicts.length===0,z.conflicts.length>0)return{ok:!1,dry_run:!0,approval_required:!1,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:null,legacy_before:h_(_.legacy),current_before:h_(_.current),backup_after:null,current_after:null,merge:z.stats,conflicts:z.conflicts,checks:I,warnings:[...j,"merge_conflicts_detected_after_lock"],message:`Refusing legacy merge with ${z.conflicts.length} conflict(s)`};if(z.stats.stranded_items===0)return z.stats.final_items=P.items.length,I.final_count_matches_expected=P.items.length===z.stats.expected_total_items,{ok:I.no_conflicts&&I.final_count_matches_expected,dry_run:!1,approval_required:!1,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:null,legacy_before:h_(_.legacy),current_before:h_(_.current),backup_after:null,current_after:h_(_.current),merge:z.stats,conflicts:[],checks:I,warnings:j,message:`Legacy merge already up to date for ${_.current.jsonStorePath}`};let S=`${_.legacy.home}.merge-backup-${aj($)}`;ej(QW(S),{recursive:!0}),BW(_.legacy.home,S,{recursive:!0,force:!1,errorOnExist:!0,preserveTimestamps:!0});let L=g$(S),J=h_(L);if(I.legacy_backup_written=KW(h_(_.legacy),J),!I.legacy_backup_written)throw Error(`Legacy knowledge merge backup verification failed: ${S}`);t$(_.current.jsonStorePath,z.mergedStore);let R=hg(_.current.jsonStorePath);z.stats.final_items=R.items.length,I.final_count_matches_expected=R.items.length===z.stats.expected_total_items;let X=h_(_.current),G=I.legacy_backup_written&&I.no_conflicts&&I.final_count_matches_expected;return{ok:G,dry_run:!1,approval_required:!1,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:S,legacy_before:U,current_before:D,backup_after:J,current_after:X,merge:z.stats,conflicts:[],checks:I,warnings:j,message:G?`Merged ${z.stats.merged_items} legacy item(s) into ${_.current.jsonStorePath}`:`Merged legacy knowledge store, but verification failed for ${_.current.jsonStorePath}`}})}function _M(_){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,_)}function FW(_){return _ instanceof Error&&/\b(EBUSY|EPERM)\b/.test(_.message)}function $M(_){let $;for(let g=0;g<8;g+=1)try{sj(_,{recursive:!0,force:!1});return}catch(U){if($=U,!FW(U))throw U;_M(50*(g+1))}throw $}function x5(_){if(!B$(_))return;let $=u5(_);if(YW(_,$.isDirectory()?448:384),!$.isDirectory())return;for(let g of VW(_))x5(L6(_,g))}function gM(_){return _==="TOMBSTONE.md"||_==="migration.json"||_==="knowledge.db"||_==="knowledge.db-shm"||_==="knowledge.db-wal"||_==="knowledge.db-journal"}function DM(_){for(let $ of VW(_)){if($==="TOMBSTONE.md"||$==="migration.json")continue;try{sj(L6(_,$),{recursive:!0,force:!1})}catch(g){if(!FW(g)||!$.startsWith("knowledge.db"))throw g}}}function UM(_,$){try{tb(_,$);return}catch(g){BW(_,$,{recursive:!0,force:!1,errorOnExist:!0,preserveTimestamps:!0});try{$M(_)}catch(U){if(FW(U)){DM(_);return}throw sj($,{recursive:!0,force:!0}),U}if(g instanceof Error&&g.message.includes("EXDEV"))return}}function IM(_,$,g){if(!$.exists)return!1;if(!$.files.includes("TOMBSTONE.md")||!$.files.includes("migration.json"))return!1;if($.files.some((U)=>!gM(U)))return!1;try{let U=JSON.parse(AU(L6(_.home,"migration.json"),"utf8"));return U.new_path===g&&typeof U.backup_path==="string"}catch{return!1}}function y5(_){let $=_.now??new Date,g=_.approveWrite!==!0,U=h_(_.current),D=ab(_.current,U),I=_.approveWrite===!0&&Boolean(_.approvedBy)&&(!U.exists||D),j=h_(_.legacy,{includeSqlite:!I}),E={legacy_exists:j.exists,current_absent_or_default_scaffold:!U.exists||D,approval_present:_.approveWrite===!0&&Boolean(_.approvedBy),legacy_is_tombstone:!1,backup_matches_legacy:!1,migrated_matches_backup:!1,tombstone_written:!1},A=[];if(!j.exists)return{ok:!0,dry_run:g,approval_required:!1,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:null,tombstone_path:null,legacy_before:j,current_before:U,backup_after:null,current_after:null,checks:E,warnings:A,message:`No legacy knowledge workspace found at ${_.legacy.home}`};if(E.legacy_is_tombstone=IM(_.legacy,j,_.current.home),E.legacy_is_tombstone)return{ok:!0,dry_run:g,approval_required:!1,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:null,tombstone_path:L6(_.legacy.home,"TOMBSTONE.md"),legacy_before:j,current_before:U,backup_after:null,current_after:U,checks:{...E,tombstone_written:!0},warnings:A,message:`Legacy knowledge workspace already migrated to ${_.current.home}`};if(!E.current_absent_or_default_scaffold)A.push("current_workspace_contains_data");if(!E.approval_present)A.push("write_approval_required");if(g||!E.current_absent_or_default_scaffold||!E.approval_present)return{ok:E.current_absent_or_default_scaffold,dry_run:!0,approval_required:!0,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:`${_.legacy.home}.backup-${aj($)}`,tombstone_path:L6(_.legacy.home,"TOMBSTONE.md"),legacy_before:j,current_before:U,backup_after:null,current_after:null,checks:E,warnings:A,message:E.current_absent_or_default_scaffold?`Dry run: would migrate ${_.legacy.home} to ${_.current.home}`:`Cannot migrate while ${_.current.home} contains data`};let O=`${_.legacy.home}.backup-${aj($)}`;ej(QW(_.current.home),{recursive:!0}),ej(QW(O),{recursive:!0}),BW(_.legacy.home,O,{recursive:!0,force:!1,errorOnExist:!0,preserveTimestamps:!0}),x5(O);let P=g$(O),W=h_(P,{includeSqlite:!1});if(E.backup_matches_legacy=KW(j,W),!E.backup_matches_legacy)throw Error(`Legacy knowledge backup verification failed: ${O}`);if(U.exists&&D)sj(_.current.home,{recursive:!0,force:!0});UM(_.legacy.home,_.current.home);let z=h_(_.current,{includeSqlite:!1});E.migrated_matches_backup=KW(W,z);let S=h_(P),L=h_(_.current),J={...S,path:_.legacy.home};ej(_.legacy.home,{recursive:!0});let R=L6(_.legacy.home,"TOMBSTONE.md");k5(R,["# Migrated OpenKnowledge Workspace","",`Migrated at: ${$.toISOString()}`,`Approved by: ${_.approvedBy}`,`New path: ${_.current.home}`,`Backup path: ${O}`,"","This directory is a diagnostic tombstone only. OpenKnowledge reads and writes the canonical .hasna/knowledge workspace.",""].join(` +`),{mode:384}),YW(R,384);let X=L6(_.legacy.home,"migration.json");k5(X,`${JSON.stringify({migrated_at:$.toISOString(),approved_by:_.approvedBy,new_path:_.current.home,backup_path:O,legacy_before:J,backup_after:S,current_after:L},null,2)} +`,{mode:384}),YW(X,384),E.tombstone_written=B$(R);let G=E.backup_matches_legacy&&E.migrated_matches_backup&&E.tombstone_written;return{ok:G,dry_run:!1,approval_required:!1,scope:_.scope,current_home:_.current.home,legacy_home:_.legacy.home,backup_home:O,tombstone_path:R,legacy_before:J,current_before:U,backup_after:S,current_after:L,checks:E,warnings:A,message:G?`Migrated legacy knowledge workspace to ${_.current.home}`:`Migrated legacy knowledge workspace, but verification failed for ${_.current.home}`}}function AM(_){let $=$9(_);if(J_(c5($,"knowledge.db"))||J_(c5($,"config.json")))return U4($);return U4(g$(FE($)).home)}function rW(_){return`${NM()}:${PU("sha256").update(_.home).digest("hex").slice(0,12)}`}function ZW(_){return`'${_.replace(/'/g,"'\\''")}'`}function OM(_){return["knowledge",..._].map(ZW).join(" ")}function h5(_,$){return`cd ${ZW(_)} && knowledge ${$.map(ZW).join(" ")}`}function g9(_){return!_||_==="local"||_==="localhost"}function OU(_,$){return{source:_.source,adapter:_.adapter,project_root:$,project_root_source:_.project_root_source,workspace_root:_.workspace_root,workspace_root_source:_.workspace_root_source,open_files_root:_.open_files_root,open_files_root_source:_.open_files_root_source,trust_status:_.trust_status,auth_status:_.auth_status,current:_.current,primary:_.primary,diagnostics:_.diagnostics,repair_hints:_.repair_hints,evidence:_.evidence,cacheability:_.cacheability,warnings:_.warnings}}function bW(_){return{source:_.source,adapter:_.adapter,target:_.target,route:_.route,target_kind:_.targetKind,confidence:_.confidence,evidence:_.evidence,cacheability:_.cacheability}}function PM(_){try{let $=JSON.parse(_);return Array.isArray($)?$.filter((g)=>typeof g==="string"):[]}catch{return[]}}function SU(_){return _&&typeof _==="object"&&!Array.isArray(_)?_:{}}function b_(_){return typeof _==="string"&&_.length>0?_:null}function SM(_){return typeof _==="number"&&Number.isFinite(_)?_:null}function _E(_){return typeof _==="boolean"?_:null}function LM(_){return Array.isArray(_)?_.filter(($)=>typeof $==="string"):[]}function D9(_,$,g){let U=SU(_),D=b_(U.observed_at)??b_($[`${g}_observed_at`]),I=b_(U.source_authority)??b_($[`${g}_source_authority`]);if(!D||!I)return null;return{observed_at:D,verified_at:b_(U.verified_at),expires_at:b_(U.expires_at)??b_($[`${g}_expires_at`]),ttl_ms:SM(U.ttl_ms),source_authority:I,confidence:b_(U.confidence)??(g==="route"?b_($.route_confidence):null),cacheable:_E(U.cacheable)??_E($[`${g}_cacheable`])??!1,stale:_E(U.stale)??_E($[`${g}_stale`])??!1,reasons:LM(U.reasons)}}function WM(_,$){return _.machine_id===$||_.hostname===$||_.ssh_target===$||_.tailscale_dns===$||PM(_.tailscale_ips_json).includes($)}function n5(_,$){return cN(_).find((g)=>WM(g,$))??null}function U9(_){return SU(ng(_.metadata_json).resolver_evidence)}function LU(_){return SU(ng(_.capabilities_json).resolver)}function I9(_){let $=LU(_),g=b_($.route_kind);if(g==="local"||g==="lan"||g==="tailscale"||g==="ssh"||g==="unknown")return g;if(_.tailscale_dns&&_.ssh_target===_.tailscale_dns)return"tailscale";return _.ssh_target?"ssh":"unknown"}function JM(_){let $=LU(_),g=b_($.route_target_kind);if(g==="local"||g==="lan"||g==="tailscale"||g==="ssh"||g==="unknown")return g;return I9(_)}function zM(_){return b_(LU(_).route_confidence)??"medium"}function d5(_,$,g){let U=U9(_),D=SU(U.route),I=LU(_);return{target:_.ssh_target??_.tailscale_dns??_.hostname??_.machine_id,route:I9(_),targetKind:JM(_),confidence:zM(_),source:"registry",adapter:g.adapter,evidence:{registry:!0,requested_machine_id:$,machine_id:_.machine_id,recorded_at:_.updated_at,route:D},cacheability:D9(D.cacheability,I,"route")??g.cacheability,warnings:[...new Set([...g.warnings,"registry_route_fallback"])]}}function m5(_,$,g){if(!_.workspace_home)return null;let U=U9(_),D=SU(U.workspace),I=LU(_);return{ok:!0,source:"registry",adapter:g.adapter,requested_machine_id:$,machine_id:_.machine_id,project_id:b_(D.project_id)??g.project_id,repo_name:b_(D.repo_name)??g.repo_name,project_root:_.workspace_home,project_root_source:b_(I.project_root_source)??"registry",workspace_root:b_(D.workspace_root),workspace_root_source:b_(I.workspace_root_source)??"registry",open_files_root:b_(D.open_files_root),open_files_root_source:b_(I.open_files_root_source)??"registry",trust_status:b_(I.trust_status)??"unknown",auth_status:b_(I.auth_status)??"unknown",current:!1,primary:!1,diagnostics:[],repair_hints:[],evidence:{registry:!0,requested_machine_id:$,machine_id:_.machine_id,recorded_at:_.updated_at,workspace:D},cacheability:D9(D.cacheability,I,"workspace")??g.cacheability,warnings:[...new Set([...g.warnings,"registry_workspace_fallback"])]}}function i5(_){if(!_)return null;let $=_.diagnostics.filter((U)=>U.severity!=="ok"),g=_.repair_hints[0];if(!$.length&&!_.warnings.length&&!g)return null;return[$.length?`workspace diagnostics: ${$.map((U)=>`${U.id}=${U.status}`).join(", ")}`:null,_.warnings.length?`warnings: ${_.warnings.join(", ")}`:null,g?`repair: ${g.shell_command}`:null].filter(Boolean).join("; ")}function $E(_){return{id:_.id,reason:_.reason,command:["knowledge",..._.args],shell_command:OM(_.args)}}function gE(_,$){let g=v(_);try{return Number(g.query($).get()?.count??0)}finally{g.close()}}function RM(_,$){let g=gE(_,"SELECT COUNT(*) AS count FROM sources WHERE uri LIKE 'open-files://%'"),U=gE(_,"SELECT COUNT(*) AS count FROM sources WHERE metadata_json LIKE '%open-files://%' OR metadata_json LIKE '%source_ref%'"),D=gE(_,"SELECT COUNT(*) AS count FROM source_revisions WHERE extracted_text_uri IS NOT NULL"),I=gE(_,["SELECT COUNT(*) AS count FROM sources","WHERE metadata_json LIKE '%raw_bytes%'","OR metadata_json LIKE '%raw_content%'","OR metadata_json LIKE '%content_base64%'","OR metadata_json LIKE '%source_bytes%'"].join(" ")),j=I===0;return{ok:j,source_of_truth:"open-files",configured_root:$?.open_files_root??null,configured_root_source:$?.open_files_root_source??null,source_refs:{open_files:g,metadata_mentions:U},extracted_text_artifacts:D,raw_source_bytes_owned_by:"open-files",raw_payload_sentinel_hits:I,message:j?`${g} open-files source ref(s); raw source bytes remain owned by open-files`:`${I} raw source payload metadata sentinel(s) found`}}var GM=new Set(["raw","raw_bytes","raw_content","content_base64","source_bytes","source_content","body","body_bytes"]);function HW(_,$=0){if($>8)return!1;if(!_||typeof _!=="object")return!1;if(Array.isArray(_))return _.some((g)=>HW(g,$+1));for(let[g,U]of Object.entries(_)){if(GM.has(g.toLowerCase()))return!0;if(HW(U,$+1))return!0}return!1}function ng(_){try{let $=JSON.parse(_);return $&&typeof $==="object"&&!Array.isArray($)?$:{}}catch{return{}}}function l5(_,$=20,g=200){if(!Number.isFinite(_)||_<=0)return $;return Math.min(Math.floor(_),g)}function XM(_,$=220){let g=_??"";return g.length>$?`${g.slice(0,$)}...`:g}function W$(_,$=["metadata_json"]){return _.map((g)=>{let U={...g};for(let D of $){let I=U[D];if(typeof I==="string"){let j=D.endsWith("_json")?D.slice(0,-5):D;U[j]=ng(I),delete U[D]}}return U})}function UE(_){if(typeof _!=="string")return[];try{let $=JSON.parse(_);return Array.isArray($)?$:[]}catch{return[]}}function kW(_){if(typeof _!=="string")return{};return ng(_)}function YM(_){let $={..._};return $.source_refs=UE($.source_refs_json),$.evidence_refs=UE($.evidence_refs_json),$.requires_approval=$.requires_approval===1||$.requires_approval===!0,$.checks=kW($.checks_json),$.metadata=kW($.metadata_json),delete $.source_refs_json,delete $.evidence_refs_json,delete $.checks_json,delete $.metadata_json,$}function QM(_){let $={..._};return $.source_refs=UE($.source_refs_json),$.evidence_refs=UE($.evidence_refs_json),$.metadata=kW($.metadata_json),delete $.source_refs_json,delete $.evidence_refs_json,delete $.metadata_json,$}function t_(_,$,g=[]){return _.query($).all(...g)}function TM(_){if(!J_(_))return{exists:!1,read_error:null,items:[]};try{let $=JSON.parse(EM(_,"utf8"));if(!$||!Array.isArray($.items))return{exists:!0,read_error:"invalid_store_shape",items:[]};return{exists:!0,read_error:null,items:$.items}}catch($){return{exists:!0,read_error:$ instanceof Error?$.message:String($),items:[]}}}function t5(_){return{id:_.id,short_id:_.short_id??null,title:_.title,content_preview:XM(_.content),url:_.url??null,tags:_.tags??[],metadata:_.metadata??{},archived:_.archived===!0,created_at:_.created_at,updated_at:_.updated_at}}function o5(){return{schema_version:0,sources:0,source_revisions:0,chunks:0,wiki_pages:0,citations:0,indexes:0,runs:0,run_events:0,redaction_findings:0,audit_events:0,approval_gates:0,storage_objects:0,embeddings:0,vector_entries:0,reindex_queue:0,knowledge_machines:0,sync_snapshots:0,sync_changes:0,sync_conflicts:0,sync_table_clocks:0,sync_imports:0,promotion_candidates:0,durable_records:0}}function j9(_,$,g=!1){return{query:_,limit:$,offset:0,mode:{keyword:!0,catalog:!0,semantic:g},semantic_provider:null,semantic_model:null,semantic_dimensions:null,counts:{keyword_results:0,catalog_results:0,semantic_results:0,merged_results:0},warnings:["knowledge_db_missing"],results:[]}}function KM(_){return _.normalize("NFKC").trim().replace(/\s+/g," ").toLowerCase()}function qM(_,$,g=!1){let U=j9(_,$,g);return{query:_,normalized_query:KM(_),created_at:new Date().toISOString(),mode:U.mode,warnings:U.warnings,search_counts:U.counts,results:[],citations:[],excerpts:[],graph:{citations:[],backlinks:[]},notes:{permissions:[],freshness:[]}}}function MW(_,$,g){let U=g??$.jsonStorePath;if(J_(U))return U;if(_==="global"){let D=V0();if(J_(D))return D}return U}function BM(_){let $=JSON.stringify(_);return Math.max(1,Math.ceil($.length/4))}function CW(_,$){let g=(_??"").normalize("NFKC").trim().replace(/\s+/g," ");if(g.length<=$)return g;return`${g.slice(0,Math.max(0,$-1)).trim()}...`}function p5(_,$,g){let U=w_(CW(_,g),$);return{text:U.text,redactions:U.findings.length}}function e5(_,$,g){let U=_.now??new Date,D=_.source??"search",I=_.purpose??(D==="loops"||D==="runs"?"proposal":"agent_context"),j=(_.query??_.topic??$.query).normalize("NFKC").trim().replace(/\s+/g," "),E=Math.max(1,Math.min(_.maxItems??_.limit??8,50)),A=Math.max(500,Math.min(_.maxTokens??6000,1e5)),O=0,P=$.citations.slice(0,Math.max(E*2,E)).map((G,B)=>{let Q=p5(G.quote,g,B<3?220:140);O+=Q.redactions;let T=G.source_ref??G.source_uri??G.artifact_path??G.artifact_uri??G.id;return{id:`cite_${PU("sha256").update(`${G.id}\x00${T}`).digest("hex").slice(0,12)}`,kind:G.artifact_uri||G.artifact_path?"artifact":"source",ref:T,source_ref:G.source_ref,source_uri:G.source_uri,artifact_uri:G.artifact_uri,artifact_path:G.artifact_path,run_id:null,run_event_id:null,revision:G.revision,hash:G.hash,chunk_id:G.chunk_id,offsets:{start:G.start_offset,end:G.end_offset},quote_preview:Q.text}}),W=new Map($.citations.map((G,B)=>[G.id,P[B]])),z=$.excerpts.slice(0,Math.max(E*2,E)).map((G)=>{let B=$.results.find((K)=>K.id===G.result_id),Q=G.citation_id?W.get(G.citation_id):void 0,T=p5(G.text,g,520);return O+=T.redactions,{id:`ev_${PU("sha256").update(`${G.kind}\x00${G.result_id}\x00${G.citation_id??""}`).digest("hex").slice(0,14)}`,kind:G.kind,title:CW(B?.title??Q?.ref??G.kind,100),text_preview:T.text,score:Number(G.score.toFixed(6)),citation_ids:Q?[Q.id]:[],provenance:{source:D,record_ref:`${G.kind}:${G.result_id}`,created_at:$.created_at,updated_at:null,metadata_keys:[]}}}).sort((G,B)=>B.score-G.score||G.id.localeCompare(B.id)).slice(0,E),S=new Set(z.flatMap((G)=>G.citation_ids)),L=P.filter((G)=>S.has(G.id)),J=Array.from(new Set($.warnings)),R=`ctx_${PU("sha256").update([D,I,j,J.join(","),z.map((G)=>G.id).join(",")].join("\x00")).digest("hex").slice(0,20)}`,X={ok:!0,format:"knowledge-agent-context-pack",version:1,created_at:U.toISOString(),source:D,purpose:I,query:j,topic:_.topic??null,since:_.since??null,dry_run:!0,idempotency_key:R,budgets:{max_tokens:A,estimated_tokens:0,max_items:E,items_included:z.length,items_available:$.excerpts.length,items_truncated:Math.max(0,$.excerpts.length-z.length),token_budget_exceeded:!1},safety:{raw_artifact_content_included:!1,durable_writes_performed:!1,redactions:O,reminders:["This pack is read-only and performs no durable writes.","Legacy JSON note evidence is bounded and redacted before inclusion."]},citations:L,evidence:z,duplicate_candidates:[],outline:{title:j?`Knowledge context: ${CW(j,80)}`:"Knowledge context",bullets:z.length>0?z.slice(0,5).map((G)=>`${G.id}: ${G.title}`):["No matching bounded evidence was found."],evidence_ids:z.slice(0,8).map((G)=>G.id),duplicate_candidate_ids:[],next_actions:["Use evidence_ids and citation_ids in prompts instead of raw excerpts when possible.","Inspect cited refs only if the bounded preview is insufficient.","Use knowledge build/file-answer only with explicit approval for durable writes."]},warnings:J,message:`${z.length} bounded evidence item(s), estimated under ${A} token(s)`};return X.budgets.estimated_tokens=BM(X),X.budgets.token_budget_exceeded=X.budgets.estimated_tokens>A,X.message=`${X.evidence.length} bounded evidence item(s), estimated ${X.budgets.estimated_tokens}/${A} token(s)`,X}function VM(){return{schema_version:0,chunks:0,vector_entries:0,missing_embeddings:0,queued:{},stale_revisions:0}}function FM(){return{total_embeddings:0,total_vector_entries:0,indexes:[]}}function rM(_){return{ok:!0,scope:_.scope,workspace_home:_.workspaceHome,sqlite_schema_version:0,local_machine_id:_.localMachineId??null,machines:{total:0,rows:[]},snapshots:{total:0,latest:null},changes:{total:0,by_operation:[]},clocks:{total:0,rows:[]},imports:{total:0,latest:null},conflicts:{total:0,by_status:[],open:0},table_counts:{},message:"0 machine(s), 0 open sync conflict(s)"}}function a5(_){let $=_.now??new Date,g=_.source??"search",U=_.purpose??(g==="loops"||g==="runs"?"proposal":"agent_context"),D=(_.query??_.topic??"").normalize("NFKC").trim().replace(/\s+/g," "),I=Math.max(1,Math.min(_.maxItems??_.limit??8,50)),j=Math.max(500,Math.min(_.maxTokens??6000,1e5)),E=`ctx_${PU("sha256").update(["empty",g,U,D,_.topic??"",_.since??""].join("\x00")).digest("hex").slice(0,20)}`;return{ok:!0,format:"knowledge-agent-context-pack",version:1,created_at:$.toISOString(),source:g,purpose:U,query:D,topic:_.topic??null,since:_.since??null,dry_run:!0,idempotency_key:E,budgets:{max_tokens:j,estimated_tokens:0,max_items:I,items_included:0,items_available:0,items_truncated:0,token_budget_exceeded:!1},safety:{raw_artifact_content_included:!1,durable_writes_performed:!1,redactions:0,reminders:["This pack is read-only and performs no durable writes.","No knowledge.db exists for this scope yet."]},citations:[],evidence:[],duplicate_candidates:[],outline:{title:D?`Context for ${D}`:"Knowledge context",bullets:[],evidence_ids:[],duplicate_candidate_ids:[],next_actions:[]},warnings:["knowledge_db_missing"],message:`0 bounded evidence item(s), estimated 0/${j} token(s)`}}function vW(_){let $=_.artifact_store.s3?.prefix?.replace(/^\/+|\/+$/g,"");return $?`${$}/`:null}function bM(_,$){let g=v(_);try{let U=g.query(`SELECT artifact_uri, kind, hash, size_bytes, metadata_json FROM storage_objects - ORDER BY artifact_uri ASC`).all(),g=new Map,I=0,j=0,N=0,O=0,A=0,L=0,z=0,W=0,J=0,P=0,S=0,X=0,G=new Map,R=[],V=[],Q=[],T=[],q=$.artifact_store.uri_prefix,K=b3($);for(let G_ of U){if(g.set(G_.kind,(g.get(G_.kind)??0)+1),G_.hash?.startsWith("sha256:"))I+=1;if(typeof G_.size_bytes==="number"&&G_.size_bytes>=0)j+=1,N+=G_.size_bytes;if(G_.artifact_uri.startsWith(q))O+=1;else if(R.length<5)R.push(G_.artifact_uri);let H_=c4(G_.metadata_json);if(F3(H_))z+=1;let D0=typeof H_.key==="string"?H_.key:null;if(!D0)A+=1;else if(K&&D0.startsWith(K)){if(L+=1,V.length<5)V.push(D0)}let Lz=typeof H_.artifact_modified_at==="string"?H_.artifact_modified_at:null;if(Lz)if(Number.isNaN(Date.parse(Lz))){if(J+=1,Q.length<5)Q.push(G_.artifact_uri)}else W+=1;let KD=H_.provenance&&typeof H_.provenance==="object"&&!Array.isArray(H_.provenance)?H_.provenance:null;if(KD){P+=1;let qN=typeof KD.artifact_key==="string"?KD.artifact_key:null,Jz=typeof KD.generated_from==="string"?KD.generated_from:"unknown";if(G.set(Jz,(G.get(Jz)??0)+1),qN){if(S+=1,D0&&qN!==D0){if(X+=1,T.length<5)T.push(`${G_.artifact_uri}:provenance.artifact_key=${qN}:key=${D0}`)}}else if(T.length<5)T.push(`${G_.artifact_uri}:missing_provenance_artifact_key`)}else if(T.length<5)T.push(`${G_.artifact_uri}:missing_provenance`)}let Z=U.length-I,e=U.length-j,g_=U.length-W-J,I_=U.length-P,J_=P-S,a=U.length-O,v_=[Z>0?`artifact_manifest_missing_hash:${Z}`:null,e>0?`artifact_manifest_missing_size:${e}`:null,A>0?`artifact_manifest_missing_key:${A}`:null,a>0?`artifact_manifest_uri_prefix_mismatch:${a}`:null,L>0?`artifact_manifest_s3_key_contains_storage_prefix:${L}`:null,J>0?`artifact_manifest_invalid_modified_at:${J}`:null,I_>0?`artifact_manifest_missing_provenance:${I_}`:null,J_>0?`artifact_manifest_missing_provenance_artifact_key:${J_}`:null,X>0?`artifact_manifest_provenance_key_mismatch:${X}`:null,z>0?`artifact_manifest_raw_payload_sentinels:${z}`:null].filter((G_)=>Boolean(G_)),V_=v_.length===0;return{ok:V_,read_only:!0,storage_type:$.storage_type,artifact_uri_prefix:q,s3:$.artifact_store.s3,artifacts:{total:U.length,by_kind:[...g.entries()].map(([G_,H_])=>({kind:G_,count:H_})).sort((G_,H_)=>G_.kind.localeCompare(H_.kind)),with_hash:I,missing_hash:Z,with_size:j,missing_size:e,total_size_bytes:N},modified_time:{with_modified_at:W,missing_modified_at:g_,invalid_modified_at:J,examples:Q},provenance:{with_provenance:P,missing_provenance:I_,with_artifact_key:S,missing_artifact_key:J_,artifact_key_mismatches:X,generated_from:[...G.entries()].map(([G_,H_])=>({value:G_,count:H_})).sort((G_,H_)=>G_.value.localeCompare(H_.value)),examples:T},uri_prefix:{matching:O,mismatched:a,examples:R},keys:{with_key:U.length-A,missing_key:A,prefixed_with_storage_prefix:L,prefixed_examples:V},sync_manifest:{copied_by_sync:!0,generated_artifacts_only:!0,includes_raw_source_bytes:!1,hash_algorithm:"sha256",portable_keys:L===0&&A===0,tracks_modified_time:W>0&&J===0,preserves_provenance:I_===0&&J_===0&&X===0},raw_payload_sentinel_hits:z,warnings:v_,message:V_?`${U.length} generated artifact manifest row(s) ready for ${$.storage_type} sync`:`Generated artifact manifest needs attention: ${v_.join(", ")}`}}finally{D.close()}}function Yb(_,$){let D=b3($);if(!D)return[];let U=r(_);try{let g=U.query(`SELECT id, artifact_uri, kind, hash, size_bytes, metadata_json + ORDER BY artifact_uri ASC`).all(),D=new Map,I=0,j=0,E=0,A=0,O=0,P=0,W=0,z=0,S=0,L=0,J=0,R=0,X=new Map,G=[],B=[],Q=[],T=[],K=$.artifact_store.uri_prefix,V=vW($);for(let Q_ of U){if(D.set(Q_.kind,(D.get(Q_.kind)??0)+1),Q_.hash?.startsWith("sha256:"))I+=1;if(typeof Q_.size_bytes==="number"&&Q_.size_bytes>=0)j+=1,E+=Q_.size_bytes;if(Q_.artifact_uri.startsWith(K))A+=1;else if(G.length<5)G.push(Q_.artifact_uri);let M_=ng(Q_.metadata_json);if(HW(M_))W+=1;let D4=typeof M_.key==="string"?M_.key:null;if(!D4)O+=1;else if(V&&D4.startsWith(V)){if(P+=1,B.length<5)B.push(D4)}let zJ=typeof M_.artifact_modified_at==="string"?M_.artifact_modified_at:null;if(zJ)if(Number.isNaN(Date.parse(zJ))){if(S+=1,Q.length<5)Q.push(Q_.artifact_uri)}else z+=1;let B0=M_.provenance&&typeof M_.provenance==="object"&&!Array.isArray(M_.provenance)?M_.provenance:null;if(B0){L+=1;let KE=typeof B0.artifact_key==="string"?B0.artifact_key:null,RJ=typeof B0.generated_from==="string"?B0.generated_from:"unknown";if(X.set(RJ,(X.get(RJ)??0)+1),KE){if(J+=1,D4&&KE!==D4){if(R+=1,T.length<5)T.push(`${Q_.artifact_uri}:provenance.artifact_key=${KE}:key=${D4}`)}}else if(T.length<5)T.push(`${Q_.artifact_uri}:missing_provenance_artifact_key`)}else if(T.length<5)T.push(`${Q_.artifact_uri}:missing_provenance`)}let F=U.length-I,o=U.length-j,I_=U.length-z-S,j_=U.length-L,p=L-J,$$=U.length-A,H_=[F>0?`artifact_manifest_missing_hash:${F}`:null,o>0?`artifact_manifest_missing_size:${o}`:null,O>0?`artifact_manifest_missing_key:${O}`:null,$$>0?`artifact_manifest_uri_prefix_mismatch:${$$}`:null,P>0?`artifact_manifest_s3_key_contains_storage_prefix:${P}`:null,S>0?`artifact_manifest_invalid_modified_at:${S}`:null,j_>0?`artifact_manifest_missing_provenance:${j_}`:null,p>0?`artifact_manifest_missing_provenance_artifact_key:${p}`:null,R>0?`artifact_manifest_provenance_key_mismatch:${R}`:null,W>0?`artifact_manifest_raw_payload_sentinels:${W}`:null].filter((Q_)=>Boolean(Q_)),i$=H_.length===0;return{ok:i$,read_only:!0,storage_type:$.storage_type,artifact_uri_prefix:K,s3:$.artifact_store.s3,artifacts:{total:U.length,by_kind:[...D.entries()].map(([Q_,M_])=>({kind:Q_,count:M_})).sort((Q_,M_)=>Q_.kind.localeCompare(M_.kind)),with_hash:I,missing_hash:F,with_size:j,missing_size:o,total_size_bytes:E},modified_time:{with_modified_at:z,missing_modified_at:I_,invalid_modified_at:S,examples:Q},provenance:{with_provenance:L,missing_provenance:j_,with_artifact_key:J,missing_artifact_key:p,artifact_key_mismatches:R,generated_from:[...X.entries()].map(([Q_,M_])=>({value:Q_,count:M_})).sort((Q_,M_)=>Q_.value.localeCompare(M_.value)),examples:T},uri_prefix:{matching:A,mismatched:$$,examples:G},keys:{with_key:U.length-O,missing_key:O,prefixed_with_storage_prefix:P,prefixed_examples:B},sync_manifest:{copied_by_sync:!0,generated_artifacts_only:!0,includes_raw_source_bytes:!1,hash_algorithm:"sha256",portable_keys:P===0&&O===0,tracks_modified_time:z>0&&S===0,preserves_provenance:j_===0&&p===0&&R===0},raw_payload_sentinel_hits:W,warnings:H_,message:i$?`${U.length} generated artifact manifest row(s) ready for ${$.storage_type} sync`:`Generated artifact manifest needs attention: ${H_.join(", ")}`}}finally{g.close()}}function MM(_,$){let g=vW($);if(!g)return[];let U=v(_);try{let D=U.query(`SELECT id, artifact_uri, kind, hash, size_bytes, metadata_json FROM storage_objects - ORDER BY artifact_uri ASC`).all(),I=[];for(let j of g){let N=c4(j.metadata_json),O=typeof N.key==="string"?N.key:null;if(!O?.startsWith(D))continue;let A=O.slice(D.length);if(!A)continue;I.push({id:j.id,artifact_uri:j.artifact_uri,kind:j.kind,current_key:O,repaired_key:f$(A),hash:j.hash,size_bytes:j.size_bytes})}return I}finally{U.close()}}function Qb(_){let $=["--scope",_.scope,"--json"],D=_.tables?.length?["--tables",_.tables.join(",")]:[],U=[DN({id:"sync_status",reason:"Inspect local sync registry, clocks, snapshots, and conflicts.",args:["sync","status",...$]})];if(_.machine&&!e9(_.machine))U.push(DN({id:"sync_dry_run_remote",reason:"Preview remote machine sync before changing either workspace.",args:["sync","dry-run","--machine",_.machine,..._.peerWorkspace?["--peer-workspace",_.peerWorkspace]:[],...D,...$]}));else if(_.peerWorkspace)U.push(DN({id:"sync_dry_run_peer",reason:"Preview local peer sync before changing either workspace.",args:["sync","dry-run","--peer-workspace",_.peerWorkspace,...D,...$]}));for(let g of _.resolvedWorkspace?.repair_hints??[])U.push({id:g.id,reason:g.reason,command:g.command,shell_command:g.shell_command});if(_.openConflicts>0)U.push(DN({id:"sync_conflicts",reason:"Review open conflicts before relying on bidirectional sync.",args:["sync","conflicts",...$]}));return U}function Tb(){let _=process.env.KNOWLEDGE_SSH_COMMAND?.trim()||"ssh",$=process.env.KNOWLEDGE_SSH_COMMAND_ARGS_JSON;if(!$)return{command:_,argsPrefix:[]};let D;try{D=JSON.parse($)}catch(U){throw Error(`KNOWLEDGE_SSH_COMMAND_ARGS_JSON must be a JSON string array: ${U instanceof Error?U.message:String(U)}`)}if(!Array.isArray(D)||!D.every((U)=>typeof U==="string"))throw Error("KNOWLEDGE_SSH_COMMAND_ARGS_JSON must be a JSON string array.");return{command:_,argsPrefix:D}}function t9(_,$,D,U){let g=Tb(),I=pZ(g.command,[...g.argsPrefix,U.target,$],{encoding:"utf8",env:process.env,input:D,maxBuffer:67108864});if((I.status??1)!==0){let j=U.source==="open-machines"?` via ${U.route??"resolved"}:${U.target}`:"";throw Error(`ssh ${_}${j} failed: ${(I.stderr||I.stdout||String(I.status)).trim()}`)}return I.stdout||""}function o9(_,$,D){try{return JSON.parse(D)}catch(U){let g=D.trim().slice(0,240);throw Error(`Remote knowledge ${$} on ${_} did not return JSON. Install a compatible @hasna/knowledge CLI on the remote machine. Output: ${g||String(U)}`)}}function qb(_,$){if(typeof $!=="object"||$===null||!("format"in $)||$.format!=="knowledge-sync-bundle")throw Error(`Remote knowledge sync export on ${_} did not return a knowledge sync bundle. Install @hasna/knowledge 0.2.32 or newer on the remote machine.`);let{protocol_version:D,min_protocol_version:U}=$;if(typeof D!=="number"||typeof U!=="number"||DK6)throw Error(`Remote knowledge sync export on ${_} uses an unsupported sync protocol. Install @hasna/knowledge 0.2.32 or newer on both machines.`)}function Bb(_,$){if(typeof $!=="object"||$===null||!("ok"in $)||!("target"in $)||!("tables"in $)||!("artifacts"in $)||!("conflicts_created"in $))throw Error(`Remote knowledge sync import on ${_} did not return a sync import result. Install @hasna/knowledge 0.2.32 or newer on the remote machine.`);let{protocol_version:D,min_protocol_version:U}=$;if(typeof D!=="number"||typeof U!=="number"||DK6)throw Error(`Remote knowledge sync import on ${_} uses an unsupported sync protocol. Install @hasna/knowledge 0.2.32 or newer on both machines.`)}function Vb(_){if(!_)return;let $=_.trim().toLowerCase();if($==="local"||$==="offline")return"local";if($==="hosted"||$==="remote"||$==="knowledge.md")return"hosted";throw Error("Invalid setup mode. Use hosted or local.")}class DG{options;ensuredWorkspace;cachedConfig;constructor(_={}){this.options=_}get scope(){return this.options.scope??"global"}get workspace(){return this.ensuredWorkspace??HU(this.options.scope,this.options.cwd)}ensureWorkspace(){if(!this.ensuredWorkspace)this.ensuredWorkspace=g0(this.workspace.home);return this.ensuredWorkspace}jsonStorePath(){return this.ensureWorkspace().jsonStorePath}itemStore(){let _=this.ensureWorkspace();return cU({storePath:_.jsonStorePath,storePathOverridden:!1})}async listItems(){return this.itemStore().listAll()}async getItem(_){return this.itemStore().get(_)}async createItem(_){return this.itemStore().create(_)}async updateItem(_,$){return this.itemStore().update(_,$)}async deleteItem(_){return this.itemStore().delete(_)}async deleteItems(_){return this.itemStore().deleteMany(_)}async resolveInventory(_={}){if(this.isApiMode())return this.cloudInventory(_);return this.inventory(_)}config(_={}){let $=_.ensure?this.ensureWorkspace():this.workspace;if(!this.cachedConfig||_.ensure||W_($.configPath))this.cachedConfig=W_($.configPath)?ZN($.configPath):MD();return this.cachedConfig}safetyPolicy(){return yS(this.config(),this.workspace)}artifactStore(){return gE(this.config(),this.ensureWorkspace())}storageContract(){return mU(this.config(),this.workspace,this.scope)}validateStorage(){return jE(this.config(),this.workspace)}assertStorageValid(_){let $=this.validateStorage();if(!$.ok)throw Error(`Storage contract invalid before ${_}: ${$.errors.join("; ")}`)}migrateLegacyPath(_={}){let $=this.workspace,D=MN(this.options.scope,this.options.cwd),U=r9({scope:this.scope,current:$,legacy:D,approveWrite:_.approveWrite,approvedBy:_.approvedBy});if(!U.dry_run&&U.ok)this.ensuredWorkspace=void 0,this.cachedConfig=void 0;return U}mergeLegacyPath(_={}){let $=this.workspace,D=MN(this.options.scope,this.options.cwd),U=C9({scope:this.scope,current:$,legacy:D,approveWrite:_.approveWrite,approvedBy:_.approvedBy});if(!U.dry_run&&U.ok)this.ensuredWorkspace=void 0,this.cachedConfig=void 0;return U}setup(_={}){let $=this.ensureWorkspace(),D=this.config({ensure:!0}),U=Vb(_.mode)??D.mode,g=_.apiUrl?a$(_.apiUrl):D.hosted?.api_url?a$(D.hosted.api_url):null,I={...D,mode:U,hosted:{...D.hosted??{},...g?{api_url:g}:{}},storage:_.canonicalExample?Xz():D.storage};Rz($.configPath,I),this.cachedConfig=I;let j=mU(I,$,this.scope);return{ok:!0,mode:U,api_url:I.hosted?.api_url??null,storage_type:I.storage.type,artifact_uri_prefix:j.artifact_store.uri_prefix,canonical_example:j.canonical_example,config_path:$.configPath,next:U==="hosted"?["knowledge auth login --api-key ","knowledge storage status --json"]:["knowledge search ","knowledge "],message:`Set knowledge mode to ${U}`}}authStatus(_=process.env){return MS(this.config(),_)}saveAuth(_,$=process.env){let D=_.apiUrl??this.config().hosted?.api_url;return KS({api_key:_.apiKey,email:_.email,org_id:_.orgId,org_slug:_.orgSlug,user_id:_.userId,api_url:D},$)}clearAuth(_=process.env){return FS(_)}paths(){let _=this.workspace;return{ok:!0,scope:this.scope,home:_.home,exists:W_(_.home),config_path:_.configPath,config_exists:W_(_.configPath),json_store_path:_.jsonStorePath,json_store_exists:W_(_.jsonStorePath),knowledge_db_path:_.knowledgeDbPath,knowledge_db_exists:W_(_.knowledgeDbPath),artifacts_dir:_.artifactsDir,indexes_dir:_.indexesDir,logs_dir:_.logsDir,runs_dir:_.runsDir,schemas_dir:_.schemasDir,wiki_dir:_.wikiDir,config:this.config(),message:_.home}}initDb(){return h(this.ensureWorkspace().knowledgeDbPath)}dbStats(){nU("reading knowledge.db stats");let _=this.workspace;if(!W_(_.knowledgeDbPath))return d9();return _E(_.knowledgeDbPath)}enqueuePromotion(_){return dR(this.ensureWorkspace().knowledgeDbPath,_)}promotionInbox(_={}){return iR(this.ensureWorkspace().knowledgeDbPath,_)}getPromotion(_){return mR(this.ensureWorkspace().knowledgeDbPath,_)}reviewPromotion(_,$){return lR(this.ensureWorkspace().knowledgeDbPath,_,$)}promoteCandidate(_,$={}){return tR(this.ensureWorkspace().knowledgeDbPath,_,$)}rejectPromotion(_,$={}){return oR(this.ensureWorkspace().knowledgeDbPath,_,$)}durableRecords(_={}){return pR(this.ensureWorkspace().knowledgeDbPath,_)}itemOnlyInventory(_){let $=this.workspace,{items:D,limit:U,includeArchived:g,storePath:I,storeExists:j,storeReadError:N}=_,O=D.filter((W)=>W.archived!==!0),A=g?D:O,L=d9(),z={legacy_items:D.length,active_items:O.length,archived_items:D.length-O.length,schema_version:L.schema_version,sources:L.sources,source_revisions:L.source_revisions,chunks:L.chunks,wiki_pages:L.wiki_pages,citations:L.citations,indexes:L.indexes,runs:L.runs,run_events:L.run_events,storage_objects:L.storage_objects,embeddings:L.embeddings,vector_entries:L.vector_entries,reindex_queue:L.reindex_queue,redaction_findings:L.redaction_findings,audit_events:L.audit_events,approval_gates:L.approval_gates,knowledge_machines:L.knowledge_machines,sync_snapshots:L.sync_snapshots,sync_changes:L.sync_changes,sync_conflicts:L.sync_conflicts,sync_table_clocks:L.sync_table_clocks,sync_imports:L.sync_imports,promotion_candidates:L.promotion_candidates,durable_records:L.durable_records};return{ok:!0,scope:this.scope,home:$.home,limit:U,paths:{json_store_path:$.jsonStorePath,json_store_exists:W_($.jsonStorePath),knowledge_db_path:$.knowledgeDbPath,knowledge_db_exists:W_($.knowledgeDbPath),artifacts_dir:$.artifactsDir,indexes_dir:$.indexesDir,logs_dir:$.logsDir,wiki_dir:$.wikiDir},summary:z,legacy_store:{path:I,exists:j,read_error:N,total_items:D.length,active_items:O.length,archived_items:D.length-O.length,items_returned:Math.min(A.length,U)},items:A.slice(0,U).map(n9),sources:[],source_revisions:[],chunks:[],wiki_pages:[],indexes:[],storage_objects:[],runs:[],vector_indexes:[],reindex_queue:[],machines:[],sync_conflicts:[],approval_gates:[],audit_events:[],promotion_candidates:[],durable_records:[],message:`${D.length} item(s), 0 source(s), 0 chunk(s), 0 wiki page(s), 0 artifact(s)`}}async cloudInventory(_={}){let $=c9(_.limit),D=await this.fetchCloudItems(),U=uD();return this.itemOnlyInventory({items:D,limit:$,includeArchived:_.includeArchived??!1,storePath:U?.baseUrl??"cloud",storeExists:!0,storeReadError:null})}inventory(_={}){let $=this.workspace,D=c9(_.limit),U=_.storePath??$.jsonStorePath,g=Jb(U),I=g.items.filter((L)=>L.archived!==!0),j=_.includeArchived?g.items:I;if(!W_($.knowledgeDbPath))return this.itemOnlyInventory({items:g.items,limit:D,includeArchived:_.includeArchived??!1,storePath:U,storeExists:g.exists,storeReadError:g.read_error});h($.knowledgeDbPath);let O=_E($.knowledgeDbPath),A=r($.knowledgeDbPath);try{let L=S$(p_(A,` + ORDER BY artifact_uri ASC`).all(),I=[];for(let j of D){let E=ng(j.metadata_json),A=typeof E.key==="string"?E.key:null;if(!A?.startsWith(g))continue;let O=A.slice(g.length);if(!O)continue;I.push({id:j.id,artifact_uri:j.artifact_uri,kind:j.kind,current_key:A,repaired_key:v$(O),hash:j.hash,size_bytes:j.size_bytes})}return I}finally{U.close()}}function ZM(_){let $=["--scope",_.scope,"--json"],g=_.tables?.length?["--tables",_.tables.join(",")]:[],U=[$E({id:"sync_status",reason:"Inspect local sync registry, clocks, snapshots, and conflicts.",args:["sync","status",...$]})];if(_.machine&&!g9(_.machine))U.push($E({id:"sync_dry_run_remote",reason:"Preview remote machine sync before changing either workspace.",args:["sync","dry-run","--machine",_.machine,..._.peerWorkspace?["--peer-workspace",_.peerWorkspace]:[],...g,...$]}));else if(_.peerWorkspace)U.push($E({id:"sync_dry_run_peer",reason:"Preview local peer sync before changing either workspace.",args:["sync","dry-run","--peer-workspace",_.peerWorkspace,...g,...$]}));for(let D of _.resolvedWorkspace?.repair_hints??[])U.push({id:D.id,reason:D.reason,command:D.command,shell_command:D.shell_command});if(_.openConflicts>0)U.push($E({id:"sync_conflicts",reason:"Review open conflicts before relying on bidirectional sync.",args:["sync","conflicts",...$]}));return U}function HM(){let _=process.env.KNOWLEDGE_SSH_COMMAND?.trim()||"ssh",$=process.env.KNOWLEDGE_SSH_COMMAND_ARGS_JSON;if(!$)return{command:_,argsPrefix:[]};let g;try{g=JSON.parse($)}catch(U){throw Error(`KNOWLEDGE_SSH_COMMAND_ARGS_JSON must be a JSON string array: ${U instanceof Error?U.message:String(U)}`)}if(!Array.isArray(g)||!g.every((U)=>typeof U==="string"))throw Error("KNOWLEDGE_SSH_COMMAND_ARGS_JSON must be a JSON string array.");return{command:_,argsPrefix:g}}function s5(_,$,g,U){let D=HM(),I=jM(D.command,[...D.argsPrefix,U.target,$],{encoding:"utf8",env:process.env,input:g,maxBuffer:67108864});if((I.status??1)!==0){let j=U.source==="open-machines"?` via ${U.route??"resolved"}:${U.target}`:"";throw Error(`ssh ${_}${j} failed: ${(I.stderr||I.stdout||String(I.status)).trim()}`)}return I.stdout||""}function _9(_,$,g){try{return JSON.parse(g)}catch(U){let D=g.trim().slice(0,240);throw Error(`Remote knowledge ${$} on ${_} did not return JSON. Install a compatible @hasna/knowledge CLI on the remote machine. Output: ${D||String(U)}`)}}function kM(_,$){if(typeof $!=="object"||$===null||!("format"in $)||$.format!=="knowledge-sync-bundle")throw Error(`Remote knowledge sync export on ${_} did not return a knowledge sync bundle. Install @hasna/knowledge 0.2.32 or newer on the remote machine.`);let{protocol_version:g,min_protocol_version:U}=$;if(typeof g!=="number"||typeof U!=="number"||gF6)throw Error(`Remote knowledge sync export on ${_} uses an unsupported sync protocol. Install @hasna/knowledge 0.2.32 or newer on both machines.`)}function CM(_,$){if(typeof $!=="object"||$===null||!("ok"in $)||!("target"in $)||!("tables"in $)||!("artifacts"in $)||!("conflicts_created"in $))throw Error(`Remote knowledge sync import on ${_} did not return a sync import result. Install @hasna/knowledge 0.2.32 or newer on the remote machine.`);let{protocol_version:g,min_protocol_version:U}=$;if(typeof g!=="number"||typeof U!=="number"||gF6)throw Error(`Remote knowledge sync import on ${_} uses an unsupported sync protocol. Install @hasna/knowledge 0.2.32 or newer on both machines.`)}function vM(_){if(!_)return;let $=_.trim().toLowerCase();if($==="local"||$==="offline")return"local";if($==="hosted"||$==="remote"||$==="knowledge.md")return"hosted";throw Error("Invalid setup mode. Use hosted or local.")}class DE extends Error{code="semantic_query_unavailable";constructor(){super("semantic_query_unavailable: the hosted Knowledge item store has no configured vector index.");this.name="KnowledgeSemanticSearchUnavailableError"}}class E9{options;ensuredWorkspace;cachedConfig;constructor(_={}){this.options=_}get scope(){return this.options.scope??"global"}get workspace(){return this.ensuredWorkspace??MU(this.options.scope,this.options.cwd)}ensureWorkspace(){if(!this.ensuredWorkspace)this.ensuredWorkspace=U4(this.workspace.home);return this.ensuredWorkspace}jsonStorePath(){return this.ensureWorkspace().jsonStorePath}itemStore(){let _=this.ensureWorkspace();return hU({storePath:_.jsonStorePath,storePathOverridden:!1})}async listItems(_={}){return this.itemStore().list(_)}async getItem(_){return this.itemStore().get(_)}async createItem(_){return this.itemStore().create(_)}async updateItem(_,$){return this.itemStore().update(_,$)}async deleteItem(_){return this.itemStore().delete(_)}async deleteItems(_){return this.itemStore().deleteMany(_)}async resolveInventory(_={}){if(this.isApiMode())return this.cloudInventory(_);return this.inventory(_)}config(_={}){let $=_.ensure?this.ensureWorkspace():this.workspace;if(!this.cachedConfig||_.ensure||J_($.configPath))this.cachedConfig=J_($.configPath)?bE($.configPath):F0();return this.cachedConfig}safetyPolicy(){return mz(this.config(),this.workspace)}artifactStore(){return IN(this.config(),this.ensureWorkspace())}storageContract(){return mU(this.config(),this.workspace,this.scope)}validateStorage(){return NN(this.config(),this.workspace)}assertStorageValid(_){let $=this.validateStorage();if(!$.ok)throw Error(`Storage contract invalid before ${_}: ${$.errors.join("; ")}`)}migrateLegacyPath(_={}){let $=this.workspace,g=rE(this.options.scope,this.options.cwd),U=y5({scope:this.scope,current:$,legacy:g,approveWrite:_.approveWrite,approvedBy:_.approvedBy});if(!U.dry_run&&U.ok)this.ensuredWorkspace=void 0,this.cachedConfig=void 0;return U}mergeLegacyPath(_={}){let $=this.workspace,g=rE(this.options.scope,this.options.cwd),U=f5({scope:this.scope,current:$,legacy:g,approveWrite:_.approveWrite,approvedBy:_.approvedBy});if(!U.dry_run&&U.ok)this.ensuredWorkspace=void 0,this.cachedConfig=void 0;return U}setup(_={}){let $=this.ensureWorkspace(),g=this.config({ensure:!0}),U=vM(_.mode)??g.mode,D=_.apiUrl?s$(_.apiUrl):g.hosted?.api_url?s$(g.hosted.api_url):null,I={...g,mode:U,hosted:{...g.hosted??{},...D?{api_url:D}:{}},storage:_.canonicalExample?TJ():g.storage};KJ($.configPath,I),this.cachedConfig=I;let j=mU(I,$,this.scope);return{ok:!0,mode:U,api_url:I.hosted?.api_url??null,storage_type:I.storage.type,artifact_uri_prefix:j.artifact_store.uri_prefix,canonical_example:j.canonical_example,config_path:$.configPath,next:U==="hosted"?["knowledge auth login --api-key ","knowledge storage status --json"]:["knowledge search ","knowledge "],message:`Set knowledge mode to ${U}`}}authStatus(_=process.env){return kz(this.config(),_)}saveAuth(_,$=process.env){let g=_.apiUrl??this.config().hosted?.api_url;return Zz({api_key:_.apiKey,email:_.email,org_id:_.orgId,org_slug:_.orgSlug,user_id:_.userId,api_url:g},$)}clearAuth(_=process.env){return Hz(_)}paths(){let _=this.workspace;return{ok:!0,scope:this.scope,home:_.home,exists:J_(_.home),config_path:_.configPath,config_exists:J_(_.configPath),json_store_path:_.jsonStorePath,json_store_exists:J_(_.jsonStorePath),knowledge_db_path:_.knowledgeDbPath,knowledge_db_exists:J_(_.knowledgeDbPath),artifacts_dir:_.artifactsDir,indexes_dir:_.indexesDir,logs_dir:_.logsDir,runs_dir:_.runsDir,schemas_dir:_.schemasDir,wiki_dir:_.wikiDir,config:this.config(),message:_.home}}initDb(){return c(this.ensureWorkspace().knowledgeDbPath)}dbStats(){nU("reading knowledge.db stats");let _=this.workspace;if(!J_(_.knowledgeDbPath))return o5();return gN(_.knowledgeDbPath)}enqueuePromotion(_){return oX(this.ensureWorkspace().knowledgeDbPath,_)}promotionInbox(_={}){return eX(this.ensureWorkspace().knowledgeDbPath,_)}getPromotion(_){return pX(this.ensureWorkspace().knowledgeDbPath,_)}reviewPromotion(_,$){return aX(this.ensureWorkspace().knowledgeDbPath,_,$)}promoteCandidate(_,$={}){return sX(this.ensureWorkspace().knowledgeDbPath,_,$)}rejectPromotion(_,$={}){return _5(this.ensureWorkspace().knowledgeDbPath,_,$)}durableRecords(_={}){return $5(this.ensureWorkspace().knowledgeDbPath,_)}itemOnlyInventory(_){let $=this.workspace,{items:g,limit:U,includeArchived:D,storePath:I,storeExists:j,storeReadError:E}=_,A=g.filter((z)=>z.archived!==!0),O=D?g:A,P=o5(),W={legacy_items:g.length,active_items:A.length,archived_items:g.length-A.length,schema_version:P.schema_version,sources:P.sources,source_revisions:P.source_revisions,chunks:P.chunks,wiki_pages:P.wiki_pages,citations:P.citations,indexes:P.indexes,runs:P.runs,run_events:P.run_events,storage_objects:P.storage_objects,embeddings:P.embeddings,vector_entries:P.vector_entries,reindex_queue:P.reindex_queue,redaction_findings:P.redaction_findings,audit_events:P.audit_events,approval_gates:P.approval_gates,knowledge_machines:P.knowledge_machines,sync_snapshots:P.sync_snapshots,sync_changes:P.sync_changes,sync_conflicts:P.sync_conflicts,sync_table_clocks:P.sync_table_clocks,sync_imports:P.sync_imports,promotion_candidates:P.promotion_candidates,durable_records:P.durable_records};return{ok:!0,scope:this.scope,home:$.home,limit:U,paths:{json_store_path:$.jsonStorePath,json_store_exists:J_($.jsonStorePath),knowledge_db_path:$.knowledgeDbPath,knowledge_db_exists:J_($.knowledgeDbPath),artifacts_dir:$.artifactsDir,indexes_dir:$.indexesDir,logs_dir:$.logsDir,wiki_dir:$.wikiDir},summary:W,legacy_store:{path:I,exists:j,read_error:E,total_items:g.length,active_items:A.length,archived_items:g.length-A.length,items_returned:Math.min(O.length,U)},items:O.slice(0,U).map(t5),sources:[],source_revisions:[],chunks:[],wiki_pages:[],indexes:[],storage_objects:[],runs:[],vector_indexes:[],reindex_queue:[],machines:[],sync_conflicts:[],approval_gates:[],audit_events:[],promotion_candidates:[],durable_records:[],message:`${g.length} item(s), 0 source(s), 0 chunk(s), 0 wiki page(s), 0 artifact(s)`}}async cloudInventory(_={}){let $=l5(_.limit),g=await this.fetchCloudItems(),U=u0();return this.itemOnlyInventory({items:g,limit:$,includeArchived:_.includeArchived??!1,storePath:U?.baseUrl??"cloud",storeExists:!0,storeReadError:null})}inventory(_={}){let $=this.workspace,g=l5(_.limit),U=_.storePath??$.jsonStorePath,D=TM(U),I=D.items.filter((P)=>P.archived!==!0),j=_.includeArchived?D.items:I;if(!J_($.knowledgeDbPath))return this.itemOnlyInventory({items:D.items,limit:g,includeArchived:_.includeArchived??!1,storePath:U,storeExists:D.exists,storeReadError:D.read_error});c($.knowledgeDbPath);let A=gN($.knowledgeDbPath),O=v($.knowledgeDbPath);try{let P=W$(t_(O,` SELECT s.id, s.uri, @@ -1178,7 +1178,7 @@ Pages should be concise, cited, and organized for both humans and agents. GROUP BY s.id ORDER BY s.updated_at DESC, s.created_at DESC LIMIT ? - `,[D]),["metadata_json","acl_json"]),z=S$(p_(A,` + `,[g]),["metadata_json","acl_json"]),W=W$(t_(O,` SELECT sr.id, s.uri AS source_uri, @@ -1191,7 +1191,7 @@ Pages should be concise, cited, and organized for both humans and agents. JOIN sources s ON s.id = sr.source_id ORDER BY sr.created_at DESC LIMIT ? - `,[D])),W=S$(p_(A,` + `,[g])),z=W$(t_(O,` SELECT c.id, c.kind, @@ -1212,22 +1212,22 @@ Pages should be concise, cited, and organized for both humans and agents. LEFT JOIN wiki_pages wp ON wp.id = c.wiki_page_id ORDER BY c.created_at DESC, c.ordinal ASC LIMIT ? - `,[D])),J=S$(p_(A,` + `,[g])),S=W$(t_(O,` SELECT id, path, title, artifact_uri, content_hash, status, metadata_json, created_at, updated_at FROM wiki_pages ORDER BY updated_at DESC, created_at DESC LIMIT ? - `,[D])),P=S$(p_(A,` + `,[g])),L=W$(t_(O,` SELECT id, kind, name, artifact_uri, shard_key, metadata_json, created_at, updated_at FROM knowledge_indexes ORDER BY updated_at DESC, created_at DESC LIMIT ? - `,[D])),S=S$(p_(A,` + `,[g])),J=W$(t_(O,` SELECT id, artifact_uri, kind, content_type, hash, size_bytes, metadata_json, created_at, updated_at FROM storage_objects ORDER BY updated_at DESC, created_at DESC LIMIT ? - `,[D])),X=S$(p_(A,` + `,[g])),R=W$(t_(O,` SELECT id, type, @@ -1243,18 +1243,18 @@ Pages should be concise, cited, and organized for both humans and agents. FROM runs ORDER BY updated_at DESC, created_at DESC LIMIT ? - `,[D])),G=p_(A,` + `,[g])),X=t_(O,` SELECT provider, model, dimensions, status, COUNT(*) AS entries FROM vector_index_entries GROUP BY provider, model, dimensions, status ORDER BY entries DESC LIMIT ? - `,[D]),R=S$(p_(A,` + `,[g]),G=W$(t_(O,` SELECT id, kind, target_id, source_uri, reason, status, attempts, metadata_json, created_at, updated_at FROM reindex_queue ORDER BY updated_at DESC, created_at DESC LIMIT ? - `,[D])),V=S$(p_(A,` + `,[g])),B=W$(t_(O,` SELECT machine_id, hostname, @@ -1272,7 +1272,7 @@ Pages should be concise, cited, and organized for both humans and agents. FROM knowledge_machines ORDER BY updated_at DESC, created_at DESC LIMIT ? - `,[D]),["tailscale_ips_json","capabilities_json","metadata_json"]),Q=S$(p_(A,` + `,[g]),["tailscale_ips_json","capabilities_json","metadata_json"]),Q=W$(t_(O,` SELECT id, entity_kind, @@ -1289,17 +1289,17 @@ Pages should be concise, cited, and organized for both humans and agents. FROM knowledge_sync_conflicts ORDER BY created_at DESC LIMIT ? - `,[D])),T=S$(p_(A,` + `,[g])),T=W$(t_(O,` SELECT id, action, target_uri, status, reason, approved_by, metadata_json, created_at, updated_at FROM approval_gates ORDER BY updated_at DESC, created_at DESC LIMIT ? - `,[D])),q=S$(p_(A,` + `,[g])),K=W$(t_(O,` SELECT id, event_type, action, target_uri, decision, metadata_json, created_at FROM audit_events ORDER BY created_at DESC LIMIT ? - `,[D])),K=p_(A,` + `,[g])),V=t_(O,` SELECT id, record_kind, @@ -1324,7 +1324,7 @@ Pages should be concise, cited, and organized for both humans and agents. FROM knowledge_promotion_candidates ORDER BY updated_at DESC, created_at DESC LIMIT ? - `,[D]).map(Ab),Z=p_(A,` + `,[g]).map(YM),F=t_(O,` SELECT id, record_kind, @@ -1346,17 +1346,17 @@ Pages should be concise, cited, and organized for both humans and agents. FROM durable_knowledge_records ORDER BY updated_at DESC, created_at DESC LIMIT ? - `,[D]).map(Lb),e={legacy_items:g.items.length,active_items:I.length,archived_items:g.items.length-I.length,schema_version:O.schema_version,sources:O.sources,source_revisions:O.source_revisions,chunks:O.chunks,wiki_pages:O.wiki_pages,citations:O.citations,indexes:O.indexes,runs:O.runs,run_events:O.run_events,storage_objects:O.storage_objects,embeddings:O.embeddings,vector_entries:O.vector_entries,reindex_queue:O.reindex_queue,redaction_findings:O.redaction_findings,audit_events:O.audit_events,approval_gates:O.approval_gates,knowledge_machines:O.knowledge_machines,sync_snapshots:O.sync_snapshots,sync_changes:O.sync_changes,sync_conflicts:O.sync_conflicts,sync_table_clocks:O.sync_table_clocks,sync_imports:O.sync_imports,promotion_candidates:O.promotion_candidates,durable_records:O.durable_records};return{ok:!0,scope:this.scope,home:$.home,limit:D,paths:{json_store_path:U,json_store_exists:g.exists,knowledge_db_path:$.knowledgeDbPath,knowledge_db_exists:!0,artifacts_dir:$.artifactsDir,indexes_dir:$.indexesDir,logs_dir:$.logsDir,wiki_dir:$.wikiDir},summary:e,legacy_store:{path:U,exists:g.exists,read_error:g.read_error,total_items:g.items.length,active_items:I.length,archived_items:g.items.length-I.length,items_returned:Math.min(j.length,D)},items:j.slice(0,D).map(n9),sources:L,source_revisions:z,chunks:W,wiki_pages:J,indexes:P,storage_objects:S,runs:X,vector_indexes:G,reindex_queue:R,machines:V,sync_conflicts:Q,approval_gates:T,audit_events:q,promotion_candidates:K,durable_records:Z,message:`${g.items.length} item(s), ${O.sources} source(s), ${O.chunks} chunk(s), ${O.wiki_pages} wiki page(s), ${O.storage_objects} artifact(s)`}}finally{A.close()}}assertAppWikiWrite(_){xD({scope:this.scope,workspace:this.workspace,safetyPolicy:this.safetyPolicy(),allowGlobal:_})}async initAppWiki(_={}){this.assertAppWikiWrite(_.allowGlobal);let $=this.ensureWorkspace();return UW({scope:this.scope,workspace:$,store:this.artifactStore(),safetyPolicy:this.safetyPolicy(),allowGlobal:_.allowGlobal})}async addAppWikiNote(_){this.assertAppWikiWrite(_.allowGlobal);let $=this.ensureWorkspace();return IW({scope:this.scope,workspace:$,store:this.artifactStore(),safetyPolicy:this.safetyPolicy(),allowGlobal:_.allowGlobal,title:_.title,content:_.content,tags:_.tags,sourceRefs:_.sourceRefs,path:_.path,metadata:_.metadata})}listAppWikiNotes(_={}){let $=this.workspace;if(!W_($.knowledgeDbPath))return[];return jW({dbPath:$.knowledgeDbPath,limit:_.limit})}async getAppWikiNote(_,$={}){let D=this.workspace;if(!W_(D.knowledgeDbPath))return null;return NW({dbPath:D.knowledgeDbPath,store:this.artifactStore(),id:_,includeContent:$.includeContent})}async addAppWikiSourceRef(_){this.assertAppWikiWrite(_.allowGlobal);let $=this.ensureWorkspace();return EW({scope:this.scope,workspace:$,sourceRef:_.sourceRef,purpose:_.purpose,config:this.config(),safetyPolicy:this.safetyPolicy(),allowGlobal:_.allowGlobal})}async searchAppWiki(_){return this.search(_)}async queryAppWiki(_){return this.retrieveContext(_)}async initWiki(){let _=this.ensureWorkspace();h(_.knowledgeDbPath);let $=await V9(this.artifactStore()),D=r(_.knowledgeDbPath);try{s$(D,$.artifacts),K9(D,$.artifacts)}finally{D.close()}return $}async compileWiki(_={}){let $=this.ensureWorkspace();return Q9({..._,dbPath:$.knowledgeDbPath,store:this.artifactStore()})}async fileAnswer(_){let $=this.ensureWorkspace(),D=await this.retrieveContext({query:_.prompt,limit:_.limit,semantic:_.semantic,modelRef:_.modelRef,dimensions:_.dimensions,fake:_.fake});return T9({dbPath:$.knowledgeDbPath,store:this.artifactStore(),prompt:_.prompt,answer:_.answer,context:D,approveWrite:_.approveWrite})}lintWiki(){let _=this.ensureWorkspace();return q9({dbPath:_.knowledgeDbPath})}async ingestManifest(_){let $=this.ensureWorkspace();return sS({dbPath:$.knowledgeDbPath,input:_,config:this.config(),safetyPolicy:this.safetyPolicy()})}async ingestSource(_,$){let D=this.ensureWorkspace();return eU({dbPath:D.knowledgeDbPath,sourceRef:_,purpose:$,config:this.config(),safetyPolicy:this.safetyPolicy()})}async importRulesProvenance(_={}){let $=_.dryRun!==!1,D=$?this.workspace:this.ensureWorkspace();return A9({root:_.root??this.options.cwd??process.cwd(),scope:this.scope,owner:_.owner,dryRun:$,deprecateLegacy:_.deprecateLegacy,includeLegacy:_.includeLegacy,legacyStorePath:D.jsonStorePath,dbPath:D.knowledgeDbPath,safetyPolicy:this.safetyPolicy(),maxItems:_.maxItems,limit:_.limit})}async resolveSource(_,$={}){let D=this.ensureWorkspace();return tU({dbPath:D.knowledgeDbPath,sourceRef:_,purpose:$.purpose,limit:$.limit,safetyPolicy:this.safetyPolicy()})}async consumeOutbox(_){let $=this.ensureWorkspace();return TR({dbPath:$.knowledgeDbPath,input:_,config:this.config(),safetyPolicy:this.safetyPolicy()})}reindexHealth(_={}){let $=this.workspace;if(!W_($.knowledgeDbPath))return Wb();return sR({..._,dbPath:$.knowledgeDbPath,config:this.config()})}enqueueReindex(_={}){let $=this.ensureWorkspace();return I3({..._,dbPath:$.knowledgeDbPath,config:this.config()})}async refreshEmbeddings(_={}){let $=this.ensureWorkspace();return _9({..._,dbPath:$.knowledgeDbPath,config:this.config()})}providerStatus(_=process.env){return PW(this.config(),_)}modelRegistry(){return XE(this.config())}embeddingStatus(){let _=this.workspace;if(!W_(_.knowledgeDbPath))return Xb();return GW(_.knowledgeDbPath)}async indexEmbeddings(_={}){let $=this.ensureWorkspace();return _I({..._,dbPath:$.knowledgeDbPath,config:this.config()})}isApiMode(){return Y6()}async fetchCloudItems(){let _=uD();if(!_)throw Error("knowledge: cloud store requested but not resolvable (check HASNA_KNOWLEDGE_API_URL + HASNA_KNOWLEDGE_API_KEY).");return hU(_)}async semanticSearch(_){let $=this.workspace;if(this.isApiMode()){let D=await this.fetchCloudItems(),U=await j4(D,{..._},["semantic_search_requires_local_catalog"]);return{provider:"openai",model:"text-embedding-3-small",dimensions:_.dimensions??1536,query:_.query,results:U.results}}if(!W_($.knowledgeDbPath))return{provider:"openai",model:"text-embedding-3-small",dimensions:_.dimensions??1536,query:_.query,results:[]};return $I({..._,dbPath:$.knowledgeDbPath,config:this.config()})}async search(_){let $=this.workspace;if(this.isApiMode()){let U=await this.fetchCloudItems();return j4(U,_)}let D=V3(this.scope,$,_.legacyStorePath);if(!W_($.knowledgeDbPath)){if(W_(D))return II({..._,legacyStorePath:D,config:this.config()});return $G(_.query,Math.max(1,Math.min(_.limit??10,100)),_.semantic===!0||_.fake===!0||Boolean(_.modelRef))}return UI({..._,dbPath:$.knowledgeDbPath,legacyStorePath:D,config:this.config()})}async retrieveContext(_){let $=this.workspace;if(this.isApiMode()){let U=await this.fetchCloudItems();return NI(U,_)}let D=V3(this.scope,$,_.legacyStorePath);if(!W_($.knowledgeDbPath)){if(W_(D)){let U=await II({..._,legacyStorePath:D,config:this.config()});return G0(U,{contextChars:_.contextChars})}return zb(_.query,Math.max(1,Math.min(_.limit??10,100)),_.semantic===!0||_.fake===!0||Boolean(_.modelRef))}return Y0({..._,dbPath:$.knowledgeDbPath,legacyStorePath:D,config:this.config()})}async contextPack(_){let $=this.workspace;if(this.isApiMode()){let U=(_.query??_.topic??"").trim();if(U&&_.source!=="loops"&&_.source!=="runs"){let g=await this.fetchCloudItems(),I=await j4(g,{..._,query:U}),j=G0(I,{contextChars:_.contextChars});return i9(_,j,this.safetyPolicy())}return l9(_)}let D=V3(this.scope,$,_.legacyStorePath);if(!W_($.knowledgeDbPath)){let U=(_.query??_.topic??"").trim();if(U&&_.source!=="loops"&&_.source!=="runs"&&W_(D)){let g=await II({..._,query:U,legacyStorePath:D,config:this.config()}),I=G0(g,{contextChars:_.contextChars});return i9(_,I,this.safetyPolicy())}return l9(_)}return oW({..._,dbPath:$.knowledgeDbPath,legacyStorePath:D,config:this.config(),safetyPolicy:this.safetyPolicy()})}async runPrompt(_){if(this.isApiMode()){let U=await this.fetchCloudItems();return yW(U,{..._,config:this.config()})}let $=this.ensureWorkspace(),D=_.legacyStorePath??$.jsonStorePath;if(!_.legacyStorePath)kD(D);return xW({..._,dbPath:$.knowledgeDbPath,legacyStorePath:D,config:this.config()})}async webSearch(_){let $=this.ensureWorkspace();return z9({..._,dbPath:$.knowledgeDbPath,config:this.config(),safetyPolicy:this.safetyPolicy()})}async machineTopology(_={}){let $=this.workspace;return wR({..._,knowledge:{scope:this.scope,workspace_home:$.home}})}async machinePreflight(_={}){let $=this.workspace;return yR({..._,knowledge:{scope:this.scope,workspace_home:$.home}})}syncStatus(){let _=this.workspace;if(!W_(_.knowledgeDbPath))return Rb({scope:this.scope,workspaceHome:_.home});return RX({dbPath:_.knowledgeDbPath,scope:this.scope,workspaceHome:_.home})}async syncDoctor(_={}){let $=this.ensureWorkspace();h($.knowledgeDbPath);let D=this.syncStatus(),U=this.storageContract(),g=this.validateStorage(),I=Gb($.knowledgeDbPath,U),j=_.machine?.trim()||null,N=_.peerWorkspace?.trim()||null,O=[],A=null,L=null;if(j&&!e9(j)){let S=await _3({machineId:j,includeTailscale:_.includeTailscale});A=B3(S),O.push(...S.warnings)}if(j||N){let S=await lj({machineId:j??q3($),peerWorkspace:N,includeTailscale:_.includeTailscale});if(j&&!N&&(A?.source==="raw"||!S.ok||!S.project_root)){let X=u9($.knowledgeDbPath,j);if(X){if(A?.source==="raw"&&X.ssh_target)A=B3(x9(X,j,{target:A.target,route:A.route,targetKind:A.target_kind,confidence:A.confidence,source:A.source,adapter:A.adapter,evidence:A.evidence,cacheability:A.cacheability,warnings:[]}));if(!S.ok||!S.project_root){let G=y9(X,j,S);if(G)L=LU(G,G.project_root),O.push(...G.warnings)}}}L=S.ok&&S.project_root?LU(S,S.project_root):L??{...LU(S,N??""),project_root:S.project_root??N??""},O.push(...S.warnings)}if(!g.ok)O.push(...g.errors.map((S)=>`storage:${S}`));let z=Nb($.knowledgeDbPath,L);if(!z.ok)O.push("open_files_boundary_raw_payload_sentinels");if(!I.ok)O.push(...I.warnings);let W=L?.diagnostics.filter((S)=>S.severity==="fail")??[],J=g.ok&&I.ok&&z.ok&&W.length===0&&(L?.project_root!==""||!L),P=Qb({scope:this.scope,machine:j,peerWorkspace:N,tables:_.tables,resolvedWorkspace:L,openConflicts:D.conflicts.open});return{ok:J,read_only:!0,generated_at:new Date().toISOString(),scope:this.scope,workspace_home:$.home,database:{sqlite_schema_version:D.sqlite_schema_version,table_counts:D.table_counts},storage:{contract:U,validation:g,artifact_manifest:I},sync:{machines:D.machines.total,snapshots:D.snapshots.total,clocks:D.clocks.total,imports:D.imports.total,open_conflicts:D.conflicts.open,table_clocks:D.clocks.rows},open_files:z,resolved_route:A,resolved_workspace:L,recommended_commands:P,warnings:[...new Set(O)],message:J?`Sync readiness ok: ${D.clocks.total} table clock(s), ${D.conflicts.open} open conflict(s)`:`Sync readiness needs attention: ${[...new Set(O)].join(", ")||"workspace diagnostics failed"}`}}repairArtifactManifestKeys(_={}){let $=this.ensureWorkspace();h($.knowledgeDbPath);let D=this.storageContract(),U=b3(D),g=Yb($.knowledgeDbPath,D),I=_.dryRun===!0||_.approveWrite!==!0;if(g.length===0)return{ok:!0,dry_run:I,approval_required:!1,storage_type:D.storage_type,storage_prefix:U,candidates:g,repaired:0,audit_event_id:null,message:"No legacy S3 artifact manifest keys found"};if(_.dryRun===!0)return{ok:!0,dry_run:!0,approval_required:!1,storage_type:D.storage_type,storage_prefix:U,candidates:g,repaired:0,audit_event_id:null,message:`Would repair ${g.length} legacy S3 artifact manifest key(s)`};if(_.approveWrite!==!0||!_.approvedBy)return{ok:!1,dry_run:!0,approval_required:!0,storage_type:D.storage_type,storage_prefix:U,candidates:g,repaired:0,audit_event_id:null,message:"Artifact key repair requires --approve-write and --approved-by "};let j=r($.knowledgeDbPath);try{let N=new Date().toISOString();j.transaction((L)=>{let z=j.query("UPDATE storage_objects SET metadata_json = ?, updated_at = ? WHERE id = ?"),W=j.query("SELECT id, metadata_json FROM storage_objects").all(),J=new Map(W.map((P)=>[P.id,c4(P.metadata_json)]));for(let P of L){let S=J.get(P.id)??{};S.key=P.repaired_key,z.run(JSON.stringify(S),N,P.id)}})(g);let A=X_(j,{event_type:"artifact_manifest_key_repair",action:"storage.artifact_manifest.repair_keys",target_uri:`knowledge-storage://${$.home}/storage_objects`,decision:"allow",metadata:{approved_by:_.approvedBy,repaired:g.length,storage_type:D.storage_type,storage_prefix:U,artifact_uris:g.map((L)=>L.artifact_uri)}});return{ok:!0,dry_run:!1,approval_required:!1,storage_type:D.storage_type,storage_prefix:U,candidates:g,repaired:g.length,audit_event_id:A,message:`Repaired ${g.length} legacy S3 artifact manifest key(s)`}}finally{j.close()}}async createSyncSnapshot(_={}){let $=this.ensureWorkspace(),D=await this.machineTopology({includeTailscale:_.includeTailscale!==!1});return XX({dbPath:$.knowledgeDbPath,scope:this.scope,workspaceHome:$.home,storage:this.storageContract(),topology:D,machineId:_.machineId})}syncConflicts(_={}){let $=this.workspace;if(!W_($.knowledgeDbPath))return[];return GX($.knowledgeDbPath,_)}syncConflict(_){let $=this.ensureWorkspace(),D=XI($.knowledgeDbPath,_);if(!D)throw Error(`Sync conflict not found: ${_}`);return D}proposeSyncConflictResolution(_){let $=this.ensureWorkspace();return oD($.knowledgeDbPath,_)}async proposeSyncConflictResolutionWithAi(_){let $=this.ensureWorkspace();return YR({dbPath:$.knowledgeDbPath,id:_.id,config:this.config(),modelRef:_.modelRef,fake:_.fake,env:_.env})}resolveSyncConflict(_){let $=this.ensureWorkspace(),D=oD($.knowledgeDbPath,_.id);if(_.approveWrite!==!0||!_.approvedBy)return{ok:!1,approval_required:!0,conflict:D.conflict,proposal:D,message:"Sync conflict resolution requires --approve-write and --approved-by "};let U=TX($.knowledgeDbPath,{id:_.id,strategy:_.strategy??D.proposed_strategy,approvedBy:_.approvedBy,proposedPatchUri:_.proposedPatchUri}),g=r($.knowledgeDbPath);try{let I=X_(g,{event_type:"sync_conflict_resolution",action:"sync.conflict.resolve",target_uri:`knowledge-sync-conflict://${_.id}`,decision:"allow",metadata:{conflict_id:_.id,entity_kind:U.entity_kind,entity_id:U.entity_id,strategy:U.resolution_strategy,approved_by:U.approved_by,proposed_patch_uri:U.proposed_patch_uri}});return{ok:!0,approval_required:!1,conflict:U,audit_event_id:I,message:`Resolved sync conflict ${_.id}`}}finally{g.close()}}syncMachines(){let _=this.workspace;if(!W_(_.knowledgeDbPath))return[];return fE(_.knowledgeDbPath)}exportSyncBundle(_={}){let $=this.ensureWorkspace();return this.assertStorageValid("sync export"),h($.knowledgeDbPath),tD({dbPath:$.knowledgeDbPath,scope:this.scope,workspaceHome:$.home,storage:this.storageContract(),machineId:_.machineId??null,tables:_.tables,includeArtifactContent:_.includeArtifactContent,recordClocks:_.recordClocks!==!1})}async importSyncBundle(_){let $=this.ensureWorkspace();return this.assertStorageValid("sync import"),h($.knowledgeDbPath),WI({targetDbPath:$.knowledgeDbPath,targetScope:this.scope,targetWorkspaceHome:$.home,targetStorage:this.storageContract(),targetStore:this.artifactStore(),bundle:_.bundle,direction:_.direction??"import",dryRun:_.dryRun,localMachineId:_.machineId??null})}async syncRemotePeer(_){let $=_.direction??"both",D=_.dryRun===!0,U=this.ensureWorkspace();h(U.knowledgeDbPath);let g=_.tables?.length?["--tables",_.tables.join(",")]:[],I=_.includeArtifactContent===!1?["--no-artifact-content"]:[],j=["--scope",this.scope,"--json"],N=await _3({machineId:_.machine,includeTailscale:_.includeTailscale}),O=await lj({machineId:_.machine,peerWorkspace:_.peerWorkspace,includeTailscale:_.includeTailscale});if(!_.peerWorkspace&&N.source==="raw"||!O.ok||!O.project_root){let J=u9(U.knowledgeDbPath,_.machine);if(J){if(!_.peerWorkspace&&N.source==="raw"&&J.ssh_target)N=x9(J,_.machine,N);if(!O.ok||!O.project_root){let P=y9(J,_.machine,O);if(P)O=P}}}if(!O.ok||!O.project_root)throw Error([`Unable to resolve peer workspace for ${_.machine}.`,"Pass --peer-workspace or configure workspace path mapping in machines.",O.warnings.length?`Warnings: ${O.warnings.join(", ")}`:null].filter(Boolean).join(" "));let A=O.project_root,L={ok:!0,dry_run:D,direction:$,transport:"ssh",machine:_.machine,resolved_machine:N.target,resolved_route:B3(N),resolved_workspace:LU(O,O.project_root),peer_workspace:A,message:""},z=!1,W=()=>{if(D||z)return;zX(U.knowledgeDbPath,{machineId:_.machine,route:N,workspace:O}),z=!0};if($==="pull"||$==="both"){let J=w9(A,["sync","export",...j,...g,...I]),P=t9(_.machine,J,void 0,N),S=o9(_.machine,"sync export",P);qb(_.machine,S),L.pull=await this.importSyncBundle({bundle:S,dryRun:D,direction:"pull",machineId:_.machineId??null})}if($==="push"||$==="both"){W();let J=this.exportSyncBundle({machineId:_.machineId??null,tables:_.tables,includeArtifactContent:_.includeArtifactContent,recordClocks:!D}),P=w9(A,["sync","import",...j,...D?["--dry-run"]:[]]),S=o9(_.machine,"sync import",t9(_.machine,P,JSON.stringify(J),N));Bb(_.machine,S),L.push=S}return L.ok=(L.pull?.ok??!0)&&(L.push?.ok??!0),W(),L.message=[h9(L.resolved_workspace),L.pull?`pull: ${L.pull.message}`:null,L.push?`push: ${L.push.message}`:null].filter(Boolean).join("; "),L}async syncPeer(_){let $=_.direction??"both",D=this.ensureWorkspace();h(D.knowledgeDbPath);let U=p9(_.peerWorkspace),g=sZ(U);h(g.knowledgeDbPath);let I=ZN(g.configPath),j=mU(I,g,this.scope),N=gE(I,g),O=_.machineId??q3(D),A=q3(g),L=await lj({machineId:_.machineId??A,peerWorkspace:U,includeTailscale:!1}),z=()=>tD({dbPath:D.knowledgeDbPath,scope:this.scope,workspaceHome:D.home,storage:this.storageContract(),machineId:O,tables:_.tables,includeArtifactContent:_.includeArtifactContent,recordClocks:_.dryRun!==!0}),W=()=>tD({dbPath:g.knowledgeDbPath,scope:this.scope,workspaceHome:g.home,storage:j,machineId:A,tables:_.tables,includeArtifactContent:_.includeArtifactContent,recordClocks:_.dryRun!==!0}),J={ok:!0,dry_run:_.dryRun===!0,direction:$,resolved_workspace:LU(L,L.project_root??U),message:""};if($==="pull"||$==="both")J.pull=await WI({targetDbPath:D.knowledgeDbPath,targetScope:this.scope,targetWorkspaceHome:D.home,targetStorage:this.storageContract(),targetStore:this.artifactStore(),bundle:W(),targetBundle:z(),direction:"pull",dryRun:_.dryRun,localMachineId:O});if($==="push"||$==="both")J.push=await WI({targetDbPath:g.knowledgeDbPath,targetScope:this.scope,targetWorkspaceHome:g.home,targetStorage:j,targetStore:N,bundle:z(),targetBundle:W(),direction:"push",dryRun:_.dryRun,localMachineId:A});return J.ok=(J.pull?.ok??!0)&&(J.push?.ok??!0),J.message=[h9(J.resolved_workspace),J.pull?`pull: ${J.pull.message}`:null,J.push?`push: ${J.push.message}`:null].filter(Boolean).join("; "),J}}function IN(_={}){return new DG(_)}import{createHash as gG}from"crypto";var Kb=Object.defineProperty,Fb=(_)=>_;function Mb(_,$){this[_]=Fb.bind(null,$)}var Zb=(_,$)=>{for(var D in $)Kb(_,D,{get:$[D],enumerable:!0,configurable:!0,set:Mb.bind($,D)})},E={};Zb(E,{void:()=>PH,util:()=>U_,unknown:()=>LH,union:()=>XH,undefined:()=>EH,tuple:()=>YH,transformer:()=>jG,symbol:()=>NH,string:()=>YG,strictObject:()=>WH,setErrorMap:()=>kb,set:()=>qH,record:()=>QH,quotelessJson:()=>bb,promise:()=>ZH,preprocess:()=>kH,pipeline:()=>CH,ostring:()=>vH,optional:()=>bH,onumber:()=>rH,oboolean:()=>fH,objectUtil:()=>C3,object:()=>SH,number:()=>QG,nullable:()=>HH,null:()=>OH,never:()=>JH,nativeEnum:()=>MH,nan:()=>UH,map:()=>TH,makeIssue:()=>EN,literal:()=>KH,lazy:()=>VH,late:()=>DH,isValid:()=>n4,isDirty:()=>r3,isAsync:()=>SU,isAborted:()=>v3,intersection:()=>GH,instanceof:()=>gH,getParsedType:()=>P6,getErrorMap:()=>NN,function:()=>BH,enum:()=>FH,effect:()=>jG,discriminatedUnion:()=>RH,defaultErrorMap:()=>OD,datetimeRegex:()=>XG,date:()=>jH,custom:()=>GG,coerce:()=>wH,boolean:()=>TG,bigint:()=>IH,array:()=>zH,any:()=>AH,addIssueToContext:()=>u,ZodVoid:()=>XU,ZodUnknown:()=>m6,ZodUnion:()=>PD,ZodUndefined:()=>LD,ZodType:()=>__,ZodTuple:()=>d$,ZodTransformer:()=>R$,ZodSymbol:()=>WU,ZodString:()=>F$,ZodSet:()=>i4,ZodSchema:()=>__,ZodRecord:()=>RU,ZodReadonly:()=>YD,ZodPromise:()=>l4,ZodPipeline:()=>QU,ZodParsedType:()=>y,ZodOptional:()=>Z$,ZodObject:()=>b_,ZodNumber:()=>i6,ZodNullable:()=>z6,ZodNull:()=>JD,ZodNever:()=>n$,ZodNativeEnum:()=>XD,ZodNaN:()=>YU,ZodMap:()=>GU,ZodLiteral:()=>WD,ZodLazy:()=>SD,ZodIssueCode:()=>k,ZodIntersection:()=>zD,ZodFunction:()=>ND,ZodFirstPartyTypeKind:()=>i,ZodError:()=>O$,ZodEnum:()=>t6,ZodEffects:()=>R$,ZodDiscriminatedUnion:()=>LN,ZodDefault:()=>RD,ZodDate:()=>d4,ZodCatch:()=>GD,ZodBranded:()=>JN,ZodBoolean:()=>AD,ZodBigInt:()=>l6,ZodArray:()=>M$,ZodAny:()=>m4,Schema:()=>__,ParseStatus:()=>m_,OK:()=>a_,NEVER:()=>uH,INVALID:()=>m,EMPTY_PATH:()=>Cb,DIRTY:()=>jD,BRAND:()=>$H});var U_;(function(_){_.assertEqual=(g)=>{};function $(g){}_.assertIs=$;function D(g){throw Error()}_.assertNever=D,_.arrayToEnum=(g)=>{let I={};for(let j of g)I[j]=j;return I},_.getValidEnumValues=(g)=>{let I=_.objectKeys(g).filter((N)=>typeof g[g[N]]!=="number"),j={};for(let N of I)j[N]=g[N];return _.objectValues(j)},_.objectValues=(g)=>{return _.objectKeys(g).map(function(I){return g[I]})},_.objectKeys=typeof Object.keys==="function"?(g)=>Object.keys(g):(g)=>{let I=[];for(let j in g)if(Object.prototype.hasOwnProperty.call(g,j))I.push(j);return I},_.find=(g,I)=>{for(let j of g)if(I(j))return j;return},_.isInteger=typeof Number.isInteger==="function"?(g)=>Number.isInteger(g):(g)=>typeof g==="number"&&Number.isFinite(g)&&Math.floor(g)===g;function U(g,I=" | "){return g.map((j)=>typeof j==="string"?`'${j}'`:j).join(I)}_.joinValues=U,_.jsonStringifyReplacer=(g,I)=>{if(typeof I==="bigint")return I.toString();return I}})(U_||(U_={}));var C3;(function(_){_.mergeShapes=($,D)=>{return{...$,...D}}})(C3||(C3={}));var y=U_.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),P6=(_)=>{switch(typeof _){case"undefined":return y.undefined;case"string":return y.string;case"number":return Number.isNaN(_)?y.nan:y.number;case"boolean":return y.boolean;case"function":return y.function;case"bigint":return y.bigint;case"symbol":return y.symbol;case"object":if(Array.isArray(_))return y.array;if(_===null)return y.null;if(_.then&&typeof _.then==="function"&&_.catch&&typeof _.catch==="function")return y.promise;if(typeof Map<"u"&&_ instanceof Map)return y.map;if(typeof Set<"u"&&_ instanceof Set)return y.set;if(typeof Date<"u"&&_ instanceof Date)return y.date;return y.object;default:return y.unknown}},k=U_.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),bb=(_)=>{return JSON.stringify(_,null,2).replace(/"([^"]+)":/g,"$1:")};class O$ extends Error{get errors(){return this.issues}constructor(_){super();this.issues=[],this.addIssue=(D)=>{this.issues=[...this.issues,D]},this.addIssues=(D=[])=>{this.issues=[...this.issues,...D]};let $=new.target.prototype;if(Object.setPrototypeOf)Object.setPrototypeOf(this,$);else this.__proto__=$;this.name="ZodError",this.issues=_}format(_){let $=_||function(g){return g.message},D={_errors:[]},U=(g)=>{for(let I of g.issues)if(I.code==="invalid_union")I.unionErrors.map(U);else if(I.code==="invalid_return_type")U(I.returnTypeError);else if(I.code==="invalid_arguments")U(I.argumentsError);else if(I.path.length===0)D._errors.push($(I));else{let j=D,N=0;while(N$.message){let $={},D=[];for(let U of this.issues)if(U.path.length>0){let g=U.path[0];$[g]=$[g]||[],$[g].push(_(U))}else D.push(_(U));return{formErrors:D,fieldErrors:$}}get formErrors(){return this.flatten()}}O$.create=(_)=>{return new O$(_)};var Hb=(_,$)=>{let D;switch(_.code){case k.invalid_type:if(_.received===y.undefined)D="Required";else D=`Expected ${_.expected}, received ${_.received}`;break;case k.invalid_literal:D=`Invalid literal value, expected ${JSON.stringify(_.expected,U_.jsonStringifyReplacer)}`;break;case k.unrecognized_keys:D=`Unrecognized key(s) in object: ${U_.joinValues(_.keys,", ")}`;break;case k.invalid_union:D="Invalid input";break;case k.invalid_union_discriminator:D=`Invalid discriminator value. Expected ${U_.joinValues(_.options)}`;break;case k.invalid_enum_value:D=`Invalid enum value. Expected ${U_.joinValues(_.options)}, received '${_.received}'`;break;case k.invalid_arguments:D="Invalid function arguments";break;case k.invalid_return_type:D="Invalid function return type";break;case k.invalid_date:D="Invalid date";break;case k.invalid_string:if(typeof _.validation==="object")if("includes"in _.validation){if(D=`Invalid input: must include "${_.validation.includes}"`,typeof _.validation.position==="number")D=`${D} at one or more positions greater than or equal to ${_.validation.position}`}else if("startsWith"in _.validation)D=`Invalid input: must start with "${_.validation.startsWith}"`;else if("endsWith"in _.validation)D=`Invalid input: must end with "${_.validation.endsWith}"`;else U_.assertNever(_.validation);else if(_.validation!=="regex")D=`Invalid ${_.validation}`;else D="Invalid";break;case k.too_small:if(_.type==="array")D=`Array must contain ${_.exact?"exactly":_.inclusive?"at least":"more than"} ${_.minimum} element(s)`;else if(_.type==="string")D=`String must contain ${_.exact?"exactly":_.inclusive?"at least":"over"} ${_.minimum} character(s)`;else if(_.type==="number")D=`Number must be ${_.exact?"exactly equal to ":_.inclusive?"greater than or equal to ":"greater than "}${_.minimum}`;else if(_.type==="bigint")D=`Number must be ${_.exact?"exactly equal to ":_.inclusive?"greater than or equal to ":"greater than "}${_.minimum}`;else if(_.type==="date")D=`Date must be ${_.exact?"exactly equal to ":_.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(_.minimum))}`;else D="Invalid input";break;case k.too_big:if(_.type==="array")D=`Array must contain ${_.exact?"exactly":_.inclusive?"at most":"less than"} ${_.maximum} element(s)`;else if(_.type==="string")D=`String must contain ${_.exact?"exactly":_.inclusive?"at most":"under"} ${_.maximum} character(s)`;else if(_.type==="number")D=`Number must be ${_.exact?"exactly":_.inclusive?"less than or equal to":"less than"} ${_.maximum}`;else if(_.type==="bigint")D=`BigInt must be ${_.exact?"exactly":_.inclusive?"less than or equal to":"less than"} ${_.maximum}`;else if(_.type==="date")D=`Date must be ${_.exact?"exactly":_.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(_.maximum))}`;else D="Invalid input";break;case k.custom:D="Invalid input";break;case k.invalid_intersection_types:D="Intersection results could not be merged";break;case k.not_multiple_of:D=`Number must be a multiple of ${_.multipleOf}`;break;case k.not_finite:D="Number must be finite";break;default:D=$.defaultError,U_.assertNever(_)}return{message:D}},OD=Hb,zG=OD;function kb(_){zG=_}function NN(){return zG}var EN=(_)=>{let{data:$,path:D,errorMaps:U,issueData:g}=_,I=[...D,...g.path||[]],j={...g,path:I};if(g.message!==void 0)return{...g,path:I,message:g.message};let N="",O=U.filter((A)=>!!A).slice().reverse();for(let A of O)N=A(j,{data:$,defaultError:N}).message;return{...g,path:I,message:N}},Cb=[];function u(_,$){let D=NN(),U=EN({issueData:$,data:_.data,path:_.path,errorMaps:[_.common.contextualErrorMap,_.schemaErrorMap,D,D===OD?void 0:OD].filter((g)=>!!g)});_.common.issues.push(U)}class m_{constructor(){this.value="valid"}dirty(){if(this.value==="valid")this.value="dirty"}abort(){if(this.value!=="aborted")this.value="aborted"}static mergeArray(_,$){let D=[];for(let U of $){if(U.status==="aborted")return m;if(U.status==="dirty")_.dirty();D.push(U.value)}return{status:_.value,value:D}}static async mergeObjectAsync(_,$){let D=[];for(let U of $){let g=await U.key,I=await U.value;D.push({key:g,value:I})}return m_.mergeObjectSync(_,D)}static mergeObjectSync(_,$){let D={};for(let U of $){let{key:g,value:I}=U;if(g.status==="aborted")return m;if(I.status==="aborted")return m;if(g.status==="dirty")_.dirty();if(I.status==="dirty")_.dirty();if(g.value!=="__proto__"&&(typeof I.value<"u"||U.alwaysSet))D[g.value]=I.value}return{status:_.value,value:D}}}var m=Object.freeze({status:"aborted"}),jD=(_)=>({status:"dirty",value:_}),a_=(_)=>({status:"valid",value:_}),v3=(_)=>_.status==="aborted",r3=(_)=>_.status==="dirty",n4=(_)=>_.status==="valid",SU=(_)=>typeof Promise<"u"&&_ instanceof Promise,n;(function(_){_.errToObj=($)=>typeof $==="string"?{message:$}:$||{},_.toString=($)=>typeof $==="string"?$:$?.message})(n||(n={}));class b${constructor(_,$,D,U){this._cachedPath=[],this.parent=_,this.data=$,this._path=D,this._key=U}get path(){if(!this._cachedPath.length)if(Array.isArray(this._key))this._cachedPath.push(...this._path,...this._key);else this._cachedPath.push(...this._path,this._key);return this._cachedPath}}var UG=(_,$)=>{if(n4($))return{success:!0,data:$.value};else{if(!_.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let D=new O$(_.common.issues);return this._error=D,this._error}}}};function p(_){if(!_)return{};let{errorMap:$,invalid_type_error:D,required_error:U,description:g}=_;if($&&(D||U))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if($)return{errorMap:$,description:g};return{errorMap:(j,N)=>{let{message:O}=_;if(j.code==="invalid_enum_value")return{message:O??N.defaultError};if(typeof N.data>"u")return{message:O??U??N.defaultError};if(j.code!=="invalid_type")return{message:N.defaultError};return{message:O??D??N.defaultError}},description:g}}class __{get description(){return this._def.description}_getType(_){return P6(_.data)}_getOrReturnCtx(_,$){return $||{common:_.parent.common,data:_.data,parsedType:P6(_.data),schemaErrorMap:this._def.errorMap,path:_.path,parent:_.parent}}_processInputParams(_){return{status:new m_,ctx:{common:_.parent.common,data:_.data,parsedType:P6(_.data),schemaErrorMap:this._def.errorMap,path:_.path,parent:_.parent}}}_parseSync(_){let $=this._parse(_);if(SU($))throw Error("Synchronous parse encountered promise.");return $}_parseAsync(_){let $=this._parse(_);return Promise.resolve($)}parse(_,$){let D=this.safeParse(_,$);if(D.success)return D.data;throw D.error}safeParse(_,$){let D={common:{issues:[],async:$?.async??!1,contextualErrorMap:$?.errorMap},path:$?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:_,parsedType:P6(_)},U=this._parseSync({data:_,path:D.path,parent:D});return UG(D,U)}"~validate"(_){let $={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:_,parsedType:P6(_)};if(!this["~standard"].async)try{let D=this._parseSync({data:_,path:[],parent:$});return n4(D)?{value:D.value}:{issues:$.common.issues}}catch(D){if(D?.message?.toLowerCase()?.includes("encountered"))this["~standard"].async=!0;$.common={issues:[],async:!0}}return this._parseAsync({data:_,path:[],parent:$}).then((D)=>n4(D)?{value:D.value}:{issues:$.common.issues})}async parseAsync(_,$){let D=await this.safeParseAsync(_,$);if(D.success)return D.data;throw D.error}async safeParseAsync(_,$){let D={common:{issues:[],contextualErrorMap:$?.errorMap,async:!0},path:$?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:_,parsedType:P6(_)},U=this._parse({data:_,path:D.path,parent:D}),g=await(SU(U)?U:Promise.resolve(U));return UG(D,g)}refine(_,$){let D=(U)=>{if(typeof $==="string"||typeof $>"u")return{message:$};else if(typeof $==="function")return $(U);else return $};return this._refinement((U,g)=>{let I=_(U),j=()=>g.addIssue({code:k.custom,...D(U)});if(typeof Promise<"u"&&I instanceof Promise)return I.then((N)=>{if(!N)return j(),!1;else return!0});if(!I)return j(),!1;else return!0})}refinement(_,$){return this._refinement((D,U)=>{if(!_(D))return U.addIssue(typeof $==="function"?$(D,U):$),!1;else return!0})}_refinement(_){return new R$({schema:this,typeName:i.ZodEffects,effect:{type:"refinement",refinement:_}})}superRefine(_){return this._refinement(_)}constructor(_){this.spa=this.safeParseAsync,this._def=_,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:($)=>this["~validate"]($)}}optional(){return Z$.create(this,this._def)}nullable(){return z6.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return M$.create(this)}promise(){return l4.create(this,this._def)}or(_){return PD.create([this,_],this._def)}and(_){return zD.create(this,_,this._def)}transform(_){return new R$({...p(this._def),schema:this,typeName:i.ZodEffects,effect:{type:"transform",transform:_}})}default(_){let $=typeof _==="function"?_:()=>_;return new RD({...p(this._def),innerType:this,defaultValue:$,typeName:i.ZodDefault})}brand(){return new JN({typeName:i.ZodBranded,type:this,...p(this._def)})}catch(_){let $=typeof _==="function"?_:()=>_;return new GD({...p(this._def),innerType:this,catchValue:$,typeName:i.ZodCatch})}describe(_){return new this.constructor({...this._def,description:_})}pipe(_){return QU.create(this,_)}readonly(){return YD.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}var vb=/^c[^\s-]{8,}$/i,rb=/^[0-9a-z]+$/,fb=/^[0-9A-HJKMNP-TV-Z]{26}$/i,wb=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,ub=/^[a-z0-9_-]{21}$/i,xb=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,yb=/^[-+]?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)?)??$/,hb=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,cb="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",H3,nb=/^(?:(?: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])$/,db=/^(?:(?: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])\/(3[0-2]|[12]?[0-9])$/,mb=/^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,ib=/^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,lb=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,tb=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,SG="((\\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])))",ob=new RegExp(`^${SG}$`);function WG(_){let $="[0-5]\\d";if(_.precision)$=`${$}\\.\\d{${_.precision}}`;else if(_.precision==null)$=`${$}(\\.\\d+)?`;let D=_.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${$})${D}`}function pb(_){return new RegExp(`^${WG(_)}$`)}function XG(_){let $=`${SG}T${WG(_)}`,D=[];if(D.push(_.local?"Z?":"Z"),_.offset)D.push("([+-]\\d{2}:?\\d{2})");return $=`${$}(${D.join("|")})`,new RegExp(`^${$}$`)}function eb(_,$){if(($==="v4"||!$)&&nb.test(_))return!0;if(($==="v6"||!$)&&mb.test(_))return!0;return!1}function ab(_,$){if(!xb.test(_))return!1;try{let[D]=_.split(".");if(!D)return!1;let U=D.replace(/-/g,"+").replace(/_/g,"/").padEnd(D.length+(4-D.length%4)%4,"="),g=JSON.parse(atob(U));if(typeof g!=="object"||g===null)return!1;if("typ"in g&&g?.typ!=="JWT")return!1;if(!g.alg)return!1;if($&&g.alg!==$)return!1;return!0}catch{return!1}}function sb(_,$){if(($==="v4"||!$)&&db.test(_))return!0;if(($==="v6"||!$)&&ib.test(_))return!0;return!1}class F$ extends __{_parse(_){if(this._def.coerce)_.data=String(_.data);if(this._getType(_)!==y.string){let g=this._getOrReturnCtx(_);return u(g,{code:k.invalid_type,expected:y.string,received:g.parsedType}),m}let D=new m_,U=void 0;for(let g of this._def.checks)if(g.kind==="min"){if(_.data.lengthg.value)U=this._getOrReturnCtx(_,U),u(U,{code:k.too_big,maximum:g.value,type:"string",inclusive:!0,exact:!1,message:g.message}),D.dirty()}else if(g.kind==="length"){let I=_.data.length>g.value,j=_.data.length_.test(U),{validation:$,code:k.invalid_string,...n.errToObj(D)})}_addCheck(_){return new F$({...this._def,checks:[...this._def.checks,_]})}email(_){return this._addCheck({kind:"email",...n.errToObj(_)})}url(_){return this._addCheck({kind:"url",...n.errToObj(_)})}emoji(_){return this._addCheck({kind:"emoji",...n.errToObj(_)})}uuid(_){return this._addCheck({kind:"uuid",...n.errToObj(_)})}nanoid(_){return this._addCheck({kind:"nanoid",...n.errToObj(_)})}cuid(_){return this._addCheck({kind:"cuid",...n.errToObj(_)})}cuid2(_){return this._addCheck({kind:"cuid2",...n.errToObj(_)})}ulid(_){return this._addCheck({kind:"ulid",...n.errToObj(_)})}base64(_){return this._addCheck({kind:"base64",...n.errToObj(_)})}base64url(_){return this._addCheck({kind:"base64url",...n.errToObj(_)})}jwt(_){return this._addCheck({kind:"jwt",...n.errToObj(_)})}ip(_){return this._addCheck({kind:"ip",...n.errToObj(_)})}cidr(_){return this._addCheck({kind:"cidr",...n.errToObj(_)})}datetime(_){if(typeof _==="string")return this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:_});return this._addCheck({kind:"datetime",precision:typeof _?.precision>"u"?null:_?.precision,offset:_?.offset??!1,local:_?.local??!1,...n.errToObj(_?.message)})}date(_){return this._addCheck({kind:"date",message:_})}time(_){if(typeof _==="string")return this._addCheck({kind:"time",precision:null,message:_});return this._addCheck({kind:"time",precision:typeof _?.precision>"u"?null:_?.precision,...n.errToObj(_?.message)})}duration(_){return this._addCheck({kind:"duration",...n.errToObj(_)})}regex(_,$){return this._addCheck({kind:"regex",regex:_,...n.errToObj($)})}includes(_,$){return this._addCheck({kind:"includes",value:_,position:$?.position,...n.errToObj($?.message)})}startsWith(_,$){return this._addCheck({kind:"startsWith",value:_,...n.errToObj($)})}endsWith(_,$){return this._addCheck({kind:"endsWith",value:_,...n.errToObj($)})}min(_,$){return this._addCheck({kind:"min",value:_,...n.errToObj($)})}max(_,$){return this._addCheck({kind:"max",value:_,...n.errToObj($)})}length(_,$){return this._addCheck({kind:"length",value:_,...n.errToObj($)})}nonempty(_){return this.min(1,n.errToObj(_))}trim(){return new F$({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new F$({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new F$({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find((_)=>_.kind==="datetime")}get isDate(){return!!this._def.checks.find((_)=>_.kind==="date")}get isTime(){return!!this._def.checks.find((_)=>_.kind==="time")}get isDuration(){return!!this._def.checks.find((_)=>_.kind==="duration")}get isEmail(){return!!this._def.checks.find((_)=>_.kind==="email")}get isURL(){return!!this._def.checks.find((_)=>_.kind==="url")}get isEmoji(){return!!this._def.checks.find((_)=>_.kind==="emoji")}get isUUID(){return!!this._def.checks.find((_)=>_.kind==="uuid")}get isNANOID(){return!!this._def.checks.find((_)=>_.kind==="nanoid")}get isCUID(){return!!this._def.checks.find((_)=>_.kind==="cuid")}get isCUID2(){return!!this._def.checks.find((_)=>_.kind==="cuid2")}get isULID(){return!!this._def.checks.find((_)=>_.kind==="ulid")}get isIP(){return!!this._def.checks.find((_)=>_.kind==="ip")}get isCIDR(){return!!this._def.checks.find((_)=>_.kind==="cidr")}get isBase64(){return!!this._def.checks.find((_)=>_.kind==="base64")}get isBase64url(){return!!this._def.checks.find((_)=>_.kind==="base64url")}get minLength(){let _=null;for(let $ of this._def.checks)if($.kind==="min"){if(_===null||$.value>_)_=$.value}return _}get maxLength(){let _=null;for(let $ of this._def.checks)if($.kind==="max"){if(_===null||$.value<_)_=$.value}return _}}F$.create=(_)=>{return new F$({checks:[],typeName:i.ZodString,coerce:_?.coerce??!1,...p(_)})};function _H(_,$){let D=(_.toString().split(".")[1]||"").length,U=($.toString().split(".")[1]||"").length,g=D>U?D:U,I=Number.parseInt(_.toFixed(g).replace(".","")),j=Number.parseInt($.toFixed(g).replace(".",""));return I%j/10**g}class i6 extends __{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(_){if(this._def.coerce)_.data=Number(_.data);if(this._getType(_)!==y.number){let g=this._getOrReturnCtx(_);return u(g,{code:k.invalid_type,expected:y.number,received:g.parsedType}),m}let D=void 0,U=new m_;for(let g of this._def.checks)if(g.kind==="int"){if(!U_.isInteger(_.data))D=this._getOrReturnCtx(_,D),u(D,{code:k.invalid_type,expected:"integer",received:"float",message:g.message}),U.dirty()}else if(g.kind==="min"){if(g.inclusive?_.datag.value:_.data>=g.value)D=this._getOrReturnCtx(_,D),u(D,{code:k.too_big,maximum:g.value,type:"number",inclusive:g.inclusive,exact:!1,message:g.message}),U.dirty()}else if(g.kind==="multipleOf"){if(_H(_.data,g.value)!==0)D=this._getOrReturnCtx(_,D),u(D,{code:k.not_multiple_of,multipleOf:g.value,message:g.message}),U.dirty()}else if(g.kind==="finite"){if(!Number.isFinite(_.data))D=this._getOrReturnCtx(_,D),u(D,{code:k.not_finite,message:g.message}),U.dirty()}else U_.assertNever(g);return{status:U.value,value:_.data}}gte(_,$){return this.setLimit("min",_,!0,n.toString($))}gt(_,$){return this.setLimit("min",_,!1,n.toString($))}lte(_,$){return this.setLimit("max",_,!0,n.toString($))}lt(_,$){return this.setLimit("max",_,!1,n.toString($))}setLimit(_,$,D,U){return new i6({...this._def,checks:[...this._def.checks,{kind:_,value:$,inclusive:D,message:n.toString(U)}]})}_addCheck(_){return new i6({...this._def,checks:[...this._def.checks,_]})}int(_){return this._addCheck({kind:"int",message:n.toString(_)})}positive(_){return this._addCheck({kind:"min",value:0,inclusive:!1,message:n.toString(_)})}negative(_){return this._addCheck({kind:"max",value:0,inclusive:!1,message:n.toString(_)})}nonpositive(_){return this._addCheck({kind:"max",value:0,inclusive:!0,message:n.toString(_)})}nonnegative(_){return this._addCheck({kind:"min",value:0,inclusive:!0,message:n.toString(_)})}multipleOf(_,$){return this._addCheck({kind:"multipleOf",value:_,message:n.toString($)})}finite(_){return this._addCheck({kind:"finite",message:n.toString(_)})}safe(_){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:n.toString(_)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:n.toString(_)})}get minValue(){let _=null;for(let $ of this._def.checks)if($.kind==="min"){if(_===null||$.value>_)_=$.value}return _}get maxValue(){let _=null;for(let $ of this._def.checks)if($.kind==="max"){if(_===null||$.value<_)_=$.value}return _}get isInt(){return!!this._def.checks.find((_)=>_.kind==="int"||_.kind==="multipleOf"&&U_.isInteger(_.value))}get isFinite(){let _=null,$=null;for(let D of this._def.checks)if(D.kind==="finite"||D.kind==="int"||D.kind==="multipleOf")return!0;else if(D.kind==="min"){if($===null||D.value>$)$=D.value}else if(D.kind==="max"){if(_===null||D.value<_)_=D.value}return Number.isFinite($)&&Number.isFinite(_)}}i6.create=(_)=>{return new i6({checks:[],typeName:i.ZodNumber,coerce:_?.coerce||!1,...p(_)})};class l6 extends __{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte}_parse(_){if(this._def.coerce)try{_.data=BigInt(_.data)}catch{return this._getInvalidInput(_)}if(this._getType(_)!==y.bigint)return this._getInvalidInput(_);let D=void 0,U=new m_;for(let g of this._def.checks)if(g.kind==="min"){if(g.inclusive?_.datag.value:_.data>=g.value)D=this._getOrReturnCtx(_,D),u(D,{code:k.too_big,type:"bigint",maximum:g.value,inclusive:g.inclusive,message:g.message}),U.dirty()}else if(g.kind==="multipleOf"){if(_.data%g.value!==BigInt(0))D=this._getOrReturnCtx(_,D),u(D,{code:k.not_multiple_of,multipleOf:g.value,message:g.message}),U.dirty()}else U_.assertNever(g);return{status:U.value,value:_.data}}_getInvalidInput(_){let $=this._getOrReturnCtx(_);return u($,{code:k.invalid_type,expected:y.bigint,received:$.parsedType}),m}gte(_,$){return this.setLimit("min",_,!0,n.toString($))}gt(_,$){return this.setLimit("min",_,!1,n.toString($))}lte(_,$){return this.setLimit("max",_,!0,n.toString($))}lt(_,$){return this.setLimit("max",_,!1,n.toString($))}setLimit(_,$,D,U){return new l6({...this._def,checks:[...this._def.checks,{kind:_,value:$,inclusive:D,message:n.toString(U)}]})}_addCheck(_){return new l6({...this._def,checks:[...this._def.checks,_]})}positive(_){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:n.toString(_)})}negative(_){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:n.toString(_)})}nonpositive(_){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:n.toString(_)})}nonnegative(_){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:n.toString(_)})}multipleOf(_,$){return this._addCheck({kind:"multipleOf",value:_,message:n.toString($)})}get minValue(){let _=null;for(let $ of this._def.checks)if($.kind==="min"){if(_===null||$.value>_)_=$.value}return _}get maxValue(){let _=null;for(let $ of this._def.checks)if($.kind==="max"){if(_===null||$.value<_)_=$.value}return _}}l6.create=(_)=>{return new l6({checks:[],typeName:i.ZodBigInt,coerce:_?.coerce??!1,...p(_)})};class AD extends __{_parse(_){if(this._def.coerce)_.data=Boolean(_.data);if(this._getType(_)!==y.boolean){let D=this._getOrReturnCtx(_);return u(D,{code:k.invalid_type,expected:y.boolean,received:D.parsedType}),m}return a_(_.data)}}AD.create=(_)=>{return new AD({typeName:i.ZodBoolean,coerce:_?.coerce||!1,...p(_)})};class d4 extends __{_parse(_){if(this._def.coerce)_.data=new Date(_.data);if(this._getType(_)!==y.date){let g=this._getOrReturnCtx(_);return u(g,{code:k.invalid_type,expected:y.date,received:g.parsedType}),m}if(Number.isNaN(_.data.getTime())){let g=this._getOrReturnCtx(_);return u(g,{code:k.invalid_date}),m}let D=new m_,U=void 0;for(let g of this._def.checks)if(g.kind==="min"){if(_.data.getTime()g.value)U=this._getOrReturnCtx(_,U),u(U,{code:k.too_big,message:g.message,inclusive:!0,exact:!1,maximum:g.value,type:"date"}),D.dirty()}else U_.assertNever(g);return{status:D.value,value:new Date(_.data.getTime())}}_addCheck(_){return new d4({...this._def,checks:[...this._def.checks,_]})}min(_,$){return this._addCheck({kind:"min",value:_.getTime(),message:n.toString($)})}max(_,$){return this._addCheck({kind:"max",value:_.getTime(),message:n.toString($)})}get minDate(){let _=null;for(let $ of this._def.checks)if($.kind==="min"){if(_===null||$.value>_)_=$.value}return _!=null?new Date(_):null}get maxDate(){let _=null;for(let $ of this._def.checks)if($.kind==="max"){if(_===null||$.value<_)_=$.value}return _!=null?new Date(_):null}}d4.create=(_)=>{return new d4({checks:[],coerce:_?.coerce||!1,typeName:i.ZodDate,...p(_)})};class WU extends __{_parse(_){if(this._getType(_)!==y.symbol){let D=this._getOrReturnCtx(_);return u(D,{code:k.invalid_type,expected:y.symbol,received:D.parsedType}),m}return a_(_.data)}}WU.create=(_)=>{return new WU({typeName:i.ZodSymbol,...p(_)})};class LD extends __{_parse(_){if(this._getType(_)!==y.undefined){let D=this._getOrReturnCtx(_);return u(D,{code:k.invalid_type,expected:y.undefined,received:D.parsedType}),m}return a_(_.data)}}LD.create=(_)=>{return new LD({typeName:i.ZodUndefined,...p(_)})};class JD extends __{_parse(_){if(this._getType(_)!==y.null){let D=this._getOrReturnCtx(_);return u(D,{code:k.invalid_type,expected:y.null,received:D.parsedType}),m}return a_(_.data)}}JD.create=(_)=>{return new JD({typeName:i.ZodNull,...p(_)})};class m4 extends __{constructor(){super(...arguments);this._any=!0}_parse(_){return a_(_.data)}}m4.create=(_)=>{return new m4({typeName:i.ZodAny,...p(_)})};class m6 extends __{constructor(){super(...arguments);this._unknown=!0}_parse(_){return a_(_.data)}}m6.create=(_)=>{return new m6({typeName:i.ZodUnknown,...p(_)})};class n$ extends __{_parse(_){let $=this._getOrReturnCtx(_);return u($,{code:k.invalid_type,expected:y.never,received:$.parsedType}),m}}n$.create=(_)=>{return new n$({typeName:i.ZodNever,...p(_)})};class XU extends __{_parse(_){if(this._getType(_)!==y.undefined){let D=this._getOrReturnCtx(_);return u(D,{code:k.invalid_type,expected:y.void,received:D.parsedType}),m}return a_(_.data)}}XU.create=(_)=>{return new XU({typeName:i.ZodVoid,...p(_)})};class M$ extends __{_parse(_){let{ctx:$,status:D}=this._processInputParams(_),U=this._def;if($.parsedType!==y.array)return u($,{code:k.invalid_type,expected:y.array,received:$.parsedType}),m;if(U.exactLength!==null){let I=$.data.length>U.exactLength.value,j=$.data.lengthU.maxLength.value)u($,{code:k.too_big,maximum:U.maxLength.value,type:"array",inclusive:!0,exact:!1,message:U.maxLength.message}),D.dirty()}if($.common.async)return Promise.all([...$.data].map((I,j)=>{return U.type._parseAsync(new b$($,I,$.path,j))})).then((I)=>{return m_.mergeArray(D,I)});let g=[...$.data].map((I,j)=>{return U.type._parseSync(new b$($,I,$.path,j))});return m_.mergeArray(D,g)}get element(){return this._def.type}min(_,$){return new M$({...this._def,minLength:{value:_,message:n.toString($)}})}max(_,$){return new M$({...this._def,maxLength:{value:_,message:n.toString($)}})}length(_,$){return new M$({...this._def,exactLength:{value:_,message:n.toString($)}})}nonempty(_){return this.min(1,_)}}M$.create=(_,$)=>{return new M$({type:_,minLength:null,maxLength:null,exactLength:null,typeName:i.ZodArray,...p($)})};function UD(_){if(_ instanceof b_){let $={};for(let D in _.shape){let U=_.shape[D];$[D]=Z$.create(UD(U))}return new b_({..._._def,shape:()=>$})}else if(_ instanceof M$)return new M$({..._._def,type:UD(_.element)});else if(_ instanceof Z$)return Z$.create(UD(_.unwrap()));else if(_ instanceof z6)return z6.create(UD(_.unwrap()));else if(_ instanceof d$)return d$.create(_.items.map(($)=>UD($)));else return _}class b_ extends __{constructor(){super(...arguments);this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let _=this._def.shape(),$=U_.objectKeys(_);return this._cached={shape:_,keys:$},this._cached}_parse(_){if(this._getType(_)!==y.object){let O=this._getOrReturnCtx(_);return u(O,{code:k.invalid_type,expected:y.object,received:O.parsedType}),m}let{status:D,ctx:U}=this._processInputParams(_),{shape:g,keys:I}=this._getCached(),j=[];if(!(this._def.catchall instanceof n$&&this._def.unknownKeys==="strip")){for(let O in U.data)if(!I.includes(O))j.push(O)}let N=[];for(let O of I){let A=g[O],L=U.data[O];N.push({key:{status:"valid",value:O},value:A._parse(new b$(U,L,U.path,O)),alwaysSet:O in U.data})}if(this._def.catchall instanceof n$){let O=this._def.unknownKeys;if(O==="passthrough")for(let A of j)N.push({key:{status:"valid",value:A},value:{status:"valid",value:U.data[A]}});else if(O==="strict"){if(j.length>0)u(U,{code:k.unrecognized_keys,keys:j}),D.dirty()}else if(O==="strip");else throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let O=this._def.catchall;for(let A of j){let L=U.data[A];N.push({key:{status:"valid",value:A},value:O._parse(new b$(U,L,U.path,A)),alwaysSet:A in U.data})}}if(U.common.async)return Promise.resolve().then(async()=>{let O=[];for(let A of N){let L=await A.key,z=await A.value;O.push({key:L,value:z,alwaysSet:A.alwaysSet})}return O}).then((O)=>{return m_.mergeObjectSync(D,O)});else return m_.mergeObjectSync(D,N)}get shape(){return this._def.shape()}strict(_){return n.errToObj,new b_({...this._def,unknownKeys:"strict",..._!==void 0?{errorMap:($,D)=>{let U=this._def.errorMap?.($,D).message??D.defaultError;if($.code==="unrecognized_keys")return{message:n.errToObj(_).message??U};return{message:U}}}:{}})}strip(){return new b_({...this._def,unknownKeys:"strip"})}passthrough(){return new b_({...this._def,unknownKeys:"passthrough"})}extend(_){return new b_({...this._def,shape:()=>({...this._def.shape(),..._})})}merge(_){return new b_({unknownKeys:_._def.unknownKeys,catchall:_._def.catchall,shape:()=>({...this._def.shape(),..._._def.shape()}),typeName:i.ZodObject})}setKey(_,$){return this.augment({[_]:$})}catchall(_){return new b_({...this._def,catchall:_})}pick(_){let $={};for(let D of U_.objectKeys(_))if(_[D]&&this.shape[D])$[D]=this.shape[D];return new b_({...this._def,shape:()=>$})}omit(_){let $={};for(let D of U_.objectKeys(this.shape))if(!_[D])$[D]=this.shape[D];return new b_({...this._def,shape:()=>$})}deepPartial(){return UD(this)}partial(_){let $={};for(let D of U_.objectKeys(this.shape)){let U=this.shape[D];if(_&&!_[D])$[D]=U;else $[D]=U.optional()}return new b_({...this._def,shape:()=>$})}required(_){let $={};for(let D of U_.objectKeys(this.shape))if(_&&!_[D])$[D]=this.shape[D];else{let g=this.shape[D];while(g instanceof Z$)g=g._def.innerType;$[D]=g}return new b_({...this._def,shape:()=>$})}keyof(){return RG(U_.objectKeys(this.shape))}}b_.create=(_,$)=>{return new b_({shape:()=>_,unknownKeys:"strip",catchall:n$.create(),typeName:i.ZodObject,...p($)})};b_.strictCreate=(_,$)=>{return new b_({shape:()=>_,unknownKeys:"strict",catchall:n$.create(),typeName:i.ZodObject,...p($)})};b_.lazycreate=(_,$)=>{return new b_({shape:_,unknownKeys:"strip",catchall:n$.create(),typeName:i.ZodObject,...p($)})};class PD extends __{_parse(_){let{ctx:$}=this._processInputParams(_),D=this._def.options;function U(g){for(let j of g)if(j.result.status==="valid")return j.result;for(let j of g)if(j.result.status==="dirty")return $.common.issues.push(...j.ctx.common.issues),j.result;let I=g.map((j)=>new O$(j.ctx.common.issues));return u($,{code:k.invalid_union,unionErrors:I}),m}if($.common.async)return Promise.all(D.map(async(g)=>{let I={...$,common:{...$.common,issues:[]},parent:null};return{result:await g._parseAsync({data:$.data,path:$.path,parent:I}),ctx:I}})).then(U);else{let g=void 0,I=[];for(let N of D){let O={...$,common:{...$.common,issues:[]},parent:null},A=N._parseSync({data:$.data,path:$.path,parent:O});if(A.status==="valid")return A;else if(A.status==="dirty"&&!g)g={result:A,ctx:O};if(O.common.issues.length)I.push(O.common.issues)}if(g)return $.common.issues.push(...g.ctx.common.issues),g.result;let j=I.map((N)=>new O$(N));return u($,{code:k.invalid_union,unionErrors:j}),m}}get options(){return this._def.options}}PD.create=(_,$)=>{return new PD({options:_,typeName:i.ZodUnion,...p($)})};var J6=(_)=>{if(_ instanceof SD)return J6(_.schema);else if(_ instanceof R$)return J6(_.innerType());else if(_ instanceof WD)return[_.value];else if(_ instanceof t6)return _.options;else if(_ instanceof XD)return U_.objectValues(_.enum);else if(_ instanceof RD)return J6(_._def.innerType);else if(_ instanceof LD)return[void 0];else if(_ instanceof JD)return[null];else if(_ instanceof Z$)return[void 0,...J6(_.unwrap())];else if(_ instanceof z6)return[null,...J6(_.unwrap())];else if(_ instanceof JN)return J6(_.unwrap());else if(_ instanceof YD)return J6(_.unwrap());else if(_ instanceof GD)return J6(_._def.innerType);else return[]};class LN extends __{_parse(_){let{ctx:$}=this._processInputParams(_);if($.parsedType!==y.object)return u($,{code:k.invalid_type,expected:y.object,received:$.parsedType}),m;let D=this.discriminator,U=$.data[D],g=this.optionsMap.get(U);if(!g)return u($,{code:k.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[D]}),m;if($.common.async)return g._parseAsync({data:$.data,path:$.path,parent:$});else return g._parseSync({data:$.data,path:$.path,parent:$})}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(_,$,D){let U=new Map;for(let g of $){let I=J6(g.shape[_]);if(!I.length)throw Error(`A discriminator value for key \`${_}\` could not be extracted from all schema options`);for(let j of I){if(U.has(j))throw Error(`Discriminator property ${String(_)} has duplicate value ${String(j)}`);U.set(j,g)}}return new LN({typeName:i.ZodDiscriminatedUnion,discriminator:_,options:$,optionsMap:U,...p(D)})}}function f3(_,$){let D=P6(_),U=P6($);if(_===$)return{valid:!0,data:_};else if(D===y.object&&U===y.object){let g=U_.objectKeys($),I=U_.objectKeys(_).filter((N)=>g.indexOf(N)!==-1),j={..._,...$};for(let N of I){let O=f3(_[N],$[N]);if(!O.valid)return{valid:!1};j[N]=O.data}return{valid:!0,data:j}}else if(D===y.array&&U===y.array){if(_.length!==$.length)return{valid:!1};let g=[];for(let I=0;I<_.length;I++){let j=_[I],N=$[I],O=f3(j,N);if(!O.valid)return{valid:!1};g.push(O.data)}return{valid:!0,data:g}}else if(D===y.date&&U===y.date&&+_===+$)return{valid:!0,data:_};else return{valid:!1}}class zD extends __{_parse(_){let{status:$,ctx:D}=this._processInputParams(_),U=(g,I)=>{if(v3(g)||v3(I))return m;let j=f3(g.value,I.value);if(!j.valid)return u(D,{code:k.invalid_intersection_types}),m;if(r3(g)||r3(I))$.dirty();return{status:$.value,value:j.data}};if(D.common.async)return Promise.all([this._def.left._parseAsync({data:D.data,path:D.path,parent:D}),this._def.right._parseAsync({data:D.data,path:D.path,parent:D})]).then(([g,I])=>U(g,I));else return U(this._def.left._parseSync({data:D.data,path:D.path,parent:D}),this._def.right._parseSync({data:D.data,path:D.path,parent:D}))}}zD.create=(_,$,D)=>{return new zD({left:_,right:$,typeName:i.ZodIntersection,...p(D)})};class d$ extends __{_parse(_){let{status:$,ctx:D}=this._processInputParams(_);if(D.parsedType!==y.array)return u(D,{code:k.invalid_type,expected:y.array,received:D.parsedType}),m;if(D.data.lengththis._def.items.length)u(D,{code:k.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),$.dirty();let g=[...D.data].map((I,j)=>{let N=this._def.items[j]||this._def.rest;if(!N)return null;return N._parse(new b$(D,I,D.path,j))}).filter((I)=>!!I);if(D.common.async)return Promise.all(g).then((I)=>{return m_.mergeArray($,I)});else return m_.mergeArray($,g)}get items(){return this._def.items}rest(_){return new d$({...this._def,rest:_})}}d$.create=(_,$)=>{if(!Array.isArray(_))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new d$({items:_,typeName:i.ZodTuple,rest:null,...p($)})};class RU extends __{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(_){let{status:$,ctx:D}=this._processInputParams(_);if(D.parsedType!==y.object)return u(D,{code:k.invalid_type,expected:y.object,received:D.parsedType}),m;let U=[],g=this._def.keyType,I=this._def.valueType;for(let j in D.data)U.push({key:g._parse(new b$(D,j,D.path,j)),value:I._parse(new b$(D,D.data[j],D.path,j)),alwaysSet:j in D.data});if(D.common.async)return m_.mergeObjectAsync($,U);else return m_.mergeObjectSync($,U)}get element(){return this._def.valueType}static create(_,$,D){if($ instanceof __)return new RU({keyType:_,valueType:$,typeName:i.ZodRecord,...p(D)});return new RU({keyType:F$.create(),valueType:_,typeName:i.ZodRecord,...p($)})}}class GU extends __{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(_){let{status:$,ctx:D}=this._processInputParams(_);if(D.parsedType!==y.map)return u(D,{code:k.invalid_type,expected:y.map,received:D.parsedType}),m;let U=this._def.keyType,g=this._def.valueType,I=[...D.data.entries()].map(([j,N],O)=>{return{key:U._parse(new b$(D,j,D.path,[O,"key"])),value:g._parse(new b$(D,N,D.path,[O,"value"]))}});if(D.common.async){let j=new Map;return Promise.resolve().then(async()=>{for(let N of I){let O=await N.key,A=await N.value;if(O.status==="aborted"||A.status==="aborted")return m;if(O.status==="dirty"||A.status==="dirty")$.dirty();j.set(O.value,A.value)}return{status:$.value,value:j}})}else{let j=new Map;for(let N of I){let{key:O,value:A}=N;if(O.status==="aborted"||A.status==="aborted")return m;if(O.status==="dirty"||A.status==="dirty")$.dirty();j.set(O.value,A.value)}return{status:$.value,value:j}}}}GU.create=(_,$,D)=>{return new GU({valueType:$,keyType:_,typeName:i.ZodMap,...p(D)})};class i4 extends __{_parse(_){let{status:$,ctx:D}=this._processInputParams(_);if(D.parsedType!==y.set)return u(D,{code:k.invalid_type,expected:y.set,received:D.parsedType}),m;let U=this._def;if(U.minSize!==null){if(D.data.sizeU.maxSize.value)u(D,{code:k.too_big,maximum:U.maxSize.value,type:"set",inclusive:!0,exact:!1,message:U.maxSize.message}),$.dirty()}let g=this._def.valueType;function I(N){let O=new Set;for(let A of N){if(A.status==="aborted")return m;if(A.status==="dirty")$.dirty();O.add(A.value)}return{status:$.value,value:O}}let j=[...D.data.values()].map((N,O)=>g._parse(new b$(D,N,D.path,O)));if(D.common.async)return Promise.all(j).then((N)=>I(N));else return I(j)}min(_,$){return new i4({...this._def,minSize:{value:_,message:n.toString($)}})}max(_,$){return new i4({...this._def,maxSize:{value:_,message:n.toString($)}})}size(_,$){return this.min(_,$).max(_,$)}nonempty(_){return this.min(1,_)}}i4.create=(_,$)=>{return new i4({valueType:_,minSize:null,maxSize:null,typeName:i.ZodSet,...p($)})};class ND extends __{constructor(){super(...arguments);this.validate=this.implement}_parse(_){let{ctx:$}=this._processInputParams(_);if($.parsedType!==y.function)return u($,{code:k.invalid_type,expected:y.function,received:$.parsedType}),m;function D(j,N){return EN({data:j,path:$.path,errorMaps:[$.common.contextualErrorMap,$.schemaErrorMap,NN(),OD].filter((O)=>!!O),issueData:{code:k.invalid_arguments,argumentsError:N}})}function U(j,N){return EN({data:j,path:$.path,errorMaps:[$.common.contextualErrorMap,$.schemaErrorMap,NN(),OD].filter((O)=>!!O),issueData:{code:k.invalid_return_type,returnTypeError:N}})}let g={errorMap:$.common.contextualErrorMap},I=$.data;if(this._def.returns instanceof l4){let j=this;return a_(async function(...N){let O=new O$([]),A=await j._def.args.parseAsync(N,g).catch((W)=>{throw O.addIssue(D(N,W)),O}),L=await Reflect.apply(I,this,A);return await j._def.returns._def.type.parseAsync(L,g).catch((W)=>{throw O.addIssue(U(L,W)),O})})}else{let j=this;return a_(function(...N){let O=j._def.args.safeParse(N,g);if(!O.success)throw new O$([D(N,O.error)]);let A=Reflect.apply(I,this,O.data),L=j._def.returns.safeParse(A,g);if(!L.success)throw new O$([U(A,L.error)]);return L.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(..._){return new ND({...this._def,args:d$.create(_).rest(m6.create())})}returns(_){return new ND({...this._def,returns:_})}implement(_){return this.parse(_)}strictImplement(_){return this.parse(_)}static create(_,$,D){return new ND({args:_?_:d$.create([]).rest(m6.create()),returns:$||m6.create(),typeName:i.ZodFunction,...p(D)})}}class SD extends __{get schema(){return this._def.getter()}_parse(_){let{ctx:$}=this._processInputParams(_);return this._def.getter()._parse({data:$.data,path:$.path,parent:$})}}SD.create=(_,$)=>{return new SD({getter:_,typeName:i.ZodLazy,...p($)})};class WD extends __{_parse(_){if(_.data!==this._def.value){let $=this._getOrReturnCtx(_);return u($,{received:$.data,code:k.invalid_literal,expected:this._def.value}),m}return{status:"valid",value:_.data}}get value(){return this._def.value}}WD.create=(_,$)=>{return new WD({value:_,typeName:i.ZodLiteral,...p($)})};function RG(_,$){return new t6({values:_,typeName:i.ZodEnum,...p($)})}class t6 extends __{_parse(_){if(typeof _.data!=="string"){let $=this._getOrReturnCtx(_),D=this._def.values;return u($,{expected:U_.joinValues(D),received:$.parsedType,code:k.invalid_type}),m}if(!this._cache)this._cache=new Set(this._def.values);if(!this._cache.has(_.data)){let $=this._getOrReturnCtx(_),D=this._def.values;return u($,{received:$.data,code:k.invalid_enum_value,options:D}),m}return a_(_.data)}get options(){return this._def.values}get enum(){let _={};for(let $ of this._def.values)_[$]=$;return _}get Values(){let _={};for(let $ of this._def.values)_[$]=$;return _}get Enum(){let _={};for(let $ of this._def.values)_[$]=$;return _}extract(_,$=this._def){return t6.create(_,{...this._def,...$})}exclude(_,$=this._def){return t6.create(this.options.filter((D)=>!_.includes(D)),{...this._def,...$})}}t6.create=RG;class XD extends __{_parse(_){let $=U_.getValidEnumValues(this._def.values),D=this._getOrReturnCtx(_);if(D.parsedType!==y.string&&D.parsedType!==y.number){let U=U_.objectValues($);return u(D,{expected:U_.joinValues(U),received:D.parsedType,code:k.invalid_type}),m}if(!this._cache)this._cache=new Set(U_.getValidEnumValues(this._def.values));if(!this._cache.has(_.data)){let U=U_.objectValues($);return u(D,{received:D.data,code:k.invalid_enum_value,options:U}),m}return a_(_.data)}get enum(){return this._def.values}}XD.create=(_,$)=>{return new XD({values:_,typeName:i.ZodNativeEnum,...p($)})};class l4 extends __{unwrap(){return this._def.type}_parse(_){let{ctx:$}=this._processInputParams(_);if($.parsedType!==y.promise&&$.common.async===!1)return u($,{code:k.invalid_type,expected:y.promise,received:$.parsedType}),m;let D=$.parsedType===y.promise?$.data:Promise.resolve($.data);return a_(D.then((U)=>{return this._def.type.parseAsync(U,{path:$.path,errorMap:$.common.contextualErrorMap})}))}}l4.create=(_,$)=>{return new l4({type:_,typeName:i.ZodPromise,...p($)})};class R$ extends __{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===i.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(_){let{status:$,ctx:D}=this._processInputParams(_),U=this._def.effect||null,g={addIssue:(I)=>{if(u(D,I),I.fatal)$.abort();else $.dirty()},get path(){return D.path}};if(g.addIssue=g.addIssue.bind(g),U.type==="preprocess"){let I=U.transform(D.data,g);if(D.common.async)return Promise.resolve(I).then(async(j)=>{if($.value==="aborted")return m;let N=await this._def.schema._parseAsync({data:j,path:D.path,parent:D});if(N.status==="aborted")return m;if(N.status==="dirty")return jD(N.value);if($.value==="dirty")return jD(N.value);return N});else{if($.value==="aborted")return m;let j=this._def.schema._parseSync({data:I,path:D.path,parent:D});if(j.status==="aborted")return m;if(j.status==="dirty")return jD(j.value);if($.value==="dirty")return jD(j.value);return j}}if(U.type==="refinement"){let I=(j)=>{let N=U.refinement(j,g);if(D.common.async)return Promise.resolve(N);if(N instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return j};if(D.common.async===!1){let j=this._def.schema._parseSync({data:D.data,path:D.path,parent:D});if(j.status==="aborted")return m;if(j.status==="dirty")$.dirty();return I(j.value),{status:$.value,value:j.value}}else return this._def.schema._parseAsync({data:D.data,path:D.path,parent:D}).then((j)=>{if(j.status==="aborted")return m;if(j.status==="dirty")$.dirty();return I(j.value).then(()=>{return{status:$.value,value:j.value}})})}if(U.type==="transform")if(D.common.async===!1){let I=this._def.schema._parseSync({data:D.data,path:D.path,parent:D});if(!n4(I))return m;let j=U.transform(I.value,g);if(j instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:$.value,value:j}}else return this._def.schema._parseAsync({data:D.data,path:D.path,parent:D}).then((I)=>{if(!n4(I))return m;return Promise.resolve(U.transform(I.value,g)).then((j)=>({status:$.value,value:j}))});U_.assertNever(U)}}R$.create=(_,$,D)=>{return new R$({schema:_,typeName:i.ZodEffects,effect:$,...p(D)})};R$.createWithPreprocess=(_,$,D)=>{return new R$({schema:$,effect:{type:"preprocess",transform:_},typeName:i.ZodEffects,...p(D)})};class Z$ extends __{_parse(_){if(this._getType(_)===y.undefined)return a_(void 0);return this._def.innerType._parse(_)}unwrap(){return this._def.innerType}}Z$.create=(_,$)=>{return new Z$({innerType:_,typeName:i.ZodOptional,...p($)})};class z6 extends __{_parse(_){if(this._getType(_)===y.null)return a_(null);return this._def.innerType._parse(_)}unwrap(){return this._def.innerType}}z6.create=(_,$)=>{return new z6({innerType:_,typeName:i.ZodNullable,...p($)})};class RD extends __{_parse(_){let{ctx:$}=this._processInputParams(_),D=$.data;if($.parsedType===y.undefined)D=this._def.defaultValue();return this._def.innerType._parse({data:D,path:$.path,parent:$})}removeDefault(){return this._def.innerType}}RD.create=(_,$)=>{return new RD({innerType:_,typeName:i.ZodDefault,defaultValue:typeof $.default==="function"?$.default:()=>$.default,...p($)})};class GD extends __{_parse(_){let{ctx:$}=this._processInputParams(_),D={...$,common:{...$.common,issues:[]}},U=this._def.innerType._parse({data:D.data,path:D.path,parent:{...D}});if(SU(U))return U.then((g)=>{return{status:"valid",value:g.status==="valid"?g.value:this._def.catchValue({get error(){return new O$(D.common.issues)},input:D.data})}});else return{status:"valid",value:U.status==="valid"?U.value:this._def.catchValue({get error(){return new O$(D.common.issues)},input:D.data})}}removeCatch(){return this._def.innerType}}GD.create=(_,$)=>{return new GD({innerType:_,typeName:i.ZodCatch,catchValue:typeof $.catch==="function"?$.catch:()=>$.catch,...p($)})};class YU extends __{_parse(_){if(this._getType(_)!==y.nan){let D=this._getOrReturnCtx(_);return u(D,{code:k.invalid_type,expected:y.nan,received:D.parsedType}),m}return{status:"valid",value:_.data}}}YU.create=(_)=>{return new YU({typeName:i.ZodNaN,...p(_)})};var $H=Symbol("zod_brand");class JN extends __{_parse(_){let{ctx:$}=this._processInputParams(_),D=$.data;return this._def.type._parse({data:D,path:$.path,parent:$})}unwrap(){return this._def.type}}class QU extends __{_parse(_){let{status:$,ctx:D}=this._processInputParams(_);if(D.common.async)return(async()=>{let g=await this._def.in._parseAsync({data:D.data,path:D.path,parent:D});if(g.status==="aborted")return m;if(g.status==="dirty")return $.dirty(),jD(g.value);else return this._def.out._parseAsync({data:g.value,path:D.path,parent:D})})();else{let U=this._def.in._parseSync({data:D.data,path:D.path,parent:D});if(U.status==="aborted")return m;if(U.status==="dirty")return $.dirty(),{status:"dirty",value:U.value};else return this._def.out._parseSync({data:U.value,path:D.path,parent:D})}}static create(_,$){return new QU({in:_,out:$,typeName:i.ZodPipeline})}}class YD extends __{_parse(_){let $=this._def.innerType._parse(_),D=(U)=>{if(n4(U))U.value=Object.freeze(U.value);return U};return SU($)?$.then((U)=>D(U)):D($)}unwrap(){return this._def.innerType}}YD.create=(_,$)=>{return new YD({innerType:_,typeName:i.ZodReadonly,...p($)})};function IG(_,$){let D=typeof _==="function"?_($):typeof _==="string"?{message:_}:_;return typeof D==="string"?{message:D}:D}function GG(_,$={},D){if(_)return m4.create().superRefine((U,g)=>{let I=_(U);if(I instanceof Promise)return I.then((j)=>{if(!j){let N=IG($,U),O=N.fatal??D??!0;g.addIssue({code:"custom",...N,fatal:O})}});if(!I){let j=IG($,U),N=j.fatal??D??!0;g.addIssue({code:"custom",...j,fatal:N})}return});return m4.create()}var DH={object:b_.lazycreate},i;(function(_){_.ZodString="ZodString",_.ZodNumber="ZodNumber",_.ZodNaN="ZodNaN",_.ZodBigInt="ZodBigInt",_.ZodBoolean="ZodBoolean",_.ZodDate="ZodDate",_.ZodSymbol="ZodSymbol",_.ZodUndefined="ZodUndefined",_.ZodNull="ZodNull",_.ZodAny="ZodAny",_.ZodUnknown="ZodUnknown",_.ZodNever="ZodNever",_.ZodVoid="ZodVoid",_.ZodArray="ZodArray",_.ZodObject="ZodObject",_.ZodUnion="ZodUnion",_.ZodDiscriminatedUnion="ZodDiscriminatedUnion",_.ZodIntersection="ZodIntersection",_.ZodTuple="ZodTuple",_.ZodRecord="ZodRecord",_.ZodMap="ZodMap",_.ZodSet="ZodSet",_.ZodFunction="ZodFunction",_.ZodLazy="ZodLazy",_.ZodLiteral="ZodLiteral",_.ZodEnum="ZodEnum",_.ZodEffects="ZodEffects",_.ZodNativeEnum="ZodNativeEnum",_.ZodOptional="ZodOptional",_.ZodNullable="ZodNullable",_.ZodDefault="ZodDefault",_.ZodCatch="ZodCatch",_.ZodPromise="ZodPromise",_.ZodBranded="ZodBranded",_.ZodPipeline="ZodPipeline",_.ZodReadonly="ZodReadonly"})(i||(i={}));var gH=(_,$={message:`Input not instance of ${_.name}`})=>GG((D)=>D instanceof _,$),YG=F$.create,QG=i6.create,UH=YU.create,IH=l6.create,TG=AD.create,jH=d4.create,NH=WU.create,EH=LD.create,OH=JD.create,AH=m4.create,LH=m6.create,JH=n$.create,PH=XU.create,zH=M$.create,SH=b_.create,WH=b_.strictCreate,XH=PD.create,RH=LN.create,GH=zD.create,YH=d$.create,QH=RU.create,TH=GU.create,qH=i4.create,BH=ND.create,VH=SD.create,KH=WD.create,FH=t6.create,MH=XD.create,ZH=l4.create,jG=R$.create,bH=Z$.create,HH=z6.create,kH=R$.createWithPreprocess,CH=QU.create,vH=()=>YG().optional(),rH=()=>QG().optional(),fH=()=>TG().optional(),wH={string:(_)=>F$.create({..._,coerce:!0}),number:(_)=>i6.create({..._,coerce:!0}),boolean:(_)=>AD.create({..._,coerce:!0}),bigint:(_)=>l6.create({..._,coerce:!0}),date:(_)=>d4.create({..._,coerce:!0})},uH=m;var x={actorRef:"hasna.actor_ref.v1",resourceRef:"hasna.resource_ref.v1",evidenceRef:"hasna.evidence_ref.v1",workRun:"hasna.work_run.v1",taskToPrProjection:"hasna.task_to_pr_projection.v1",decisionEnvelope:"hasna.decision_envelope.v1",costEstimate:"hasna.cost_estimate.v1",capabilityCard:"hasna.capability_card.v1",providerLiveModeStandard:"hasna.provider_live_mode_standard.v1",contextPack:"hasna.context_pack.v1",integrationRef:"hasna.integration_ref.v1",projectManifest:"hasna.project_manifest.v1",projectPanel:"hasna.project_panel.v1",projectSnapshot:"hasna.project_snapshot.v1",renderManifest:"hasna.render_manifest.v1",agentTrajectory:"hasna.agent_trajectory.v1",validationPlan:"hasna.validation_plan.v1",proofBundle:"hasna.proof_bundle.v1",scaffoldManifest:"hasna.scaffold_manifest.v1",scaffoldInstallRecord:"hasna.scaffold_install_record.v1",appCloudManifest:"hasna.app_cloud_manifest.v1",noCloudEvidencePack:"hasna.no_cloud_evidence_pack.v1",secureLocalStorePolicy:"hasna.secure_local_store_policy.v1",serviceContract:"hasna.service_contract.v1",commsEventEnvelope:"hasna.comms_event_envelope.v1",commsChannelMetadata:"hasna.comms_channel_metadata.v1",commsMessageMetadata:"hasna.comms_message_metadata.v1",app:"hasna.app.v1",release:"hasna.release.v1",rolloutRecord:"hasna.rollout_record.v1",announcement:"hasna.announcement.v1",audience:"hasna.audience.v1"},u3=E.string().regex(/^hasna\.[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*\.v[0-9]+$/),K_=E.string().datetime(),t=E.string().trim().min(1),H$=t.refine((_)=>_.startsWith("artifact://")||_.startsWith("repo://")||_.startsWith("project://")||_.startsWith("dashboard://")||_.startsWith("render://")||_.startsWith("integration://")||_.startsWith("task://")||_.startsWith("todo://")||_.startsWith("file://")||_.startsWith("files://")||_.startsWith("mailery://")||_.startsWith("conversation://")||_.startsWith("knowledge://")||_.startsWith("memento://")||_.startsWith("https://")||_.startsWith("http://")||_.startsWith("git+https://"),"URI must use artifact://, repo://, project://, dashboard://, render://, integration://, task://, todo://, file://, files://, mailery://, conversation://, knowledge://, memento://, http(s)://, or git+https://"),qG=E.string().regex(/^[a-fA-F0-9]{64}$/),BG=E.string().regex(/^(sha256:)?[a-fA-F0-9]{64}$/),o6=E.record(E.unknown()),qD=E.array(E.string().min(1)).default([]),t4=K_.nullable().optional(),xH=new Set(["succeeded","failed","cancelled","blocked","skipped"]),e4=E.enum(["pending","running","succeeded","failed","cancelled","blocked","skipped","unknown"]);function L_(_){return E.object({schema:E.literal(_),id:E.string().min(1),createdAt:K_,updatedAt:t4,metadata:o6.optional()}).strict()}var Wd=E.object({schema:u3,id:E.string().min(1),createdAt:K_,updatedAt:t4,metadata:o6.optional()}).strict(),VG=E.enum(["agent","human","service","model","workflow","system"]),yH=L_(x.actorRef).extend({kind:VG,name:E.string().min(1).optional(),provider:E.string().min(1).optional(),accountId:E.string().min(1).optional(),machineId:E.string().min(1).optional(),capabilities:E.array(E.string().min(1)).default([])}).strict(),m$=E.object({kind:VG,id:E.string().min(1),name:E.string().min(1).optional(),provider:E.string().min(1).optional(),accountId:E.string().min(1).optional(),machineId:E.string().min(1).optional()}).strict(),KG=E.enum(["task","project","repo","run","loop","workflow","action","event","integration","session","machine","model","tool","file","document","url","artifact","knowledge","email","conversation","dashboard","render","panel","report","commit","branch","pull_request","issue","comment","verification","finding","context_pack","proof_bundle","memento","eval","budget","cost","alert","incident","app","release","rollout","announcement","audience","feedback","unknown"]),hH=L_(x.resourceRef).extend({kind:KG,name:E.string().min(1).optional(),uri:H$.optional(),externalId:t.optional(),sourcePackage:t.optional(),tags:qD}).strict().superRefine((_,$)=>{if(!_.uri&&!(_.externalId&&_.sourcePackage))$.addIssue({code:E.ZodIssueCode.custom,message:"Resource refs require uri or both sourcePackage and externalId",path:["uri"]})}),s=E.object({kind:KG,id:E.string().min(1),name:E.string().min(1).optional(),uri:H$.optional(),externalId:t.optional(),sourcePackage:t.optional(),tags:qD}).strict().superRefine((_,$)=>{if(!_.uri&&Boolean(_.externalId)!==Boolean(_.sourcePackage))$.addIssue({code:E.ZodIssueCode.custom,message:"Resource pointers with external package locators require both sourcePackage and externalId",path:_.externalId?["sourcePackage"]:["externalId"]})}),x3=E.enum(["file","command_output","screenshot","log","diff","report","artifact","url","video","har","test_result","metric","trace","other"]),cH=E.enum(["none","partial","full","unknown"]),nH=L_(x.evidenceRef).extend({kind:x3,uri:H$,sha256:qG.optional(),summary:E.string().min(1).optional(),contentType:E.string().min(1).optional(),sizeBytes:E.number().int().nonnegative().optional(),redaction:cH.default("unknown"),producer:m$.optional(),resourceRefs:E.array(s).default([]),tags:qD}).strict(),T_=E.object({id:E.string().min(1),kind:x3.optional(),uri:H$.optional(),sha256:qG.optional(),summary:E.string().min(1).optional()}).strict(),TU=L_(x.costEstimate).extend({currency:E.string().regex(/^[A-Z]{3}$/).default("USD"),amountMicros:E.number().int().nonnegative(),provider:E.string().min(1).optional(),model:E.string().min(1).optional(),accountId:E.string().min(1).optional(),promptTokens:E.number().int().nonnegative().optional(),completionTokens:E.number().int().nonnegative().optional(),totalTokens:E.number().int().nonnegative().optional(),basis:E.enum(["actual","estimated","budget","limit"]).default("estimated"),resourceRefs:E.array(s).default([])}).strict().superRefine((_,$)=>{if(_.promptTokens!==void 0&&_.completionTokens!==void 0&&_.totalTokens!==void 0&&_.totalTokens!==_.promptTokens+_.completionTokens)$.addIssue({code:E.ZodIssueCode.custom,message:"totalTokens must equal promptTokens plus completionTokens when all are present",path:["totalTokens"]})}),dH=E.enum(["allowed","denied","warned","approval_required","selected","skipped","unknown"]),FG=L_(x.decisionEnvelope).extend({decisionType:E.enum(["guardrail","model_route","tool_select","budget","secret_access","approval","policy","other"]),status:dH,actor:m$.optional(),traceId:E.string().min(1).optional(),inputHash:BG.optional(),policyBundleId:E.string().min(1).optional(),selected:E.array(s).default([]),skipped:E.array(s).default([]),reason:E.string().min(1),obligations:E.array(E.string().min(1)).default([]),redactions:E.array(E.string().min(1)).default([]),costEstimate:TU.optional(),evidenceRefs:E.array(T_).default([])}).strict().superRefine((_,$)=>{if(_.status==="selected"&&_.selected.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Selected decisions require at least one selected resource",path:["selected"]});if(_.status==="skipped"&&_.skipped.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Skipped decisions require at least one skipped resource",path:["skipped"]});if(_.status==="denied"){if(_.selected.length>0)$.addIssue({code:E.ZodIssueCode.custom,message:"Denied decisions cannot include selected resources",path:["selected"]});if(!_.policyBundleId&&_.evidenceRefs.length===0&&_.obligations.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Denied decisions require policy, evidence, or obligations",path:["policyBundleId"]})}if(_.status==="approval_required"&&_.obligations.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Approval-required decisions require actionable obligations",path:["obligations"]})}),mH=L_(x.capabilityCard).extend({kind:E.enum(["model","tool","machine","agent","lane","connector","service"]),name:E.string().min(1),version:E.string().min(1).optional(),status:E.enum(["available","unavailable","degraded","unknown"]).default("unknown"),capabilities:E.array(E.string().min(1)).default([]),limitations:E.array(E.string().min(1)).default([]),riskLevel:E.enum(["low","medium","high","critical","unknown"]).default("unknown"),costEstimate:TU.optional(),evidenceRefs:E.array(T_).default([])}).strict(),QD=E.enum(["mock","fixture","sandbox","read_only_live","live_mutating"]),iH=E.enum(["none","read_only","external_notification","external_mutation","money_movement","dns_or_domain_change","bulk_message_or_call","legal_or_filing","compute_or_infra_mutation","irreversible"]),lH=E.object({refName:t,requiredForModes:E.array(QD).min(1),allowedSecretInputs:E.array(E.enum(["credential_ref","lease_ref"])).min(1).default(["credential_ref"]),failClosedDiagnostic:t,revocationCheck:E.boolean().default(!0)}).strict(),tH=E.object({operation:t,supportedModes:E.array(QD).min(1),sideEffectClass:iH,requiresApproval:E.boolean().default(!1),requiresIdempotencyKey:E.boolean().default(!1),requiresSandboxEvidence:E.boolean().default(!1),requiresRollbackOrRevocation:E.boolean().default(!1),rollbackOrRevocation:t.optional(),noSideEffectSmoke:t.optional(),reconciliation:t.optional()}).strict().superRefine((_,$)=>{if(_.supportedModes.includes("live_mutating")){if(_.sideEffectClass==="none"||_.sideEffectClass==="read_only")$.addIssue({code:E.ZodIssueCode.custom,message:"live_mutating operations must declare a side-effecting class",path:["sideEffectClass"]});if(!_.requiresApproval)$.addIssue({code:E.ZodIssueCode.custom,message:"live_mutating operations require approval",path:["requiresApproval"]});if(!_.requiresIdempotencyKey)$.addIssue({code:E.ZodIssueCode.custom,message:"live_mutating operations require idempotency keys",path:["requiresIdempotencyKey"]});if(!_.requiresSandboxEvidence)$.addIssue({code:E.ZodIssueCode.custom,message:"live_mutating operations require sandbox evidence before live proof",path:["requiresSandboxEvidence"]});if(!_.requiresRollbackOrRevocation||!_.rollbackOrRevocation)$.addIssue({code:E.ZodIssueCode.custom,message:"live_mutating operations require rollback or revocation instructions",path:["rollbackOrRevocation"]});if(!_.reconciliation)$.addIssue({code:E.ZodIssueCode.custom,message:"live_mutating operations require reconciliation behavior",path:["reconciliation"]})}}),oH=E.object({providerId:t,appId:t,adapterId:t,ownerPackage:t,modes:E.array(QD).min(1),defaultMode:QD,credentialRequirements:E.array(lH).default([]),operations:E.array(tH).min(1),rateLimitPosture:t,costPosture:t.optional(),auditEvents:E.array(t).default([]),redactionRules:E.array(t).default([]),evidenceRefs:E.array(T_).default([])}).strict().superRefine((_,$)=>{if(!_.modes.includes(_.defaultMode))$.addIssue({code:E.ZodIssueCode.custom,message:"defaultMode must be one of modes",path:["defaultMode"]});let D=new Set(_.operations.flatMap((U)=>U.supportedModes));for(let U of D)if(!_.modes.includes(U))$.addIssue({code:E.ZodIssueCode.custom,message:`operation mode ${U} is not declared in provider modes`,path:["operations"]});if(D.has("live_mutating")){if(!_.credentialRequirements.some((g)=>g.requiredForModes.includes("live_mutating")))$.addIssue({code:E.ZodIssueCode.custom,message:"live_mutating providers require at least one live credential reference requirement",path:["credentialRequirements"]});if(_.auditEvents.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"live_mutating providers require audit events",path:["auditEvents"]})}}),pH=E.object({appId:t,repo:t,priority:E.enum(["p0","p1","p2"]).default("p1"),requiredEvidence:E.array(t).min(1),firstOperations:E.array(t).min(1),blockedUntil:E.array(t).default([])}).strict(),eH=L_(x.providerLiveModeStandard).extend({name:t,version:t,modes:E.array(QD).refine((_)=>["mock","fixture","sandbox","read_only_live","live_mutating"].every(($)=>_.includes($)),"provider live-mode standard must include every canonical provider mode"),requiredCapabilityFields:E.array(t).min(1),liveMutationGate:E.object({requiredMode:E.literal("live_mutating"),requiredChecks:E.array(t).min(1),forbiddenBypassSignals:E.array(t).min(1),disabledLiveSmoke:t}).strict(),noSideEffectSmoke:E.object({requiredForModes:E.array(QD).min(1),commandEvidence:E.array(t).min(1),secretOutputScan:E.boolean().default(!0)}).strict(),credentialPolicy:E.object({acceptedInputs:E.array(E.enum(["credential_ref","lease_ref"])).min(1),rawSecretInputsAllowed:E.literal(!1),missingCredentialBehavior:E.literal("fail_closed"),revocationCheckRequired:E.boolean().default(!0)}).strict(),operationCards:E.array(oH).min(1),firstAdoptionTargets:E.array(pH).min(1),evidenceRefs:E.array(T_).default([])}).strict().superRefine((_,$)=>{let D=new Set(_.firstAdoptionTargets.map((g)=>g.appId)),U=new Set(_.operationCards.map((g)=>g.appId));for(let g of D)if(!U.has(g))$.addIssue({code:E.ZodIssueCode.custom,message:`first adoption target ${g} requires a provider capability card`,path:["firstAdoptionTargets"]})}),aH=E.object({id:E.string().min(1),title:E.string().min(1).optional(),summary:E.string().min(1),text:E.string().optional(),tokens:E.number().int().nonnegative().optional(),source:T_,resourceRefs:E.array(s).default([])}).strict(),MG=L_(x.contextPack).extend({objective:E.string().min(1),budget:E.object({maxTokens:E.number().int().positive().optional(),maxBytes:E.number().int().positive().optional()}).strict().optional(),items:E.array(aH).default([]),citations:E.array(T_).default([]),freshness:E.enum(["fresh","stale","unknown"]).default("unknown"),permissions:E.array(E.string().min(1)).default([]),redactions:E.array(E.string().min(1)).default([]),conflicts:E.array(E.string().min(1)).default([]),uncertainty:E.string().min(1).optional()}).strict(),W$=t.refine((_)=>!_.startsWith("/")&&!_.includes("\\")&&!_.split("/").includes(".."),"Project paths must be relative and cannot contain parent-directory segments"),o4=E.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/,"Project slugs must be lowercase dashed identifiers"),sH=E.enum(["public","internal","private","sensitive"]),_k=E.enum(["draft","active","paused","archived"]),y3=E.enum(["todos","files","mailery","conversations","knowledge","mementos","reports","actions","render","contracts","custom"]),ZG=L_(x.integrationRef).extend({kind:y3,name:E.string().min(1),projectId:o4.optional(),sourcePackage:t.optional(),externalId:t.optional(),uri:H$.optional(),enabled:E.boolean().default(!0),readOnly:E.boolean().default(!0),capabilities:E.array(E.string().min(1)).default([]),freshness:E.enum(["fresh","stale","unknown"]).default("unknown"),resourceRef:s.optional(),evidenceRefs:E.array(T_).default([]),config:o6.optional()}).strict().superRefine((_,$)=>{if(!_.uri&&!(_.sourcePackage&&_.externalId)&&!_.resourceRef)$.addIssue({code:E.ZodIssueCode.custom,message:"Integration refs require uri, resourceRef, or both sourcePackage and externalId",path:["uri"]})}),$k=E.object({schemaRoot:W$.default(".hasna/project"),dashboardManifest:W$.default(".hasna/project/dashboard.render.json"),snapshotsDir:W$.default(".hasna/project/snapshots"),documentsDir:W$.default("documents"),reportsDir:W$.default("reports"),evidenceDir:W$.default(".hasna/project/evidence"),privateDir:W$.default(".hasna/project/private")}).strict(),Dk=L_(x.projectManifest).extend({projectId:o4,slug:o4,name:E.string().min(1),summary:E.string().min(1).optional(),status:_k.default("active"),classification:sH.default("private"),owner:m$.optional(),layout:$k.default({}),integrations:E.array(ZG).default([]),renderManifests:E.array(s).default([]),resourceRefs:E.array(s).default([]),evidenceRefs:E.array(T_).default([]),tags:qD}).strict().superRefine((_,$)=>{let D=new Set,U=new Set;if(_.projectId!==_.slug)$.addIssue({code:E.ZodIssueCode.custom,message:"projectId and slug must match for canonical project manifests",path:["slug"]});for(let[g,I]of _.integrations.entries()){if(D.has(I.id))$.addIssue({code:E.ZodIssueCode.custom,message:"Project manifest integration ids must be unique",path:["integrations",g,"id"]});if(D.add(I.id),I.projectId&&I.projectId!==_.projectId)$.addIssue({code:E.ZodIssueCode.custom,message:"Integration projectId must match the manifest projectId",path:["integrations",g,"projectId"]})}for(let[g,I]of _.renderManifests.entries()){if(I.kind!=="render")$.addIssue({code:E.ZodIssueCode.custom,message:"Project renderManifests must use resource kind render",path:["renderManifests",g,"kind"]});if(U.has(I.id))$.addIssue({code:E.ZodIssueCode.custom,message:"Project renderManifest refs must be unique",path:["renderManifests",g,"id"]});U.add(I.id)}}),gk=E.enum(["local","package","provider","url"]),h3=E.object({id:E.string().min(1),kind:gk,specifier:E.string().min(1),path:W$.optional(),packageName:E.string().min(1).optional(),uri:H$.optional(),provider:y3.optional(),schemaId:u3.optional(),integrity:BG.optional(),resourceRef:s.optional(),optional:E.boolean().default(!1)}).strict().superRefine((_,$)=>{if(_.kind==="local"&&!_.path)$.addIssue({code:E.ZodIssueCode.custom,message:"Local render imports require path",path:["path"]});if(_.kind==="package"&&!_.packageName)$.addIssue({code:E.ZodIssueCode.custom,message:"Package render imports require packageName",path:["packageName"]});if(_.kind==="provider"&&!_.provider)$.addIssue({code:E.ZodIssueCode.custom,message:"Provider render imports require provider",path:["provider"]});if(_.kind==="url"&&!_.uri)$.addIssue({code:E.ZodIssueCode.custom,message:"URL render imports require uri",path:["uri"]})}),Uk=E.enum(["dashboard","canvas","panel","report","document","custom"]),Ik=E.object({id:E.string().min(1),title:E.string().min(1),kind:Uk,default:E.boolean().default(!1),entry:W$.optional(),imports:E.array(h3).default([]),panelRefs:E.array(s).default([]),dataRefs:E.array(s).default([]),layout:o6.optional()}).strict(),jk=L_(x.renderManifest).extend({projectId:o4,name:E.string().min(1),version:E.string().min(1),manifestPath:W$.default(".hasna/project/dashboard.render.json"),renderer:E.enum(["json_render","react_flow","markdown","html","custom"]).default("json_render"),views:E.array(Ik).min(1),imports:E.array(h3).default([]),theme:o6.optional(),compatibility:E.object({minProjectsVersion:E.string().min(1).optional(),minContractsVersion:E.string().min(1).optional()}).strict().optional(),resourceRefs:E.array(s).default([]),evidenceRefs:E.array(T_).default([])}).strict().superRefine((_,$)=>{let D=_.views.filter((I)=>I.default),U=new Set,g=new Set;if(D.length>1)$.addIssue({code:E.ZodIssueCode.custom,message:"Render manifests can have at most one default view",path:["views"]});for(let[I,j]of _.imports.entries()){if(g.has(j.id))$.addIssue({code:E.ZodIssueCode.custom,message:"Render manifest import ids must be unique",path:["imports",I,"id"]});g.add(j.id)}for(let[I,j]of _.views.entries()){if(U.has(j.id))$.addIssue({code:E.ZodIssueCode.custom,message:"Render manifest view ids must be unique",path:["views",I,"id"]});U.add(j.id);let N=new Set;for(let[O,A]of j.imports.entries()){if(N.has(A.id))$.addIssue({code:E.ZodIssueCode.custom,message:"Render view import ids must be unique",path:["views",I,"imports",O,"id"]});N.add(A.id)}for(let[O,A]of j.panelRefs.entries())if(A.kind!=="panel")$.addIssue({code:E.ZodIssueCode.custom,message:"Render view panelRefs must use resource kind panel",path:["views",I,"panelRefs",O,"kind"]})}}),Nk=E.enum(["ready","empty","loading","error","auth_required","unavailable","stale"]),Ek=E.enum(["overview","tasks","files","mailery","conversations","knowledge","mementos","reports","actions","timeline","risks","documents","custom"]),Ok=E.object({id:E.string().min(1),label:E.string().min(1),value:E.union([E.string(),E.number(),E.boolean()]),unit:E.string().min(1).optional(),status:E.enum(["good","warning","critical","unknown"]).default("unknown"),resourceRefs:E.array(s).default([])}).strict(),Ak=E.object({id:E.string().min(1),title:E.string().min(1),summary:E.string().min(1).optional(),status:E.string().min(1).optional(),priority:E.enum(["low","medium","high","critical","unknown"]).default("unknown"),timestamp:K_.optional(),resourceRefs:E.array(s).default([]),evidenceRefs:E.array(T_).default([]),metadata:o6.optional()}).strict(),Lk=E.object({renderer:E.enum(["json_render","react_flow","markdown","html","custom"]).default("json_render"),title:E.string().min(1).optional(),entry:W$.optional(),imports:E.array(h3).default([]),spec:o6.default({})}).strict(),bG=L_(x.projectPanel).extend({projectId:o4,provider:E.object({kind:y3,id:E.string().min(1),name:E.string().min(1).optional(),sourcePackage:t.optional(),externalId:t.optional()}).strict(),kind:Ek,title:E.string().min(1),summary:E.string().min(1).optional(),state:Nk.default("ready"),stateReason:E.string().min(1).optional(),generatedAt:K_,freshness:E.enum(["fresh","stale","unknown"]).default("unknown"),metrics:E.array(Ok).default([]),items:E.array(Ak).default([]),actions:E.array(s).default([]),resourceRefs:E.array(s).default([]),evidenceRefs:E.array(T_).default([]),renderFragment:Lk.optional(),warnings:E.array(E.string().min(1)).default([])}).strict().superRefine((_,$)=>{let D=new Set(["error","auth_required","unavailable","stale"]),U=new Set,g=new Set;if(D.has(_.state)&&!_.stateReason)$.addIssue({code:E.ZodIssueCode.custom,message:"Non-ready provider states require stateReason",path:["stateReason"]});if(_.state==="ready"&&_.metrics.length===0&&_.items.length===0&&!_.renderFragment)$.addIssue({code:E.ZodIssueCode.custom,message:"Ready panels require metrics, items, or a renderFragment; use state=empty for empty panels",path:["state"]});for(let[I,j]of _.metrics.entries()){if(U.has(j.id))$.addIssue({code:E.ZodIssueCode.custom,message:"Project panel metric ids must be unique",path:["metrics",I,"id"]});U.add(j.id)}for(let[I,j]of _.items.entries()){if(g.has(j.id))$.addIssue({code:E.ZodIssueCode.custom,message:"Project panel item ids must be unique",path:["items",I,"id"]});g.add(j.id)}for(let[I,j]of _.actions.entries())if(j.kind!=="action")$.addIssue({code:E.ZodIssueCode.custom,message:"Project panel actions must use resource kind action",path:["actions",I,"kind"]})}),Jk=L_(x.projectSnapshot).extend({projectId:o4,generatedAt:K_,status:e4.default("unknown"),manifestRef:s,renderManifestRef:s.optional(),panels:E.array(bG).default([]),contextPacks:E.array(MG).default([]),proofBundleRefs:E.array(s).default([]),resourceRefs:E.array(s).default([]),evidenceRefs:E.array(T_).default([]),warnings:E.array(E.string().min(1)).default([]),freshness:E.enum(["fresh","stale","unknown"]).default("unknown")}).strict().superRefine((_,$)=>{let D=new Set,U=new Set;if(_.manifestRef.kind!=="project")$.addIssue({code:E.ZodIssueCode.custom,message:"Project snapshot manifestRef must use resource kind project",path:["manifestRef","kind"]});if(_.renderManifestRef&&_.renderManifestRef.kind!=="render")$.addIssue({code:E.ZodIssueCode.custom,message:"Project snapshot renderManifestRef must use resource kind render",path:["renderManifestRef","kind"]});for(let[g,I]of _.proofBundleRefs.entries())if(I.kind!=="proof_bundle")$.addIssue({code:E.ZodIssueCode.custom,message:"Project snapshot proofBundleRefs must use resource kind proof_bundle",path:["proofBundleRefs",g,"kind"]});for(let[g,I]of _.panels.entries()){if(I.projectId!==_.projectId)$.addIssue({code:E.ZodIssueCode.custom,message:"Panel projectId must match snapshot projectId",path:["panels",g,"projectId"]});if(D.has(I.id))$.addIssue({code:E.ZodIssueCode.custom,message:"Project snapshot panel ids must be unique",path:["panels",g,"id"]});D.add(I.id)}for(let[g,I]of _.contextPacks.entries()){if(U.has(I.id))$.addIssue({code:E.ZodIssueCode.custom,message:"Project snapshot context pack ids must be unique",path:["contextPacks",g,"id"]});U.add(I.id)}}),HG=E.object({id:E.string().min(1),kind:E.enum(["command","test","typecheck","lint","eval","security","review","deploy","smoke","manual","other"]),required:E.boolean().default(!0),command:E.string().min(1).optional(),expected:E.string().min(1).optional(),timeoutMs:E.number().int().positive().optional(),resourceRefs:E.array(s).default([])}).strict().superRefine((_,$)=>{if(new Set(["command","test","typecheck","lint","smoke","eval"]).has(_.kind)&&!_.command&&!_.expected)$.addIssue({code:E.ZodIssueCode.custom,message:"Actionable validation checks require command or expected",path:["command"]})}),Pk=L_(x.validationPlan).extend({objective:E.string().min(1),subject:s.optional(),checks:E.array(HG).min(1),verifier:m$.optional(),requiredEvidenceKinds:E.array(x3).default([])}).strict(),zk=E.enum(["open_source","internal_app","platform","app","agent","content","overlay","other"]),Sk=E.enum(["draft","active","deprecated","archived"]),Wk=E.enum(["cli","mcp","library","sdk","rest_api","dashboard","database","auth","billing","worker","daemon","native","browser_extension","ai_provider","media_pipeline","data_pipeline","tests","ci","deployment","docs","other"]),Xk=E.object({key:E.string().regex(/^[A-Z][A-Z0-9_]*$/),description:E.string().min(1),required:E.boolean().default(!1),["secret"]:E.boolean().default(!1),group:E.string().min(1).optional(),default:E.string().optional()}).strict().superRefine((_,$)=>{if(_.secret&&_.default!==void 0)$.addIssue({code:E.ZodIssueCode.custom,message:"Secret scaffold env vars cannot include defaults",path:["default"]})}),Rk=E.object({name:E.string().min(1),command:E.string().min(1),description:E.string().min(1).optional(),required:E.boolean().default(!1)}).strict(),Gk=E.object({packageManager:E.enum(["bun","npm","pnpm","yarn","cargo","pip","other"]).optional(),languages:E.array(E.string().min(1)).default([]),requiredFiles:E.array(E.string().min(1)).default([]),requiredDirectories:E.array(E.string().min(1)).default([]),optionalDirectories:E.array(E.string().min(1)).default([])}).strict(),Yk=L_(x.scaffoldManifest).extend({name:E.string().min(1),version:E.string().min(1),summary:E.string().min(1),type:zk,status:Sk.default("draft"),capabilities:E.array(Wk).default([]),techStack:E.array(E.string().min(1)).default([]),tags:qD,source:s.optional(),output:Gk,env:E.array(Xk).default([]),scripts:E.array(Rk).default([]),validationChecks:E.array(HG).default([]),evidenceRefs:E.array(T_).default([])}).strict().superRefine((_,$)=>{if(_.source?.uri?.startsWith("file://"))$.addIssue({code:E.ZodIssueCode.custom,message:"Public scaffold manifest source refs cannot use local file:// URIs",path:["source","uri"]});if(_.status==="active"&&_.validationChecks.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Active scaffold manifests require validation checks",path:["validationChecks"]});if(_.status==="active"&&_.output.requiredFiles.length===0&&_.output.requiredDirectories.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Active scaffold manifests require at least one required file or directory",path:["output"]})}),Qk=E.enum(["installed","failed","cancelled","partial","unknown"]),Tk=L_(x.scaffoldInstallRecord).extend({scaffoldId:E.string().min(1),scaffoldVersion:E.string().min(1).optional(),manifestRef:s.optional(),target:s,status:Qk,installedAt:K_.optional(),installer:m$.optional(),packageManager:E.enum(["bun","npm","pnpm","yarn","cargo","pip","other"]).optional(),options:o6.optional(),generatedFiles:E.array(s).default([]),evidenceRefs:E.array(T_).default([]),proofBundleRefs:E.array(s).default([])}).strict().superRefine((_,$)=>{if(_.status==="installed"&&!_.installedAt)$.addIssue({code:E.ZodIssueCode.custom,message:"Installed scaffold records require installedAt",path:["installedAt"]});if(_.status==="installed"&&_.generatedFiles.length===0&&_.evidenceRefs.length===0&&_.proofBundleRefs.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Installed scaffold records require generated files, evidence, or proof bundle refs",path:["generatedFiles"]});if((_.status==="failed"||_.status==="partial")&&_.evidenceRefs.length===0&&_.proofBundleRefs.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Failed or partial scaffold records require evidence or proof bundle refs",path:["evidenceRefs"]})}),TD=E.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/,"App ids must be lowercase dashed identifiers"),c3=E.string().regex(/^(@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/,"Must be a valid npm package name"),kG=E.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/,"Must be a semver version"),qk=E.string().regex(/^[0-9a-f]{7,40}$/,"Must be a lowercase git sha (7-40 hex chars)"),Bk=t.refine((_)=>_.startsWith("https://github.com/")||_.startsWith("git+https://github.com/"),"GitHub URLs must start with https://github.com/ or git+https://github.com/"),Vk=E.enum(["active","stub","deprecated","archived"]),Kk=E.enum(["stable","beta","canary","internal"]),Fk=E.object({transport:E.enum(["http","stdio"]).default("http"),bin:E.string().min(1).optional(),url:H$.optional()}).strict(),Mk=E.object({healthPath:E.string().min(1).default("/health"),port:E.number().int().positive().optional(),baseUrl:H$.optional()}).strict(),Zk=E.object({bins:E.array(E.string().min(1)).default([]),mcp:Fk.optional(),http:Mk.optional()}).strict(),bk=L_(x.app).extend({appId:TD,npmName:c3,repoFolder:TD,githubUrl:Bk,projectSlug:o4,surfaces:Zk.default({}),lifecycle:Vk,releaseChannel:Kk.default("stable"),summary:E.string().min(1).optional(),tags:qD}).strict().superRefine((_,$)=>{let D=new Set;for(let[U,g]of _.surfaces.bins.entries()){if(D.has(g))$.addIssue({code:E.ZodIssueCode.custom,message:"App surface bins must be unique",path:["surfaces","bins",U]});D.add(g)}}),Hk=E.enum(["skill","ci","backfilled"]),kk=L_(x.release).extend({appId:TD,package:c3,version:kG,gitSha:qk,publishedAt:K_,publishPath:Hk,changelogRef:s.optional(),evidenceRefs:E.array(T_).default([])}).strict().superRefine((_,$)=>{if(_.publishPath!=="backfilled"&&_.evidenceRefs.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"skill and ci releases require publish evidence; only backfilled releases may omit it",path:["evidenceRefs"]})}),Ck=E.enum(["install","update","rollback","freeze-blocked"]),vk=E.object({cliVersion:E.string().min(1).optional(),mcpHealth:E.enum(["ok","degraded","unavailable","not_checked"]).optional()}).strict().superRefine((_,$)=>{if(!_.cliVersion&&_.mcpHealth===void 0)$.addIssue({code:E.ZodIssueCode.custom,message:"Rollout verification requires at least one concrete verifier field"})}),rk=L_(x.rolloutRecord).extend({appId:TD,package:c3,version:kG,machine:t,action:Ck,result:e4,verifiedBy:vk.optional(),at:K_,evidenceRefs:E.array(T_).default([])}).strict().superRefine((_,$)=>{if(_.action==="freeze-blocked"&&_.result!=="blocked"&&_.result!=="skipped")$.addIssue({code:E.ZodIssueCode.custom,message:"freeze-blocked rollout records must report result blocked or skipped",path:["result"]});let D=Boolean(_.verifiedBy?.cliVersion)||_.verifiedBy?.mcpHealth!==void 0&&_.verifiedBy.mcpHealth!=="not_checked",U=_.verifiedBy?Object.keys(_.verifiedBy).length>0:!1;if((_.action==="install"||_.action==="update")&&_.result==="succeeded"&&(!_.verifiedBy||U&&!D))$.addIssue({code:E.ZodIssueCode.custom,message:"Succeeded install/update rollout records require concrete verification",path:["verifiedBy"]})}),fk=E.enum(["email","telegram","slack","discord","x","blog","rss","webhook","github","other"]),wk=E.enum(["pending","queued","sent","failed","skipped","suppressed"]),uk=E.object({channel:fk,status:wk,deliveredAt:K_.optional(),detail:E.string().min(1).optional()}).strict().superRefine((_,$)=>{if(_.status==="sent"&&!_.deliveredAt)$.addIssue({code:E.ZodIssueCode.custom,message:"Sent announcement channels require deliveredAt",path:["deliveredAt"]});if(_.status==="failed"&&!_.detail)$.addIssue({code:E.ZodIssueCode.custom,message:"Failed announcement channels require detail",path:["detail"]})}),xk=L_(x.announcement).extend({campaignId:t,appId:TD.optional(),releaseRef:s.optional(),channels:E.array(uk).min(1),audienceRef:s,sentAt:K_}).strict().superRefine((_,$)=>{if(_.releaseRef&&_.releaseRef.kind!=="release")$.addIssue({code:E.ZodIssueCode.custom,message:"Announcement releaseRef must use resource kind release",path:["releaseRef","kind"]});if(_.audienceRef.kind!=="audience")$.addIssue({code:E.ZodIssueCode.custom,message:"Announcement audienceRef must use resource kind audience",path:["audienceRef","kind"]})}),yk=E.enum(["tag","attribute","group"]),hk=E.enum(["eq","neq","in","not_in","exists","not_exists"]),NG=E.union([E.string(),E.number(),E.boolean()]),ck=E.object({kind:yk,key:E.string().min(1).optional(),op:hk.default("eq"),value:NG.optional(),values:E.array(NG).default([])}).strict().superRefine((_,$)=>{if(_.kind==="attribute"&&!_.key)$.addIssue({code:E.ZodIssueCode.custom,message:"Attribute predicates require key",path:["key"]});if((_.op==="eq"||_.op==="neq")&&_.value===void 0)$.addIssue({code:E.ZodIssueCode.custom,message:"eq/neq predicates require value",path:["value"]});if((_.op==="in"||_.op==="not_in")&&_.values.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"in/not_in predicates require values",path:["values"]})}),nk=E.object({match:E.enum(["all","any"]).default("all"),predicates:E.array(ck).min(1)}).strict(),dk=E.enum(["opt_in","opt_out","transactional","none"]),mk=L_(x.audience).extend({audienceId:TD,name:t,definition:nk,consentPolicy:dk,suppressionSyncedAt:t4}).strict(),jN=["@hasna/cloud","open-cloud"],ik=E.enum(["aws","gcp","azure","cloudflare","vercel","neon","supabase","postgres","s3","rds","other"]),lk=E.object({id:E.string().min(1),provider:ik,kind:E.enum(["database","bucket","queue","secret","function","worker","cache","topic","scheduler","object_store","other"]),ownerPackage:E.string().min(1),region:E.string().min(1).optional(),accountId:E.string().min(1).optional(),uri:H$.optional(),machineScoped:E.boolean().default(!1)}).strict(),CG=L_(x.appCloudManifest).extend({packageName:E.string().min(1),packageVersion:E.string().min(1).optional(),appId:E.string().min(1),repository:s.optional(),storageMode:E.enum(["local_only","app_owned_cloud","hybrid_local_cache","external_service"]),cloudBoundary:E.enum(["none","app_owned","external_service","local_cache"]),cloudResources:E.array(lk).default([]),localCache:E.object({path:E.string().min(1).optional(),pullMode:E.enum(["manual","daemon","ci","none"]).default("manual"),conflictPolicy:E.enum(["cloud_wins","local_wins","merge","manual_review"]).default("manual_review")}).strict().optional(),forbiddenSharedRuntimes:E.array(E.string().min(1)).default([...jN]),dependencies:E.array(E.string().min(1)).default([]),evidenceRefs:E.array(T_).default([])}).strict().superRefine((_,$)=>{let D=new Set([...jN,..._.forbiddenSharedRuntimes]);if(D.has(_.packageName))$.addIssue({code:E.ZodIssueCode.custom,message:"App-owned cloud manifests cannot be for a forbidden runtime",path:["packageName"]});for(let U of jN)if(!_.forbiddenSharedRuntimes.includes(U))$.addIssue({code:E.ZodIssueCode.custom,message:`forbiddenSharedRuntimes must include ${U}`,path:["forbiddenSharedRuntimes"]});for(let U of D)if(_.dependencies.includes(U))$.addIssue({code:E.ZodIssueCode.custom,message:`App-owned cloud manifests cannot depend on ${U}`,path:["dependencies"]});if(_.storageMode==="local_only"&&_.cloudBoundary!=="none")$.addIssue({code:E.ZodIssueCode.custom,message:"local_only storage requires cloudBoundary none",path:["cloudBoundary"]});if(_.storageMode==="app_owned_cloud"&&_.cloudBoundary!=="app_owned")$.addIssue({code:E.ZodIssueCode.custom,message:"app_owned_cloud storage requires cloudBoundary app_owned",path:["cloudBoundary"]});if(_.storageMode==="hybrid_local_cache"){if(_.cloudBoundary!=="local_cache")$.addIssue({code:E.ZodIssueCode.custom,message:"hybrid_local_cache storage requires cloudBoundary local_cache",path:["cloudBoundary"]});if(!_.localCache)$.addIssue({code:E.ZodIssueCode.custom,message:"hybrid_local_cache storage requires localCache settings",path:["localCache"]})}if(_.storageMode==="external_service"){if(_.cloudBoundary!=="external_service")$.addIssue({code:E.ZodIssueCode.custom,message:"external_service storage requires cloudBoundary external_service",path:["cloudBoundary"]});if(_.cloudResources.length>0)$.addIssue({code:E.ZodIssueCode.custom,message:"external_service storage must not declare app-owned cloudResources",path:["cloudResources"]})}if((_.storageMode==="app_owned_cloud"||_.storageMode==="hybrid_local_cache")&&_.cloudResources.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Cloud-backed storage modes require explicit app-owned cloudResources",path:["cloudResources"]});if(_.cloudBoundary==="none"&&_.cloudResources.length>0)$.addIssue({code:E.ZodIssueCode.custom,message:"cloudBoundary none cannot declare cloudResources",path:["cloudResources"]});_.cloudResources.forEach((U,g)=>{if(U.ownerPackage!==_.packageName)$.addIssue({code:E.ZodIssueCode.custom,message:"Cloud resources must be owned by the app package that declares the manifest",path:["cloudResources",g,"ownerPackage"]})})}),vG=E.enum(["package_manifest","lockfile","source_import","runtime_config","packed_artifact","published_metadata","app_cloud_manifest","remote_config","boundary_doc","other"]),tk=E.enum(["low","medium","high","critical"]),rG=E.object({id:E.string().min(1),kind:vG,severity:tk,path:E.string().min(1).optional(),packageName:E.string().min(1).optional(),pattern:E.string().min(1),message:E.string().min(1),evidenceRefs:E.array(T_).default([])}).strict(),ok=E.object({id:E.string().min(1),kind:vG,status:e4,target:E.string().min(1),command:E.string().min(1).optional(),evidenceRefs:E.array(T_).default([]),findings:E.array(rG).default([])}).strict(),pk=L_(x.noCloudEvidencePack).extend({subject:s,packageName:E.string().min(1).optional(),packageVersion:E.string().min(1).optional(),generatedBy:m$.optional(),scanMode:E.enum(["source_tree","packed_artifact","published_metadata","runtime_config","workspace","ci"]),status:e4,verdict:E.enum(["passed","failed","warning","not_run"]),appCloudManifest:CG.optional(),checks:E.array(ok).min(1),findings:E.array(rG).default([]),evidenceRefs:E.array(T_).default([])}).strict().superRefine((_,$)=>{let D=[..._.findings,..._.checks.flatMap((g)=>g.findings)],U=D.filter((g)=>g.severity==="high"||g.severity==="critical");if(_.verdict==="passed"){if(_.status!=="succeeded")$.addIssue({code:E.ZodIssueCode.custom,message:"Passed no-cloud evidence requires succeeded status",path:["status"]});if(U.length>0)$.addIssue({code:E.ZodIssueCode.custom,message:"Passed no-cloud evidence cannot include high or critical findings",path:["findings"]});if(_.checks.some((g)=>g.status!=="succeeded"))$.addIssue({code:E.ZodIssueCode.custom,message:"Passed no-cloud evidence requires every check to be succeeded",path:["checks"]})}if(_.verdict==="failed"&&D.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Failed no-cloud evidence requires findings",path:["findings"]});if(_.status==="succeeded"&&_.checks.some((g)=>g.status==="failed"))$.addIssue({code:E.ZodIssueCode.custom,message:"Succeeded no-cloud evidence cannot contain failed checks",path:["checks"]});_.checks.forEach((g,I)=>{let j=g.findings.filter((N)=>N.severity==="high"||N.severity==="critical");if(g.status==="succeeded"&&j.length>0)$.addIssue({code:E.ZodIssueCode.custom,message:"Succeeded no-cloud checks cannot contain high or critical findings",path:["checks",I,"findings"]})})}),ek=E.object({checkId:E.string().min(1),status:e4,summary:E.string().min(1).optional(),startedAt:t4,finishedAt:t4,evidenceRefs:E.array(T_).default([])}).strict(),ak=L_(x.proofBundle).extend({subject:s,validationPlanRef:s.optional(),status:e4,verdict:E.enum(["passed","failed","inconclusive","not_run"]).default("inconclusive"),checks:E.array(ek).default([]),verifier:m$.optional(),evidenceRefs:E.array(T_).default([]),residualRisks:E.array(E.string().min(1)).default([]),freshness:E.enum(["fresh","stale","unknown"]).default("unknown")}).strict().superRefine((_,$)=>{if(_.verdict==="passed"){if(_.status!=="succeeded")$.addIssue({code:E.ZodIssueCode.custom,message:"Passed proof bundles must have status succeeded",path:["status"]});if(_.checks.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Passed proof bundles require at least one check result",path:["checks"]});if(_.checks.forEach((U,g)=>{if(U.status!=="succeeded")$.addIssue({code:E.ZodIssueCode.custom,message:"Passed proof bundles require all checks to have status succeeded",path:["checks",g,"status"]})}),!(_.evidenceRefs.length>0||_.checks.some((U)=>U.evidenceRefs.length>0)))$.addIssue({code:E.ZodIssueCode.custom,message:"Passed proof bundles require evidence",path:["evidenceRefs"]});if(!_.verifier)$.addIssue({code:E.ZodIssueCode.custom,message:"Passed proof bundles require a verifier",path:["verifier"]})}if(_.verdict==="not_run"&&_.checks.length>0)$.addIssue({code:E.ZodIssueCode.custom,message:"Not-run proof bundles cannot include check results",path:["checks"]});if(_.verdict==="failed"&&!_.checks.some((D)=>D.status==="failed")&&_.evidenceRefs.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Failed proof bundles require a failed check or evidence",path:["checks"]})}),sk=L_(x.workRun).extend({objective:E.string().min(1),status:e4,actor:m$,traceId:E.string().min(1).optional(),startedAt:t4,finishedAt:t4,constraints:E.array(E.string().min(1)).default([]),resourceRefs:E.array(s).default([]),decisions:E.array(FG).default([]),costEstimates:E.array(TU).default([]),evidenceRefs:E.array(T_).default([]),validationPlanRefs:E.array(s).default([]),proofBundleRefs:E.array(s).default([])}).strict().superRefine((_,$)=>{if(_.startedAt&&_.finishedAt&&Date.parse(_.finishedAt)0||_.proofBundleRefs.length>0;if(_.status==="succeeded"&&!D)$.addIssue({code:E.ZodIssueCode.custom,message:"Succeeded work runs require evidence or a proof bundle",path:["evidenceRefs"]});if((_.status==="failed"||_.status==="blocked")&&!D&&_.decisions.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Failed or blocked work runs require evidence, a proof bundle, or a decision record",path:["evidenceRefs"]})}),_C=Object.freeze({work_run:Object.freeze(["codewith"]),root_request:Object.freeze(["todos"]),pr_group:Object.freeze(["todos"]),leaf_task:Object.freeze(["todos"]),attempt:Object.freeze(["todos"]),writer_generation:Object.freeze(["todos"]),writer_lease:Object.freeze(["repos"]),writer_fence:Object.freeze(["repos"]),provider_profile:Object.freeze(["codewith"]),provider_route:Object.freeze(["codewith"]),admission:Object.freeze(["codewith"]),worker_actor:Object.freeze(["codewith"]),worker:Object.freeze(["codewith"]),runtime:Object.freeze(["codewith"]),repo:Object.freeze(["repos"]),worktree:Object.freeze(["repos"]),branch:Object.freeze(["repos"]),event_stream:Object.freeze(["todos"]),replay_cursor:Object.freeze(["todos"]),handoff:Object.freeze(["todos"]),pull_request:Object.freeze(["todos"]),commit:Object.freeze(["repos"]),review:Object.freeze(["review"]),reviewer:Object.freeze(["review"]),review_run:Object.freeze(["review"]),proof_bundle:Object.freeze(["review"]),repair_cycle:Object.freeze(["todos"]),merge_guard:Object.freeze(["todos"]),merge_operator:Object.freeze(["merge_provider"]),merge_operator_run:Object.freeze(["merge_provider"]),merge_guard_receipt:Object.freeze(["merge_provider"]),merge_outcome:Object.freeze(["merge_provider"]),recovery:Object.freeze(["todos"]),cancellation:Object.freeze(["todos"]),cleanup_eligibility:Object.freeze(["repos"]),cleanup_outcome:Object.freeze(["repos"]),rollback_plan:Object.freeze(["todos"]),rollback_outcome:Object.freeze(["repos"]),terminal_disposition:Object.freeze(["todos"]),openloops_invocation:Object.freeze(["openloops"]),adapter_extension:Object.freeze(["adapter"])}),$C=E.enum(["work_run","root_request","pr_group","leaf_task","attempt","writer_generation","writer_lease","writer_fence","provider_profile","provider_route","admission","worker_actor","worker","runtime","repo","worktree","branch","event_stream","replay_cursor","handoff","pull_request","commit","review","reviewer","review_run","proof_bundle","repair_cycle","merge_guard","merge_operator","merge_operator_run","merge_guard_receipt","merge_outcome","recovery","cancellation","cleanup_eligibility","cleanup_outcome","rollback_plan","rollback_outcome","terminal_disposition","openloops_invocation","adapter_extension"]),DC=E.enum(["todos","codewith","repos","review","merge_provider","openloops","adapter"]),p4=E.string().regex(/^[a-f0-9]{64}$/),PN=E.string().trim().min(3).max(256),fG=/^[a-f0-9]{32}$/;function gC(_,$,D){return`${_}:${$}:opaque-${D.slice(0,32)}`}function UC(_){return`evidence:opaque-${_.slice(0,32)}`}var wG=PN.refine((_)=>{let D=_.startsWith("task_to_pr_projection:opaque-")?_.slice(29):"";return fG.test(D)},"Projection ids must use a nonsemantic 128-bit lowercase hexadecimal surrogate"),n3=PN.refine((_)=>{let D=_.startsWith("attempt_nonce:opaque-")?_.slice(21):"";return fG.test(D)},"Attempt nonces must use a nonsemantic 128-bit lowercase hexadecimal surrogate"),IC=new Set(["writer_lease","writer_fence","provider_profile","provider_route","admission","worker_actor","worker","runtime","worktree","merge_operator","merge_operator_run","merge_guard_receipt","merge_outcome","openloops_invocation","adapter_extension"]),d3=E.object({role:$C,authority:DC,id:PN,digest:p4,redaction:E.enum(["none","partial","full"])}).strict().superRefine((_,$)=>{let D=_C[_.role];if(!D.includes(_.authority))$.addIssue({code:E.ZodIssueCode.custom,message:`${_.role} refs must be owned by ${D.join(" or ")}`,path:["authority"]});if(IC.has(_.role)&&_.redaction==="none")$.addIssue({code:E.ZodIssueCode.custom,message:`${_.role} refs must be redacted and cannot carry a raw locator or credential`,path:["redaction"]});let U=gC(_.role,_.authority,_.digest);if(_.id!==U)$.addIssue({code:E.ZodIssueCode.custom,message:"Reference ids must be nonsemantic authority-bound surrogates derived from the canonical role, authority, and owner-record digest",path:["id"]})}),X$=E.object({id:PN,digest:p4,redaction:E.enum(["partial","full"])}).strict().superRefine((_,$)=>{if(_.id!==UC(_.digest))$.addIssue({code:E.ZodIssueCode.custom,message:"Evidence ids must be nonsemantic owner-resolvable surrogates derived from their canonical digest",path:["id"]})});function uG(_,$,D,U){if(_.id===$.id||_.digest===$.digest)D.addIssue({code:E.ZodIssueCode.custom,message:"Stop and lease-revocation facts require distinct evidence identities and digests",path:U})}function b(_){return d3.refine(($)=>$.role===_,{message:`Reference must use role ${_}`,path:["role"]})}function B_(_,$){return _.role===$.role&&_.authority===$.authority&&_.id===$.id&&_.digest===$.digest&&_.redaction===$.redaction}function m3(_,$){return _.role===$.role&&_.authority===$.authority&&_.id===$.id}function ED(_,$,D,U,g){if(m3(_,$))D.addIssue({code:E.ZodIssueCode.custom,message:`${g} requires a fresh canonical role/authority/id`,path:U});if(_.digest===$.digest)D.addIssue({code:E.ZodIssueCode.custom,message:`${g} requires a fresh canonical digest`,path:U})}function ON(_){return`${_.role}\x00${_.authority}\x00${_.id}`}function e_(_,$){return _.algorithm===$.algorithm&&_.value===$.value}var Q_=E.object({algorithm:E.enum(["sha1","sha256"]),value:E.string().regex(/^[a-f0-9]+$/)}).strict().superRefine((_,$)=>{let D=_.algorithm==="sha1"?40:64;if(_.value.length!==D)$.addIssue({code:E.ZodIssueCode.custom,message:`${_.algorithm} object ids must contain exactly ${D} lowercase hex characters`,path:["value"]})});function EG(_){if(_.canonicalizationVersion===1){let D=JSON.stringify(["hasna.task_to_pr_projection.binding.v1",_.canonicalizationVersion,_.rootRequestRef.id,_.rootRequestRef.digest,_.prGroupRef.id,_.prGroupRef.digest,_.leafTaskRef.id,_.leafTaskRef.digest,_.repoRef.id,_.repoRef.digest,_.baseHead.algorithm,_.baseHead.value,_.frozenScopeDigest]);return gG("sha256").update(D,"utf8").digest("hex")}let $=JSON.stringify(["hasna.task_to_pr_projection.binding.v2",_.canonicalizationVersion,...[_.rootRequestRef,_.prGroupRef,_.leafTaskRef,_.repoRef,_.worktreeRef,_.branchRef].flatMap((D)=>[D.role,D.authority,D.id,D.digest]),_.baseHead.algorithm,_.baseHead.value,_.frozenScopeDigest]);return gG("sha256").update($,"utf8").digest("hex")}var jC=E.object({ref:b("attempt"),nonce:n3,admissionRef:b("admission"),admissionWriterGenerationRef:b("writer_generation"),workerActorRef:b("worker_actor"),workerRef:b("worker"),runtimeRef:b("runtime"),writerGenerationRef:b("writer_generation"),writerLeaseRef:b("writer_lease"),writerFenceRef:b("writer_fence"),providerProfileRef:b("provider_profile"),providerRouteRef:b("provider_route")}).strict(),NC=E.object({repoRef:b("repo"),worktreeRef:b("worktree"),branchRef:b("branch"),baseHead:Q_,branchHead:Q_}).strict(),EC=E.object({streamRef:b("event_stream"),replayCursorRef:b("replay_cursor"),sequence:E.number().int().safe().nonnegative(),prefixDigest:p4}).strict(),OC=E.object({ref:b("handoff"),previousAttemptRef:b("attempt"),nextAttemptRef:b("attempt"),previousWriterGenerationRef:b("writer_generation"),nextWriterGenerationRef:b("writer_generation"),stoppedWorkRunRef:b("work_run"),stopEvidenceRef:X$,leaseRevocationEvidenceRef:X$}).strict().superRefine((_,$)=>{ED(_.previousAttemptRef,_.nextAttemptRef,$,["nextAttemptRef"],"Handoff attempt rotation"),ED(_.previousWriterGenerationRef,_.nextWriterGenerationRef,$,["nextWriterGenerationRef"],"Handoff writer-generation rotation"),uG(_.stopEvidenceRef,_.leaseRevocationEvidenceRef,$,["leaseRevocationEvidenceRef"])}),AC=E.object({ref:b("review"),pullRequestRef:b("pull_request"),base:Q_,head:Q_,reviewerRef:b("reviewer"),reviewRunRef:b("review_run"),proofBundleRef:b("proof_bundle"),verdict:E.enum(["approved","changes_requested","blocked"]),reviewedAt:K_}).strict(),LC=E.object({pullRequestRef:b("pull_request"),remoteBranchRef:b("branch"),expectedBase:Q_,providerPullRequestBase:Q_,localHead:Q_,remoteHead:Q_,providerPullRequestHead:Q_,equalityProofRef:b("proof_bundle"),ciProofBundleRefs:E.array(b("proof_bundle")).min(1),verifiedAt:K_}).strict().superRefine((_,$)=>{if(!e_(_.expectedBase,_.providerPullRequestBase))$.addIssue({code:E.ZodIssueCode.custom,message:"Expected and provider-observed pull-request bases must be exactly equal",path:["providerPullRequestBase"]});if(!e_(_.localHead,_.remoteHead)||!e_(_.localHead,_.providerPullRequestHead))$.addIssue({code:E.ZodIssueCode.custom,message:"Local, remote, and provider pull-request heads must be exactly equal",path:["providerPullRequestHead"]});let D=_.ciProofBundleRefs.map(ON);if(new Set(D).size!==D.length)$.addIssue({code:E.ZodIssueCode.custom,message:"CI proof bundle refs must have unique canonical identities",path:["ciProofBundleRefs"]});let U=_.ciProofBundleRefs.map((g)=>g.digest);if(new Set(U).size!==U.length)$.addIssue({code:E.ZodIssueCode.custom,message:"CI proof bundle refs must have unique canonical digests",path:["ciProofBundleRefs"]});if(_.ciProofBundleRefs.some((g)=>m3(g,_.equalityProofRef)))$.addIssue({code:E.ZodIssueCode.custom,message:"Head-equality and CI proof refs must have distinct canonical identities",path:["ciProofBundleRefs"]});if(_.ciProofBundleRefs.some((g)=>g.digest===_.equalityProofRef.digest))$.addIssue({code:E.ZodIssueCode.custom,message:"Head-equality and CI proof refs must have distinct canonical digests",path:["ciProofBundleRefs"]})}),JC=E.object({ref:b("repair_cycle"),cycle:E.number().int().min(0).max(2),cap:E.literal(2),exhausted:E.boolean(),latestRepairRef:b("repair_cycle").optional()}).strict().superRefine((_,$)=>{if(_.exhausted!==(_.cycle===_.cap))$.addIssue({code:E.ZodIssueCode.custom,message:"Repair exhaustion must equal the cumulative cycle cap",path:["exhausted"]});if(_.cycle===0&&_.latestRepairRef)$.addIssue({code:E.ZodIssueCode.custom,message:"Cycle zero cannot reference a repair",path:["latestRepairRef"]});if(_.cycle>0&&!_.latestRepairRef)$.addIssue({code:E.ZodIssueCode.custom,message:"Non-zero repair state requires the latest immutable repair ref",path:["latestRepairRef"]});if(_.latestRepairRef&&m3(_.ref,_.latestRepairRef))$.addIssue({code:E.ZodIssueCode.custom,message:"Repair-state and latest-repair refs must be distinct canonical records",path:["latestRepairRef"]});if(_.latestRepairRef&&_.ref.digest===_.latestRepairRef.digest)$.addIssue({code:E.ZodIssueCode.custom,message:"Repair-state and latest-repair refs must have distinct canonical digests",path:["latestRepairRef"]})}),PC=E.object({ref:b("merge_guard"),pullRequestRef:b("pull_request"),expectedBase:Q_,expectedHead:Q_,reviewRefs:E.array(b("review")).min(1),proofBundleRefs:E.array(b("proof_bundle")).min(1),operatorRef:b("merge_operator"),operatorRunRef:b("merge_operator_run"),providerGuardReceiptRef:b("merge_guard_receipt"),mechanism:E.enum(["compare_and_swap","queue_expected_head"]),decision:E.enum(["eligible","denied","consumed","revoked"]),evaluatedAt:K_}).strict().superRefine((_,$)=>{if(new Set(_.reviewRefs.map((I)=>I.id)).size!==_.reviewRefs.length)$.addIssue({code:E.ZodIssueCode.custom,message:"Merge guard review refs must be unique",path:["reviewRefs"]});if(new Set(_.proofBundleRefs.map(ON)).size!==_.proofBundleRefs.length)$.addIssue({code:E.ZodIssueCode.custom,message:"Merge guard proof refs must have unique canonical identities",path:["proofBundleRefs"]});if(new Set(_.proofBundleRefs.map((I)=>I.digest)).size!==_.proofBundleRefs.length)$.addIssue({code:E.ZodIssueCode.custom,message:"Merge guard proof refs must have unique canonical digests",path:["proofBundleRefs"]})}),zC=E.object({ref:b("merge_outcome"),guardRef:b("merge_guard"),pullRequestRef:b("pull_request"),expectedBase:Q_,observedBase:Q_,expectedHead:Q_,observedHead:Q_,status:E.enum(["merged","closed_unmerged","refused","head_drift","base_drift"]),mergeCommitRef:b("commit").optional(),finishedAt:K_,evidenceRefs:E.array(X$).min(1)}).strict().superRefine((_,$)=>{let D=e_(_.expectedBase,_.observedBase),U=e_(_.expectedHead,_.observedHead);if(_.status==="merged"){if(!D||!U)$.addIssue({code:E.ZodIssueCode.custom,message:"Merged outcomes require observed base and head to equal the guarded values",path:[!D?"observedBase":"observedHead"]});if(!_.mergeCommitRef)$.addIssue({code:E.ZodIssueCode.custom,message:"Merged outcomes require an immutable merge commit ref",path:["mergeCommitRef"]})}else if(_.mergeCommitRef)$.addIssue({code:E.ZodIssueCode.custom,message:"Unmerged outcomes cannot claim a merge commit",path:["mergeCommitRef"]});if(_.status==="head_drift"&&U)$.addIssue({code:E.ZodIssueCode.custom,message:"Head-drift outcomes require distinct expected and observed heads",path:["observedHead"]});if(_.status==="head_drift"&&!D)$.addIssue({code:E.ZodIssueCode.custom,message:"Head-drift outcomes cannot also carry an unclassified base drift",path:["observedBase"]});if(_.status==="base_drift"&&D)$.addIssue({code:E.ZodIssueCode.custom,message:"Base-drift outcomes require distinct expected and observed bases",path:["observedBase"]});if(_.status==="base_drift"&&!U)$.addIssue({code:E.ZodIssueCode.custom,message:"Base-drift outcomes cannot also carry an unclassified head drift",path:["observedHead"]});if(!U&&_.status!=="head_drift")$.addIssue({code:E.ZodIssueCode.custom,message:"Only a head_drift outcome may record an observed head that differs from the expected head",path:["observedHead"]});if(!D&&_.status!=="base_drift")$.addIssue({code:E.ZodIssueCode.custom,message:"Only a base_drift outcome may record an observed base that differs from the expected base",path:["observedBase"]})}),SC=E.object({guard:PC,outcome:zC.optional()}).strict(),WC=E.object({ref:b("recovery"),priorAttemptRef:b("attempt"),priorWriterGenerationRef:b("writer_generation"),priorWorkRunRef:b("work_run"),successorAttemptNonce:n3,successorWriterGenerationRef:b("writer_generation"),preservedStateRefs:E.array(d3).min(1),stopEvidenceRef:X$,leaseRevocationEvidenceRef:X$}).strict().superRefine((_,$)=>{ED(_.priorWriterGenerationRef,_.successorWriterGenerationRef,$,["successorWriterGenerationRef"],"Recovery writer-generation rotation"),uG(_.stopEvidenceRef,_.leaseRevocationEvidenceRef,$,["leaseRevocationEvidenceRef"])}),XC=E.object({ref:b("cancellation"),cancelledAttemptRef:b("attempt"),preservedStateRefs:E.array(d3).min(1),evidenceRefs:E.array(X$).min(1)}).strict(),RC=E.object({ref:b("cleanup_eligibility"),status:E.enum(["not_ready","preserved","blocked","eligible"]),targetWorktreeRef:b("worktree"),eventCursorRef:b("replay_cursor"),terminalDispositionRef:b("terminal_disposition"),writerLeaseRef:b("writer_lease"),leaseRevocationEvidenceRef:X$,consumedEventEvidenceRef:X$,evaluatedAt:K_,evidenceRefs:E.array(X$).min(1)}).strict().superRefine((_,$)=>{if(_.leaseRevocationEvidenceRef.id===_.consumedEventEvidenceRef.id||_.leaseRevocationEvidenceRef.digest===_.consumedEventEvidenceRef.digest)$.addIssue({code:E.ZodIssueCode.custom,message:"Cleanup lease-revocation and consumed-event facts require distinct evidence identities and digests",path:["consumedEventEvidenceRef"]})}),GC=E.object({ref:b("cleanup_outcome"),eligibilityRef:b("cleanup_eligibility"),targetWorktreeRef:b("worktree"),status:E.enum(["preserved","deleted","failed","skipped"]),finishedAt:K_,evidenceRefs:E.array(X$).min(1)}).strict(),YC=E.object({eligibility:RC,outcome:GC.optional()}).strict().superRefine((_,$)=>{if(_.outcome&&!B_(_.outcome.eligibilityRef,_.eligibility.ref))$.addIssue({code:E.ZodIssueCode.custom,message:"Cleanup outcomes must bind the exact eligibility decision",path:["outcome","eligibilityRef"]});if(_.outcome&&!B_(_.outcome.targetWorktreeRef,_.eligibility.targetWorktreeRef))$.addIssue({code:E.ZodIssueCode.custom,message:"Cleanup eligibility and outcome must bind the same target worktree",path:["outcome","targetWorktreeRef"]});if(_.outcome?.status==="deleted"&&_.eligibility.status!=="eligible")$.addIssue({code:E.ZodIssueCode.custom,message:"Deletion requires an eligible cleanup decision",path:["outcome","status"]})}),QC=E.object({plan:E.object({ref:b("rollback_plan"),targetRef:E.union([b("commit"),b("branch")]),createdAt:K_}).strict(),outcome:E.object({ref:b("rollback_outcome"),planRef:b("rollback_plan"),targetRef:E.union([b("commit"),b("branch")]),status:E.enum(["not_run","succeeded","failed","cancelled"]),finishedAt:K_,evidenceRefs:E.array(X$).min(1)}).strict().optional()}).strict().superRefine((_,$)=>{if(_.outcome&&!B_(_.outcome.planRef,_.plan.ref))$.addIssue({code:E.ZodIssueCode.custom,message:"Rollback outcomes must bind the exact rollback plan",path:["outcome","planRef"]});if(_.outcome&&!B_(_.outcome.targetRef,_.plan.targetRef))$.addIssue({code:E.ZodIssueCode.custom,message:"Rollback outcomes must bind the exact rollback target",path:["outcome","targetRef"]});if(_.outcome&&Date.parse(_.outcome.finishedAt)({category:"ci_proof",ref:$,base:_.exactHead.expectedBase,head:_.exactHead.localHead}))]:[],..._.reviews.flatMap(($)=>[{category:"review_proof",ref:$.proofBundleRef,base:$.base,head:$.head},{category:"review_record",ref:$.ref,base:$.base,head:$.head},{category:"review_run",ref:$.reviewRunRef,base:$.base,head:$.head}]),..._.merge?[{category:"merge_guard",ref:_.merge.guard.ref},{category:"provider_guard_receipt",ref:_.merge.guard.providerGuardReceiptRef,base:_.merge.guard.expectedBase,head:_.merge.guard.expectedHead}]:[],..._.cleanup?[{category:"cleanup_eligibility",ref:_.cleanup.eligibility.ref}]:[],..._.rollback?[{category:"rollback_plan",ref:_.rollback.plan.ref}]:[],..._.terminalDispositionRef?[{category:"terminal_disposition",ref:_.terminalDispositionRef}]:[]]}function BC(_,$){if(_.category!==$.category)return!1;if(_.category==="projection_id"&&$.category==="projection_id")return _.projectionId===$.projectionId;if(_.category==="attempt_nonce"&&$.category==="attempt_nonce")return _.nonce===$.nonce;if(_.category==="replay_prefix"&&$.category==="replay_prefix")return _.sequence===$.sequence&&_.prefixDigest===$.prefixDigest;if(!("ref"in _)||!("ref"in $))return!1;return B_(_.ref,$.ref)&&(("head"in _)&&("head"in $)&&("base"in _)&&("base"in $)&&e_(_.base,$.base)&&e_(_.head,$.head)||!("head"in _)&&!("head"in $)&&!("base"in _)&&!("base"in $))}var VC="hasna.task_to_pr_adapter_extension.",KC=E.object({mode:E.enum(["local","cloud"]),schema:u3,ref:b("adapter_extension"),digest:p4}).strict().superRefine((_,$)=>{if(!_.schema.startsWith(VC))$.addIssue({code:E.ZodIssueCode.custom,message:"Adapter extension schema ids must use the permanently reserved task-to-PR adapter-extension namespace",path:["schema"]})}),FC=E.enum(["admitted","running","handed_off","reviewing","repairing","merge_ready","merged","closed_unmerged","failed","blocked","cancelled","recovering","cleanup_complete","rolled_back"]),OG=new Set(["admitted","running","handed_off"]),AG=new Set(["merged","closed_unmerged","failed","blocked","cancelled","cleanup_complete","rolled_back"]),MC={admitted:new Set(["absent","denied:none","revoked:none"]),running:new Set(["absent","denied:none","revoked:none"]),handed_off:new Set(["absent","denied:none","revoked:none"]),reviewing:new Set(["absent","denied:none","revoked:none"]),repairing:new Set(["absent","denied:none","revoked:none"]),merge_ready:new Set(["eligible:none"]),merged:new Set(["consumed:merged"]),closed_unmerged:new Set(["consumed:closed_unmerged","consumed:refused","consumed:head_drift","consumed:base_drift"]),failed:new Set(["absent","revoked:none"]),blocked:new Set(["absent","revoked:none"]),cancelled:new Set(["absent","revoked:none"]),recovering:new Set(["absent","denied:none","revoked:none"]),cleanup_complete:new Set(["absent","revoked:none","consumed:merged","consumed:closed_unmerged","consumed:refused","consumed:head_drift","consumed:base_drift"]),rolled_back:new Set(["consumed:merged"])},ZC=E.object({schema:E.literal(x.taskToPrProjection),id:wG,createdAt:K_,canonicalizationVersion:E.union([E.literal(1),E.literal(2)]),identityDigest:p4,frozenScopeDigest:p4,state:FC,workRunRef:b("work_run"),rootRequestRef:b("root_request"),prGroupRef:b("pr_group"),leafTaskRef:b("leaf_task"),attempt:jC,repository:NC,events:EC,openLoopsInvocationRef:b("openloops_invocation").optional(),pullRequestRef:b("pull_request").optional(),exactHead:LC.optional(),handoff:OC.optional(),reviews:E.array(AC).default([]),repair:JC,merge:SC.optional(),recovery:WC.optional(),cancellation:XC.optional(),cleanup:YC.optional(),rollback:QC.optional(),terminalDispositionRef:b("terminal_disposition").optional(),provenanceLedger:E.array(TC),adapterExtensions:E.array(KC).default([]),evidenceRefs:E.array(X$).default([])}).strict().superRefine((_,$)=>{let D=_.canonicalizationVersion===1?EG({canonicalizationVersion:1,rootRequestRef:_.rootRequestRef,prGroupRef:_.prGroupRef,leafTaskRef:_.leafTaskRef,repoRef:_.repository.repoRef,baseHead:_.repository.baseHead,frozenScopeDigest:_.frozenScopeDigest}):EG({canonicalizationVersion:2,rootRequestRef:_.rootRequestRef,prGroupRef:_.prGroupRef,leafTaskRef:_.leafTaskRef,repoRef:_.repository.repoRef,worktreeRef:_.repository.worktreeRef,branchRef:_.repository.branchRef,baseHead:_.repository.baseHead,frozenScopeDigest:_.frozenScopeDigest});if(_.identityDigest!==D)$.addIssue({code:E.ZodIssueCode.custom,message:"identityDigest must equal the selected v1 compatibility or v2 branch/worktree-bound canonical identity digest",path:["identityDigest"]});let U=new Set,g=new Set,I=new Set,j=new Set,N=new Set,O=new Set;for(let[T,q]of _.provenanceLedger.entries()){if("ref"in q){if(U.has(q.ref.id))$.addIssue({code:E.ZodIssueCode.custom,message:"Provenance entries cannot reuse a canonical owner id across categories or generations",path:["provenanceLedger",T,"ref","id"]});if(U.add(q.ref.id),g.has(q.ref.digest))$.addIssue({code:E.ZodIssueCode.custom,message:"Provenance entries cannot reuse a canonical digest across categories or generations",path:["provenanceLedger",T,"ref","digest"]});g.add(q.ref.digest);continue}if(q.category==="projection_id"){if(I.has(q.projectionId))$.addIssue({code:E.ZodIssueCode.custom,message:"Projection identity provenance tombstones must be globally unique",path:["provenanceLedger",T,"projectionId"]});I.add(q.projectionId);continue}if(q.category==="attempt_nonce"){if(j.has(q.nonce))$.addIssue({code:E.ZodIssueCode.custom,message:"Attempt nonce provenance tombstones must be globally unique",path:["provenanceLedger",T,"nonce"]});j.add(q.nonce);continue}if(N.has(q.prefixDigest))$.addIssue({code:E.ZodIssueCode.custom,message:"Replay prefix provenance tombstones must be globally unique",path:["provenanceLedger",T,"prefixDigest"]});if(N.add(q.prefixDigest),O.has(q.sequence))$.addIssue({code:E.ZodIssueCode.custom,message:"Replay prefix provenance entries must bind globally unique replay sequences",path:["provenanceLedger",T,"sequence"]});O.add(q.sequence)}for(let T of qC(_))if(!_.provenanceLedger.some((q)=>BC(q,T)))$.addIssue({code:E.ZodIssueCode.custom,message:`The active ${T.category} identity must be represented exactly in the monotonic provenance ledger`,path:["provenanceLedger"]});let A=[_.rootRequestRef,_.prGroupRef,_.leafTaskRef,_.repository.repoRef,_.repository.worktreeRef,_.repository.branchRef,_.events.streamRef,..._.pullRequestRef?[_.pullRequestRef]:[]],L=(T,q,K,Z)=>{let e=new Set(q.map((I_)=>I_.role)),g_=new Set;for(let[I_,J_]of T.entries()){if(!e.has(J_.role))$.addIssue({code:E.ZodIssueCode.custom,message:`${Z} cannot preserve an unrecognized ${J_.role} role`,path:[...K,I_]});if(g_.has(J_.role))$.addIssue({code:E.ZodIssueCode.custom,message:`${Z} must preserve exactly one canonical ref per role`,path:[...K,I_]});g_.add(J_.role)}if(T.length!==q.length)$.addIssue({code:E.ZodIssueCode.custom,message:`${Z} preservation refs must exactly equal the required canonical role set`,path:K});for(let I_ of q)if(!T.some((J_)=>B_(J_,I_)))$.addIssue({code:E.ZodIssueCode.custom,message:`${Z} must preserve ${I_.role}`,path:K})};if(_.handoff&&!B_(_.handoff.nextWriterGenerationRef,_.attempt.writerGenerationRef))$.addIssue({code:E.ZodIssueCode.custom,message:"Handoff next generation must be the current attempt writer generation",path:["handoff","nextWriterGenerationRef"]});if(_.handoff&&!B_(_.handoff.nextAttemptRef,_.attempt.ref))$.addIssue({code:E.ZodIssueCode.custom,message:"Handoff next attempt must be the current attempt",path:["handoff","nextAttemptRef"]});if(_.handoff)ED(_.handoff.stoppedWorkRunRef,_.workRunRef,$,["handoff","stoppedWorkRunRef"],"Handoff WorkRun rotation");if(_.recovery){if(_.recovery.successorAttemptNonce!==_.attempt.nonce)$.addIssue({code:E.ZodIssueCode.custom,message:"Recovery successor nonce must equal the current attempt nonce",path:["recovery","successorAttemptNonce"]});if(!B_(_.recovery.successorWriterGenerationRef,_.attempt.writerGenerationRef))$.addIssue({code:E.ZodIssueCode.custom,message:"Recovery successor generation must equal the current writer generation",path:["recovery","successorWriterGenerationRef"]});ED(_.recovery.priorAttemptRef,_.attempt.ref,$,["recovery","priorAttemptRef"],"Recovery attempt rotation"),ED(_.recovery.priorWorkRunRef,_.workRunRef,$,["recovery","priorWorkRunRef"],"Recovery WorkRun rotation"),L(_.recovery.preservedStateRefs,[_.recovery.priorWorkRunRef,...A],["recovery","preservedStateRefs"],"Recovery")}if(_.cancellation&&!B_(_.cancellation.cancelledAttemptRef,_.attempt.ref))$.addIssue({code:E.ZodIssueCode.custom,message:"Cancellation must bind the current attempt",path:["cancellation","cancelledAttemptRef"]});if(_.cancellation)L(_.cancellation.preservedStateRefs,[_.workRunRef,_.attempt.ref,...A],["cancellation","preservedStateRefs"],"Cancellation");if(_.cancellation&&_.recovery)$.addIssue({code:E.ZodIssueCode.custom,message:"A projection cannot be both the cancellation and recovery snapshot",path:["recovery"]});if(_.handoff&&_.recovery)$.addIssue({code:E.ZodIssueCode.custom,message:"A projection cannot be both the handoff and recovery snapshot",path:["recovery"]});if(_.cleanup&&!B_(_.cleanup.eligibility.eventCursorRef,_.events.replayCursorRef))$.addIssue({code:E.ZodIssueCode.custom,message:"Cleanup eligibility must bind the current canonical replay cursor",path:["cleanup","eligibility","eventCursorRef"]});if(_.cleanup&&(!_.terminalDispositionRef||!B_(_.cleanup.eligibility.terminalDispositionRef,_.terminalDispositionRef)))$.addIssue({code:E.ZodIssueCode.custom,message:"Cleanup eligibility must bind the exact durable terminal owner fact",path:["cleanup","eligibility","terminalDispositionRef"]});if(_.cleanup&&!B_(_.cleanup.eligibility.writerLeaseRef,_.attempt.writerLeaseRef))$.addIssue({code:E.ZodIssueCode.custom,message:"Cleanup eligibility must bind the exact writer lease being revoked",path:["cleanup","eligibility","writerLeaseRef"]});if(_.cleanup&&!B_(_.cleanup.eligibility.targetWorktreeRef,_.repository.worktreeRef))$.addIssue({code:E.ZodIssueCode.custom,message:"Cleanup eligibility must bind the canonical worktree",path:["cleanup","eligibility","targetWorktreeRef"]});if(_.pullRequestRef){if(_.exactHead&&!B_(_.exactHead.pullRequestRef,_.pullRequestRef))$.addIssue({code:E.ZodIssueCode.custom,message:"Exact-head proof must bind the canonical pull request ref",path:["exactHead","pullRequestRef"]});for(let[T,q]of _.reviews.entries())if(!B_(q.pullRequestRef,_.pullRequestRef))$.addIssue({code:E.ZodIssueCode.custom,message:"Every review must bind the canonical pull request ref",path:["reviews",T,"pullRequestRef"]});if(_.merge&&!B_(_.merge.guard.pullRequestRef,_.pullRequestRef))$.addIssue({code:E.ZodIssueCode.custom,message:"Merge guard must bind the canonical pull request ref",path:["merge","guard","pullRequestRef"]});if(_.merge?.outcome&&!B_(_.merge.outcome.pullRequestRef,_.pullRequestRef))$.addIssue({code:E.ZodIssueCode.custom,message:"Merge outcome must bind the canonical pull request ref",path:["merge","outcome","pullRequestRef"]})}else if(_.exactHead||_.reviews.length>0||_.merge)$.addIssue({code:E.ZodIssueCode.custom,message:"Review and merge state require a canonical pull request ref",path:["pullRequestRef"]});if(_.exactHead&&!e_(_.exactHead.localHead,_.repository.branchHead))$.addIssue({code:E.ZodIssueCode.custom,message:"Exact local head must equal the canonical branch head",path:["exactHead","localHead"]});if(_.exactHead&&!e_(_.exactHead.expectedBase,_.repository.baseHead))$.addIssue({code:E.ZodIssueCode.custom,message:"Exact-head expected base must equal the canonical repository base",path:["exactHead","expectedBase"]});if(_.exactHead&&!B_(_.exactHead.remoteBranchRef,_.repository.branchRef))$.addIssue({code:E.ZodIssueCode.custom,message:"Exact-head remote branch ref must equal the canonical repository branch ref",path:["exactHead","remoteBranchRef"]});if(_.exactHead&&Date.parse(_.exactHead.verifiedAt)0&&!_.exactHead)$.addIssue({code:E.ZodIssueCode.custom,message:"Reviews require local/remote/provider exact-head proof",path:["exactHead"]});if(_.exactHead){let T=[{ref:_.exactHead.equalityProofRef,path:["exactHead","equalityProofRef"]},..._.exactHead.ciProofBundleRefs.map((Z,e)=>({ref:Z,path:["exactHead","ciProofBundleRefs",e]})),..._.reviews.map((Z,e)=>({ref:Z.proofBundleRef,path:["reviews",e,"proofBundleRef"]}))],q=new Set,K=new Set;for(let Z of T){let e=ON(Z.ref);if(q.has(e))$.addIssue({code:E.ZodIssueCode.custom,message:"Exact-head equality, CI, and review proof obligations require globally unique canonical identities",path:Z.path});if(q.add(e),K.has(Z.ref.digest))$.addIssue({code:E.ZodIssueCode.custom,message:"Exact-head equality, CI, and review proof obligations require globally unique canonical digests",path:Z.path});K.add(Z.ref.digest)}}let z=new Set,W=new Set,J=new Set,P=new Set,S=new Set,X=new Set,G=new Set,R=new Set;for(let[T,q]of _.reviews.entries()){if(!e_(q.base,_.repository.baseHead))$.addIssue({code:E.ZodIssueCode.custom,message:"Review base must equal the exact canonical pull-request base",path:["reviews",T,"base"]});if(!e_(q.head,_.repository.branchHead))$.addIssue({code:E.ZodIssueCode.custom,message:"Review head must equal the exact canonical branch head",path:["reviews",T,"head"]});for(let[Z,e,g_]of[[q.ref.id,z,"ref"],[q.reviewerRef.id,J,"reviewerRef"],[q.reviewRunRef.id,S,"reviewRunRef"]]){if(e.has(Z))$.addIssue({code:E.ZodIssueCode.custom,message:"Review, reviewer, and review-run refs must each be unique",path:["reviews",T,g_]});e.add(Z)}if(W.has(q.ref.digest))$.addIssue({code:E.ZodIssueCode.custom,message:"Review refs must resolve to distinct canonical record digests",path:["reviews",T,"ref"]});if(W.add(q.ref.digest),P.has(q.reviewerRef.digest))$.addIssue({code:E.ZodIssueCode.custom,message:"Reviewer refs must resolve to distinct canonical actor digests",path:["reviews",T,"reviewerRef"]});if(P.add(q.reviewerRef.digest),X.has(q.reviewRunRef.digest))$.addIssue({code:E.ZodIssueCode.custom,message:"Review-run refs must resolve to distinct canonical run digests",path:["reviews",T,"reviewRunRef"]});X.add(q.reviewRunRef.digest);let K=ON(q.proofBundleRef);if(G.has(K))$.addIssue({code:E.ZodIssueCode.custom,message:"Review proof bundles must have unique canonical identities",path:["reviews",T,"proofBundleRef"]});if(G.add(K),R.has(q.proofBundleRef.digest))$.addIssue({code:E.ZodIssueCode.custom,message:"Review proof bundles must have unique canonical digests",path:["reviews",T,"proofBundleRef"]});if(R.add(q.proofBundleRef.digest),q.reviewerRef.digest===_.attempt.workerRef.digest)$.addIssue({code:E.ZodIssueCode.custom,message:"Worker and reviewer identities must resolve to distinct canonical digests",path:["reviews",T,"reviewerRef"]});if(q.reviewRunRef.digest===_.attempt.runtimeRef.digest)$.addIssue({code:E.ZodIssueCode.custom,message:"Worker runtime and review run must resolve to distinct canonical digests",path:["reviews",T,"reviewRunRef"]});if(_.exactHead&&Date.parse(q.reviewedAt)Date.parse(_.merge.guard.evaluatedAt)T.verdict!=="approved"))$.addIssue({code:E.ZodIssueCode.custom,message:"Eligible merge guards require at least one review and all reviews approved",path:["merge","guard","decision"]});if(_.merge.guard.reviewRefs.length!==_.reviews.length||_.merge.guard.reviewRefs.some((T)=>!_.reviews.some((q)=>B_(T,q.ref))))$.addIssue({code:E.ZodIssueCode.custom,message:"Eligible merge guard review refs must exactly equal the projected approved review refs as a canonical set",path:["merge","guard","reviewRefs"]});for(let T of _.reviews)if(!_.merge.guard.proofBundleRefs.some((q)=>B_(q,T.proofBundleRef)))$.addIssue({code:E.ZodIssueCode.custom,message:"Eligible merge guards must bind every exact review proof bundle",path:["merge","guard","proofBundleRefs"]});if(_.exactHead&&!_.merge.guard.proofBundleRefs.some((T)=>B_(T,_.exactHead.equalityProofRef)))$.addIssue({code:E.ZodIssueCode.custom,message:"Eligible merge guards must bind the exact-head equality proof",path:["merge","guard","proofBundleRefs"]});if(_.exactHead&&_.exactHead.ciProofBundleRefs.some((T)=>!_.merge.guard.proofBundleRefs.some((q)=>B_(q,T))))$.addIssue({code:E.ZodIssueCode.custom,message:"Eligible merge guards must bind every exact-head CI proof",path:["merge","guard","proofBundleRefs"]})}}if(_.merge?.outcome){if(!B_(_.merge.outcome.guardRef,_.merge.guard.ref))$.addIssue({code:E.ZodIssueCode.custom,message:"Merge outcome must bind the exact immutable merge guard",path:["merge","outcome","guardRef"]});if(!e_(_.merge.outcome.expectedHead,_.merge.guard.expectedHead))$.addIssue({code:E.ZodIssueCode.custom,message:"Merge outcome expected head must equal the guarded expected head",path:["merge","outcome","expectedHead"]});if(!e_(_.merge.outcome.expectedBase,_.merge.guard.expectedBase))$.addIssue({code:E.ZodIssueCode.custom,message:"Merge outcome expected base must equal the guarded expected base",path:["merge","outcome","expectedBase"]});if(_.merge.guard.decision!=="consumed")$.addIssue({code:E.ZodIssueCode.custom,message:"Every merge outcome requires an explicitly consumed merge guard",path:["merge","guard","decision"]});if(Date.parse(_.merge.outcome.finishedAt)0)$.addIssue({code:E.ZodIssueCode.custom,message:`${_.state} projections cannot carry review bindings before review authority is active`,path:["reviews"]});if((OG.has(_.state)||_.state==="recovering")&&(_.merge?.guard.reviewRefs.length??0)>0)$.addIssue({code:E.ZodIssueCode.custom,message:`${_.state} projections cannot hide review bindings in a merge guard before review authority is active`,path:["merge","guard","reviewRefs"]});let V=_.merge?`${_.merge.guard.decision}:${_.merge.outcome?.status??"none"}`:"absent";if(!MC[_.state].has(V))$.addIssue({code:E.ZodIssueCode.custom,message:`State ${_.state} is incompatible with merge authority ${V}`,path:["merge"]});if(AG.has(_.state)&&!_.terminalDispositionRef)$.addIssue({code:E.ZodIssueCode.custom,message:`${_.state} projections require a durable Todos terminal-disposition owner ref`,path:["terminalDispositionRef"]});if(!AG.has(_.state)&&_.terminalDispositionRef)$.addIssue({code:E.ZodIssueCode.custom,message:`${_.state} projections cannot carry a terminal-disposition owner ref`,path:["terminalDispositionRef"]});if(_.state==="reviewing"&&_.reviews.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Reviewing projections require review refs",path:["reviews"]});if(_.state==="cancelled"&&!_.cancellation)$.addIssue({code:E.ZodIssueCode.custom,message:"Cancelled projections require preservation state",path:["cancellation"]});if(_.cancellation&&_.merge?.outcome)$.addIssue({code:E.ZodIssueCode.custom,message:"Cancellation cannot coexist with a terminal merge outcome",path:["cancellation"]});if(_.state==="recovering"&&!_.recovery)$.addIssue({code:E.ZodIssueCode.custom,message:"Recovering projections require recovery state",path:["recovery"]});if(_.state==="repairing"&&_.repair.cycle===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Repairing projections require a non-zero repair cycle",path:["repair","cycle"]});if(_.merge&&(_.merge.guard.decision==="eligible"||_.merge.guard.decision==="consumed")&&!B_(_.attempt.admissionWriterGenerationRef,_.attempt.writerGenerationRef))$.addIssue({code:E.ZodIssueCode.custom,message:"Merge eligibility requires admission from the current writer generation",path:["attempt","admissionWriterGenerationRef"]});if(_.state==="merge_ready"&&_.merge?.guard.decision!=="eligible")$.addIssue({code:E.ZodIssueCode.custom,message:"Merge-ready projections require an eligible guard",path:["merge"]});if(_.state==="merged"&&_.merge?.outcome?.status!=="merged")$.addIssue({code:E.ZodIssueCode.custom,message:"Merged projections require a merged immutable outcome",path:["merge"]});if(_.state==="closed_unmerged"&&!_.merge?.outcome?.status.match(/^(closed_unmerged|refused|head_drift|base_drift)$/))$.addIssue({code:E.ZodIssueCode.custom,message:"Closed-unmerged projections require a non-merged terminal outcome",path:["merge"]});if(_.state==="cleanup_complete"&&(!_.cleanup?.outcome||!["deleted","preserved","skipped"].includes(_.cleanup.outcome.status)))$.addIssue({code:E.ZodIssueCode.custom,message:"Cleanup-complete projections require an immutable cleanup outcome",path:["cleanup"]});if(_.state==="rolled_back"&&_.rollback?.outcome?.status!=="succeeded")$.addIssue({code:E.ZodIssueCode.custom,message:"Rolled-back projections require a successful rollback outcome",path:["rollback"]});if((_.state==="failed"||_.state==="blocked")&&_.evidenceRefs.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Failed and blocked projections require redacted evidence refs",path:["evidenceRefs"]});if(["admitted","running","handed_off","reviewing","repairing","merge_ready","recovering"].includes(_.state)&&(_.merge?.outcome||_.cancellation||_.cleanup?.outcome||_.rollback?.outcome))$.addIssue({code:E.ZodIssueCode.custom,message:"Non-terminal projections cannot carry terminal owner outcomes",path:["state"]});let Q=new Set;for(let[T,q]of _.adapterExtensions.entries()){let K=`${q.mode}:${q.schema}`;if(Q.has(K))$.addIssue({code:E.ZodIssueCode.custom,message:"Adapter extensions must be unique per local/cloud mode and schema",path:["adapterExtensions",T]});Q.add(K)}});var bC=E.object({id:E.string().min(1),at:K_,kind:E.enum(["message","tool_call","command","file_change","error","test","decision","verification","status","other"]),summary:E.string().min(1),resourceRefs:E.array(s).default([]),evidenceRefs:E.array(T_).default([]),costEstimate:TU.optional()}).strict(),HC=L_(x.agentTrajectory).extend({actor:m$,workRunRef:s.optional(),events:E.array(bC).default([]),outcome:E.enum(["succeeded","failed","cancelled","blocked","unknown"]).default("unknown"),proofBundleRef:s.optional()}).strict(),kC="v1",CC=E.enum(["library","cli-with-store","service","saas"]),vC=["user-hosted","hasna-saas"],rC=E.enum(vC),fC=["api","sdk","mcp","cli"],xG=E.enum(fC),wC=E.enum(["supported","deferred","unsupported"]),uC=E.enum(["none","local-only","api-key","session","service-token","custom"]),k3=E.object({method:E.enum(["GET","POST","PUT","PATCH","DELETE"]),path:E.string().regex(/^\/[A-Za-z0-9_./:*-]*$/,"Endpoint paths must be absolute HTTP paths"),public:E.boolean().default(!1),description:E.string().min(1).optional()}).strict(),xC=E.object({id:E.string().min(1),kind:E.enum(["auth","storage","secret-ref","migration","health","readiness","redaction","smoke","operator","other"]),required:E.boolean().default(!0),command:E.string().min(1).optional(),evidenceRef:T_.optional(),status:E.enum(["pending","passed","failed","blocked","deferred"]).default("pending"),summary:E.string().min(1).optional()}).strict().superRefine((_,$)=>{if((_.status==="passed"||_.status==="failed"||_.status==="blocked")&&!_.command&&!_.evidenceRef&&!_.summary)$.addIssue({code:E.ZodIssueCode.custom,message:"Terminal readiness gates require command, evidenceRef, or summary",path:["status"]})}),yC=E.object({name:E.string().min(1),kind:xG.optional(),status:wC,bin:E.string().min(1).optional(),mcpBin:E.string().min(1).optional(),authMode:uC,health:k3.optional(),readiness:k3.optional(),version:k3.optional(),apiBasePath:E.string().regex(/^\/v[0-9]+$/,"Stable API base path must be /vN").optional(),openApiPath:E.string().regex(/^\/[A-Za-z0-9_./:-]*$/).optional(),exportSubpath:E.string().regex(/^\.(?:\/[A-Za-z0-9_.-]+(?:\/[A-Za-z0-9_.-]+)*)?$/,"SDK export subpaths must be package export keys such as . or ./sdk").optional(),generatedFrom:E.string().regex(/^\/[A-Za-z0-9_./:-]*$/,"SDK generatedFrom must reference an absolute OpenAPI path").optional(),clientClassName:E.string().regex(/^[A-Za-z_$][A-Za-z0-9_$]*$/).optional(),deferReason:E.string().min(1).optional(),readinessGates:E.array(xC).default([])}).strict().superRefine((_,$)=>{if(_.status==="supported"){if(!_.kind||_.kind==="api"){if(!_.bin)$.addIssue({code:E.ZodIssueCode.custom,message:"Supported API surfaces require a serve bin",path:["bin"]});if(!_.health)$.addIssue({code:E.ZodIssueCode.custom,message:"Supported API surfaces require a health endpoint",path:["health"]});if(!_.readiness)$.addIssue({code:E.ZodIssueCode.custom,message:"Supported API surfaces require a readiness endpoint",path:["readiness"]});if(!_.version)$.addIssue({code:E.ZodIssueCode.custom,message:"Supported API surfaces require a version endpoint",path:["version"]})}if(_.kind==="cli"&&!_.bin)$.addIssue({code:E.ZodIssueCode.custom,message:"Supported CLI surfaces require a bin",path:["bin"]});if(_.kind==="mcp"&&!_.mcpBin)$.addIssue({code:E.ZodIssueCode.custom,message:"Supported MCP surfaces require an mcpBin",path:["mcpBin"]});if(_.kind==="sdk"&&!_.exportSubpath)$.addIssue({code:E.ZodIssueCode.custom,message:"Supported SDK surfaces require an exportSubpath",path:["exportSubpath"]})}if((_.status==="deferred"||_.status==="unsupported")&&!_.deferReason)$.addIssue({code:E.ZodIssueCode.custom,message:"Deferred or unsupported service surfaces require a deferReason",path:["deferReason"]});if(_.health&&_.health.path!=="/health")$.addIssue({code:E.ZodIssueCode.custom,message:"Health endpoint must be /health",path:["health","path"]});if(_.health&&_.health.method!=="GET")$.addIssue({code:E.ZodIssueCode.custom,message:"Health endpoint must use GET",path:["health","method"]});if(_.readiness&&_.readiness.path!=="/ready")$.addIssue({code:E.ZodIssueCode.custom,message:"Readiness endpoint must be /ready",path:["readiness","path"]});if(_.readiness&&_.readiness.method!=="GET")$.addIssue({code:E.ZodIssueCode.custom,message:"Readiness endpoint must use GET",path:["readiness","method"]});if(_.version&&_.version.path!=="/version")$.addIssue({code:E.ZodIssueCode.custom,message:"Version endpoint must be /version",path:["version","path"]});if(_.version&&_.version.method!=="GET")$.addIssue({code:E.ZodIssueCode.custom,message:"Version endpoint must use GET",path:["version","method"]})}),hC=["sqlite","postgres"],yG=E.enum(hC),hG=["sqlite","postgres"],cC=E.enum(hG),w3=["postgres"],nC=E.object({kind:xG,reason:E.string().trim().min(1)}).strict(),i3=500,l3=200,AN=(_)=>E.string().trim().min(1).max(_).regex(/^[^\u0000-\u001f\u007f]+$/,"Waiver text must not contain control characters"),dC=["domain","host","ip","email"],mC=E.object({kind:E.enum(dC),reason:AN(i3),reviewedBy:AN(l3),expiresAt:K_}).strict(),iC=E.object({engine:E.enum(w3),reason:AN(i3),reviewedBy:AN(l3).optional(),expiresAt:K_.optional()}).strict();function lC(_){if(_.class!=="cli-with-store")return`storage waivers are not permitted for class ${_.class}`;if(_.bins.includes(`${_.name}-serve`))return`storage waivers are not permitted for a service-capable cli-with-store repo shipping ${_.name}-serve`;if(_.storageMode==="postgres")return"storage waivers are not permitted while storage.mode is postgres, which reads and writes PostgreSQL directly";if(_.hosting.includes("hasna-saas"))return"storage waivers are not permitted for a repo declaring the hasna-saas product story";return null}var tC=E.object({conformance:E.object({waivedSurfaces:E.array(nC).default([]),waiverProfile:E.literal("non-node-monorepo").optional(),waivedStorageEngines:E.array(iC).default([]),waivedAssetInventories:E.array(mC).default([])}).catchall(E.unknown()).optional(),release:E.object({artifactScan:E.object({script:E.string().trim().min(1)}).strict().optional()}).catchall(E.unknown()).optional()}).catchall(E.unknown()),oC=E.string().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,"App names must be lowercase dashed identifiers"),pC=["","-cli","-mcp","-serve","-worker","-runner","-daemon","-migrate","-doctor"];function eC(_){return pC.map(($)=>`${_}${$}`)}function LG(_){return`hasna/oss/${_}/database-url`}var aC=E.object({mode:yG,engines:E.array(cC).min(1).optional(),envPrefix:E.string().regex(/^HASNA_[A-Z][A-Z0-9]*_$/).optional(),aliasEnvPrefix:E.string().regex(/^[A-Z][A-Z0-9]*_$/).optional(),databaseUrlSecretRef:E.string().regex(/^hasna\/oss\/[a-z0-9-]+\/database-url$/).optional(),sqlitePath:E.string().min(1).endsWith(".db","storage.sqlitePath must end in .db").optional(),pgTestGate:E.object({envVar:E.string().regex(/^[A-Z][A-Z0-9_]*_TEST_DATABASE_URL$/),command:E.string().trim().min(1)}).strict().optional()}).strict().superRefine((_,$)=>{if(_.engines&&new Set(_.engines).size!==_.engines.length)$.addIssue({code:E.ZodIssueCode.custom,message:"storage.engines must not contain duplicates",path:["engines"]});if(_.engines?.includes("postgres")&&!_.envPrefix)$.addIssue({code:E.ZodIssueCode.custom,message:"storage.engines containing postgres requires envPrefix for the HASNA__DATABASE_URL contract",path:["envPrefix"]})}),cG=E.enum(["0600"]),nG=E.enum(["0700"]),dG=E.enum([".hasna",".codewith"]),sC=E.enum(["directory","file","sqlite_db","sqlite_wal","sqlite_shm","backup","export","report","tmp","log","session","snapshot"]),ID=W$.refine((_)=>!_.startsWith("~"),"Local store path patterns must be relative to their declared root"),_v=E.object({id:E.string().min(1),source:E.enum(["sqlite","manifest","index","runtime","package_adapter"]),table:E.string().min(1).optional(),column:E.string().min(1).optional(),description:E.string().min(1),required:E.boolean().default(!0)}).strict(),$v=E.object({safeWhen:E.enum(["exclusive_access","offline_only","never"]),operations:E.array(E.enum(["wal_checkpoint_truncate","incremental_vacuum","optimize","vacuum"])).default([])}).strict().superRefine((_,$)=>{if(_.safeWhen==="never"&&_.operations.length>0)$.addIssue({code:E.ZodIssueCode.custom,message:"sqliteMaintenance.safeWhen=never cannot declare operations",path:["operations"]})}),Dv=E.object({id:E.string().min(1),description:E.string().min(1),ttlDays:E.number().int().nonnegative().optional(),artifactClasses:E.array(sC).min(1),allowlistGlobs:E.array(ID).min(1),activeRecordExclusions:E.array(_v).default([]),sqliteMaintenance:$v.optional()}).strict(),gv=E.object({storeId:E.string().regex(/^[a-z][a-z0-9-]*$/),packageName:E.string().min(1),displayName:E.string().min(1),root:dG,relativePath:ID,directoryMode:nG.default("0700"),fileMode:cG.default("0600"),sqliteDatabaseGlobs:E.array(ID).default([]),sensitiveFileGlobs:E.array(ID).default([]),backupGlobs:E.array(ID).default([]),exportGlobs:E.array(ID).default([]),retentionAdapters:E.array(Dv).default([]),notes:E.array(E.string().min(1)).default([])}).strict().superRefine((_,$)=>{if(_.relativePath.includes("*"))$.addIssue({code:E.ZodIssueCode.custom,message:"store relativePath must be a concrete directory; use glob fields for files",path:["relativePath"]});let D=new Set;for(let[U,g]of _.retentionAdapters.entries()){if(D.has(g.id))$.addIssue({code:E.ZodIssueCode.custom,message:"retention adapter ids must be unique within a store",path:["retentionAdapters",U,"id"]});D.add(g.id)}}),mG=L_(x.secureLocalStorePolicy).extend({version:E.string().min(1),scope:E.array(dG).min(1),defaults:E.object({directoryMode:nG.default("0700"),fileMode:cG.default("0600"),dryRunDefault:E.literal(!0),requireExplicitApply:E.literal(!0),includeSqliteSidecars:E.literal(!0),redactedEvidenceOnly:E.literal(!0)}).strict(),stores:E.array(gv).min(1),lifecycle:E.object({retentionDryRunDefault:E.literal(!0),requireActiveRecordExclusionProof:E.literal(!0),requireArtifactAllowlist:E.literal(!0),sqliteMaintenanceRequiresExclusiveAccess:E.literal(!0)}).strict(),warnings:E.array(E.string().min(1)).default([])}).strict().superRefine((_,$)=>{let D=new Set;for(let[U,g]of _.stores.entries()){if(D.has(g.storeId))$.addIssue({code:E.ZodIssueCode.custom,message:"store ids must be unique",path:["stores",U,"storeId"]});if(D.add(g.storeId),!_.scope.includes(g.root))$.addIssue({code:E.ZodIssueCode.custom,message:"store root must be listed in policy scope",path:["stores",U,"root"]})}}),Uv=E.object({$schema:E.string().min(1).optional(),schema:E.literal(x.serviceContract),name:oC,class:CC,contractVersion:E.literal(kC),kitVersion:E.string().min(1),description:E.string().min(1).optional(),bins:E.array(E.string().min(1)).default([]),storage:aC.optional(),hosting:E.array(rC).min(1).default(["user-hosted"]),serviceSurfaces:E.array(yC).default([]),metadata:tC.optional()}).strict().superRefine((_,$)=>{if(new Set(_.hosting).size!==_.hosting.length)$.addIssue({code:E.ZodIssueCode.custom,message:"hosting must not contain duplicates",path:["hosting"]});let D=new Set(eC(_.name)),U=new Set;for(let[A,L]of _.bins.entries()){if(U.has(L))$.addIssue({code:E.ZodIssueCode.custom,message:"Duplicate bin declaration",path:["bins",A]});if(U.add(L),!D.has(L))$.addIssue({code:E.ZodIssueCode.custom,message:`Bin "${L}" is not allowlisted for app "${_.name}"; allowed: ${[...D].join(", ")}`,path:["bins",A]})}let g=(A)=>U.has(`${_.name}${A}`);if(_.storage){let A=_.name.toUpperCase().replace(/-/g,"_");if(_.storage.envPrefix&&_.storage.envPrefix!==`HASNA_${A}_`)$.addIssue({code:E.ZodIssueCode.custom,message:`storage.envPrefix must be HASNA_${A}_`,path:["storage","envPrefix"]});if(_.storage.databaseUrlSecretRef&&_.storage.databaseUrlSecretRef!==LG(_.name))$.addIssue({code:E.ZodIssueCode.custom,message:`storage.databaseUrlSecretRef must be ${LG(_.name)}`,path:["storage","databaseUrlSecretRef"]})}if(_.class==="library"){if(_.storage)$.addIssue({code:E.ZodIssueCode.custom,message:"library repos must not declare storage",path:["storage"]});if(g("-serve")||g("-mcp"))$.addIssue({code:E.ZodIssueCode.custom,message:"library repos must not ship a -serve or -mcp bin",path:["bins"]})}if(_.class==="cli-with-store"){if(!_.storage)$.addIssue({code:E.ZodIssueCode.custom,message:"cli-with-store repos must declare storage",path:["storage"]});else{if(_.storage.mode==="sqlite"&&!_.storage.sqlitePath)$.addIssue({code:E.ZodIssueCode.custom,message:"sqlite cli-with-store storage requires sqlitePath (~/.hasna//.db)",path:["storage","sqlitePath"]});if(_.storage.engines){let A=new Set(_.storage.engines),L=_.metadata?.conformance?.waivedStorageEngines??[],z=lC({class:_.class,name:_.name,bins:_.bins,hosting:_.hosting,storageMode:_.storage.mode}),W=new Set(z?[]:L.map((P)=>P.engine)),J=hG.filter((P)=>!A.has(P)&&!W.has(P));if(J.length>0){let P=z&&L.length>0?`; declared waiver ignored: ${z}`:"";$.addIssue({code:E.ZodIssueCode.custom,message:`cli-with-store storage.engines must declare both sqlite and postgres unless the engine carries a metadata.conformance.waivedStorageEngines waiver; missing: ${J.join(", ")}${P}`,path:["storage","engines"]})}}}if(!U.has(_.name))$.addIssue({code:E.ZodIssueCode.custom,message:`cli-with-store repos must ship the "${_.name}" bin`,path:["bins"]})}if(_.class==="service"){if(!_.storage)$.addIssue({code:E.ZodIssueCode.custom,message:"service repos must declare storage",path:["storage"]});else if(_.storage.engines&&(!_.storage.engines.includes("sqlite")||!_.storage.engines.includes("postgres")))$.addIssue({code:E.ZodIssueCode.custom,message:"service storage.engines must declare both sqlite and postgres",path:["storage","engines"]});if(!g("-serve"))$.addIssue({code:E.ZodIssueCode.custom,message:`service repos must ship the "${_.name}-serve" bin`,path:["bins"]});if(_.serviceSurfaces.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"service repos must declare at least one service surface",path:["serviceSurfaces"]})}if(_.class==="saas"){if(!_.storage)$.addIssue({code:E.ZodIssueCode.custom,message:"saas repos must declare storage",path:["storage"]});else{if(_.storage.mode!=="postgres")$.addIssue({code:E.ZodIssueCode.custom,message:"saas repos must use the postgres storage backend",path:["storage","mode"]});if(!_.storage.envPrefix)$.addIssue({code:E.ZodIssueCode.custom,message:"saas storage requires envPrefix for the public DATABASE_URL contract",path:["storage","envPrefix"]})}if(!g("-serve"))$.addIssue({code:E.ZodIssueCode.custom,message:`saas repos must ship the "${_.name}-serve" bin`,path:["bins"]});if(_.serviceSurfaces.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"saas repos must declare at least one service surface",path:["serviceSurfaces"]})}for(let[A,L]of _.serviceSurfaces.entries()){if(L.bin&&!U.has(L.bin))$.addIssue({code:E.ZodIssueCode.custom,message:`Service surface bin "${L.bin}" must be declared in bins`,path:["serviceSurfaces",A,"bin"]});if(L.mcpBin&&!U.has(L.mcpBin))$.addIssue({code:E.ZodIssueCode.custom,message:`Service surface MCP bin "${L.mcpBin}" must be declared in bins`,path:["serviceSurfaces",A,"mcpBin"]})}let I=_.metadata?.conformance?.waivedSurfaces??[],j=new Set;for(let[A,L]of I.entries()){if(j.has(L.kind))$.addIssue({code:E.ZodIssueCode.custom,message:`Duplicate conformance waiver for ${L.kind}`,path:["metadata","conformance","waivedSurfaces",A,"kind"]});j.add(L.kind)}let N=_.metadata?.conformance?.waivedStorageEngines??[],O=new Set;for(let[A,L]of N.entries()){if(O.has(L.engine))$.addIssue({code:E.ZodIssueCode.custom,message:`Duplicate storage-engine waiver for ${L.engine}`,path:["metadata","conformance","waivedStorageEngines",A,"engine"]});O.add(L.engine)}}),Xd=E.object({status:E.enum(["ok","degraded","unavailable"]),version:E.string().min(1),mode:yG}).strict(),Rd=E.object({ready:E.boolean(),reason:E.string().min(1).optional()}).strict(),Gd=E.object({version:E.string().min(1)}).strict(),Iv=E.enum(["info","notice","breaking","critical"]),jv=E.string().regex(/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*){1,3}$/,"Comms event types must be 2-4 lowercase dot-separated segments (..)"),Nv=["FREEZE","UNFREEZE","BREAKING","CUTOVER","POLICY","RELEASE"],Ev=E.enum(Nv);var Ov=E.enum(["fleet","package","machine"]),iG=L_(x.commsEventEnvelope).extend({type:jv,severity:Iv,scope:Ov,summary:E.string().min(1).optional(),source:m$.optional(),affected_packages:E.array(t).default([]),affected_machines:E.array(t).default([]),action_required:E.boolean().default(!1),ack_by:K_.optional(),dedupe_key:t,resourceRefs:E.array(s).default([]),evidenceRefs:E.array(T_).default([])}).strict().superRefine((_,$)=>{if(_.scope==="package"&&_.affected_packages.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Package-scoped comms events require affected_packages",path:["affected_packages"]});if(_.scope==="machine"&&_.affected_machines.length===0)$.addIssue({code:E.ZodIssueCode.custom,message:"Machine-scoped comms events require affected_machines",path:["affected_machines"]});if(_.ack_by&&!_.action_required)$.addIssue({code:E.ZodIssueCode.custom,message:"Comms events with an ack_by deadline require action_required",path:["action_required"]});if(_.type==="fleet.freeze"||_.type==="fleet.unfreeze"){if(_.severity!=="critical")$.addIssue({code:E.ZodIssueCode.custom,message:`${_.type} events are always critical`,path:["severity"]});if(_.scope!=="fleet")$.addIssue({code:E.ZodIssueCode.custom,message:`${_.type} events are always fleet-scoped`,path:["scope"]});if(!_.action_required)$.addIssue({code:E.ZodIssueCode.custom,message:`${_.type} events require action_required`,path:["action_required"]})}}),Av=E.enum(["fleet","package","product","loop-lane","initiative","personal"]),Lv=E.enum(["quiet","work","firehose"]),Jv=t.refine((_)=>/^(?:\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z)?|gate:[0-9a-f][0-9a-f-]{7,35})$/.test(_),"until must be an ISO date (YYYY-MM-DD), a UTC timestamp, or a gate id (gate:)"),Pv=L_(x.commsChannelMetadata).extend({class:Av,noise:Lv.optional(),owner:t.optional(),until:Jv.optional(),successor:t.optional()}).strict().superRefine((_,$)=>{if(_.class==="initiative"){if(!_.owner)$.addIssue({code:E.ZodIssueCode.custom,message:"Initiative channels require an owner",path:["owner"]});if(!_.until)$.addIssue({code:E.ZodIssueCode.custom,message:"Initiative channels require an until horizon (date or gate id)",path:["until"]})}}),JG={FREEZE:{defaultSeverity:"critical",allowedSeverities:["critical"],requiredEventType:"fleet.freeze"},UNFREEZE:{defaultSeverity:"critical",allowedSeverities:["critical"],requiredEventType:"fleet.unfreeze"},BREAKING:{defaultSeverity:"breaking",allowedSeverities:["breaking"],requiredEventType:null},CUTOVER:{defaultSeverity:"notice",allowedSeverities:["notice","breaking"],requiredEventType:null},POLICY:{defaultSeverity:"breaking",allowedSeverities:["notice","breaking"],requiredEventType:null},RELEASE:{defaultSeverity:"info",allowedSeverities:["info","notice"],requiredEventType:null}},zv=L_(x.commsMessageMetadata).extend({tag:Ev,envelope:iG}).strict().superRefine((_,$)=>{let D=JG[_.tag];if(!D.allowedSeverities.includes(_.envelope.severity))$.addIssue({code:E.ZodIssueCode.custom,message:`[${_.tag}] posts allow severities ${D.allowedSeverities.join(", ")}`,path:["envelope","severity"]});if(D.requiredEventType&&_.envelope.type!==D.requiredEventType)$.addIssue({code:E.ZodIssueCode.custom,message:`[${_.tag}] posts require event type ${D.requiredEventType}`,path:["envelope","type"]});for(let[U,g]of Object.entries(JG))if(g.requiredEventType===_.envelope.type&&_.tag!==U)$.addIssue({code:E.ZodIssueCode.custom,message:`${_.envelope.type} events must use the [${U}] tag`,path:["tag"]})});var Sv={[x.actorRef]:yH,[x.resourceRef]:hH,[x.evidenceRef]:nH,[x.workRun]:sk,[x.taskToPrProjection]:ZC,[x.decisionEnvelope]:FG,[x.costEstimate]:TU,[x.capabilityCard]:mH,[x.providerLiveModeStandard]:eH,[x.contextPack]:MG,[x.integrationRef]:ZG,[x.projectManifest]:Dk,[x.projectPanel]:bG,[x.projectSnapshot]:Jk,[x.renderManifest]:jk,[x.agentTrajectory]:HC,[x.validationPlan]:Pk,[x.proofBundle]:ak,[x.scaffoldManifest]:Yk,[x.scaffoldInstallRecord]:Tk,[x.appCloudManifest]:CG,[x.noCloudEvidencePack]:pk,[x.secureLocalStorePolicy]:mG,[x.serviceContract]:Uv,[x.commsEventEnvelope]:iG,[x.commsChannelMetadata]:Pv,[x.commsMessageMetadata]:zv,[x.app]:bk,[x.release]:kk,[x.rolloutRecord]:rk,[x.announcement]:xk,[x.audience]:mk};class lG extends Error{schemaId;issues;constructor(_,$){super(`Contract validation failed for ${_}`);this.name="ContractValidationError",this.schemaId=_,this.issues=$}}function tG(_,$){let U=Sv[_].safeParse($);if(!U.success)throw new lG(_,U.error.issues);return U.data}var Yd=String.raw`(?:^|[^\w$])(?:_*(?:import|require)|createRequire|Module\s*\.\s*_load)`;var t3=[{pattern:"@hasna/cloud",kind:"module",message:"Shared @hasna/cloud runtime reference is forbidden"},{pattern:"open-cloud",kind:"module",message:"Shared open-cloud runtime reference is forbidden"},{pattern:"cloud-mcp",kind:"module",message:"Legacy cloud-mcp runtime surface is forbidden"},{pattern:"registerCloudTools",kind:"symbol",message:"Legacy registerCloudTools runtime surface is forbidden"},{pattern:"registerCloudCommands",kind:"symbol",message:"Legacy registerCloudCommands runtime surface is forbidden"},{pattern:".hasna/cloud",kind:"config",checkKind:"runtime_config",message:"Legacy .hasna/cloud runtime config is forbidden"},{pattern:"HASNA_CLOUD_",kind:"config",message:"Shared HASNA_CLOUD_* runtime config is forbidden"},{pattern:"HASNA_RDS_PASSWORD",kind:"config",message:"Legacy shared RDS credential config is forbidden"}],Qd=t3.filter((_)=>("checkKind"in _)),Wv=t3.filter((_)=>_.kind==="module"),Td=[...new Set([...jN,...Wv.map((_)=>_.pattern)])],qd=t3.filter((_)=>_.kind==="config");var PG="^[^\\u0000-\\u001f\\u007f]*$",Bd={$schema:"http://json-schema.org/draft-07/schema#",$id:"https://github.com/hasna/contracts/schema/hasna.service_contract.v1.json",title:"Hasna Service Contract v1",description:"Repo self-description (hasna.contract.json) for the Hasna Service Contract v1. Hosting story, product surfaces, and storage capabilities are separate declarations; the storage backend (sqlite | postgres) is the only runtime switch.",type:"object",additionalProperties:!1,required:["schema","name","class","contractVersion","kitVersion"],allOf:[{if:{required:["class"],properties:{class:{const:"saas"}}},then:{required:["storage"],properties:{storage:{required:["mode","envPrefix"],properties:{mode:{const:"postgres"}}}}}}],properties:{$schema:{type:"string",description:"Optional editor hint pointing at this JSON Schema."},schema:{const:x.serviceContract},name:{type:"string",pattern:"^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",description:"Lowercase dashed app short-name, e.g. todos, mailery, loops."},class:{enum:["library","cli-with-store","service","saas"]},contractVersion:{const:"v1"},kitVersion:{type:"string",minLength:1,description:"Version of @hasna/contracts (the contract kit) the repo tracks."},description:{type:"string",minLength:1},bins:{type:"array",items:{type:"string",minLength:1},description:"Declared bins. Allowlisted: , -cli, -mcp, -serve, -worker, -runner, -daemon, -migrate, -doctor."},hosting:{type:"array",items:{enum:["user-hosted","hasna-saas"]},minItems:1,uniqueItems:!0,description:"Customer-facing product stories. Public OSS cores include user-hosted; add hasna-saas only when a managed control plane exists."},serviceSurfaces:{type:"array",items:{type:"object",additionalProperties:!1,required:["name","status","authMode"],allOf:[{if:{required:["status"],properties:{status:{const:"supported"},kind:{const:"api"}}},then:{required:["bin","health","readiness","version"]}}],properties:{name:{type:"string",minLength:1},kind:{enum:["api","sdk","mcp","cli"]},status:{enum:["supported","deferred","unsupported"]},bin:{type:"string",minLength:1},mcpBin:{type:"string",minLength:1},authMode:{enum:["none","local-only","api-key","session","service-token","custom"]},health:{type:"object",additionalProperties:!1,required:["method","path"],properties:{method:{const:"GET"},path:{type:"string",pattern:"^/[A-Za-z0-9_./:*-]*$"},public:{type:"boolean"},description:{type:"string",minLength:1}}},readiness:{type:"object",additionalProperties:!1,required:["method","path"],properties:{method:{const:"GET"},path:{type:"string",pattern:"^/[A-Za-z0-9_./:*-]*$"},public:{type:"boolean"},description:{type:"string",minLength:1}}},version:{type:"object",additionalProperties:!1,required:["method","path"],properties:{method:{const:"GET"},path:{type:"string",pattern:"^/[A-Za-z0-9_./:*-]*$"},public:{type:"boolean"},description:{type:"string",minLength:1}}},apiBasePath:{type:"string",pattern:"^/v[0-9]+$"},openApiPath:{type:"string",pattern:"^/[A-Za-z0-9_./:-]*$"},exportSubpath:{type:"string",pattern:"^\\.(?:\\/[A-Za-z0-9_.-]+(?:\\/[A-Za-z0-9_.-]+)*)?$",description:"SDK package export key such as . or ./sdk."},generatedFrom:{type:"string",pattern:"^/[A-Za-z0-9_./:-]*$",description:"OpenAPI path used to generate the SDK."},clientClassName:{type:"string",pattern:"^[A-Za-z_$][A-Za-z0-9_$]*$"},deferReason:{type:"string",minLength:1},readinessGates:{type:"array",items:{type:"object",additionalProperties:!1,required:["id","kind"],properties:{id:{type:"string",minLength:1},kind:{enum:["auth","storage","secret-ref","migration","health","readiness","redaction","smoke","operator","other"]},required:{type:"boolean"},command:{type:"string",minLength:1},evidenceRef:{type:"object"},status:{enum:["pending","passed","failed","blocked","deferred"]},summary:{type:"string",minLength:1}}}}}},description:"Declared API, SDK, MCP, and CLI product surfaces. Legacy entries without kind remain parseable; new manifests declare kind explicitly."},storage:{type:"object",additionalProperties:!1,required:["mode"],properties:{mode:{enum:["sqlite","postgres"],description:"Active data backend. sqlite|postgres ONLY \u2014 the single runtime switch."},engines:{type:"array",items:{enum:["sqlite","postgres"]},minItems:1,uniqueItems:!0,description:"Supported storage engines; capability metadata independent of the active backend."},envPrefix:{type:"string",pattern:"^HASNA_[A-Z][A-Z0-9]*_$",description:"Primary env prefix, e.g. HASNA_TODOS_."},aliasEnvPrefix:{type:"string",pattern:"^[A-Z][A-Z0-9]*_$",description:"Optional short alias env prefix, e.g. TODOS_."},databaseUrlSecretRef:{type:"string",pattern:"^hasna/oss/[a-z0-9-]+/database-url$",description:"Legacy/private-tier database secret ref. Public conformance rejects this field."},sqlitePath:{type:"string",pattern:"\\.db$",description:"Local sqlite path (~/.hasna//.db)."},pgTestGate:{type:"object",additionalProperties:!1,required:["envVar","command"],properties:{envVar:{type:"string",pattern:"^[A-Z][A-Z0-9_]*_TEST_DATABASE_URL$"},command:{type:"string",minLength:1}},description:"Environment-gated live PostgreSQL test command."}}},metadata:{type:"object",additionalProperties:!0,properties:{conformance:{type:"object",additionalProperties:!0,properties:{waiverProfile:{const:"non-node-monorepo",description:"Explicit surface-waiver eligibility for exceptional non-Node monorepos. Libraries are eligible for API/MCP waivers without this profile."},waivedSurfaces:{type:"array",uniqueItems:!0,items:{type:"object",additionalProperties:!1,required:["kind","reason"],properties:{kind:{enum:["api","sdk","mcp","cli"]},reason:{type:"string",minLength:1}}}},waivedStorageEngines:{type:"array",uniqueItems:!0,maxItems:w3.length,items:{type:"object",additionalProperties:!1,required:["engine","reason"],properties:{engine:{enum:[...w3]},reason:{type:"string",minLength:1,maxLength:i3,allOf:[{pattern:"\\S"},{pattern:PG}]},reviewedBy:{type:"string",minLength:1,maxLength:l3,allOf:[{pattern:"\\S"},{pattern:PG}]},expiresAt:{type:"string",format:"date-time"}}},description:"Explicit storage-engine exceptions, at most one per engine. Only a CLI-only cli-with-store repo (no -serve bin, storage.mode sqlite, no hasna-saas story) may waive postgres; sqlite is never waivable, expiresAt is a UTC RFC 3339 timestamp, and conformance stops honouring a waiver once it has passed."}}}}}}};var Xv="2026-07-06";function c$(_,$,D,U,g,I=[],j){return{id:_,description:$,ttlDays:D,artifactClasses:U,allowlistGlobs:g,activeRecordExclusions:I.map((N)=>({...N,required:N.required??!0})),sqliteMaintenance:j}}var Vd=mG.parse({schema:x.secureLocalStorePolicy,id:"hasna-secure-local-store-defaults",createdAt:"2026-07-06T00:00:00.000Z",version:Xv,scope:[".hasna",".codewith"],defaults:{directoryMode:"0700",fileMode:"0600",dryRunDefault:!0,requireExplicitApply:!0,includeSqliteSidecars:!0,redactedEvidenceOnly:!0},lifecycle:{retentionDryRunDefault:!0,requireActiveRecordExclusionProof:!0,requireArtifactAllowlist:!0,sqliteMaintenanceRequiresExclusiveAccess:!0},stores:[{storeId:"codewith",packageName:"codewith",displayName:"Codewith native state",root:".codewith",relativePath:".",sqliteDatabaseGlobs:["logs_*.sqlite","state_*.sqlite","goals_*.sqlite"],sensitiveFileGlobs:["sessions/**/*.jsonl","shell_snapshots/**/*","logs*.sqlite","state*.sqlite","goals*.sqlite"],backupGlobs:["backups/**/*"],exportGlobs:["exports/**/*"],retentionAdapters:[c$("codewith-session-snapshots","Codewith sessions, shell snapshots, logs, monitor output, mailbox payloads, and scheduler state need package-owned redaction before retention applies.",30,["session","snapshot","log"],["sessions/**/*.jsonl","shell_snapshots/**/*","logs/**/*"],[{id:"codewith-active-session",source:"package_adapter",description:"Exclude currently active sessions, leased schedules, monitors, pending interactions, and active goal rows."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})],notes:["Includes native .codewith DBs and transcript-like artifacts; redaction-before-persistence remains package-owned."]},{storeId:"todos",packageName:"@hasna/todos",displayName:"Todos",root:".hasna",relativePath:"todos",sqliteDatabaseGlobs:["todos.db"],sensitiveFileGlobs:["todos.db","todos.db-wal","todos.db-shm","exports/**/*","backups/**/*"],backupGlobs:["backups/**/*","*.bak","*.backup"],exportGlobs:["exports/**/*","*.jsonl","*.csv"],retentionAdapters:[c$("todos-exports-backups","Todos backups and exports are deleted only after package redaction and active task/evidence references are excluded.",14,["backup","export"],["backups/**/*","exports/**/*"],[{id:"todos-active-evidence",source:"sqlite",table:"task_files",column:"path",description:"Exclude files still referenced by active tasks, verification evidence, task comments, or handoff records."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"conversations",packageName:"@hasna/conversations",displayName:"Conversations",root:".hasna",relativePath:"conversations",sqliteDatabaseGlobs:["messages.db"],sensitiveFileGlobs:["messages.db","messages.db-wal","messages.db-shm","exports/**/*","attachments/**/*"],backupGlobs:["backups/**/*","*.bak"],exportGlobs:["exports/**/*","*.json","*.csv"],retentionAdapters:[c$("conversations-exports-attachments","Conversation exports and attachments require message-id redaction and active attachment reference checks before deletion.",14,["export","backup"],["exports/**/*","backups/**/*","attachments/**/*"],[{id:"conversations-active-attachments",source:"sqlite",table:"messages",column:"attachments",description:"Exclude attachments still referenced by retained messages or audited redaction records."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"mementos",packageName:"@hasna/mementos",displayName:"Mementos",root:".hasna",relativePath:"mementos",sqliteDatabaseGlobs:["mementos.db"],sensitiveFileGlobs:["mementos.db","mementos.db-wal","mementos.db-shm","exports/**/*","backups/**/*"],backupGlobs:["backups/**/*","*.bak"],exportGlobs:["exports/**/*"],retentionAdapters:[c$("mementos-audit-search-history","Mementos retention must preserve active memory versions while compacting audit/search surfaces through package-owned adapters.",30,["backup","export","log"],["backups/**/*","exports/**/*","audit/**/*"],[{id:"mementos-active-memory-versions",source:"sqlite",table:"memory_versions",column:"memory_id",description:"Exclude current memory versions and audit entries required for provenance."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"knowledge",packageName:"@hasna/knowledge",displayName:"Knowledge",root:".hasna",relativePath:"knowledge",sqliteDatabaseGlobs:["knowledge.db"],sensitiveFileGlobs:["knowledge.db","knowledge.db-wal","knowledge.db-shm","db.json","migration-exports/**/*","*.bak"],backupGlobs:["*.bak","backups/**/*","*.pre-cloud-*"],exportGlobs:["migration-exports/**/*","exports/**/*","*.jsonl"],retentionAdapters:[c$("knowledge-migrations-exports","Knowledge migration exports and pre-cloud backups require replacement, encryption, or redaction before retention deletion.",14,["backup","export"],["migration-exports/**/*","exports/**/*","*.bak","*.pre-cloud-*"],[{id:"knowledge-current-catalog",source:"manifest",description:"Exclude files referenced by the active catalog or migration ledger."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"projects",packageName:"@hasna/projects",displayName:"Projects",root:".hasna",relativePath:"projects",sqliteDatabaseGlobs:["projects.db","data/*/project.db"],sensitiveFileGlobs:["projects.db","projects.db-wal","projects.db-shm","data/*/project.db","data/*/project.db-wal","data/*/project.db-shm","reports/**/*"],backupGlobs:["backups/**/*","data/*/backups/**/*"],exportGlobs:["reports/**/*","exports/**/*"],retentionAdapters:[c$("projects-reports-workspaces","Project reports, dashboards, workspaces, and per-project DBs need active workspace/location references before cleanup.",30,["backup","export","report","tmp"],["backups/**/*","reports/**/*","workspaces/**/*","data/*/backups/**/*"],[{id:"projects-active-workspaces",source:"sqlite",table:"workspaces",column:"primary_path",description:"Exclude active workspace paths, locations, linked reports, and project store artifacts."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"browser",packageName:"@hasna/browser",displayName:"Browser",root:".hasna",relativePath:"browser",sqliteDatabaseGlobs:["browser.db"],sensitiveFileGlobs:["browser.db","browser.db-wal","browser.db-shm","profiles/**/cookies.json","states/**/*.json","auth/**/*"],backupGlobs:["backups/**/*"],exportGlobs:["exports/**/*","traces/**/*","har/**/*"],retentionAdapters:[c$("browser-auth-traces","Browser state, trace, HAR, and auth artifacts require session invalidation or redaction before deletion.",7,["backup","export","session","snapshot"],["profiles/**/*","states/**/*","traces/**/*","har/**/*","exports/**/*"],[{id:"browser-active-profiles",source:"sqlite",table:"sessions",column:"profile_path",description:"Exclude profiles, cookies, and storage state used by active browser sessions."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"terminal",packageName:"@hasna/terminal",displayName:"Terminal",root:".hasna",relativePath:"terminal",sqliteDatabaseGlobs:["sessions.db"],sensitiveFileGlobs:["sessions.db","sessions.db-wal","sessions.db-shm","exports/**/*"],backupGlobs:["backups/**/*"],exportGlobs:["exports/**/*"],retentionAdapters:[c$("terminal-sessions","Terminal sessions and interactions need active session exclusion plus command-output redaction before retention.",30,["backup","export","session","log"],["backups/**/*","exports/**/*","sessions/**/*"],[{id:"terminal-active-sessions",source:"sqlite",table:"sessions",column:"id",description:"Exclude active terminal session records and any linked interaction artifacts."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"logs",packageName:"@hasna/logs",displayName:"Logs",root:".hasna",relativePath:"logs",sqliteDatabaseGlobs:["logs.db"],sensitiveFileGlobs:["logs.db","logs.db-wal","logs.db-shm","exports/**/*"],backupGlobs:["backups/**/*"],exportGlobs:["exports/**/*"],retentionAdapters:[c$("logs-retention","Logs require redaction before compaction and must preserve active incident/evidence references.",14,["backup","export","log"],["backups/**/*","exports/**/*","*.log","logs/**/*"],[{id:"logs-active-evidence",source:"sqlite",table:"logs",column:"id",description:"Exclude log rows or files linked to active incidents, tasks, or proof bundles."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"loops",packageName:"@hasna/loops",displayName:"OpenLoops",root:".hasna",relativePath:"loops",sqliteDatabaseGlobs:["loops.db","state.db","*.sqlite"],sensitiveFileGlobs:["*.db","*.sqlite","*.db-wal","*.db-shm","reports/**/*","tmp/**/*","runs/**/*"],backupGlobs:["backups/**/*","tmp/**/*"],exportGlobs:["reports/**/*","runs/**/*","exports/**/*"],retentionAdapters:[c$("loops-reports-tmp","Loop reports, tmp files, workflow artifacts, and command output need run-state checks and redaction before retention deletion.",14,["backup","export","report","tmp","log"],["reports/**/*","tmp/**/*","runs/**/*","exports/**/*"],[{id:"loops-active-runs",source:"sqlite",table:"loop_runs",column:"id",description:"Exclude active, leased, recently failed, or evidence-linked loop and workflow run artifacts."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]}],warnings:["This package publishes declarations only; each owning package implements and verifies its own local-store lifecycle.","Retention and redaction evidence remain package-owned and must preserve active-record exclusions.","SQLite maintenance is descriptive policy metadata only and is never executed by @hasna/contracts."]});var Rv=64,Kd=new RegExp(`^[A-Za-z0-9][A-Za-z0-9._-]{0,${Rv-1}}$`),gD="[0-9a-fA-F]",Fd=new RegExp(`^\\{?(?:${gD}{8}-${gD}{4}-${gD}{4}-${gD}{4}-${gD}{12}|${gD}{32})\\}?$`);var Gv=/^hasna_([a-z][a-z0-9-]*)_([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)$/;var Md=new RegExp(Gv.source.replace(/^\^/,"\\b").replace(/\$$/,"\\b"));var oG="@hasna/knowledge";function Yv(_){if(!Number.isFinite(_??0))return 20;return Math.max(1,Math.min(100,Math.trunc(_??20)))}function Qv(_){return _.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")||"project"}function qU(_,$=180){let D=String(_??"").replace(/\s+/g," ").trim();if(D.length<=$)return D;return`${D.slice(0,Math.max(0,$-3))}...`}function C_(_,$=""){return typeof _==="string"&&_.length>0?_:$}function BU(_){return typeof _==="number"&&Number.isFinite(_)?_:0}function BD(_){if(typeof _!=="string"||_.length===0)return;let $=_.includes("T")?_:`${_.replace(" ","T")}Z`,D=new Date($);return Number.isNaN(D.valueOf())?void 0:D.toISOString()}function zN(_){return H$.safeParse(_).success}function k$(_,$,D,U,g=[]){return{kind:_,id:$,name:D,uri:U&&zN(U)?U:void 0,externalId:$,sourcePackage:oG,tags:g}}function Tv(_){return[..._.items.flatMap((D)=>[D.updated_at,D.created_at]),..._.sources.flatMap((D)=>[D.updated_at,D.created_at]),..._.chunks.map((D)=>D.created_at),..._.wiki_pages.flatMap((D)=>[D.updated_at,D.created_at]),..._.storage_objects.flatMap((D)=>[D.updated_at,D.created_at]),..._.runs.flatMap((D)=>[D.updated_at,D.created_at]),..._.reindex_queue.flatMap((D)=>[D.updated_at,D.created_at]),..._.sync_conflicts.map((D)=>D.created_at),..._.approval_gates.flatMap((D)=>[D.updated_at,D.created_at])].map(BD).filter(Boolean).sort((D,U)=>U.localeCompare(D))[0]}function qv(_){if(!_)return"unknown";let $=Date.now()-new Date(_).valueOf();if(!Number.isFinite($))return"unknown";return $>2592000000?"stale":"fresh"}function Bv(_){let $=(D)=>{let U=String(D??"").toLowerCase();return U!==""&&!["done","complete","completed","resolved","succeeded","skipped"].includes(U)};return _.reindex_queue.filter((D)=>$(D.status)).length+_.sync_conflicts.filter((D)=>$(D.status)).length+_.approval_gates.filter((D)=>$(D.status)).length}function Vv(_,$){let D=[];for(let U of _.items.slice(0,$))D.push({id:`item_${U.id}`,title:U.title,summary:qU(U.content_preview),status:U.archived?"archived":"active",priority:"medium",timestamp:BD(U.updated_at??U.created_at),resourceRefs:[k$("knowledge",U.id,U.title,`knowledge://item/${encodeURIComponent(U.id)}`,U.tags)],evidenceRefs:U.url&&zN(U.url)?[{id:`url_${U.id}`,kind:"url",uri:U.url,summary:"Source URL for this knowledge item."}]:[],metadata:{source:"legacy_store",archived:U.archived,tags:U.tags,url:U.url||void 0}});for(let U of _.sources.slice(0,Math.max(0,$-D.length))){let g=C_(U.id,C_(U.uri,"source")),I=C_(U.title,C_(U.uri,g)),j=C_(U.uri,`knowledge://source/${encodeURIComponent(g)}`);D.push({id:`source_${g}`,title:I,summary:qU(`${BU(U.chunks)} chunk(s), ${BU(U.revisions)} revision(s)`),status:BU(U.chunks)>0?"indexed":"source",priority:"medium",timestamp:BD(U.updated_at??U.created_at),resourceRefs:[k$("document",g,I,j)],evidenceRefs:zN(j)?[{id:`source_${g}`,kind:"url",uri:j,summary:"Source reference."}]:[],metadata:{source:"knowledge_db.sources",kind:U.kind,chunks:BU(U.chunks),revisions:BU(U.revisions)}})}for(let U of _.chunks.slice(0,Math.max(0,$-D.length))){let g=C_(U.id,"chunk"),I=C_(U.source_uri);D.push({id:`chunk_${g}`,title:C_(U.wiki_title,I?`Chunk from ${I}`:`Knowledge chunk ${g}`),summary:qU(U.text_preview),status:"chunk",priority:"low",timestamp:BD(U.created_at),resourceRefs:[k$("context_pack",g,C_(U.wiki_title,g),`knowledge://chunk/${encodeURIComponent(g)}`)],evidenceRefs:I&&zN(I)?[{id:`chunk_source_${g}`,kind:"url",uri:I,summary:"Chunk source reference."}]:[],metadata:{source:"knowledge_db.chunks",source_uri:I||void 0,token_count:U.token_count,ordinal:U.ordinal}})}for(let U of _.sync_conflicts.slice(0,Math.max(0,$-D.length))){let g=C_(U.id,"sync_conflict");D.push({id:`sync_conflict_${g}`,title:`Sync conflict: ${C_(U.entity_kind,"entity")}/${C_(U.entity_id,g)}`,summary:qU(`Status ${C_(U.status,"unknown")}; strategy ${C_(U.resolution_strategy,"none")}.`),status:C_(U.status,"unknown"),priority:"critical",timestamp:BD(U.created_at),resourceRefs:[k$("finding",g,"Knowledge sync conflict",`knowledge://sync-conflict/${encodeURIComponent(g)}`)],metadata:{source:"knowledge_db.sync_conflicts",local_machine_id:U.local_machine_id,remote_machine_id:U.remote_machine_id}})}for(let U of _.reindex_queue.slice(0,Math.max(0,$-D.length))){let g=C_(U.id,"reindex");D.push({id:`reindex_${g}`,title:`Reindex ${C_(U.kind,"item")}: ${C_(U.target_id,g)}`,summary:qU(U.reason),status:C_(U.status,"unknown"),priority:C_(U.status).toLowerCase()==="failed"?"high":"medium",timestamp:BD(U.updated_at??U.created_at),resourceRefs:[k$("action",g,"Knowledge reindex work item",`knowledge://reindex/${encodeURIComponent(g)}`)],metadata:{source:"knowledge_db.reindex_queue",attempts:U.attempts,source_uri:U.source_uri}})}return D.slice(0,$)}async function pG(_,$={}){let D=Yv($.limit),U=new Date().toISOString(),g=Qv(_),j=await($.service??IN({scope:$.scope??"project",cwd:$.cwd})).resolveInventory({limit:D,storePath:$.storePath,includeArchived:$.includeArchived}),N=Tv(j),O=qv(N),A=j.summary.active_items+j.summary.sources+j.summary.chunks+j.summary.wiki_pages+j.summary.storage_objects,L=Bv(j),z=A===0?"empty":O==="stale"?"stale":"ready",W=Vv(j,D),J={schema:x.projectPanel,id:`knowledge_panel_${g}`,createdAt:U,projectId:g,provider:{kind:"knowledge",id:`knowledge_${g}`,name:"Knowledge",sourcePackage:oG,externalId:j.home},kind:"knowledge",title:"Knowledge",summary:z==="empty"?"No project knowledge items, sources, chunks, or wiki pages are available yet.":`${j.summary.active_items} active note(s), ${j.summary.sources} source(s), ${j.summary.chunks} chunk(s), and ${j.summary.wiki_pages} wiki page(s).`,state:z,stateReason:z==="stale"?"Latest indexed knowledge activity is older than 30 days.":void 0,generatedAt:U,freshness:O,metrics:[{id:"active_items",label:"Active notes",value:j.summary.active_items,status:j.summary.active_items>0?"good":"unknown"},{id:"sources",label:"Sources",value:j.summary.sources,status:j.summary.sources>0?"good":"unknown"},{id:"chunks",label:"Chunks",value:j.summary.chunks,status:j.summary.chunks>0?"good":"unknown"},{id:"wiki_pages",label:"Wiki pages",value:j.summary.wiki_pages,status:j.summary.wiki_pages>0?"good":"unknown"},{id:"artifacts",label:"Artifacts",value:j.summary.storage_objects,status:j.summary.storage_objects>0?"good":"unknown"},{id:"vector_entries",label:"Vector entries",value:j.summary.vector_entries,status:j.summary.vector_entries>0?"good":"unknown"},{id:"unresolved",label:"Unresolved",value:L,status:L>0?"warning":"good"}],items:W,actions:[k$("action","knowledge:inventory","Inspect knowledge inventory"),k$("action","knowledge:context-pack","Build cited context pack"),k$("action","knowledge:ingest","Ingest project source")],resourceRefs:[k$("project",g,_,`project://${g}`),k$("knowledge",`home_${g}`,"Knowledge workspace",`knowledge://workspace/${encodeURIComponent(g)}`),k$("artifact",`db_${g}`,"Knowledge database",`knowledge://db/${encodeURIComponent(g)}`)],renderFragment:{renderer:"json_render",title:"Knowledge",spec:{component:"project.knowledge.summary",metrics:["active_items","sources","chunks","wiki_pages","unresolved"],itemLimit:D}},metadata:{scope:j.scope,home:j.home,json_store_exists:j.paths.json_store_exists,latest_activity_at:N}};return tG(x.projectPanel,J)}function eG(_){let $=[`${_.title}: ${_.state}`,_.summary??"",..._.metrics.map((D)=>`${D.label}: ${D.value}`)].filter(Boolean);if(_.items.length>0){$.push("Items:");for(let D of _.items.slice(0,10))if($.push(`- ${D.title}${D.status?` [${D.status}]`:""}`),D.summary)$.push(` ${D.summary}`)}return $.join(` -`)}var _8=["sources","wiki_pages","source_revisions","chunks","chunk_embeddings","wiki_backlinks","citations","knowledge_indexes","runs","run_events","provider_usage","redaction_findings","storage_objects","audit_events","approval_gates","vector_index_entries","reindex_queue","knowledge_machines","knowledge_sync_snapshots","knowledge_sync_changes","knowledge_sync_conflicts","knowledge_sync_table_clocks","knowledge_sync_imports"];var $8="HASNA_KNOWLEDGE_STORAGE_MODE",D8="KNOWLEDGE_STORAGE_MODE";function aG(_){return process.env[_]?.trim()||void 0}function sG(_){let $=_?.trim().toLowerCase().replace(/-/g,"_");if($==="sqlite")return"sqlite";if($==="postgres"||$==="postgresql")return"postgres";return}function Kv(_={}){let $=g0(HU(_.scope,_.cwd).home);return h($.knowledgeDbPath),{db:r($.knowledgeDbPath),path:$.knowledgeDbPath,scope:_.scope??"global"}}function g8(){let _=sG(aG($8))??sG(aG(D8));if(_)return _;return"sqlite"}function o3(_={}){let $=Kv(_);try{Fv($.db);let D=$.db.query("SELECT table_name, last_synced_at, direction FROM _knowledge_sync_meta ORDER BY table_name, direction").all();return{mode:g8(),service:"knowledge",scope:$.scope,databasePath:$.path,tables:_8,sync:D}}finally{$.db.close()}}function Fv(_){_.exec(` + `,[g]).map(QM),o={legacy_items:D.items.length,active_items:I.length,archived_items:D.items.length-I.length,schema_version:A.schema_version,sources:A.sources,source_revisions:A.source_revisions,chunks:A.chunks,wiki_pages:A.wiki_pages,citations:A.citations,indexes:A.indexes,runs:A.runs,run_events:A.run_events,storage_objects:A.storage_objects,embeddings:A.embeddings,vector_entries:A.vector_entries,reindex_queue:A.reindex_queue,redaction_findings:A.redaction_findings,audit_events:A.audit_events,approval_gates:A.approval_gates,knowledge_machines:A.knowledge_machines,sync_snapshots:A.sync_snapshots,sync_changes:A.sync_changes,sync_conflicts:A.sync_conflicts,sync_table_clocks:A.sync_table_clocks,sync_imports:A.sync_imports,promotion_candidates:A.promotion_candidates,durable_records:A.durable_records};return{ok:!0,scope:this.scope,home:$.home,limit:g,paths:{json_store_path:U,json_store_exists:D.exists,knowledge_db_path:$.knowledgeDbPath,knowledge_db_exists:!0,artifacts_dir:$.artifactsDir,indexes_dir:$.indexesDir,logs_dir:$.logsDir,wiki_dir:$.wikiDir},summary:o,legacy_store:{path:U,exists:D.exists,read_error:D.read_error,total_items:D.items.length,active_items:I.length,archived_items:D.items.length-I.length,items_returned:Math.min(j.length,g)},items:j.slice(0,g).map(t5),sources:P,source_revisions:W,chunks:z,wiki_pages:S,indexes:L,storage_objects:J,runs:R,vector_indexes:X,reindex_queue:G,machines:B,sync_conflicts:Q,approval_gates:T,audit_events:K,promotion_candidates:V,durable_records:F,message:`${D.items.length} item(s), ${A.sources} source(s), ${A.chunks} chunk(s), ${A.wiki_pages} wiki page(s), ${A.storage_objects} artifact(s)`}}finally{O.close()}}assertAppWikiWrite(_){f0({scope:this.scope,workspace:this.workspace,safetyPolicy:this.safetyPolicy(),allowGlobal:_})}async initAppWiki(_={}){this.assertAppWikiWrite(_.allowGlobal);let $=this.ensureWorkspace();return A3({scope:this.scope,workspace:$,store:this.artifactStore(),safetyPolicy:this.safetyPolicy(),allowGlobal:_.allowGlobal})}async addAppWikiNote(_){this.assertAppWikiWrite(_.allowGlobal);let $=this.ensureWorkspace();return O3({scope:this.scope,workspace:$,store:this.artifactStore(),safetyPolicy:this.safetyPolicy(),allowGlobal:_.allowGlobal,title:_.title,content:_.content,tags:_.tags,sourceRefs:_.sourceRefs,path:_.path,metadata:_.metadata})}listAppWikiNotes(_={}){let $=this.workspace;if(!J_($.knowledgeDbPath))return[];return P3({dbPath:$.knowledgeDbPath,limit:_.limit})}async getAppWikiNote(_,$={}){let g=this.workspace;if(!J_(g.knowledgeDbPath))return null;return S3({dbPath:g.knowledgeDbPath,store:this.artifactStore(),id:_,includeContent:$.includeContent})}async addAppWikiSourceRef(_){this.assertAppWikiWrite(_.allowGlobal);let $=this.ensureWorkspace();return L3({scope:this.scope,workspace:$,sourceRef:_.sourceRef,purpose:_.purpose,config:this.config(),safetyPolicy:this.safetyPolicy(),allowGlobal:_.allowGlobal})}async searchAppWiki(_){return this.search(_)}async queryAppWiki(_){return this.retrieveContext(_)}async initWiki(){let _=this.ensureWorkspace();c(_.knowledgeDbPath);let $=await M5(this.artifactStore()),g=v(_.knowledgeDbPath);try{_6(g,$.artifacts),Z5(g,$.artifacts)}finally{g.close()}return $}async compileWiki(_={}){let $=this.ensureWorkspace();return V5({..._,dbPath:$.knowledgeDbPath,store:this.artifactStore()})}async fileAnswer(_){let $=this.ensureWorkspace(),g=await this.retrieveContext({query:_.prompt,limit:_.limit,semantic:_.semantic,modelRef:_.modelRef,dimensions:_.dimensions,fake:_.fake});return F5({dbPath:$.knowledgeDbPath,store:this.artifactStore(),prompt:_.prompt,answer:_.answer,context:g,approveWrite:_.approveWrite})}lintWiki(){let _=this.ensureWorkspace();return r5({dbPath:_.knowledgeDbPath})}async ingestManifest(_){let $=this.ensureWorkspace();return U3({dbPath:$.knowledgeDbPath,input:_,config:this.config(),safetyPolicy:this.safetyPolicy()})}async ingestSource(_,$){let g=this.ensureWorkspace();return eU({dbPath:g.knowledgeDbPath,sourceRef:_,purpose:$,config:this.config(),safetyPolicy:this.safetyPolicy()})}async importRulesProvenance(_={}){let $=_.dryRun!==!1,g=$?this.workspace:this.ensureWorkspace();return J5({root:_.root??this.options.cwd??process.cwd(),scope:this.scope,owner:_.owner,dryRun:$,deprecateLegacy:_.deprecateLegacy,includeLegacy:_.includeLegacy,legacyStorePath:g.jsonStorePath,dbPath:g.knowledgeDbPath,safetyPolicy:this.safetyPolicy(),maxItems:_.maxItems,limit:_.limit})}async resolveSource(_,$={}){let g=this.ensureWorkspace();return tU({dbPath:g.knowledgeDbPath,sourceRef:_,purpose:$.purpose,limit:$.limit,safetyPolicy:this.safetyPolicy()})}async consumeOutbox(_){let $=this.ensureWorkspace();return FX({dbPath:$.knowledgeDbPath,input:_,config:this.config(),safetyPolicy:this.safetyPolicy()})}reindexHealth(_={}){let $=this.workspace;if(!J_($.knowledgeDbPath))return VM();return U5({..._,dbPath:$.knowledgeDbPath,config:this.config()})}enqueueReindex(_={}){let $=this.ensureWorkspace();return OW({..._,dbPath:$.knowledgeDbPath,config:this.config()})}async refreshEmbeddings(_={}){let $=this.ensureWorkspace();return I5({..._,dbPath:$.knowledgeDbPath,config:this.config()})}providerStatus(_=process.env){return G3(this.config(),_)}modelRegistry(){return XN(this.config())}embeddingStatus(){let _=this.workspace;if(!J_(_.knowledgeDbPath))return FM();return q3(_.knowledgeDbPath)}async indexEmbeddings(_={}){let $=this.ensureWorkspace();return _I({..._,dbPath:$.knowledgeDbPath,config:this.config()})}isApiMode(){return Q6()}cloudStore(){let _=u0();if(!_)throw Error("knowledge: cloud store requested but not resolvable (check HASNA_KNOWLEDGE_API_URL + HASNA_KNOWLEDGE_API_KEY).");return _}async fetchCloudItems(){return cU(this.cloudStore())}async semanticSearch(_){let $=this.workspace;if(this.isApiMode())throw new DE;if(!J_($.knowledgeDbPath))return{provider:"openai",model:"text-embedding-3-small",dimensions:_.dimensions??1536,query:_.query,results:[]};return $I({..._,dbPath:$.knowledgeDbPath,config:this.config()})}async search(_){let $=this.workspace;if(this.isApiMode()){if(_.semantic===!0||_.fake===!0||Boolean(_.modelRef))throw new DE;let U=await this.cloudStore().search({query:_.query,archive:"active",limit:_.limit,offset:_.offset});return VN(U.items,_,[],U.total)}let g=MW(this.scope,$,_.legacyStorePath);if(!J_($.knowledgeDbPath)){if(J_(g))return II({..._,legacyStorePath:g,config:this.config()});return j9(_.query,Math.max(1,Math.min(_.limit??10,100)),_.semantic===!0||_.fake===!0||Boolean(_.modelRef))}return UI({..._,dbPath:$.knowledgeDbPath,legacyStorePath:g,config:this.config()})}async retrieveContext(_){let $=this.workspace;if(this.isApiMode()){let U=await this.search(_);return D6(U,{contextChars:_.contextChars})}let g=MW(this.scope,$,_.legacyStorePath);if(!J_($.knowledgeDbPath)){if(J_(g)){let U=await II({..._,legacyStorePath:g,config:this.config()});return D6(U,{contextChars:_.contextChars})}return qM(_.query,Math.max(1,Math.min(_.limit??10,100)),_.semantic===!0||_.fake===!0||Boolean(_.modelRef))}return X4({..._,dbPath:$.knowledgeDbPath,legacyStorePath:g,config:this.config()})}async contextPack(_){let $=this.workspace;if(this.isApiMode()){let U=(_.query??_.topic??"").trim();if(U&&_.source!=="loops"&&_.source!=="runs"){let D=await this.search({..._,query:U}),I=D6(D,{contextChars:_.contextChars});return e5(_,I,this.safetyPolicy())}return a5(_)}let g=MW(this.scope,$,_.legacyStorePath);if(!J_($.knowledgeDbPath)){let U=(_.query??_.topic??"").trim();if(U&&_.source!=="loops"&&_.source!=="runs"&&J_(g)){let D=await II({..._,query:U,legacyStorePath:g,config:this.config()}),I=D6(D,{contextChars:_.contextChars});return e5(_,I,this.safetyPolicy())}return a5(_)}return _R({..._,dbPath:$.knowledgeDbPath,legacyStorePath:g,config:this.config(),safetyPolicy:this.safetyPolicy()})}async runPrompt(_){if(this.isApiMode()){if(_.semantic===!0||_.fake===!0||Boolean(_.modelRef))throw new DE;let U=await this.cloudStore().search({query:_.prompt,archive:"active",limit:_.limit,offset:_.offset}),D=VN(U.items,{query:_.prompt,limit:_.limit,offset:_.offset,semantic:!1},[],U.total);return m3(U.items.map((I)=>I.item),{..._,config:this.config()},D)}let $=this.ensureWorkspace(),g=_.legacyStorePath??$.jsonStorePath;if(!_.legacyStorePath)Z0(g);return d3({..._,dbPath:$.knowledgeDbPath,legacyStorePath:g,config:this.config()})}async webSearch(_){let $=this.ensureWorkspace();return X5({..._,dbPath:$.knowledgeDbPath,config:this.config(),safetyPolicy:this.safetyPolicy()})}async machineTopology(_={}){let $=this.workspace;return hX({..._,knowledge:{scope:this.scope,workspace_home:$.home}})}async machinePreflight(_={}){let $=this.workspace;return mX({..._,knowledge:{scope:this.scope,workspace_home:$.home}})}syncStatus(){let _=this.workspace;if(!J_(_.knowledgeDbPath))return rM({scope:this.scope,workspaceHome:_.home});return KR({dbPath:_.knowledgeDbPath,scope:this.scope,workspaceHome:_.home})}async syncDoctor(_={}){let $=this.ensureWorkspace();c($.knowledgeDbPath);let g=this.syncStatus(),U=this.storageContract(),D=this.validateStorage(),I=bM($.knowledgeDbPath,U),j=_.machine?.trim()||null,E=_.peerWorkspace?.trim()||null,A=[],O=null,P=null;if(j&&!g9(j)){let J=await IW({machineId:j,includeTailscale:_.includeTailscale});O=bW(J),A.push(...J.warnings)}if(j||E){let J=await ij({machineId:j??rW($),peerWorkspace:E,includeTailscale:_.includeTailscale});if(j&&!E&&(O?.source==="raw"||!J.ok||!J.project_root)){let R=n5($.knowledgeDbPath,j);if(R){if(O?.source==="raw"&&R.ssh_target)O=bW(d5(R,j,{target:O.target,route:O.route,targetKind:O.target_kind,confidence:O.confidence,source:O.source,adapter:O.adapter,evidence:O.evidence,cacheability:O.cacheability,warnings:[]}));if(!J.ok||!J.project_root){let X=m5(R,j,J);if(X)P=OU(X,X.project_root),A.push(...X.warnings)}}}P=J.ok&&J.project_root?OU(J,J.project_root):P??{...OU(J,E??""),project_root:J.project_root??E??""},A.push(...J.warnings)}if(!D.ok)A.push(...D.errors.map((J)=>`storage:${J}`));let W=RM($.knowledgeDbPath,P);if(!W.ok)A.push("open_files_boundary_raw_payload_sentinels");if(!I.ok)A.push(...I.warnings);let z=P?.diagnostics.filter((J)=>J.severity==="fail")??[],S=D.ok&&I.ok&&W.ok&&z.length===0&&(P?.project_root!==""||!P),L=ZM({scope:this.scope,machine:j,peerWorkspace:E,tables:_.tables,resolvedWorkspace:P,openConflicts:g.conflicts.open});return{ok:S,read_only:!0,generated_at:new Date().toISOString(),scope:this.scope,workspace_home:$.home,database:{sqlite_schema_version:g.sqlite_schema_version,table_counts:g.table_counts},storage:{contract:U,validation:D,artifact_manifest:I},sync:{machines:g.machines.total,snapshots:g.snapshots.total,clocks:g.clocks.total,imports:g.imports.total,open_conflicts:g.conflicts.open,table_clocks:g.clocks.rows},open_files:W,resolved_route:O,resolved_workspace:P,recommended_commands:L,warnings:[...new Set(A)],message:S?`Sync readiness ok: ${g.clocks.total} table clock(s), ${g.conflicts.open} open conflict(s)`:`Sync readiness needs attention: ${[...new Set(A)].join(", ")||"workspace diagnostics failed"}`}}repairArtifactManifestKeys(_={}){let $=this.ensureWorkspace();c($.knowledgeDbPath);let g=this.storageContract(),U=vW(g),D=MM($.knowledgeDbPath,g),I=_.dryRun===!0||_.approveWrite!==!0;if(D.length===0)return{ok:!0,dry_run:I,approval_required:!1,storage_type:g.storage_type,storage_prefix:U,candidates:D,repaired:0,audit_event_id:null,message:"No legacy S3 artifact manifest keys found"};if(_.dryRun===!0)return{ok:!0,dry_run:!0,approval_required:!1,storage_type:g.storage_type,storage_prefix:U,candidates:D,repaired:0,audit_event_id:null,message:`Would repair ${D.length} legacy S3 artifact manifest key(s)`};if(_.approveWrite!==!0||!_.approvedBy)return{ok:!1,dry_run:!0,approval_required:!0,storage_type:g.storage_type,storage_prefix:U,candidates:D,repaired:0,audit_event_id:null,message:"Artifact key repair requires --approve-write and --approved-by "};let j=v($.knowledgeDbPath);try{let E=new Date().toISOString();j.transaction((P)=>{let W=j.query("UPDATE storage_objects SET metadata_json = ?, updated_at = ? WHERE id = ?"),z=j.query("SELECT id, metadata_json FROM storage_objects").all(),S=new Map(z.map((L)=>[L.id,ng(L.metadata_json)]));for(let L of P){let J=S.get(L.id)??{};J.key=L.repaired_key,W.run(JSON.stringify(J),E,L.id)}})(D);let O=z_(j,{event_type:"artifact_manifest_key_repair",action:"storage.artifact_manifest.repair_keys",target_uri:`knowledge-storage://${$.home}/storage_objects`,decision:"allow",metadata:{approved_by:_.approvedBy,repaired:D.length,storage_type:g.storage_type,storage_prefix:U,artifact_uris:D.map((P)=>P.artifact_uri)}});return{ok:!0,dry_run:!1,approval_required:!1,storage_type:g.storage_type,storage_prefix:U,candidates:D,repaired:D.length,audit_event_id:O,message:`Repaired ${D.length} legacy S3 artifact manifest key(s)`}}finally{j.close()}}async createSyncSnapshot(_={}){let $=this.ensureWorkspace(),g=await this.machineTopology({includeTailscale:_.includeTailscale!==!1});return TR({dbPath:$.knowledgeDbPath,scope:this.scope,workspaceHome:$.home,storage:this.storageContract(),topology:g,machineId:_.machineId})}syncConflicts(_={}){let $=this.workspace;if(!J_($.knowledgeDbPath))return[];return qR($.knowledgeDbPath,_)}syncConflict(_){let $=this.ensureWorkspace(),g=zI($.knowledgeDbPath,_);if(!g)throw Error(`Sync conflict not found: ${_}`);return g}proposeSyncConflictResolution(_){let $=this.ensureWorkspace();return t0($.knowledgeDbPath,_)}async proposeSyncConflictResolutionWithAi(_){let $=this.ensureWorkspace();return BX({dbPath:$.knowledgeDbPath,id:_.id,config:this.config(),modelRef:_.modelRef,fake:_.fake,env:_.env})}resolveSyncConflict(_){let $=this.ensureWorkspace(),g=t0($.knowledgeDbPath,_.id);if(_.approveWrite!==!0||!_.approvedBy)return{ok:!1,approval_required:!0,conflict:g.conflict,proposal:g,message:"Sync conflict resolution requires --approve-write and --approved-by "};let U=FR($.knowledgeDbPath,{id:_.id,strategy:_.strategy??g.proposed_strategy,approvedBy:_.approvedBy,proposedPatchUri:_.proposedPatchUri}),D=v($.knowledgeDbPath);try{let I=z_(D,{event_type:"sync_conflict_resolution",action:"sync.conflict.resolve",target_uri:`knowledge-sync-conflict://${_.id}`,decision:"allow",metadata:{conflict_id:_.id,entity_kind:U.entity_kind,entity_id:U.entity_id,strategy:U.resolution_strategy,approved_by:U.approved_by,proposed_patch_uri:U.proposed_patch_uri}});return{ok:!0,approval_required:!1,conflict:U,audit_event_id:I,message:`Resolved sync conflict ${_.id}`}}finally{D.close()}}syncMachines(){let _=this.workspace;if(!J_(_.knowledgeDbPath))return[];return cN(_.knowledgeDbPath)}exportSyncBundle(_={}){let $=this.ensureWorkspace();return this.assertStorageValid("sync export"),c($.knowledgeDbPath),l0({dbPath:$.knowledgeDbPath,scope:this.scope,workspaceHome:$.home,storage:this.storageContract(),machineId:_.machineId??null,tables:_.tables,includeArtifactContent:_.includeArtifactContent,recordClocks:_.recordClocks!==!1})}async importSyncBundle(_){let $=this.ensureWorkspace();return this.assertStorageValid("sync import"),c($.knowledgeDbPath),JI({targetDbPath:$.knowledgeDbPath,targetScope:this.scope,targetWorkspaceHome:$.home,targetStorage:this.storageContract(),targetStore:this.artifactStore(),bundle:_.bundle,direction:_.direction??"import",dryRun:_.dryRun,localMachineId:_.machineId??null})}async syncRemotePeer(_){let $=_.direction??"both",g=_.dryRun===!0,U=this.ensureWorkspace();c(U.knowledgeDbPath);let D=_.tables?.length?["--tables",_.tables.join(",")]:[],I=_.includeArtifactContent===!1?["--no-artifact-content"]:[],j=["--scope",this.scope,"--json"],E=await IW({machineId:_.machine,includeTailscale:_.includeTailscale}),A=await ij({machineId:_.machine,peerWorkspace:_.peerWorkspace,includeTailscale:_.includeTailscale});if(!_.peerWorkspace&&E.source==="raw"||!A.ok||!A.project_root){let S=n5(U.knowledgeDbPath,_.machine);if(S){if(!_.peerWorkspace&&E.source==="raw"&&S.ssh_target)E=d5(S,_.machine,E);if(!A.ok||!A.project_root){let L=m5(S,_.machine,A);if(L)A=L}}}if(!A.ok||!A.project_root)throw Error([`Unable to resolve peer workspace for ${_.machine}.`,"Pass --peer-workspace or configure workspace path mapping in machines.",A.warnings.length?`Warnings: ${A.warnings.join(", ")}`:null].filter(Boolean).join(" "));let O=A.project_root,P={ok:!0,dry_run:g,direction:$,transport:"ssh",machine:_.machine,resolved_machine:E.target,resolved_route:bW(E),resolved_workspace:OU(A,A.project_root),peer_workspace:O,message:""},W=!1,z=()=>{if(g||W)return;XR(U.knowledgeDbPath,{machineId:_.machine,route:E,workspace:A}),W=!0};if($==="pull"||$==="both"){let S=h5(O,["sync","export",...j,...D,...I]),L=s5(_.machine,S,void 0,E),J=_9(_.machine,"sync export",L);kM(_.machine,J),P.pull=await this.importSyncBundle({bundle:J,dryRun:g,direction:"pull",machineId:_.machineId??null})}if($==="push"||$==="both"){z();let S=this.exportSyncBundle({machineId:_.machineId??null,tables:_.tables,includeArtifactContent:_.includeArtifactContent,recordClocks:!g}),L=h5(O,["sync","import",...j,...g?["--dry-run"]:[]]),J=_9(_.machine,"sync import",s5(_.machine,L,JSON.stringify(S),E));CM(_.machine,J),P.push=J}return P.ok=(P.pull?.ok??!0)&&(P.push?.ok??!0),z(),P.message=[i5(P.resolved_workspace),P.pull?`pull: ${P.pull.message}`:null,P.push?`push: ${P.push.message}`:null].filter(Boolean).join("; "),P}async syncPeer(_){let $=_.direction??"both",g=this.ensureWorkspace();c(g.knowledgeDbPath);let U=$9(_.peerWorkspace),D=AM(U);c(D.knowledgeDbPath);let I=bE(D.configPath),j=mU(I,D,this.scope),E=IN(I,D),A=_.machineId??rW(g),O=rW(D),P=await ij({machineId:_.machineId??O,peerWorkspace:U,includeTailscale:!1}),W=()=>l0({dbPath:g.knowledgeDbPath,scope:this.scope,workspaceHome:g.home,storage:this.storageContract(),machineId:A,tables:_.tables,includeArtifactContent:_.includeArtifactContent,recordClocks:_.dryRun!==!0}),z=()=>l0({dbPath:D.knowledgeDbPath,scope:this.scope,workspaceHome:D.home,storage:j,machineId:O,tables:_.tables,includeArtifactContent:_.includeArtifactContent,recordClocks:_.dryRun!==!0}),S={ok:!0,dry_run:_.dryRun===!0,direction:$,resolved_workspace:OU(P,P.project_root??U),message:""};if($==="pull"||$==="both")S.pull=await JI({targetDbPath:g.knowledgeDbPath,targetScope:this.scope,targetWorkspaceHome:g.home,targetStorage:this.storageContract(),targetStore:this.artifactStore(),bundle:z(),targetBundle:W(),direction:"pull",dryRun:_.dryRun,localMachineId:A});if($==="push"||$==="both")S.push=await JI({targetDbPath:D.knowledgeDbPath,targetScope:this.scope,targetWorkspaceHome:D.home,targetStorage:j,targetStore:E,bundle:W(),targetBundle:z(),direction:"push",dryRun:_.dryRun,localMachineId:O});return S.ok=(S.pull?.ok??!0)&&(S.push?.ok??!0),S.message=[i5(S.resolved_workspace),S.pull?`pull: ${S.pull.message}`:null,S.push?`push: ${S.push.message}`:null].filter(Boolean).join("; "),S}}function IE(_={}){return new E9(_)}import{createHash as N9}from"crypto";var wM=Object.defineProperty,uM=(_)=>_;function fM(_,$){this[_]=uM.bind(null,$)}var xM=(_,$)=>{for(var g in $)wM(_,g,{get:$[g],enumerable:!0,configurable:!0,set:fM.bind($,g)})},N={};xM(N,{void:()=>KZ,util:()=>D_,unknown:()=>QZ,union:()=>FZ,undefined:()=>GZ,tuple:()=>MZ,transformer:()=>P9,symbol:()=>RZ,string:()=>B9,strictObject:()=>VZ,setErrorMap:()=>hM,set:()=>kZ,record:()=>ZZ,quotelessJson:()=>yM,promise:()=>xZ,preprocess:()=>hZ,pipeline:()=>nZ,ostring:()=>dZ,optional:()=>yZ,onumber:()=>mZ,oboolean:()=>iZ,objectUtil:()=>fW,object:()=>BZ,number:()=>V9,nullable:()=>cZ,null:()=>XZ,never:()=>TZ,nativeEnum:()=>fZ,nan:()=>WZ,map:()=>HZ,makeIssue:()=>NE,literal:()=>wZ,lazy:()=>vZ,late:()=>SZ,isValid:()=>dg,isDirty:()=>yW,isAsync:()=>WU,isAborted:()=>xW,intersection:()=>bZ,instanceof:()=>LZ,getParsedType:()=>J6,getErrorMap:()=>EE,function:()=>CZ,enum:()=>uZ,effect:()=>P9,discriminatedUnion:()=>rZ,defaultErrorMap:()=>N0,datetimeRegex:()=>T9,date:()=>zZ,custom:()=>q9,coerce:()=>lZ,boolean:()=>F9,bigint:()=>JZ,array:()=>qZ,any:()=>YZ,addIssueToContext:()=>f,ZodVoid:()=>zU,ZodUnknown:()=>i6,ZodUnion:()=>S0,ZodUndefined:()=>O0,ZodType:()=>__,ZodTuple:()=>n$,ZodTransformer:()=>R$,ZodSymbol:()=>JU,ZodString:()=>V$,ZodSet:()=>lg,ZodSchema:()=>__,ZodRecord:()=>RU,ZodReadonly:()=>X0,ZodPromise:()=>tg,ZodPipeline:()=>YU,ZodParsedType:()=>y,ZodOptional:()=>r$,ZodObject:()=>r_,ZodNumber:()=>l6,ZodNullable:()=>z6,ZodNull:()=>P0,ZodNever:()=>h$,ZodNativeEnum:()=>z0,ZodNaN:()=>XU,ZodMap:()=>GU,ZodLiteral:()=>J0,ZodLazy:()=>W0,ZodIssueCode:()=>H,ZodIntersection:()=>L0,ZodFunction:()=>j0,ZodFirstPartyTypeKind:()=>i,ZodError:()=>N$,ZodEnum:()=>o6,ZodEffects:()=>R$,ZodDiscriminatedUnion:()=>PE,ZodDefault:()=>R0,ZodDate:()=>mg,ZodCatch:()=>G0,ZodBranded:()=>SE,ZodBoolean:()=>A0,ZodBigInt:()=>t6,ZodArray:()=>F$,ZodAny:()=>ig,Schema:()=>__,ParseStatus:()=>n_,OK:()=>p_,NEVER:()=>tZ,INVALID:()=>m,EMPTY_PATH:()=>nM,DIRTY:()=>I0,BRAND:()=>PZ});var D_;(function(_){_.assertEqual=(D)=>{};function $(D){}_.assertIs=$;function g(D){throw Error()}_.assertNever=g,_.arrayToEnum=(D)=>{let I={};for(let j of D)I[j]=j;return I},_.getValidEnumValues=(D)=>{let I=_.objectKeys(D).filter((E)=>typeof D[D[E]]!=="number"),j={};for(let E of I)j[E]=D[E];return _.objectValues(j)},_.objectValues=(D)=>{return _.objectKeys(D).map(function(I){return D[I]})},_.objectKeys=typeof Object.keys==="function"?(D)=>Object.keys(D):(D)=>{let I=[];for(let j in D)if(Object.prototype.hasOwnProperty.call(D,j))I.push(j);return I},_.find=(D,I)=>{for(let j of D)if(I(j))return j;return},_.isInteger=typeof Number.isInteger==="function"?(D)=>Number.isInteger(D):(D)=>typeof D==="number"&&Number.isFinite(D)&&Math.floor(D)===D;function U(D,I=" | "){return D.map((j)=>typeof j==="string"?`'${j}'`:j).join(I)}_.joinValues=U,_.jsonStringifyReplacer=(D,I)=>{if(typeof I==="bigint")return I.toString();return I}})(D_||(D_={}));var fW;(function(_){_.mergeShapes=($,g)=>{return{...$,...g}}})(fW||(fW={}));var y=D_.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),J6=(_)=>{switch(typeof _){case"undefined":return y.undefined;case"string":return y.string;case"number":return Number.isNaN(_)?y.nan:y.number;case"boolean":return y.boolean;case"function":return y.function;case"bigint":return y.bigint;case"symbol":return y.symbol;case"object":if(Array.isArray(_))return y.array;if(_===null)return y.null;if(_.then&&typeof _.then==="function"&&_.catch&&typeof _.catch==="function")return y.promise;if(typeof Map<"u"&&_ instanceof Map)return y.map;if(typeof Set<"u"&&_ instanceof Set)return y.set;if(typeof Date<"u"&&_ instanceof Date)return y.date;return y.object;default:return y.unknown}},H=D_.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]),yM=(_)=>{return JSON.stringify(_,null,2).replace(/"([^"]+)":/g,"$1:")};class N$ extends Error{get errors(){return this.issues}constructor(_){super();this.issues=[],this.addIssue=(g)=>{this.issues=[...this.issues,g]},this.addIssues=(g=[])=>{this.issues=[...this.issues,...g]};let $=new.target.prototype;if(Object.setPrototypeOf)Object.setPrototypeOf(this,$);else this.__proto__=$;this.name="ZodError",this.issues=_}format(_){let $=_||function(D){return D.message},g={_errors:[]},U=(D)=>{for(let I of D.issues)if(I.code==="invalid_union")I.unionErrors.map(U);else if(I.code==="invalid_return_type")U(I.returnTypeError);else if(I.code==="invalid_arguments")U(I.argumentsError);else if(I.path.length===0)g._errors.push($(I));else{let j=g,E=0;while(E$.message){let $={},g=[];for(let U of this.issues)if(U.path.length>0){let D=U.path[0];$[D]=$[D]||[],$[D].push(_(U))}else g.push(_(U));return{formErrors:g,fieldErrors:$}}get formErrors(){return this.flatten()}}N$.create=(_)=>{return new N$(_)};var cM=(_,$)=>{let g;switch(_.code){case H.invalid_type:if(_.received===y.undefined)g="Required";else g=`Expected ${_.expected}, received ${_.received}`;break;case H.invalid_literal:g=`Invalid literal value, expected ${JSON.stringify(_.expected,D_.jsonStringifyReplacer)}`;break;case H.unrecognized_keys:g=`Unrecognized key(s) in object: ${D_.joinValues(_.keys,", ")}`;break;case H.invalid_union:g="Invalid input";break;case H.invalid_union_discriminator:g=`Invalid discriminator value. Expected ${D_.joinValues(_.options)}`;break;case H.invalid_enum_value:g=`Invalid enum value. Expected ${D_.joinValues(_.options)}, received '${_.received}'`;break;case H.invalid_arguments:g="Invalid function arguments";break;case H.invalid_return_type:g="Invalid function return type";break;case H.invalid_date:g="Invalid date";break;case H.invalid_string:if(typeof _.validation==="object")if("includes"in _.validation){if(g=`Invalid input: must include "${_.validation.includes}"`,typeof _.validation.position==="number")g=`${g} at one or more positions greater than or equal to ${_.validation.position}`}else if("startsWith"in _.validation)g=`Invalid input: must start with "${_.validation.startsWith}"`;else if("endsWith"in _.validation)g=`Invalid input: must end with "${_.validation.endsWith}"`;else D_.assertNever(_.validation);else if(_.validation!=="regex")g=`Invalid ${_.validation}`;else g="Invalid";break;case H.too_small:if(_.type==="array")g=`Array must contain ${_.exact?"exactly":_.inclusive?"at least":"more than"} ${_.minimum} element(s)`;else if(_.type==="string")g=`String must contain ${_.exact?"exactly":_.inclusive?"at least":"over"} ${_.minimum} character(s)`;else if(_.type==="number")g=`Number must be ${_.exact?"exactly equal to ":_.inclusive?"greater than or equal to ":"greater than "}${_.minimum}`;else if(_.type==="bigint")g=`Number must be ${_.exact?"exactly equal to ":_.inclusive?"greater than or equal to ":"greater than "}${_.minimum}`;else if(_.type==="date")g=`Date must be ${_.exact?"exactly equal to ":_.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(_.minimum))}`;else g="Invalid input";break;case H.too_big:if(_.type==="array")g=`Array must contain ${_.exact?"exactly":_.inclusive?"at most":"less than"} ${_.maximum} element(s)`;else if(_.type==="string")g=`String must contain ${_.exact?"exactly":_.inclusive?"at most":"under"} ${_.maximum} character(s)`;else if(_.type==="number")g=`Number must be ${_.exact?"exactly":_.inclusive?"less than or equal to":"less than"} ${_.maximum}`;else if(_.type==="bigint")g=`BigInt must be ${_.exact?"exactly":_.inclusive?"less than or equal to":"less than"} ${_.maximum}`;else if(_.type==="date")g=`Date must be ${_.exact?"exactly":_.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(_.maximum))}`;else g="Invalid input";break;case H.custom:g="Invalid input";break;case H.invalid_intersection_types:g="Intersection results could not be merged";break;case H.not_multiple_of:g=`Number must be a multiple of ${_.multipleOf}`;break;case H.not_finite:g="Number must be finite";break;default:g=$.defaultError,D_.assertNever(_)}return{message:g}},N0=cM,X9=N0;function hM(_){X9=_}function EE(){return X9}var NE=(_)=>{let{data:$,path:g,errorMaps:U,issueData:D}=_,I=[...g,...D.path||[]],j={...D,path:I};if(D.message!==void 0)return{...D,path:I,message:D.message};let E="",A=U.filter((O)=>!!O).slice().reverse();for(let O of A)E=O(j,{data:$,defaultError:E}).message;return{...D,path:I,message:E}},nM=[];function f(_,$){let g=EE(),U=NE({issueData:$,data:_.data,path:_.path,errorMaps:[_.common.contextualErrorMap,_.schemaErrorMap,g,g===N0?void 0:N0].filter((D)=>!!D)});_.common.issues.push(U)}class n_{constructor(){this.value="valid"}dirty(){if(this.value==="valid")this.value="dirty"}abort(){if(this.value!=="aborted")this.value="aborted"}static mergeArray(_,$){let g=[];for(let U of $){if(U.status==="aborted")return m;if(U.status==="dirty")_.dirty();g.push(U.value)}return{status:_.value,value:g}}static async mergeObjectAsync(_,$){let g=[];for(let U of $){let D=await U.key,I=await U.value;g.push({key:D,value:I})}return n_.mergeObjectSync(_,g)}static mergeObjectSync(_,$){let g={};for(let U of $){let{key:D,value:I}=U;if(D.status==="aborted")return m;if(I.status==="aborted")return m;if(D.status==="dirty")_.dirty();if(I.status==="dirty")_.dirty();if(D.value!=="__proto__"&&(typeof I.value<"u"||U.alwaysSet))g[D.value]=I.value}return{status:_.value,value:g}}}var m=Object.freeze({status:"aborted"}),I0=(_)=>({status:"dirty",value:_}),p_=(_)=>({status:"valid",value:_}),xW=(_)=>_.status==="aborted",yW=(_)=>_.status==="dirty",dg=(_)=>_.status==="valid",WU=(_)=>typeof Promise<"u"&&_ instanceof Promise,n;(function(_){_.errToObj=($)=>typeof $==="string"?{message:$}:$||{},_.toString=($)=>typeof $==="string"?$:$?.message})(n||(n={}));class b${constructor(_,$,g,U){this._cachedPath=[],this.parent=_,this.data=$,this._path=g,this._key=U}get path(){if(!this._cachedPath.length)if(Array.isArray(this._key))this._cachedPath.push(...this._path,...this._key);else this._cachedPath.push(...this._path,this._key);return this._cachedPath}}var A9=(_,$)=>{if(dg($))return{success:!0,data:$.value};else{if(!_.common.issues.length)throw Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;let g=new N$(_.common.issues);return this._error=g,this._error}}}};function a(_){if(!_)return{};let{errorMap:$,invalid_type_error:g,required_error:U,description:D}=_;if($&&(g||U))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if($)return{errorMap:$,description:D};return{errorMap:(j,E)=>{let{message:A}=_;if(j.code==="invalid_enum_value")return{message:A??E.defaultError};if(typeof E.data>"u")return{message:A??U??E.defaultError};if(j.code!=="invalid_type")return{message:E.defaultError};return{message:A??g??E.defaultError}},description:D}}class __{get description(){return this._def.description}_getType(_){return J6(_.data)}_getOrReturnCtx(_,$){return $||{common:_.parent.common,data:_.data,parsedType:J6(_.data),schemaErrorMap:this._def.errorMap,path:_.path,parent:_.parent}}_processInputParams(_){return{status:new n_,ctx:{common:_.parent.common,data:_.data,parsedType:J6(_.data),schemaErrorMap:this._def.errorMap,path:_.path,parent:_.parent}}}_parseSync(_){let $=this._parse(_);if(WU($))throw Error("Synchronous parse encountered promise.");return $}_parseAsync(_){let $=this._parse(_);return Promise.resolve($)}parse(_,$){let g=this.safeParse(_,$);if(g.success)return g.data;throw g.error}safeParse(_,$){let g={common:{issues:[],async:$?.async??!1,contextualErrorMap:$?.errorMap},path:$?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:_,parsedType:J6(_)},U=this._parseSync({data:_,path:g.path,parent:g});return A9(g,U)}"~validate"(_){let $={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:_,parsedType:J6(_)};if(!this["~standard"].async)try{let g=this._parseSync({data:_,path:[],parent:$});return dg(g)?{value:g.value}:{issues:$.common.issues}}catch(g){if(g?.message?.toLowerCase()?.includes("encountered"))this["~standard"].async=!0;$.common={issues:[],async:!0}}return this._parseAsync({data:_,path:[],parent:$}).then((g)=>dg(g)?{value:g.value}:{issues:$.common.issues})}async parseAsync(_,$){let g=await this.safeParseAsync(_,$);if(g.success)return g.data;throw g.error}async safeParseAsync(_,$){let g={common:{issues:[],contextualErrorMap:$?.errorMap,async:!0},path:$?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:_,parsedType:J6(_)},U=this._parse({data:_,path:g.path,parent:g}),D=await(WU(U)?U:Promise.resolve(U));return A9(g,D)}refine(_,$){let g=(U)=>{if(typeof $==="string"||typeof $>"u")return{message:$};else if(typeof $==="function")return $(U);else return $};return this._refinement((U,D)=>{let I=_(U),j=()=>D.addIssue({code:H.custom,...g(U)});if(typeof Promise<"u"&&I instanceof Promise)return I.then((E)=>{if(!E)return j(),!1;else return!0});if(!I)return j(),!1;else return!0})}refinement(_,$){return this._refinement((g,U)=>{if(!_(g))return U.addIssue(typeof $==="function"?$(g,U):$),!1;else return!0})}_refinement(_){return new R$({schema:this,typeName:i.ZodEffects,effect:{type:"refinement",refinement:_}})}superRefine(_){return this._refinement(_)}constructor(_){this.spa=this.safeParseAsync,this._def=_,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:($)=>this["~validate"]($)}}optional(){return r$.create(this,this._def)}nullable(){return z6.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return F$.create(this)}promise(){return tg.create(this,this._def)}or(_){return S0.create([this,_],this._def)}and(_){return L0.create(this,_,this._def)}transform(_){return new R$({...a(this._def),schema:this,typeName:i.ZodEffects,effect:{type:"transform",transform:_}})}default(_){let $=typeof _==="function"?_:()=>_;return new R0({...a(this._def),innerType:this,defaultValue:$,typeName:i.ZodDefault})}brand(){return new SE({typeName:i.ZodBranded,type:this,...a(this._def)})}catch(_){let $=typeof _==="function"?_:()=>_;return new G0({...a(this._def),innerType:this,catchValue:$,typeName:i.ZodCatch})}describe(_){return new this.constructor({...this._def,description:_})}pipe(_){return YU.create(this,_)}readonly(){return X0.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}var dM=/^c[^\s-]{8,}$/i,mM=/^[0-9a-z]+$/,iM=/^[0-9A-HJKMNP-TV-Z]{26}$/i,lM=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,tM=/^[a-z0-9_-]{21}$/i,oM=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,pM=/^[-+]?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)?)??$/,eM=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,aM="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$",wW,sM=/^(?:(?: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])$/,_Z=/^(?:(?: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])\/(3[0-2]|[12]?[0-9])$/,$Z=/^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,gZ=/^(([0-9a-fA-F]{1,4}:){7,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}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,DZ=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,UZ=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Y9="((\\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])))",IZ=new RegExp(`^${Y9}$`);function Q9(_){let $="[0-5]\\d";if(_.precision)$=`${$}\\.\\d{${_.precision}}`;else if(_.precision==null)$=`${$}(\\.\\d+)?`;let g=_.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${$})${g}`}function jZ(_){return new RegExp(`^${Q9(_)}$`)}function T9(_){let $=`${Y9}T${Q9(_)}`,g=[];if(g.push(_.local?"Z?":"Z"),_.offset)g.push("([+-]\\d{2}:?\\d{2})");return $=`${$}(${g.join("|")})`,new RegExp(`^${$}$`)}function EZ(_,$){if(($==="v4"||!$)&&sM.test(_))return!0;if(($==="v6"||!$)&&$Z.test(_))return!0;return!1}function NZ(_,$){if(!oM.test(_))return!1;try{let[g]=_.split(".");if(!g)return!1;let U=g.replace(/-/g,"+").replace(/_/g,"/").padEnd(g.length+(4-g.length%4)%4,"="),D=JSON.parse(atob(U));if(typeof D!=="object"||D===null)return!1;if("typ"in D&&D?.typ!=="JWT")return!1;if(!D.alg)return!1;if($&&D.alg!==$)return!1;return!0}catch{return!1}}function AZ(_,$){if(($==="v4"||!$)&&_Z.test(_))return!0;if(($==="v6"||!$)&&gZ.test(_))return!0;return!1}class V$ extends __{_parse(_){if(this._def.coerce)_.data=String(_.data);if(this._getType(_)!==y.string){let D=this._getOrReturnCtx(_);return f(D,{code:H.invalid_type,expected:y.string,received:D.parsedType}),m}let g=new n_,U=void 0;for(let D of this._def.checks)if(D.kind==="min"){if(_.data.lengthD.value)U=this._getOrReturnCtx(_,U),f(U,{code:H.too_big,maximum:D.value,type:"string",inclusive:!0,exact:!1,message:D.message}),g.dirty()}else if(D.kind==="length"){let I=_.data.length>D.value,j=_.data.length_.test(U),{validation:$,code:H.invalid_string,...n.errToObj(g)})}_addCheck(_){return new V$({...this._def,checks:[...this._def.checks,_]})}email(_){return this._addCheck({kind:"email",...n.errToObj(_)})}url(_){return this._addCheck({kind:"url",...n.errToObj(_)})}emoji(_){return this._addCheck({kind:"emoji",...n.errToObj(_)})}uuid(_){return this._addCheck({kind:"uuid",...n.errToObj(_)})}nanoid(_){return this._addCheck({kind:"nanoid",...n.errToObj(_)})}cuid(_){return this._addCheck({kind:"cuid",...n.errToObj(_)})}cuid2(_){return this._addCheck({kind:"cuid2",...n.errToObj(_)})}ulid(_){return this._addCheck({kind:"ulid",...n.errToObj(_)})}base64(_){return this._addCheck({kind:"base64",...n.errToObj(_)})}base64url(_){return this._addCheck({kind:"base64url",...n.errToObj(_)})}jwt(_){return this._addCheck({kind:"jwt",...n.errToObj(_)})}ip(_){return this._addCheck({kind:"ip",...n.errToObj(_)})}cidr(_){return this._addCheck({kind:"cidr",...n.errToObj(_)})}datetime(_){if(typeof _==="string")return this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:_});return this._addCheck({kind:"datetime",precision:typeof _?.precision>"u"?null:_?.precision,offset:_?.offset??!1,local:_?.local??!1,...n.errToObj(_?.message)})}date(_){return this._addCheck({kind:"date",message:_})}time(_){if(typeof _==="string")return this._addCheck({kind:"time",precision:null,message:_});return this._addCheck({kind:"time",precision:typeof _?.precision>"u"?null:_?.precision,...n.errToObj(_?.message)})}duration(_){return this._addCheck({kind:"duration",...n.errToObj(_)})}regex(_,$){return this._addCheck({kind:"regex",regex:_,...n.errToObj($)})}includes(_,$){return this._addCheck({kind:"includes",value:_,position:$?.position,...n.errToObj($?.message)})}startsWith(_,$){return this._addCheck({kind:"startsWith",value:_,...n.errToObj($)})}endsWith(_,$){return this._addCheck({kind:"endsWith",value:_,...n.errToObj($)})}min(_,$){return this._addCheck({kind:"min",value:_,...n.errToObj($)})}max(_,$){return this._addCheck({kind:"max",value:_,...n.errToObj($)})}length(_,$){return this._addCheck({kind:"length",value:_,...n.errToObj($)})}nonempty(_){return this.min(1,n.errToObj(_))}trim(){return new V$({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new V$({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new V$({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find((_)=>_.kind==="datetime")}get isDate(){return!!this._def.checks.find((_)=>_.kind==="date")}get isTime(){return!!this._def.checks.find((_)=>_.kind==="time")}get isDuration(){return!!this._def.checks.find((_)=>_.kind==="duration")}get isEmail(){return!!this._def.checks.find((_)=>_.kind==="email")}get isURL(){return!!this._def.checks.find((_)=>_.kind==="url")}get isEmoji(){return!!this._def.checks.find((_)=>_.kind==="emoji")}get isUUID(){return!!this._def.checks.find((_)=>_.kind==="uuid")}get isNANOID(){return!!this._def.checks.find((_)=>_.kind==="nanoid")}get isCUID(){return!!this._def.checks.find((_)=>_.kind==="cuid")}get isCUID2(){return!!this._def.checks.find((_)=>_.kind==="cuid2")}get isULID(){return!!this._def.checks.find((_)=>_.kind==="ulid")}get isIP(){return!!this._def.checks.find((_)=>_.kind==="ip")}get isCIDR(){return!!this._def.checks.find((_)=>_.kind==="cidr")}get isBase64(){return!!this._def.checks.find((_)=>_.kind==="base64")}get isBase64url(){return!!this._def.checks.find((_)=>_.kind==="base64url")}get minLength(){let _=null;for(let $ of this._def.checks)if($.kind==="min"){if(_===null||$.value>_)_=$.value}return _}get maxLength(){let _=null;for(let $ of this._def.checks)if($.kind==="max"){if(_===null||$.value<_)_=$.value}return _}}V$.create=(_)=>{return new V$({checks:[],typeName:i.ZodString,coerce:_?.coerce??!1,...a(_)})};function OZ(_,$){let g=(_.toString().split(".")[1]||"").length,U=($.toString().split(".")[1]||"").length,D=g>U?g:U,I=Number.parseInt(_.toFixed(D).replace(".","")),j=Number.parseInt($.toFixed(D).replace(".",""));return I%j/10**D}class l6 extends __{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(_){if(this._def.coerce)_.data=Number(_.data);if(this._getType(_)!==y.number){let D=this._getOrReturnCtx(_);return f(D,{code:H.invalid_type,expected:y.number,received:D.parsedType}),m}let g=void 0,U=new n_;for(let D of this._def.checks)if(D.kind==="int"){if(!D_.isInteger(_.data))g=this._getOrReturnCtx(_,g),f(g,{code:H.invalid_type,expected:"integer",received:"float",message:D.message}),U.dirty()}else if(D.kind==="min"){if(D.inclusive?_.dataD.value:_.data>=D.value)g=this._getOrReturnCtx(_,g),f(g,{code:H.too_big,maximum:D.value,type:"number",inclusive:D.inclusive,exact:!1,message:D.message}),U.dirty()}else if(D.kind==="multipleOf"){if(OZ(_.data,D.value)!==0)g=this._getOrReturnCtx(_,g),f(g,{code:H.not_multiple_of,multipleOf:D.value,message:D.message}),U.dirty()}else if(D.kind==="finite"){if(!Number.isFinite(_.data))g=this._getOrReturnCtx(_,g),f(g,{code:H.not_finite,message:D.message}),U.dirty()}else D_.assertNever(D);return{status:U.value,value:_.data}}gte(_,$){return this.setLimit("min",_,!0,n.toString($))}gt(_,$){return this.setLimit("min",_,!1,n.toString($))}lte(_,$){return this.setLimit("max",_,!0,n.toString($))}lt(_,$){return this.setLimit("max",_,!1,n.toString($))}setLimit(_,$,g,U){return new l6({...this._def,checks:[...this._def.checks,{kind:_,value:$,inclusive:g,message:n.toString(U)}]})}_addCheck(_){return new l6({...this._def,checks:[...this._def.checks,_]})}int(_){return this._addCheck({kind:"int",message:n.toString(_)})}positive(_){return this._addCheck({kind:"min",value:0,inclusive:!1,message:n.toString(_)})}negative(_){return this._addCheck({kind:"max",value:0,inclusive:!1,message:n.toString(_)})}nonpositive(_){return this._addCheck({kind:"max",value:0,inclusive:!0,message:n.toString(_)})}nonnegative(_){return this._addCheck({kind:"min",value:0,inclusive:!0,message:n.toString(_)})}multipleOf(_,$){return this._addCheck({kind:"multipleOf",value:_,message:n.toString($)})}finite(_){return this._addCheck({kind:"finite",message:n.toString(_)})}safe(_){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:n.toString(_)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:n.toString(_)})}get minValue(){let _=null;for(let $ of this._def.checks)if($.kind==="min"){if(_===null||$.value>_)_=$.value}return _}get maxValue(){let _=null;for(let $ of this._def.checks)if($.kind==="max"){if(_===null||$.value<_)_=$.value}return _}get isInt(){return!!this._def.checks.find((_)=>_.kind==="int"||_.kind==="multipleOf"&&D_.isInteger(_.value))}get isFinite(){let _=null,$=null;for(let g of this._def.checks)if(g.kind==="finite"||g.kind==="int"||g.kind==="multipleOf")return!0;else if(g.kind==="min"){if($===null||g.value>$)$=g.value}else if(g.kind==="max"){if(_===null||g.value<_)_=g.value}return Number.isFinite($)&&Number.isFinite(_)}}l6.create=(_)=>{return new l6({checks:[],typeName:i.ZodNumber,coerce:_?.coerce||!1,...a(_)})};class t6 extends __{constructor(){super(...arguments);this.min=this.gte,this.max=this.lte}_parse(_){if(this._def.coerce)try{_.data=BigInt(_.data)}catch{return this._getInvalidInput(_)}if(this._getType(_)!==y.bigint)return this._getInvalidInput(_);let g=void 0,U=new n_;for(let D of this._def.checks)if(D.kind==="min"){if(D.inclusive?_.dataD.value:_.data>=D.value)g=this._getOrReturnCtx(_,g),f(g,{code:H.too_big,type:"bigint",maximum:D.value,inclusive:D.inclusive,message:D.message}),U.dirty()}else if(D.kind==="multipleOf"){if(_.data%D.value!==BigInt(0))g=this._getOrReturnCtx(_,g),f(g,{code:H.not_multiple_of,multipleOf:D.value,message:D.message}),U.dirty()}else D_.assertNever(D);return{status:U.value,value:_.data}}_getInvalidInput(_){let $=this._getOrReturnCtx(_);return f($,{code:H.invalid_type,expected:y.bigint,received:$.parsedType}),m}gte(_,$){return this.setLimit("min",_,!0,n.toString($))}gt(_,$){return this.setLimit("min",_,!1,n.toString($))}lte(_,$){return this.setLimit("max",_,!0,n.toString($))}lt(_,$){return this.setLimit("max",_,!1,n.toString($))}setLimit(_,$,g,U){return new t6({...this._def,checks:[...this._def.checks,{kind:_,value:$,inclusive:g,message:n.toString(U)}]})}_addCheck(_){return new t6({...this._def,checks:[...this._def.checks,_]})}positive(_){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:n.toString(_)})}negative(_){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:n.toString(_)})}nonpositive(_){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:n.toString(_)})}nonnegative(_){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:n.toString(_)})}multipleOf(_,$){return this._addCheck({kind:"multipleOf",value:_,message:n.toString($)})}get minValue(){let _=null;for(let $ of this._def.checks)if($.kind==="min"){if(_===null||$.value>_)_=$.value}return _}get maxValue(){let _=null;for(let $ of this._def.checks)if($.kind==="max"){if(_===null||$.value<_)_=$.value}return _}}t6.create=(_)=>{return new t6({checks:[],typeName:i.ZodBigInt,coerce:_?.coerce??!1,...a(_)})};class A0 extends __{_parse(_){if(this._def.coerce)_.data=Boolean(_.data);if(this._getType(_)!==y.boolean){let g=this._getOrReturnCtx(_);return f(g,{code:H.invalid_type,expected:y.boolean,received:g.parsedType}),m}return p_(_.data)}}A0.create=(_)=>{return new A0({typeName:i.ZodBoolean,coerce:_?.coerce||!1,...a(_)})};class mg extends __{_parse(_){if(this._def.coerce)_.data=new Date(_.data);if(this._getType(_)!==y.date){let D=this._getOrReturnCtx(_);return f(D,{code:H.invalid_type,expected:y.date,received:D.parsedType}),m}if(Number.isNaN(_.data.getTime())){let D=this._getOrReturnCtx(_);return f(D,{code:H.invalid_date}),m}let g=new n_,U=void 0;for(let D of this._def.checks)if(D.kind==="min"){if(_.data.getTime()D.value)U=this._getOrReturnCtx(_,U),f(U,{code:H.too_big,message:D.message,inclusive:!0,exact:!1,maximum:D.value,type:"date"}),g.dirty()}else D_.assertNever(D);return{status:g.value,value:new Date(_.data.getTime())}}_addCheck(_){return new mg({...this._def,checks:[...this._def.checks,_]})}min(_,$){return this._addCheck({kind:"min",value:_.getTime(),message:n.toString($)})}max(_,$){return this._addCheck({kind:"max",value:_.getTime(),message:n.toString($)})}get minDate(){let _=null;for(let $ of this._def.checks)if($.kind==="min"){if(_===null||$.value>_)_=$.value}return _!=null?new Date(_):null}get maxDate(){let _=null;for(let $ of this._def.checks)if($.kind==="max"){if(_===null||$.value<_)_=$.value}return _!=null?new Date(_):null}}mg.create=(_)=>{return new mg({checks:[],coerce:_?.coerce||!1,typeName:i.ZodDate,...a(_)})};class JU extends __{_parse(_){if(this._getType(_)!==y.symbol){let g=this._getOrReturnCtx(_);return f(g,{code:H.invalid_type,expected:y.symbol,received:g.parsedType}),m}return p_(_.data)}}JU.create=(_)=>{return new JU({typeName:i.ZodSymbol,...a(_)})};class O0 extends __{_parse(_){if(this._getType(_)!==y.undefined){let g=this._getOrReturnCtx(_);return f(g,{code:H.invalid_type,expected:y.undefined,received:g.parsedType}),m}return p_(_.data)}}O0.create=(_)=>{return new O0({typeName:i.ZodUndefined,...a(_)})};class P0 extends __{_parse(_){if(this._getType(_)!==y.null){let g=this._getOrReturnCtx(_);return f(g,{code:H.invalid_type,expected:y.null,received:g.parsedType}),m}return p_(_.data)}}P0.create=(_)=>{return new P0({typeName:i.ZodNull,...a(_)})};class ig extends __{constructor(){super(...arguments);this._any=!0}_parse(_){return p_(_.data)}}ig.create=(_)=>{return new ig({typeName:i.ZodAny,...a(_)})};class i6 extends __{constructor(){super(...arguments);this._unknown=!0}_parse(_){return p_(_.data)}}i6.create=(_)=>{return new i6({typeName:i.ZodUnknown,...a(_)})};class h$ extends __{_parse(_){let $=this._getOrReturnCtx(_);return f($,{code:H.invalid_type,expected:y.never,received:$.parsedType}),m}}h$.create=(_)=>{return new h$({typeName:i.ZodNever,...a(_)})};class zU extends __{_parse(_){if(this._getType(_)!==y.undefined){let g=this._getOrReturnCtx(_);return f(g,{code:H.invalid_type,expected:y.void,received:g.parsedType}),m}return p_(_.data)}}zU.create=(_)=>{return new zU({typeName:i.ZodVoid,...a(_)})};class F$ extends __{_parse(_){let{ctx:$,status:g}=this._processInputParams(_),U=this._def;if($.parsedType!==y.array)return f($,{code:H.invalid_type,expected:y.array,received:$.parsedType}),m;if(U.exactLength!==null){let I=$.data.length>U.exactLength.value,j=$.data.lengthU.maxLength.value)f($,{code:H.too_big,maximum:U.maxLength.value,type:"array",inclusive:!0,exact:!1,message:U.maxLength.message}),g.dirty()}if($.common.async)return Promise.all([...$.data].map((I,j)=>{return U.type._parseAsync(new b$($,I,$.path,j))})).then((I)=>{return n_.mergeArray(g,I)});let D=[...$.data].map((I,j)=>{return U.type._parseSync(new b$($,I,$.path,j))});return n_.mergeArray(g,D)}get element(){return this._def.type}min(_,$){return new F$({...this._def,minLength:{value:_,message:n.toString($)}})}max(_,$){return new F$({...this._def,maxLength:{value:_,message:n.toString($)}})}length(_,$){return new F$({...this._def,exactLength:{value:_,message:n.toString($)}})}nonempty(_){return this.min(1,_)}}F$.create=(_,$)=>{return new F$({type:_,minLength:null,maxLength:null,exactLength:null,typeName:i.ZodArray,...a($)})};function D0(_){if(_ instanceof r_){let $={};for(let g in _.shape){let U=_.shape[g];$[g]=r$.create(D0(U))}return new r_({..._._def,shape:()=>$})}else if(_ instanceof F$)return new F$({..._._def,type:D0(_.element)});else if(_ instanceof r$)return r$.create(D0(_.unwrap()));else if(_ instanceof z6)return z6.create(D0(_.unwrap()));else if(_ instanceof n$)return n$.create(_.items.map(($)=>D0($)));else return _}class r_ extends __{constructor(){super(...arguments);this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let _=this._def.shape(),$=D_.objectKeys(_);return this._cached={shape:_,keys:$},this._cached}_parse(_){if(this._getType(_)!==y.object){let A=this._getOrReturnCtx(_);return f(A,{code:H.invalid_type,expected:y.object,received:A.parsedType}),m}let{status:g,ctx:U}=this._processInputParams(_),{shape:D,keys:I}=this._getCached(),j=[];if(!(this._def.catchall instanceof h$&&this._def.unknownKeys==="strip")){for(let A in U.data)if(!I.includes(A))j.push(A)}let E=[];for(let A of I){let O=D[A],P=U.data[A];E.push({key:{status:"valid",value:A},value:O._parse(new b$(U,P,U.path,A)),alwaysSet:A in U.data})}if(this._def.catchall instanceof h$){let A=this._def.unknownKeys;if(A==="passthrough")for(let O of j)E.push({key:{status:"valid",value:O},value:{status:"valid",value:U.data[O]}});else if(A==="strict"){if(j.length>0)f(U,{code:H.unrecognized_keys,keys:j}),g.dirty()}else if(A==="strip");else throw Error("Internal ZodObject error: invalid unknownKeys value.")}else{let A=this._def.catchall;for(let O of j){let P=U.data[O];E.push({key:{status:"valid",value:O},value:A._parse(new b$(U,P,U.path,O)),alwaysSet:O in U.data})}}if(U.common.async)return Promise.resolve().then(async()=>{let A=[];for(let O of E){let P=await O.key,W=await O.value;A.push({key:P,value:W,alwaysSet:O.alwaysSet})}return A}).then((A)=>{return n_.mergeObjectSync(g,A)});else return n_.mergeObjectSync(g,E)}get shape(){return this._def.shape()}strict(_){return n.errToObj,new r_({...this._def,unknownKeys:"strict",..._!==void 0?{errorMap:($,g)=>{let U=this._def.errorMap?.($,g).message??g.defaultError;if($.code==="unrecognized_keys")return{message:n.errToObj(_).message??U};return{message:U}}}:{}})}strip(){return new r_({...this._def,unknownKeys:"strip"})}passthrough(){return new r_({...this._def,unknownKeys:"passthrough"})}extend(_){return new r_({...this._def,shape:()=>({...this._def.shape(),..._})})}merge(_){return new r_({unknownKeys:_._def.unknownKeys,catchall:_._def.catchall,shape:()=>({...this._def.shape(),..._._def.shape()}),typeName:i.ZodObject})}setKey(_,$){return this.augment({[_]:$})}catchall(_){return new r_({...this._def,catchall:_})}pick(_){let $={};for(let g of D_.objectKeys(_))if(_[g]&&this.shape[g])$[g]=this.shape[g];return new r_({...this._def,shape:()=>$})}omit(_){let $={};for(let g of D_.objectKeys(this.shape))if(!_[g])$[g]=this.shape[g];return new r_({...this._def,shape:()=>$})}deepPartial(){return D0(this)}partial(_){let $={};for(let g of D_.objectKeys(this.shape)){let U=this.shape[g];if(_&&!_[g])$[g]=U;else $[g]=U.optional()}return new r_({...this._def,shape:()=>$})}required(_){let $={};for(let g of D_.objectKeys(this.shape))if(_&&!_[g])$[g]=this.shape[g];else{let D=this.shape[g];while(D instanceof r$)D=D._def.innerType;$[g]=D}return new r_({...this._def,shape:()=>$})}keyof(){return K9(D_.objectKeys(this.shape))}}r_.create=(_,$)=>{return new r_({shape:()=>_,unknownKeys:"strip",catchall:h$.create(),typeName:i.ZodObject,...a($)})};r_.strictCreate=(_,$)=>{return new r_({shape:()=>_,unknownKeys:"strict",catchall:h$.create(),typeName:i.ZodObject,...a($)})};r_.lazycreate=(_,$)=>{return new r_({shape:_,unknownKeys:"strip",catchall:h$.create(),typeName:i.ZodObject,...a($)})};class S0 extends __{_parse(_){let{ctx:$}=this._processInputParams(_),g=this._def.options;function U(D){for(let j of D)if(j.result.status==="valid")return j.result;for(let j of D)if(j.result.status==="dirty")return $.common.issues.push(...j.ctx.common.issues),j.result;let I=D.map((j)=>new N$(j.ctx.common.issues));return f($,{code:H.invalid_union,unionErrors:I}),m}if($.common.async)return Promise.all(g.map(async(D)=>{let I={...$,common:{...$.common,issues:[]},parent:null};return{result:await D._parseAsync({data:$.data,path:$.path,parent:I}),ctx:I}})).then(U);else{let D=void 0,I=[];for(let E of g){let A={...$,common:{...$.common,issues:[]},parent:null},O=E._parseSync({data:$.data,path:$.path,parent:A});if(O.status==="valid")return O;else if(O.status==="dirty"&&!D)D={result:O,ctx:A};if(A.common.issues.length)I.push(A.common.issues)}if(D)return $.common.issues.push(...D.ctx.common.issues),D.result;let j=I.map((E)=>new N$(E));return f($,{code:H.invalid_union,unionErrors:j}),m}}get options(){return this._def.options}}S0.create=(_,$)=>{return new S0({options:_,typeName:i.ZodUnion,...a($)})};var W6=(_)=>{if(_ instanceof W0)return W6(_.schema);else if(_ instanceof R$)return W6(_.innerType());else if(_ instanceof J0)return[_.value];else if(_ instanceof o6)return _.options;else if(_ instanceof z0)return D_.objectValues(_.enum);else if(_ instanceof R0)return W6(_._def.innerType);else if(_ instanceof O0)return[void 0];else if(_ instanceof P0)return[null];else if(_ instanceof r$)return[void 0,...W6(_.unwrap())];else if(_ instanceof z6)return[null,...W6(_.unwrap())];else if(_ instanceof SE)return W6(_.unwrap());else if(_ instanceof X0)return W6(_.unwrap());else if(_ instanceof G0)return W6(_._def.innerType);else return[]};class PE extends __{_parse(_){let{ctx:$}=this._processInputParams(_);if($.parsedType!==y.object)return f($,{code:H.invalid_type,expected:y.object,received:$.parsedType}),m;let g=this.discriminator,U=$.data[g],D=this.optionsMap.get(U);if(!D)return f($,{code:H.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[g]}),m;if($.common.async)return D._parseAsync({data:$.data,path:$.path,parent:$});else return D._parseSync({data:$.data,path:$.path,parent:$})}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(_,$,g){let U=new Map;for(let D of $){let I=W6(D.shape[_]);if(!I.length)throw Error(`A discriminator value for key \`${_}\` could not be extracted from all schema options`);for(let j of I){if(U.has(j))throw Error(`Discriminator property ${String(_)} has duplicate value ${String(j)}`);U.set(j,D)}}return new PE({typeName:i.ZodDiscriminatedUnion,discriminator:_,options:$,optionsMap:U,...a(g)})}}function cW(_,$){let g=J6(_),U=J6($);if(_===$)return{valid:!0,data:_};else if(g===y.object&&U===y.object){let D=D_.objectKeys($),I=D_.objectKeys(_).filter((E)=>D.indexOf(E)!==-1),j={..._,...$};for(let E of I){let A=cW(_[E],$[E]);if(!A.valid)return{valid:!1};j[E]=A.data}return{valid:!0,data:j}}else if(g===y.array&&U===y.array){if(_.length!==$.length)return{valid:!1};let D=[];for(let I=0;I<_.length;I++){let j=_[I],E=$[I],A=cW(j,E);if(!A.valid)return{valid:!1};D.push(A.data)}return{valid:!0,data:D}}else if(g===y.date&&U===y.date&&+_===+$)return{valid:!0,data:_};else return{valid:!1}}class L0 extends __{_parse(_){let{status:$,ctx:g}=this._processInputParams(_),U=(D,I)=>{if(xW(D)||xW(I))return m;let j=cW(D.value,I.value);if(!j.valid)return f(g,{code:H.invalid_intersection_types}),m;if(yW(D)||yW(I))$.dirty();return{status:$.value,value:j.data}};if(g.common.async)return Promise.all([this._def.left._parseAsync({data:g.data,path:g.path,parent:g}),this._def.right._parseAsync({data:g.data,path:g.path,parent:g})]).then(([D,I])=>U(D,I));else return U(this._def.left._parseSync({data:g.data,path:g.path,parent:g}),this._def.right._parseSync({data:g.data,path:g.path,parent:g}))}}L0.create=(_,$,g)=>{return new L0({left:_,right:$,typeName:i.ZodIntersection,...a(g)})};class n$ extends __{_parse(_){let{status:$,ctx:g}=this._processInputParams(_);if(g.parsedType!==y.array)return f(g,{code:H.invalid_type,expected:y.array,received:g.parsedType}),m;if(g.data.lengththis._def.items.length)f(g,{code:H.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),$.dirty();let D=[...g.data].map((I,j)=>{let E=this._def.items[j]||this._def.rest;if(!E)return null;return E._parse(new b$(g,I,g.path,j))}).filter((I)=>!!I);if(g.common.async)return Promise.all(D).then((I)=>{return n_.mergeArray($,I)});else return n_.mergeArray($,D)}get items(){return this._def.items}rest(_){return new n$({...this._def,rest:_})}}n$.create=(_,$)=>{if(!Array.isArray(_))throw Error("You must pass an array of schemas to z.tuple([ ... ])");return new n$({items:_,typeName:i.ZodTuple,rest:null,...a($)})};class RU extends __{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(_){let{status:$,ctx:g}=this._processInputParams(_);if(g.parsedType!==y.object)return f(g,{code:H.invalid_type,expected:y.object,received:g.parsedType}),m;let U=[],D=this._def.keyType,I=this._def.valueType;for(let j in g.data)U.push({key:D._parse(new b$(g,j,g.path,j)),value:I._parse(new b$(g,g.data[j],g.path,j)),alwaysSet:j in g.data});if(g.common.async)return n_.mergeObjectAsync($,U);else return n_.mergeObjectSync($,U)}get element(){return this._def.valueType}static create(_,$,g){if($ instanceof __)return new RU({keyType:_,valueType:$,typeName:i.ZodRecord,...a(g)});return new RU({keyType:V$.create(),valueType:_,typeName:i.ZodRecord,...a($)})}}class GU extends __{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(_){let{status:$,ctx:g}=this._processInputParams(_);if(g.parsedType!==y.map)return f(g,{code:H.invalid_type,expected:y.map,received:g.parsedType}),m;let U=this._def.keyType,D=this._def.valueType,I=[...g.data.entries()].map(([j,E],A)=>{return{key:U._parse(new b$(g,j,g.path,[A,"key"])),value:D._parse(new b$(g,E,g.path,[A,"value"]))}});if(g.common.async){let j=new Map;return Promise.resolve().then(async()=>{for(let E of I){let A=await E.key,O=await E.value;if(A.status==="aborted"||O.status==="aborted")return m;if(A.status==="dirty"||O.status==="dirty")$.dirty();j.set(A.value,O.value)}return{status:$.value,value:j}})}else{let j=new Map;for(let E of I){let{key:A,value:O}=E;if(A.status==="aborted"||O.status==="aborted")return m;if(A.status==="dirty"||O.status==="dirty")$.dirty();j.set(A.value,O.value)}return{status:$.value,value:j}}}}GU.create=(_,$,g)=>{return new GU({valueType:$,keyType:_,typeName:i.ZodMap,...a(g)})};class lg extends __{_parse(_){let{status:$,ctx:g}=this._processInputParams(_);if(g.parsedType!==y.set)return f(g,{code:H.invalid_type,expected:y.set,received:g.parsedType}),m;let U=this._def;if(U.minSize!==null){if(g.data.sizeU.maxSize.value)f(g,{code:H.too_big,maximum:U.maxSize.value,type:"set",inclusive:!0,exact:!1,message:U.maxSize.message}),$.dirty()}let D=this._def.valueType;function I(E){let A=new Set;for(let O of E){if(O.status==="aborted")return m;if(O.status==="dirty")$.dirty();A.add(O.value)}return{status:$.value,value:A}}let j=[...g.data.values()].map((E,A)=>D._parse(new b$(g,E,g.path,A)));if(g.common.async)return Promise.all(j).then((E)=>I(E));else return I(j)}min(_,$){return new lg({...this._def,minSize:{value:_,message:n.toString($)}})}max(_,$){return new lg({...this._def,maxSize:{value:_,message:n.toString($)}})}size(_,$){return this.min(_,$).max(_,$)}nonempty(_){return this.min(1,_)}}lg.create=(_,$)=>{return new lg({valueType:_,minSize:null,maxSize:null,typeName:i.ZodSet,...a($)})};class j0 extends __{constructor(){super(...arguments);this.validate=this.implement}_parse(_){let{ctx:$}=this._processInputParams(_);if($.parsedType!==y.function)return f($,{code:H.invalid_type,expected:y.function,received:$.parsedType}),m;function g(j,E){return NE({data:j,path:$.path,errorMaps:[$.common.contextualErrorMap,$.schemaErrorMap,EE(),N0].filter((A)=>!!A),issueData:{code:H.invalid_arguments,argumentsError:E}})}function U(j,E){return NE({data:j,path:$.path,errorMaps:[$.common.contextualErrorMap,$.schemaErrorMap,EE(),N0].filter((A)=>!!A),issueData:{code:H.invalid_return_type,returnTypeError:E}})}let D={errorMap:$.common.contextualErrorMap},I=$.data;if(this._def.returns instanceof tg){let j=this;return p_(async function(...E){let A=new N$([]),O=await j._def.args.parseAsync(E,D).catch((z)=>{throw A.addIssue(g(E,z)),A}),P=await Reflect.apply(I,this,O);return await j._def.returns._def.type.parseAsync(P,D).catch((z)=>{throw A.addIssue(U(P,z)),A})})}else{let j=this;return p_(function(...E){let A=j._def.args.safeParse(E,D);if(!A.success)throw new N$([g(E,A.error)]);let O=Reflect.apply(I,this,A.data),P=j._def.returns.safeParse(O,D);if(!P.success)throw new N$([U(O,P.error)]);return P.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(..._){return new j0({...this._def,args:n$.create(_).rest(i6.create())})}returns(_){return new j0({...this._def,returns:_})}implement(_){return this.parse(_)}strictImplement(_){return this.parse(_)}static create(_,$,g){return new j0({args:_?_:n$.create([]).rest(i6.create()),returns:$||i6.create(),typeName:i.ZodFunction,...a(g)})}}class W0 extends __{get schema(){return this._def.getter()}_parse(_){let{ctx:$}=this._processInputParams(_);return this._def.getter()._parse({data:$.data,path:$.path,parent:$})}}W0.create=(_,$)=>{return new W0({getter:_,typeName:i.ZodLazy,...a($)})};class J0 extends __{_parse(_){if(_.data!==this._def.value){let $=this._getOrReturnCtx(_);return f($,{received:$.data,code:H.invalid_literal,expected:this._def.value}),m}return{status:"valid",value:_.data}}get value(){return this._def.value}}J0.create=(_,$)=>{return new J0({value:_,typeName:i.ZodLiteral,...a($)})};function K9(_,$){return new o6({values:_,typeName:i.ZodEnum,...a($)})}class o6 extends __{_parse(_){if(typeof _.data!=="string"){let $=this._getOrReturnCtx(_),g=this._def.values;return f($,{expected:D_.joinValues(g),received:$.parsedType,code:H.invalid_type}),m}if(!this._cache)this._cache=new Set(this._def.values);if(!this._cache.has(_.data)){let $=this._getOrReturnCtx(_),g=this._def.values;return f($,{received:$.data,code:H.invalid_enum_value,options:g}),m}return p_(_.data)}get options(){return this._def.values}get enum(){let _={};for(let $ of this._def.values)_[$]=$;return _}get Values(){let _={};for(let $ of this._def.values)_[$]=$;return _}get Enum(){let _={};for(let $ of this._def.values)_[$]=$;return _}extract(_,$=this._def){return o6.create(_,{...this._def,...$})}exclude(_,$=this._def){return o6.create(this.options.filter((g)=>!_.includes(g)),{...this._def,...$})}}o6.create=K9;class z0 extends __{_parse(_){let $=D_.getValidEnumValues(this._def.values),g=this._getOrReturnCtx(_);if(g.parsedType!==y.string&&g.parsedType!==y.number){let U=D_.objectValues($);return f(g,{expected:D_.joinValues(U),received:g.parsedType,code:H.invalid_type}),m}if(!this._cache)this._cache=new Set(D_.getValidEnumValues(this._def.values));if(!this._cache.has(_.data)){let U=D_.objectValues($);return f(g,{received:g.data,code:H.invalid_enum_value,options:U}),m}return p_(_.data)}get enum(){return this._def.values}}z0.create=(_,$)=>{return new z0({values:_,typeName:i.ZodNativeEnum,...a($)})};class tg extends __{unwrap(){return this._def.type}_parse(_){let{ctx:$}=this._processInputParams(_);if($.parsedType!==y.promise&&$.common.async===!1)return f($,{code:H.invalid_type,expected:y.promise,received:$.parsedType}),m;let g=$.parsedType===y.promise?$.data:Promise.resolve($.data);return p_(g.then((U)=>{return this._def.type.parseAsync(U,{path:$.path,errorMap:$.common.contextualErrorMap})}))}}tg.create=(_,$)=>{return new tg({type:_,typeName:i.ZodPromise,...a($)})};class R$ extends __{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===i.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(_){let{status:$,ctx:g}=this._processInputParams(_),U=this._def.effect||null,D={addIssue:(I)=>{if(f(g,I),I.fatal)$.abort();else $.dirty()},get path(){return g.path}};if(D.addIssue=D.addIssue.bind(D),U.type==="preprocess"){let I=U.transform(g.data,D);if(g.common.async)return Promise.resolve(I).then(async(j)=>{if($.value==="aborted")return m;let E=await this._def.schema._parseAsync({data:j,path:g.path,parent:g});if(E.status==="aborted")return m;if(E.status==="dirty")return I0(E.value);if($.value==="dirty")return I0(E.value);return E});else{if($.value==="aborted")return m;let j=this._def.schema._parseSync({data:I,path:g.path,parent:g});if(j.status==="aborted")return m;if(j.status==="dirty")return I0(j.value);if($.value==="dirty")return I0(j.value);return j}}if(U.type==="refinement"){let I=(j)=>{let E=U.refinement(j,D);if(g.common.async)return Promise.resolve(E);if(E instanceof Promise)throw Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return j};if(g.common.async===!1){let j=this._def.schema._parseSync({data:g.data,path:g.path,parent:g});if(j.status==="aborted")return m;if(j.status==="dirty")$.dirty();return I(j.value),{status:$.value,value:j.value}}else return this._def.schema._parseAsync({data:g.data,path:g.path,parent:g}).then((j)=>{if(j.status==="aborted")return m;if(j.status==="dirty")$.dirty();return I(j.value).then(()=>{return{status:$.value,value:j.value}})})}if(U.type==="transform")if(g.common.async===!1){let I=this._def.schema._parseSync({data:g.data,path:g.path,parent:g});if(!dg(I))return m;let j=U.transform(I.value,D);if(j instanceof Promise)throw Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:$.value,value:j}}else return this._def.schema._parseAsync({data:g.data,path:g.path,parent:g}).then((I)=>{if(!dg(I))return m;return Promise.resolve(U.transform(I.value,D)).then((j)=>({status:$.value,value:j}))});D_.assertNever(U)}}R$.create=(_,$,g)=>{return new R$({schema:_,typeName:i.ZodEffects,effect:$,...a(g)})};R$.createWithPreprocess=(_,$,g)=>{return new R$({schema:$,effect:{type:"preprocess",transform:_},typeName:i.ZodEffects,...a(g)})};class r$ extends __{_parse(_){if(this._getType(_)===y.undefined)return p_(void 0);return this._def.innerType._parse(_)}unwrap(){return this._def.innerType}}r$.create=(_,$)=>{return new r$({innerType:_,typeName:i.ZodOptional,...a($)})};class z6 extends __{_parse(_){if(this._getType(_)===y.null)return p_(null);return this._def.innerType._parse(_)}unwrap(){return this._def.innerType}}z6.create=(_,$)=>{return new z6({innerType:_,typeName:i.ZodNullable,...a($)})};class R0 extends __{_parse(_){let{ctx:$}=this._processInputParams(_),g=$.data;if($.parsedType===y.undefined)g=this._def.defaultValue();return this._def.innerType._parse({data:g,path:$.path,parent:$})}removeDefault(){return this._def.innerType}}R0.create=(_,$)=>{return new R0({innerType:_,typeName:i.ZodDefault,defaultValue:typeof $.default==="function"?$.default:()=>$.default,...a($)})};class G0 extends __{_parse(_){let{ctx:$}=this._processInputParams(_),g={...$,common:{...$.common,issues:[]}},U=this._def.innerType._parse({data:g.data,path:g.path,parent:{...g}});if(WU(U))return U.then((D)=>{return{status:"valid",value:D.status==="valid"?D.value:this._def.catchValue({get error(){return new N$(g.common.issues)},input:g.data})}});else return{status:"valid",value:U.status==="valid"?U.value:this._def.catchValue({get error(){return new N$(g.common.issues)},input:g.data})}}removeCatch(){return this._def.innerType}}G0.create=(_,$)=>{return new G0({innerType:_,typeName:i.ZodCatch,catchValue:typeof $.catch==="function"?$.catch:()=>$.catch,...a($)})};class XU extends __{_parse(_){if(this._getType(_)!==y.nan){let g=this._getOrReturnCtx(_);return f(g,{code:H.invalid_type,expected:y.nan,received:g.parsedType}),m}return{status:"valid",value:_.data}}}XU.create=(_)=>{return new XU({typeName:i.ZodNaN,...a(_)})};var PZ=Symbol("zod_brand");class SE extends __{_parse(_){let{ctx:$}=this._processInputParams(_),g=$.data;return this._def.type._parse({data:g,path:$.path,parent:$})}unwrap(){return this._def.type}}class YU extends __{_parse(_){let{status:$,ctx:g}=this._processInputParams(_);if(g.common.async)return(async()=>{let D=await this._def.in._parseAsync({data:g.data,path:g.path,parent:g});if(D.status==="aborted")return m;if(D.status==="dirty")return $.dirty(),I0(D.value);else return this._def.out._parseAsync({data:D.value,path:g.path,parent:g})})();else{let U=this._def.in._parseSync({data:g.data,path:g.path,parent:g});if(U.status==="aborted")return m;if(U.status==="dirty")return $.dirty(),{status:"dirty",value:U.value};else return this._def.out._parseSync({data:U.value,path:g.path,parent:g})}}static create(_,$){return new YU({in:_,out:$,typeName:i.ZodPipeline})}}class X0 extends __{_parse(_){let $=this._def.innerType._parse(_),g=(U)=>{if(dg(U))U.value=Object.freeze(U.value);return U};return WU($)?$.then((U)=>g(U)):g($)}unwrap(){return this._def.innerType}}X0.create=(_,$)=>{return new X0({innerType:_,typeName:i.ZodReadonly,...a($)})};function O9(_,$){let g=typeof _==="function"?_($):typeof _==="string"?{message:_}:_;return typeof g==="string"?{message:g}:g}function q9(_,$={},g){if(_)return ig.create().superRefine((U,D)=>{let I=_(U);if(I instanceof Promise)return I.then((j)=>{if(!j){let E=O9($,U),A=E.fatal??g??!0;D.addIssue({code:"custom",...E,fatal:A})}});if(!I){let j=O9($,U),E=j.fatal??g??!0;D.addIssue({code:"custom",...j,fatal:E})}return});return ig.create()}var SZ={object:r_.lazycreate},i;(function(_){_.ZodString="ZodString",_.ZodNumber="ZodNumber",_.ZodNaN="ZodNaN",_.ZodBigInt="ZodBigInt",_.ZodBoolean="ZodBoolean",_.ZodDate="ZodDate",_.ZodSymbol="ZodSymbol",_.ZodUndefined="ZodUndefined",_.ZodNull="ZodNull",_.ZodAny="ZodAny",_.ZodUnknown="ZodUnknown",_.ZodNever="ZodNever",_.ZodVoid="ZodVoid",_.ZodArray="ZodArray",_.ZodObject="ZodObject",_.ZodUnion="ZodUnion",_.ZodDiscriminatedUnion="ZodDiscriminatedUnion",_.ZodIntersection="ZodIntersection",_.ZodTuple="ZodTuple",_.ZodRecord="ZodRecord",_.ZodMap="ZodMap",_.ZodSet="ZodSet",_.ZodFunction="ZodFunction",_.ZodLazy="ZodLazy",_.ZodLiteral="ZodLiteral",_.ZodEnum="ZodEnum",_.ZodEffects="ZodEffects",_.ZodNativeEnum="ZodNativeEnum",_.ZodOptional="ZodOptional",_.ZodNullable="ZodNullable",_.ZodDefault="ZodDefault",_.ZodCatch="ZodCatch",_.ZodPromise="ZodPromise",_.ZodBranded="ZodBranded",_.ZodPipeline="ZodPipeline",_.ZodReadonly="ZodReadonly"})(i||(i={}));var LZ=(_,$={message:`Input not instance of ${_.name}`})=>q9((g)=>g instanceof _,$),B9=V$.create,V9=l6.create,WZ=XU.create,JZ=t6.create,F9=A0.create,zZ=mg.create,RZ=JU.create,GZ=O0.create,XZ=P0.create,YZ=ig.create,QZ=i6.create,TZ=h$.create,KZ=zU.create,qZ=F$.create,BZ=r_.create,VZ=r_.strictCreate,FZ=S0.create,rZ=PE.create,bZ=L0.create,MZ=n$.create,ZZ=RU.create,HZ=GU.create,kZ=lg.create,CZ=j0.create,vZ=W0.create,wZ=J0.create,uZ=o6.create,fZ=z0.create,xZ=tg.create,P9=R$.create,yZ=r$.create,cZ=z6.create,hZ=R$.createWithPreprocess,nZ=YU.create,dZ=()=>B9().optional(),mZ=()=>V9().optional(),iZ=()=>F9().optional(),lZ={string:(_)=>V$.create({..._,coerce:!0}),number:(_)=>l6.create({..._,coerce:!0}),boolean:(_)=>A0.create({..._,coerce:!0}),bigint:(_)=>t6.create({..._,coerce:!0}),date:(_)=>mg.create({..._,coerce:!0})},tZ=m;var x={actorRef:"hasna.actor_ref.v1",resourceRef:"hasna.resource_ref.v1",evidenceRef:"hasna.evidence_ref.v1",workRun:"hasna.work_run.v1",taskToPrProjection:"hasna.task_to_pr_projection.v1",decisionEnvelope:"hasna.decision_envelope.v1",costEstimate:"hasna.cost_estimate.v1",capabilityCard:"hasna.capability_card.v1",providerLiveModeStandard:"hasna.provider_live_mode_standard.v1",contextPack:"hasna.context_pack.v1",integrationRef:"hasna.integration_ref.v1",projectManifest:"hasna.project_manifest.v1",projectPanel:"hasna.project_panel.v1",projectSnapshot:"hasna.project_snapshot.v1",renderManifest:"hasna.render_manifest.v1",agentTrajectory:"hasna.agent_trajectory.v1",validationPlan:"hasna.validation_plan.v1",proofBundle:"hasna.proof_bundle.v1",scaffoldManifest:"hasna.scaffold_manifest.v1",scaffoldInstallRecord:"hasna.scaffold_install_record.v1",appCloudManifest:"hasna.app_cloud_manifest.v1",noCloudEvidencePack:"hasna.no_cloud_evidence_pack.v1",secureLocalStorePolicy:"hasna.secure_local_store_policy.v1",serviceContract:"hasna.service_contract.v1",commsEventEnvelope:"hasna.comms_event_envelope.v1",commsChannelMetadata:"hasna.comms_channel_metadata.v1",commsMessageMetadata:"hasna.comms_message_metadata.v1",app:"hasna.app.v1",release:"hasna.release.v1",rolloutRecord:"hasna.rollout_record.v1",announcement:"hasna.announcement.v1",audience:"hasna.audience.v1"},nW=N.string().regex(/^hasna\.[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)*\.v[0-9]+$/),q_=N.string().datetime(),t=N.string().trim().min(1),M$=t.refine((_)=>_.startsWith("artifact://")||_.startsWith("repo://")||_.startsWith("project://")||_.startsWith("dashboard://")||_.startsWith("render://")||_.startsWith("integration://")||_.startsWith("task://")||_.startsWith("todo://")||_.startsWith("file://")||_.startsWith("files://")||_.startsWith("mailery://")||_.startsWith("conversation://")||_.startsWith("knowledge://")||_.startsWith("memento://")||_.startsWith("https://")||_.startsWith("http://")||_.startsWith("git+https://"),"URI must use artifact://, repo://, project://, dashboard://, render://, integration://, task://, todo://, file://, files://, mailery://, conversation://, knowledge://, memento://, http(s)://, or git+https://"),r9=N.string().regex(/^[a-fA-F0-9]{64}$/),b9=N.string().regex(/^(sha256:)?[a-fA-F0-9]{64}$/),p6=N.record(N.unknown()),T0=N.array(N.string().min(1)).default([]),og=q_.nullable().optional(),oZ=new Set(["succeeded","failed","cancelled","blocked","skipped"]),ag=N.enum(["pending","running","succeeded","failed","cancelled","blocked","skipped","unknown"]);function P_(_){return N.object({schema:N.literal(_),id:N.string().min(1),createdAt:q_,updatedAt:og,metadata:p6.optional()}).strict()}var bd=N.object({schema:nW,id:N.string().min(1),createdAt:q_,updatedAt:og,metadata:p6.optional()}).strict(),M9=N.enum(["agent","human","service","model","workflow","system"]),pZ=P_(x.actorRef).extend({kind:M9,name:N.string().min(1).optional(),provider:N.string().min(1).optional(),accountId:N.string().min(1).optional(),machineId:N.string().min(1).optional(),capabilities:N.array(N.string().min(1)).default([])}).strict(),d$=N.object({kind:M9,id:N.string().min(1),name:N.string().min(1).optional(),provider:N.string().min(1).optional(),accountId:N.string().min(1).optional(),machineId:N.string().min(1).optional()}).strict(),Z9=N.enum(["task","project","repo","run","loop","workflow","action","event","integration","session","machine","model","tool","file","document","url","artifact","knowledge","email","conversation","dashboard","render","panel","report","commit","branch","pull_request","issue","comment","verification","finding","context_pack","proof_bundle","memento","eval","budget","cost","alert","incident","app","release","rollout","announcement","audience","feedback","unknown"]),eZ=P_(x.resourceRef).extend({kind:Z9,name:N.string().min(1).optional(),uri:M$.optional(),externalId:t.optional(),sourcePackage:t.optional(),tags:T0}).strict().superRefine((_,$)=>{if(!_.uri&&!(_.externalId&&_.sourcePackage))$.addIssue({code:N.ZodIssueCode.custom,message:"Resource refs require uri or both sourcePackage and externalId",path:["uri"]})}),s=N.object({kind:Z9,id:N.string().min(1),name:N.string().min(1).optional(),uri:M$.optional(),externalId:t.optional(),sourcePackage:t.optional(),tags:T0}).strict().superRefine((_,$)=>{if(!_.uri&&Boolean(_.externalId)!==Boolean(_.sourcePackage))$.addIssue({code:N.ZodIssueCode.custom,message:"Resource pointers with external package locators require both sourcePackage and externalId",path:_.externalId?["sourcePackage"]:["externalId"]})}),dW=N.enum(["file","command_output","screenshot","log","diff","report","artifact","url","video","har","test_result","metric","trace","other"]),aZ=N.enum(["none","partial","full","unknown"]),sZ=P_(x.evidenceRef).extend({kind:dW,uri:M$,sha256:r9.optional(),summary:N.string().min(1).optional(),contentType:N.string().min(1).optional(),sizeBytes:N.number().int().nonnegative().optional(),redaction:aZ.default("unknown"),producer:d$.optional(),resourceRefs:N.array(s).default([]),tags:T0}).strict(),Y_=N.object({id:N.string().min(1),kind:dW.optional(),uri:M$.optional(),sha256:r9.optional(),summary:N.string().min(1).optional()}).strict(),QU=P_(x.costEstimate).extend({currency:N.string().regex(/^[A-Z]{3}$/).default("USD"),amountMicros:N.number().int().nonnegative(),provider:N.string().min(1).optional(),model:N.string().min(1).optional(),accountId:N.string().min(1).optional(),promptTokens:N.number().int().nonnegative().optional(),completionTokens:N.number().int().nonnegative().optional(),totalTokens:N.number().int().nonnegative().optional(),basis:N.enum(["actual","estimated","budget","limit"]).default("estimated"),resourceRefs:N.array(s).default([])}).strict().superRefine((_,$)=>{if(_.promptTokens!==void 0&&_.completionTokens!==void 0&&_.totalTokens!==void 0&&_.totalTokens!==_.promptTokens+_.completionTokens)$.addIssue({code:N.ZodIssueCode.custom,message:"totalTokens must equal promptTokens plus completionTokens when all are present",path:["totalTokens"]})}),_H=N.enum(["allowed","denied","warned","approval_required","selected","skipped","unknown"]),H9=P_(x.decisionEnvelope).extend({decisionType:N.enum(["guardrail","model_route","tool_select","budget","secret_access","approval","policy","other"]),status:_H,actor:d$.optional(),traceId:N.string().min(1).optional(),inputHash:b9.optional(),policyBundleId:N.string().min(1).optional(),selected:N.array(s).default([]),skipped:N.array(s).default([]),reason:N.string().min(1),obligations:N.array(N.string().min(1)).default([]),redactions:N.array(N.string().min(1)).default([]),costEstimate:QU.optional(),evidenceRefs:N.array(Y_).default([])}).strict().superRefine((_,$)=>{if(_.status==="selected"&&_.selected.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Selected decisions require at least one selected resource",path:["selected"]});if(_.status==="skipped"&&_.skipped.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Skipped decisions require at least one skipped resource",path:["skipped"]});if(_.status==="denied"){if(_.selected.length>0)$.addIssue({code:N.ZodIssueCode.custom,message:"Denied decisions cannot include selected resources",path:["selected"]});if(!_.policyBundleId&&_.evidenceRefs.length===0&&_.obligations.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Denied decisions require policy, evidence, or obligations",path:["policyBundleId"]})}if(_.status==="approval_required"&&_.obligations.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Approval-required decisions require actionable obligations",path:["obligations"]})}),$H=P_(x.capabilityCard).extend({kind:N.enum(["model","tool","machine","agent","lane","connector","service"]),name:N.string().min(1),version:N.string().min(1).optional(),status:N.enum(["available","unavailable","degraded","unknown"]).default("unknown"),capabilities:N.array(N.string().min(1)).default([]),limitations:N.array(N.string().min(1)).default([]),riskLevel:N.enum(["low","medium","high","critical","unknown"]).default("unknown"),costEstimate:QU.optional(),evidenceRefs:N.array(Y_).default([])}).strict(),Y0=N.enum(["mock","fixture","sandbox","read_only_live","live_mutating"]),gH=N.enum(["none","read_only","external_notification","external_mutation","money_movement","dns_or_domain_change","bulk_message_or_call","legal_or_filing","compute_or_infra_mutation","irreversible"]),DH=N.object({refName:t,requiredForModes:N.array(Y0).min(1),allowedSecretInputs:N.array(N.enum(["credential_ref","lease_ref"])).min(1).default(["credential_ref"]),failClosedDiagnostic:t,revocationCheck:N.boolean().default(!0)}).strict(),UH=N.object({operation:t,supportedModes:N.array(Y0).min(1),sideEffectClass:gH,requiresApproval:N.boolean().default(!1),requiresIdempotencyKey:N.boolean().default(!1),requiresSandboxEvidence:N.boolean().default(!1),requiresRollbackOrRevocation:N.boolean().default(!1),rollbackOrRevocation:t.optional(),noSideEffectSmoke:t.optional(),reconciliation:t.optional()}).strict().superRefine((_,$)=>{if(_.supportedModes.includes("live_mutating")){if(_.sideEffectClass==="none"||_.sideEffectClass==="read_only")$.addIssue({code:N.ZodIssueCode.custom,message:"live_mutating operations must declare a side-effecting class",path:["sideEffectClass"]});if(!_.requiresApproval)$.addIssue({code:N.ZodIssueCode.custom,message:"live_mutating operations require approval",path:["requiresApproval"]});if(!_.requiresIdempotencyKey)$.addIssue({code:N.ZodIssueCode.custom,message:"live_mutating operations require idempotency keys",path:["requiresIdempotencyKey"]});if(!_.requiresSandboxEvidence)$.addIssue({code:N.ZodIssueCode.custom,message:"live_mutating operations require sandbox evidence before live proof",path:["requiresSandboxEvidence"]});if(!_.requiresRollbackOrRevocation||!_.rollbackOrRevocation)$.addIssue({code:N.ZodIssueCode.custom,message:"live_mutating operations require rollback or revocation instructions",path:["rollbackOrRevocation"]});if(!_.reconciliation)$.addIssue({code:N.ZodIssueCode.custom,message:"live_mutating operations require reconciliation behavior",path:["reconciliation"]})}}),IH=N.object({providerId:t,appId:t,adapterId:t,ownerPackage:t,modes:N.array(Y0).min(1),defaultMode:Y0,credentialRequirements:N.array(DH).default([]),operations:N.array(UH).min(1),rateLimitPosture:t,costPosture:t.optional(),auditEvents:N.array(t).default([]),redactionRules:N.array(t).default([]),evidenceRefs:N.array(Y_).default([])}).strict().superRefine((_,$)=>{if(!_.modes.includes(_.defaultMode))$.addIssue({code:N.ZodIssueCode.custom,message:"defaultMode must be one of modes",path:["defaultMode"]});let g=new Set(_.operations.flatMap((U)=>U.supportedModes));for(let U of g)if(!_.modes.includes(U))$.addIssue({code:N.ZodIssueCode.custom,message:`operation mode ${U} is not declared in provider modes`,path:["operations"]});if(g.has("live_mutating")){if(!_.credentialRequirements.some((D)=>D.requiredForModes.includes("live_mutating")))$.addIssue({code:N.ZodIssueCode.custom,message:"live_mutating providers require at least one live credential reference requirement",path:["credentialRequirements"]});if(_.auditEvents.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"live_mutating providers require audit events",path:["auditEvents"]})}}),jH=N.object({appId:t,repo:t,priority:N.enum(["p0","p1","p2"]).default("p1"),requiredEvidence:N.array(t).min(1),firstOperations:N.array(t).min(1),blockedUntil:N.array(t).default([])}).strict(),EH=P_(x.providerLiveModeStandard).extend({name:t,version:t,modes:N.array(Y0).refine((_)=>["mock","fixture","sandbox","read_only_live","live_mutating"].every(($)=>_.includes($)),"provider live-mode standard must include every canonical provider mode"),requiredCapabilityFields:N.array(t).min(1),liveMutationGate:N.object({requiredMode:N.literal("live_mutating"),requiredChecks:N.array(t).min(1),forbiddenBypassSignals:N.array(t).min(1),disabledLiveSmoke:t}).strict(),noSideEffectSmoke:N.object({requiredForModes:N.array(Y0).min(1),commandEvidence:N.array(t).min(1),secretOutputScan:N.boolean().default(!0)}).strict(),credentialPolicy:N.object({acceptedInputs:N.array(N.enum(["credential_ref","lease_ref"])).min(1),rawSecretInputsAllowed:N.literal(!1),missingCredentialBehavior:N.literal("fail_closed"),revocationCheckRequired:N.boolean().default(!0)}).strict(),operationCards:N.array(IH).min(1),firstAdoptionTargets:N.array(jH).min(1),evidenceRefs:N.array(Y_).default([])}).strict().superRefine((_,$)=>{let g=new Set(_.firstAdoptionTargets.map((D)=>D.appId)),U=new Set(_.operationCards.map((D)=>D.appId));for(let D of g)if(!U.has(D))$.addIssue({code:N.ZodIssueCode.custom,message:`first adoption target ${D} requires a provider capability card`,path:["firstAdoptionTargets"]})}),NH=N.object({id:N.string().min(1),title:N.string().min(1).optional(),summary:N.string().min(1),text:N.string().optional(),tokens:N.number().int().nonnegative().optional(),source:Y_,resourceRefs:N.array(s).default([])}).strict(),k9=P_(x.contextPack).extend({objective:N.string().min(1),budget:N.object({maxTokens:N.number().int().positive().optional(),maxBytes:N.number().int().positive().optional()}).strict().optional(),items:N.array(NH).default([]),citations:N.array(Y_).default([]),freshness:N.enum(["fresh","stale","unknown"]).default("unknown"),permissions:N.array(N.string().min(1)).default([]),redactions:N.array(N.string().min(1)).default([]),conflicts:N.array(N.string().min(1)).default([]),uncertainty:N.string().min(1).optional()}).strict(),J$=t.refine((_)=>!_.startsWith("/")&&!_.includes("\\")&&!_.split("/").includes(".."),"Project paths must be relative and cannot contain parent-directory segments"),pg=N.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/,"Project slugs must be lowercase dashed identifiers"),AH=N.enum(["public","internal","private","sensitive"]),OH=N.enum(["draft","active","paused","archived"]),mW=N.enum(["todos","files","mailery","conversations","knowledge","mementos","reports","actions","render","contracts","custom"]),C9=P_(x.integrationRef).extend({kind:mW,name:N.string().min(1),projectId:pg.optional(),sourcePackage:t.optional(),externalId:t.optional(),uri:M$.optional(),enabled:N.boolean().default(!0),readOnly:N.boolean().default(!0),capabilities:N.array(N.string().min(1)).default([]),freshness:N.enum(["fresh","stale","unknown"]).default("unknown"),resourceRef:s.optional(),evidenceRefs:N.array(Y_).default([]),config:p6.optional()}).strict().superRefine((_,$)=>{if(!_.uri&&!(_.sourcePackage&&_.externalId)&&!_.resourceRef)$.addIssue({code:N.ZodIssueCode.custom,message:"Integration refs require uri, resourceRef, or both sourcePackage and externalId",path:["uri"]})}),PH=N.object({schemaRoot:J$.default(".hasna/project"),dashboardManifest:J$.default(".hasna/project/dashboard.render.json"),snapshotsDir:J$.default(".hasna/project/snapshots"),documentsDir:J$.default("documents"),reportsDir:J$.default("reports"),evidenceDir:J$.default(".hasna/project/evidence"),privateDir:J$.default(".hasna/project/private")}).strict(),SH=P_(x.projectManifest).extend({projectId:pg,slug:pg,name:N.string().min(1),summary:N.string().min(1).optional(),status:OH.default("active"),classification:AH.default("private"),owner:d$.optional(),layout:PH.default({}),integrations:N.array(C9).default([]),renderManifests:N.array(s).default([]),resourceRefs:N.array(s).default([]),evidenceRefs:N.array(Y_).default([]),tags:T0}).strict().superRefine((_,$)=>{let g=new Set,U=new Set;if(_.projectId!==_.slug)$.addIssue({code:N.ZodIssueCode.custom,message:"projectId and slug must match for canonical project manifests",path:["slug"]});for(let[D,I]of _.integrations.entries()){if(g.has(I.id))$.addIssue({code:N.ZodIssueCode.custom,message:"Project manifest integration ids must be unique",path:["integrations",D,"id"]});if(g.add(I.id),I.projectId&&I.projectId!==_.projectId)$.addIssue({code:N.ZodIssueCode.custom,message:"Integration projectId must match the manifest projectId",path:["integrations",D,"projectId"]})}for(let[D,I]of _.renderManifests.entries()){if(I.kind!=="render")$.addIssue({code:N.ZodIssueCode.custom,message:"Project renderManifests must use resource kind render",path:["renderManifests",D,"kind"]});if(U.has(I.id))$.addIssue({code:N.ZodIssueCode.custom,message:"Project renderManifest refs must be unique",path:["renderManifests",D,"id"]});U.add(I.id)}}),LH=N.enum(["local","package","provider","url"]),iW=N.object({id:N.string().min(1),kind:LH,specifier:N.string().min(1),path:J$.optional(),packageName:N.string().min(1).optional(),uri:M$.optional(),provider:mW.optional(),schemaId:nW.optional(),integrity:b9.optional(),resourceRef:s.optional(),optional:N.boolean().default(!1)}).strict().superRefine((_,$)=>{if(_.kind==="local"&&!_.path)$.addIssue({code:N.ZodIssueCode.custom,message:"Local render imports require path",path:["path"]});if(_.kind==="package"&&!_.packageName)$.addIssue({code:N.ZodIssueCode.custom,message:"Package render imports require packageName",path:["packageName"]});if(_.kind==="provider"&&!_.provider)$.addIssue({code:N.ZodIssueCode.custom,message:"Provider render imports require provider",path:["provider"]});if(_.kind==="url"&&!_.uri)$.addIssue({code:N.ZodIssueCode.custom,message:"URL render imports require uri",path:["uri"]})}),WH=N.enum(["dashboard","canvas","panel","report","document","custom"]),JH=N.object({id:N.string().min(1),title:N.string().min(1),kind:WH,default:N.boolean().default(!1),entry:J$.optional(),imports:N.array(iW).default([]),panelRefs:N.array(s).default([]),dataRefs:N.array(s).default([]),layout:p6.optional()}).strict(),zH=P_(x.renderManifest).extend({projectId:pg,name:N.string().min(1),version:N.string().min(1),manifestPath:J$.default(".hasna/project/dashboard.render.json"),renderer:N.enum(["json_render","react_flow","markdown","html","custom"]).default("json_render"),views:N.array(JH).min(1),imports:N.array(iW).default([]),theme:p6.optional(),compatibility:N.object({minProjectsVersion:N.string().min(1).optional(),minContractsVersion:N.string().min(1).optional()}).strict().optional(),resourceRefs:N.array(s).default([]),evidenceRefs:N.array(Y_).default([])}).strict().superRefine((_,$)=>{let g=_.views.filter((I)=>I.default),U=new Set,D=new Set;if(g.length>1)$.addIssue({code:N.ZodIssueCode.custom,message:"Render manifests can have at most one default view",path:["views"]});for(let[I,j]of _.imports.entries()){if(D.has(j.id))$.addIssue({code:N.ZodIssueCode.custom,message:"Render manifest import ids must be unique",path:["imports",I,"id"]});D.add(j.id)}for(let[I,j]of _.views.entries()){if(U.has(j.id))$.addIssue({code:N.ZodIssueCode.custom,message:"Render manifest view ids must be unique",path:["views",I,"id"]});U.add(j.id);let E=new Set;for(let[A,O]of j.imports.entries()){if(E.has(O.id))$.addIssue({code:N.ZodIssueCode.custom,message:"Render view import ids must be unique",path:["views",I,"imports",A,"id"]});E.add(O.id)}for(let[A,O]of j.panelRefs.entries())if(O.kind!=="panel")$.addIssue({code:N.ZodIssueCode.custom,message:"Render view panelRefs must use resource kind panel",path:["views",I,"panelRefs",A,"kind"]})}}),RH=N.enum(["ready","empty","loading","error","auth_required","unavailable","stale"]),GH=N.enum(["overview","tasks","files","mailery","conversations","knowledge","mementos","reports","actions","timeline","risks","documents","custom"]),XH=N.object({id:N.string().min(1),label:N.string().min(1),value:N.union([N.string(),N.number(),N.boolean()]),unit:N.string().min(1).optional(),status:N.enum(["good","warning","critical","unknown"]).default("unknown"),resourceRefs:N.array(s).default([])}).strict(),YH=N.object({id:N.string().min(1),title:N.string().min(1),summary:N.string().min(1).optional(),status:N.string().min(1).optional(),priority:N.enum(["low","medium","high","critical","unknown"]).default("unknown"),timestamp:q_.optional(),resourceRefs:N.array(s).default([]),evidenceRefs:N.array(Y_).default([]),metadata:p6.optional()}).strict(),QH=N.object({renderer:N.enum(["json_render","react_flow","markdown","html","custom"]).default("json_render"),title:N.string().min(1).optional(),entry:J$.optional(),imports:N.array(iW).default([]),spec:p6.default({})}).strict(),v9=P_(x.projectPanel).extend({projectId:pg,provider:N.object({kind:mW,id:N.string().min(1),name:N.string().min(1).optional(),sourcePackage:t.optional(),externalId:t.optional()}).strict(),kind:GH,title:N.string().min(1),summary:N.string().min(1).optional(),state:RH.default("ready"),stateReason:N.string().min(1).optional(),generatedAt:q_,freshness:N.enum(["fresh","stale","unknown"]).default("unknown"),metrics:N.array(XH).default([]),items:N.array(YH).default([]),actions:N.array(s).default([]),resourceRefs:N.array(s).default([]),evidenceRefs:N.array(Y_).default([]),renderFragment:QH.optional(),warnings:N.array(N.string().min(1)).default([])}).strict().superRefine((_,$)=>{let g=new Set(["error","auth_required","unavailable","stale"]),U=new Set,D=new Set;if(g.has(_.state)&&!_.stateReason)$.addIssue({code:N.ZodIssueCode.custom,message:"Non-ready provider states require stateReason",path:["stateReason"]});if(_.state==="ready"&&_.metrics.length===0&&_.items.length===0&&!_.renderFragment)$.addIssue({code:N.ZodIssueCode.custom,message:"Ready panels require metrics, items, or a renderFragment; use state=empty for empty panels",path:["state"]});for(let[I,j]of _.metrics.entries()){if(U.has(j.id))$.addIssue({code:N.ZodIssueCode.custom,message:"Project panel metric ids must be unique",path:["metrics",I,"id"]});U.add(j.id)}for(let[I,j]of _.items.entries()){if(D.has(j.id))$.addIssue({code:N.ZodIssueCode.custom,message:"Project panel item ids must be unique",path:["items",I,"id"]});D.add(j.id)}for(let[I,j]of _.actions.entries())if(j.kind!=="action")$.addIssue({code:N.ZodIssueCode.custom,message:"Project panel actions must use resource kind action",path:["actions",I,"kind"]})}),TH=P_(x.projectSnapshot).extend({projectId:pg,generatedAt:q_,status:ag.default("unknown"),manifestRef:s,renderManifestRef:s.optional(),panels:N.array(v9).default([]),contextPacks:N.array(k9).default([]),proofBundleRefs:N.array(s).default([]),resourceRefs:N.array(s).default([]),evidenceRefs:N.array(Y_).default([]),warnings:N.array(N.string().min(1)).default([]),freshness:N.enum(["fresh","stale","unknown"]).default("unknown")}).strict().superRefine((_,$)=>{let g=new Set,U=new Set;if(_.manifestRef.kind!=="project")$.addIssue({code:N.ZodIssueCode.custom,message:"Project snapshot manifestRef must use resource kind project",path:["manifestRef","kind"]});if(_.renderManifestRef&&_.renderManifestRef.kind!=="render")$.addIssue({code:N.ZodIssueCode.custom,message:"Project snapshot renderManifestRef must use resource kind render",path:["renderManifestRef","kind"]});for(let[D,I]of _.proofBundleRefs.entries())if(I.kind!=="proof_bundle")$.addIssue({code:N.ZodIssueCode.custom,message:"Project snapshot proofBundleRefs must use resource kind proof_bundle",path:["proofBundleRefs",D,"kind"]});for(let[D,I]of _.panels.entries()){if(I.projectId!==_.projectId)$.addIssue({code:N.ZodIssueCode.custom,message:"Panel projectId must match snapshot projectId",path:["panels",D,"projectId"]});if(g.has(I.id))$.addIssue({code:N.ZodIssueCode.custom,message:"Project snapshot panel ids must be unique",path:["panels",D,"id"]});g.add(I.id)}for(let[D,I]of _.contextPacks.entries()){if(U.has(I.id))$.addIssue({code:N.ZodIssueCode.custom,message:"Project snapshot context pack ids must be unique",path:["contextPacks",D,"id"]});U.add(I.id)}}),w9=N.object({id:N.string().min(1),kind:N.enum(["command","test","typecheck","lint","eval","security","review","deploy","smoke","manual","other"]),required:N.boolean().default(!0),command:N.string().min(1).optional(),expected:N.string().min(1).optional(),timeoutMs:N.number().int().positive().optional(),resourceRefs:N.array(s).default([])}).strict().superRefine((_,$)=>{if(new Set(["command","test","typecheck","lint","smoke","eval"]).has(_.kind)&&!_.command&&!_.expected)$.addIssue({code:N.ZodIssueCode.custom,message:"Actionable validation checks require command or expected",path:["command"]})}),KH=P_(x.validationPlan).extend({objective:N.string().min(1),subject:s.optional(),checks:N.array(w9).min(1),verifier:d$.optional(),requiredEvidenceKinds:N.array(dW).default([])}).strict(),qH=N.enum(["open_source","internal_app","platform","app","agent","content","overlay","other"]),BH=N.enum(["draft","active","deprecated","archived"]),VH=N.enum(["cli","mcp","library","sdk","rest_api","dashboard","database","auth","billing","worker","daemon","native","browser_extension","ai_provider","media_pipeline","data_pipeline","tests","ci","deployment","docs","other"]),FH=N.object({key:N.string().regex(/^[A-Z][A-Z0-9_]*$/),description:N.string().min(1),required:N.boolean().default(!1),["secret"]:N.boolean().default(!1),group:N.string().min(1).optional(),default:N.string().optional()}).strict().superRefine((_,$)=>{if(_.secret&&_.default!==void 0)$.addIssue({code:N.ZodIssueCode.custom,message:"Secret scaffold env vars cannot include defaults",path:["default"]})}),rH=N.object({name:N.string().min(1),command:N.string().min(1),description:N.string().min(1).optional(),required:N.boolean().default(!1)}).strict(),bH=N.object({packageManager:N.enum(["bun","npm","pnpm","yarn","cargo","pip","other"]).optional(),languages:N.array(N.string().min(1)).default([]),requiredFiles:N.array(N.string().min(1)).default([]),requiredDirectories:N.array(N.string().min(1)).default([]),optionalDirectories:N.array(N.string().min(1)).default([])}).strict(),MH=P_(x.scaffoldManifest).extend({name:N.string().min(1),version:N.string().min(1),summary:N.string().min(1),type:qH,status:BH.default("draft"),capabilities:N.array(VH).default([]),techStack:N.array(N.string().min(1)).default([]),tags:T0,source:s.optional(),output:bH,env:N.array(FH).default([]),scripts:N.array(rH).default([]),validationChecks:N.array(w9).default([]),evidenceRefs:N.array(Y_).default([])}).strict().superRefine((_,$)=>{if(_.source?.uri?.startsWith("file://"))$.addIssue({code:N.ZodIssueCode.custom,message:"Public scaffold manifest source refs cannot use local file:// URIs",path:["source","uri"]});if(_.status==="active"&&_.validationChecks.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Active scaffold manifests require validation checks",path:["validationChecks"]});if(_.status==="active"&&_.output.requiredFiles.length===0&&_.output.requiredDirectories.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Active scaffold manifests require at least one required file or directory",path:["output"]})}),ZH=N.enum(["installed","failed","cancelled","partial","unknown"]),HH=P_(x.scaffoldInstallRecord).extend({scaffoldId:N.string().min(1),scaffoldVersion:N.string().min(1).optional(),manifestRef:s.optional(),target:s,status:ZH,installedAt:q_.optional(),installer:d$.optional(),packageManager:N.enum(["bun","npm","pnpm","yarn","cargo","pip","other"]).optional(),options:p6.optional(),generatedFiles:N.array(s).default([]),evidenceRefs:N.array(Y_).default([]),proofBundleRefs:N.array(s).default([])}).strict().superRefine((_,$)=>{if(_.status==="installed"&&!_.installedAt)$.addIssue({code:N.ZodIssueCode.custom,message:"Installed scaffold records require installedAt",path:["installedAt"]});if(_.status==="installed"&&_.generatedFiles.length===0&&_.evidenceRefs.length===0&&_.proofBundleRefs.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Installed scaffold records require generated files, evidence, or proof bundle refs",path:["generatedFiles"]});if((_.status==="failed"||_.status==="partial")&&_.evidenceRefs.length===0&&_.proofBundleRefs.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Failed or partial scaffold records require evidence or proof bundle refs",path:["evidenceRefs"]})}),Q0=N.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/,"App ids must be lowercase dashed identifiers"),lW=N.string().regex(/^(@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/,"Must be a valid npm package name"),u9=N.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/,"Must be a semver version"),kH=N.string().regex(/^[0-9a-f]{7,40}$/,"Must be a lowercase git sha (7-40 hex chars)"),CH=t.refine((_)=>_.startsWith("https://github.com/")||_.startsWith("git+https://github.com/"),"GitHub URLs must start with https://github.com/ or git+https://github.com/"),vH=N.enum(["active","stub","deprecated","archived"]),wH=N.enum(["stable","beta","canary","internal"]),uH=N.object({transport:N.enum(["http","stdio"]).default("http"),bin:N.string().min(1).optional(),url:M$.optional()}).strict(),fH=N.object({healthPath:N.string().min(1).default("/health"),port:N.number().int().positive().optional(),baseUrl:M$.optional()}).strict(),xH=N.object({bins:N.array(N.string().min(1)).default([]),mcp:uH.optional(),http:fH.optional()}).strict(),yH=P_(x.app).extend({appId:Q0,npmName:lW,repoFolder:Q0,githubUrl:CH,projectSlug:pg,surfaces:xH.default({}),lifecycle:vH,releaseChannel:wH.default("stable"),summary:N.string().min(1).optional(),tags:T0}).strict().superRefine((_,$)=>{let g=new Set;for(let[U,D]of _.surfaces.bins.entries()){if(g.has(D))$.addIssue({code:N.ZodIssueCode.custom,message:"App surface bins must be unique",path:["surfaces","bins",U]});g.add(D)}}),cH=N.enum(["skill","ci","backfilled"]),hH=P_(x.release).extend({appId:Q0,package:lW,version:u9,gitSha:kH,publishedAt:q_,publishPath:cH,changelogRef:s.optional(),evidenceRefs:N.array(Y_).default([])}).strict().superRefine((_,$)=>{if(_.publishPath!=="backfilled"&&_.evidenceRefs.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"skill and ci releases require publish evidence; only backfilled releases may omit it",path:["evidenceRefs"]})}),nH=N.enum(["install","update","rollback","freeze-blocked"]),dH=N.object({cliVersion:N.string().min(1).optional(),mcpHealth:N.enum(["ok","degraded","unavailable","not_checked"]).optional()}).strict().superRefine((_,$)=>{if(!_.cliVersion&&_.mcpHealth===void 0)$.addIssue({code:N.ZodIssueCode.custom,message:"Rollout verification requires at least one concrete verifier field"})}),mH=P_(x.rolloutRecord).extend({appId:Q0,package:lW,version:u9,machine:t,action:nH,result:ag,verifiedBy:dH.optional(),at:q_,evidenceRefs:N.array(Y_).default([])}).strict().superRefine((_,$)=>{if(_.action==="freeze-blocked"&&_.result!=="blocked"&&_.result!=="skipped")$.addIssue({code:N.ZodIssueCode.custom,message:"freeze-blocked rollout records must report result blocked or skipped",path:["result"]});let g=Boolean(_.verifiedBy?.cliVersion)||_.verifiedBy?.mcpHealth!==void 0&&_.verifiedBy.mcpHealth!=="not_checked",U=_.verifiedBy?Object.keys(_.verifiedBy).length>0:!1;if((_.action==="install"||_.action==="update")&&_.result==="succeeded"&&(!_.verifiedBy||U&&!g))$.addIssue({code:N.ZodIssueCode.custom,message:"Succeeded install/update rollout records require concrete verification",path:["verifiedBy"]})}),iH=N.enum(["email","telegram","slack","discord","x","blog","rss","webhook","github","other"]),lH=N.enum(["pending","queued","sent","failed","skipped","suppressed"]),tH=N.object({channel:iH,status:lH,deliveredAt:q_.optional(),detail:N.string().min(1).optional()}).strict().superRefine((_,$)=>{if(_.status==="sent"&&!_.deliveredAt)$.addIssue({code:N.ZodIssueCode.custom,message:"Sent announcement channels require deliveredAt",path:["deliveredAt"]});if(_.status==="failed"&&!_.detail)$.addIssue({code:N.ZodIssueCode.custom,message:"Failed announcement channels require detail",path:["detail"]})}),oH=P_(x.announcement).extend({campaignId:t,appId:Q0.optional(),releaseRef:s.optional(),channels:N.array(tH).min(1),audienceRef:s,sentAt:q_}).strict().superRefine((_,$)=>{if(_.releaseRef&&_.releaseRef.kind!=="release")$.addIssue({code:N.ZodIssueCode.custom,message:"Announcement releaseRef must use resource kind release",path:["releaseRef","kind"]});if(_.audienceRef.kind!=="audience")$.addIssue({code:N.ZodIssueCode.custom,message:"Announcement audienceRef must use resource kind audience",path:["audienceRef","kind"]})}),pH=N.enum(["tag","attribute","group"]),eH=N.enum(["eq","neq","in","not_in","exists","not_exists"]),S9=N.union([N.string(),N.number(),N.boolean()]),aH=N.object({kind:pH,key:N.string().min(1).optional(),op:eH.default("eq"),value:S9.optional(),values:N.array(S9).default([])}).strict().superRefine((_,$)=>{if(_.kind==="attribute"&&!_.key)$.addIssue({code:N.ZodIssueCode.custom,message:"Attribute predicates require key",path:["key"]});if((_.op==="eq"||_.op==="neq")&&_.value===void 0)$.addIssue({code:N.ZodIssueCode.custom,message:"eq/neq predicates require value",path:["value"]});if((_.op==="in"||_.op==="not_in")&&_.values.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"in/not_in predicates require values",path:["values"]})}),sH=N.object({match:N.enum(["all","any"]).default("all"),predicates:N.array(aH).min(1)}).strict(),_k=N.enum(["opt_in","opt_out","transactional","none"]),$k=P_(x.audience).extend({audienceId:Q0,name:t,definition:sH,consentPolicy:_k,suppressionSyncedAt:og}).strict(),jE=["@hasna/cloud","open-cloud"],gk=N.enum(["aws","gcp","azure","cloudflare","vercel","neon","supabase","postgres","s3","rds","other"]),Dk=N.object({id:N.string().min(1),provider:gk,kind:N.enum(["database","bucket","queue","secret","function","worker","cache","topic","scheduler","object_store","other"]),ownerPackage:N.string().min(1),region:N.string().min(1).optional(),accountId:N.string().min(1).optional(),uri:M$.optional(),machineScoped:N.boolean().default(!1)}).strict(),f9=P_(x.appCloudManifest).extend({packageName:N.string().min(1),packageVersion:N.string().min(1).optional(),appId:N.string().min(1),repository:s.optional(),storageMode:N.enum(["local_only","app_owned_cloud","hybrid_local_cache","external_service"]),cloudBoundary:N.enum(["none","app_owned","external_service","local_cache"]),cloudResources:N.array(Dk).default([]),localCache:N.object({path:N.string().min(1).optional(),pullMode:N.enum(["manual","daemon","ci","none"]).default("manual"),conflictPolicy:N.enum(["cloud_wins","local_wins","merge","manual_review"]).default("manual_review")}).strict().optional(),forbiddenSharedRuntimes:N.array(N.string().min(1)).default([...jE]),dependencies:N.array(N.string().min(1)).default([]),evidenceRefs:N.array(Y_).default([])}).strict().superRefine((_,$)=>{let g=new Set([...jE,..._.forbiddenSharedRuntimes]);if(g.has(_.packageName))$.addIssue({code:N.ZodIssueCode.custom,message:"App-owned cloud manifests cannot be for a forbidden runtime",path:["packageName"]});for(let U of jE)if(!_.forbiddenSharedRuntimes.includes(U))$.addIssue({code:N.ZodIssueCode.custom,message:`forbiddenSharedRuntimes must include ${U}`,path:["forbiddenSharedRuntimes"]});for(let U of g)if(_.dependencies.includes(U))$.addIssue({code:N.ZodIssueCode.custom,message:`App-owned cloud manifests cannot depend on ${U}`,path:["dependencies"]});if(_.storageMode==="local_only"&&_.cloudBoundary!=="none")$.addIssue({code:N.ZodIssueCode.custom,message:"local_only storage requires cloudBoundary none",path:["cloudBoundary"]});if(_.storageMode==="app_owned_cloud"&&_.cloudBoundary!=="app_owned")$.addIssue({code:N.ZodIssueCode.custom,message:"app_owned_cloud storage requires cloudBoundary app_owned",path:["cloudBoundary"]});if(_.storageMode==="hybrid_local_cache"){if(_.cloudBoundary!=="local_cache")$.addIssue({code:N.ZodIssueCode.custom,message:"hybrid_local_cache storage requires cloudBoundary local_cache",path:["cloudBoundary"]});if(!_.localCache)$.addIssue({code:N.ZodIssueCode.custom,message:"hybrid_local_cache storage requires localCache settings",path:["localCache"]})}if(_.storageMode==="external_service"){if(_.cloudBoundary!=="external_service")$.addIssue({code:N.ZodIssueCode.custom,message:"external_service storage requires cloudBoundary external_service",path:["cloudBoundary"]});if(_.cloudResources.length>0)$.addIssue({code:N.ZodIssueCode.custom,message:"external_service storage must not declare app-owned cloudResources",path:["cloudResources"]})}if((_.storageMode==="app_owned_cloud"||_.storageMode==="hybrid_local_cache")&&_.cloudResources.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Cloud-backed storage modes require explicit app-owned cloudResources",path:["cloudResources"]});if(_.cloudBoundary==="none"&&_.cloudResources.length>0)$.addIssue({code:N.ZodIssueCode.custom,message:"cloudBoundary none cannot declare cloudResources",path:["cloudResources"]});_.cloudResources.forEach((U,D)=>{if(U.ownerPackage!==_.packageName)$.addIssue({code:N.ZodIssueCode.custom,message:"Cloud resources must be owned by the app package that declares the manifest",path:["cloudResources",D,"ownerPackage"]})})}),x9=N.enum(["package_manifest","lockfile","source_import","runtime_config","packed_artifact","published_metadata","app_cloud_manifest","remote_config","boundary_doc","other"]),Uk=N.enum(["low","medium","high","critical"]),y9=N.object({id:N.string().min(1),kind:x9,severity:Uk,path:N.string().min(1).optional(),packageName:N.string().min(1).optional(),pattern:N.string().min(1),message:N.string().min(1),evidenceRefs:N.array(Y_).default([])}).strict(),Ik=N.object({id:N.string().min(1),kind:x9,status:ag,target:N.string().min(1),command:N.string().min(1).optional(),evidenceRefs:N.array(Y_).default([]),findings:N.array(y9).default([])}).strict(),jk=P_(x.noCloudEvidencePack).extend({subject:s,packageName:N.string().min(1).optional(),packageVersion:N.string().min(1).optional(),generatedBy:d$.optional(),scanMode:N.enum(["source_tree","packed_artifact","published_metadata","runtime_config","workspace","ci"]),status:ag,verdict:N.enum(["passed","failed","warning","not_run"]),appCloudManifest:f9.optional(),checks:N.array(Ik).min(1),findings:N.array(y9).default([]),evidenceRefs:N.array(Y_).default([])}).strict().superRefine((_,$)=>{let g=[..._.findings,..._.checks.flatMap((D)=>D.findings)],U=g.filter((D)=>D.severity==="high"||D.severity==="critical");if(_.verdict==="passed"){if(_.status!=="succeeded")$.addIssue({code:N.ZodIssueCode.custom,message:"Passed no-cloud evidence requires succeeded status",path:["status"]});if(U.length>0)$.addIssue({code:N.ZodIssueCode.custom,message:"Passed no-cloud evidence cannot include high or critical findings",path:["findings"]});if(_.checks.some((D)=>D.status!=="succeeded"))$.addIssue({code:N.ZodIssueCode.custom,message:"Passed no-cloud evidence requires every check to be succeeded",path:["checks"]})}if(_.verdict==="failed"&&g.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Failed no-cloud evidence requires findings",path:["findings"]});if(_.status==="succeeded"&&_.checks.some((D)=>D.status==="failed"))$.addIssue({code:N.ZodIssueCode.custom,message:"Succeeded no-cloud evidence cannot contain failed checks",path:["checks"]});_.checks.forEach((D,I)=>{let j=D.findings.filter((E)=>E.severity==="high"||E.severity==="critical");if(D.status==="succeeded"&&j.length>0)$.addIssue({code:N.ZodIssueCode.custom,message:"Succeeded no-cloud checks cannot contain high or critical findings",path:["checks",I,"findings"]})})}),Ek=N.object({checkId:N.string().min(1),status:ag,summary:N.string().min(1).optional(),startedAt:og,finishedAt:og,evidenceRefs:N.array(Y_).default([])}).strict(),Nk=P_(x.proofBundle).extend({subject:s,validationPlanRef:s.optional(),status:ag,verdict:N.enum(["passed","failed","inconclusive","not_run"]).default("inconclusive"),checks:N.array(Ek).default([]),verifier:d$.optional(),evidenceRefs:N.array(Y_).default([]),residualRisks:N.array(N.string().min(1)).default([]),freshness:N.enum(["fresh","stale","unknown"]).default("unknown")}).strict().superRefine((_,$)=>{if(_.verdict==="passed"){if(_.status!=="succeeded")$.addIssue({code:N.ZodIssueCode.custom,message:"Passed proof bundles must have status succeeded",path:["status"]});if(_.checks.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Passed proof bundles require at least one check result",path:["checks"]});if(_.checks.forEach((U,D)=>{if(U.status!=="succeeded")$.addIssue({code:N.ZodIssueCode.custom,message:"Passed proof bundles require all checks to have status succeeded",path:["checks",D,"status"]})}),!(_.evidenceRefs.length>0||_.checks.some((U)=>U.evidenceRefs.length>0)))$.addIssue({code:N.ZodIssueCode.custom,message:"Passed proof bundles require evidence",path:["evidenceRefs"]});if(!_.verifier)$.addIssue({code:N.ZodIssueCode.custom,message:"Passed proof bundles require a verifier",path:["verifier"]})}if(_.verdict==="not_run"&&_.checks.length>0)$.addIssue({code:N.ZodIssueCode.custom,message:"Not-run proof bundles cannot include check results",path:["checks"]});if(_.verdict==="failed"&&!_.checks.some((g)=>g.status==="failed")&&_.evidenceRefs.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Failed proof bundles require a failed check or evidence",path:["checks"]})}),Ak=P_(x.workRun).extend({objective:N.string().min(1),status:ag,actor:d$,traceId:N.string().min(1).optional(),startedAt:og,finishedAt:og,constraints:N.array(N.string().min(1)).default([]),resourceRefs:N.array(s).default([]),decisions:N.array(H9).default([]),costEstimates:N.array(QU).default([]),evidenceRefs:N.array(Y_).default([]),validationPlanRefs:N.array(s).default([]),proofBundleRefs:N.array(s).default([])}).strict().superRefine((_,$)=>{if(_.startedAt&&_.finishedAt&&Date.parse(_.finishedAt)0||_.proofBundleRefs.length>0;if(_.status==="succeeded"&&!g)$.addIssue({code:N.ZodIssueCode.custom,message:"Succeeded work runs require evidence or a proof bundle",path:["evidenceRefs"]});if((_.status==="failed"||_.status==="blocked")&&!g&&_.decisions.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Failed or blocked work runs require evidence, a proof bundle, or a decision record",path:["evidenceRefs"]})}),Ok=Object.freeze({work_run:Object.freeze(["codewith"]),root_request:Object.freeze(["todos"]),pr_group:Object.freeze(["todos"]),leaf_task:Object.freeze(["todos"]),attempt:Object.freeze(["todos"]),writer_generation:Object.freeze(["todos"]),writer_lease:Object.freeze(["repos"]),writer_fence:Object.freeze(["repos"]),provider_profile:Object.freeze(["codewith"]),provider_route:Object.freeze(["codewith"]),admission:Object.freeze(["codewith"]),worker_actor:Object.freeze(["codewith"]),worker:Object.freeze(["codewith"]),runtime:Object.freeze(["codewith"]),repo:Object.freeze(["repos"]),worktree:Object.freeze(["repos"]),branch:Object.freeze(["repos"]),event_stream:Object.freeze(["todos"]),replay_cursor:Object.freeze(["todos"]),handoff:Object.freeze(["todos"]),pull_request:Object.freeze(["todos"]),commit:Object.freeze(["repos"]),review:Object.freeze(["review"]),reviewer:Object.freeze(["review"]),review_run:Object.freeze(["review"]),proof_bundle:Object.freeze(["review"]),repair_cycle:Object.freeze(["todos"]),merge_guard:Object.freeze(["todos"]),merge_operator:Object.freeze(["merge_provider"]),merge_operator_run:Object.freeze(["merge_provider"]),merge_guard_receipt:Object.freeze(["merge_provider"]),merge_outcome:Object.freeze(["merge_provider"]),recovery:Object.freeze(["todos"]),cancellation:Object.freeze(["todos"]),cleanup_eligibility:Object.freeze(["repos"]),cleanup_outcome:Object.freeze(["repos"]),rollback_plan:Object.freeze(["todos"]),rollback_outcome:Object.freeze(["repos"]),terminal_disposition:Object.freeze(["todos"]),openloops_invocation:Object.freeze(["openloops"]),adapter_extension:Object.freeze(["adapter"])}),Pk=N.enum(["work_run","root_request","pr_group","leaf_task","attempt","writer_generation","writer_lease","writer_fence","provider_profile","provider_route","admission","worker_actor","worker","runtime","repo","worktree","branch","event_stream","replay_cursor","handoff","pull_request","commit","review","reviewer","review_run","proof_bundle","repair_cycle","merge_guard","merge_operator","merge_operator_run","merge_guard_receipt","merge_outcome","recovery","cancellation","cleanup_eligibility","cleanup_outcome","rollback_plan","rollback_outcome","terminal_disposition","openloops_invocation","adapter_extension"]),Sk=N.enum(["todos","codewith","repos","review","merge_provider","openloops","adapter"]),eg=N.string().regex(/^[a-f0-9]{64}$/),LE=N.string().trim().min(3).max(256),c9=/^[a-f0-9]{32}$/;function Lk(_,$,g){return`${_}:${$}:opaque-${g.slice(0,32)}`}function Wk(_){return`evidence:opaque-${_.slice(0,32)}`}var h9=LE.refine((_)=>{let g=_.startsWith("task_to_pr_projection:opaque-")?_.slice(29):"";return c9.test(g)},"Projection ids must use a nonsemantic 128-bit lowercase hexadecimal surrogate"),tW=LE.refine((_)=>{let g=_.startsWith("attempt_nonce:opaque-")?_.slice(21):"";return c9.test(g)},"Attempt nonces must use a nonsemantic 128-bit lowercase hexadecimal surrogate"),Jk=new Set(["writer_lease","writer_fence","provider_profile","provider_route","admission","worker_actor","worker","runtime","worktree","merge_operator","merge_operator_run","merge_guard_receipt","merge_outcome","openloops_invocation","adapter_extension"]),oW=N.object({role:Pk,authority:Sk,id:LE,digest:eg,redaction:N.enum(["none","partial","full"])}).strict().superRefine((_,$)=>{let g=Ok[_.role];if(!g.includes(_.authority))$.addIssue({code:N.ZodIssueCode.custom,message:`${_.role} refs must be owned by ${g.join(" or ")}`,path:["authority"]});if(Jk.has(_.role)&&_.redaction==="none")$.addIssue({code:N.ZodIssueCode.custom,message:`${_.role} refs must be redacted and cannot carry a raw locator or credential`,path:["redaction"]});let U=Lk(_.role,_.authority,_.digest);if(_.id!==U)$.addIssue({code:N.ZodIssueCode.custom,message:"Reference ids must be nonsemantic authority-bound surrogates derived from the canonical role, authority, and owner-record digest",path:["id"]})}),z$=N.object({id:LE,digest:eg,redaction:N.enum(["partial","full"])}).strict().superRefine((_,$)=>{if(_.id!==Wk(_.digest))$.addIssue({code:N.ZodIssueCode.custom,message:"Evidence ids must be nonsemantic owner-resolvable surrogates derived from their canonical digest",path:["id"]})});function n9(_,$,g,U){if(_.id===$.id||_.digest===$.digest)g.addIssue({code:N.ZodIssueCode.custom,message:"Stop and lease-revocation facts require distinct evidence identities and digests",path:U})}function M(_){return oW.refine(($)=>$.role===_,{message:`Reference must use role ${_}`,path:["role"]})}function K_(_,$){return _.role===$.role&&_.authority===$.authority&&_.id===$.id&&_.digest===$.digest&&_.redaction===$.redaction}function pW(_,$){return _.role===$.role&&_.authority===$.authority&&_.id===$.id}function E0(_,$,g,U,D){if(pW(_,$))g.addIssue({code:N.ZodIssueCode.custom,message:`${D} requires a fresh canonical role/authority/id`,path:U});if(_.digest===$.digest)g.addIssue({code:N.ZodIssueCode.custom,message:`${D} requires a fresh canonical digest`,path:U})}function AE(_){return`${_.role}\x00${_.authority}\x00${_.id}`}function o_(_,$){return _.algorithm===$.algorithm&&_.value===$.value}var X_=N.object({algorithm:N.enum(["sha1","sha256"]),value:N.string().regex(/^[a-f0-9]+$/)}).strict().superRefine((_,$)=>{let g=_.algorithm==="sha1"?40:64;if(_.value.length!==g)$.addIssue({code:N.ZodIssueCode.custom,message:`${_.algorithm} object ids must contain exactly ${g} lowercase hex characters`,path:["value"]})});function L9(_){if(_.canonicalizationVersion===1){let g=JSON.stringify(["hasna.task_to_pr_projection.binding.v1",_.canonicalizationVersion,_.rootRequestRef.id,_.rootRequestRef.digest,_.prGroupRef.id,_.prGroupRef.digest,_.leafTaskRef.id,_.leafTaskRef.digest,_.repoRef.id,_.repoRef.digest,_.baseHead.algorithm,_.baseHead.value,_.frozenScopeDigest]);return N9("sha256").update(g,"utf8").digest("hex")}let $=JSON.stringify(["hasna.task_to_pr_projection.binding.v2",_.canonicalizationVersion,...[_.rootRequestRef,_.prGroupRef,_.leafTaskRef,_.repoRef,_.worktreeRef,_.branchRef].flatMap((g)=>[g.role,g.authority,g.id,g.digest]),_.baseHead.algorithm,_.baseHead.value,_.frozenScopeDigest]);return N9("sha256").update($,"utf8").digest("hex")}var zk=N.object({ref:M("attempt"),nonce:tW,admissionRef:M("admission"),admissionWriterGenerationRef:M("writer_generation"),workerActorRef:M("worker_actor"),workerRef:M("worker"),runtimeRef:M("runtime"),writerGenerationRef:M("writer_generation"),writerLeaseRef:M("writer_lease"),writerFenceRef:M("writer_fence"),providerProfileRef:M("provider_profile"),providerRouteRef:M("provider_route")}).strict(),Rk=N.object({repoRef:M("repo"),worktreeRef:M("worktree"),branchRef:M("branch"),baseHead:X_,branchHead:X_}).strict(),Gk=N.object({streamRef:M("event_stream"),replayCursorRef:M("replay_cursor"),sequence:N.number().int().safe().nonnegative(),prefixDigest:eg}).strict(),Xk=N.object({ref:M("handoff"),previousAttemptRef:M("attempt"),nextAttemptRef:M("attempt"),previousWriterGenerationRef:M("writer_generation"),nextWriterGenerationRef:M("writer_generation"),stoppedWorkRunRef:M("work_run"),stopEvidenceRef:z$,leaseRevocationEvidenceRef:z$}).strict().superRefine((_,$)=>{E0(_.previousAttemptRef,_.nextAttemptRef,$,["nextAttemptRef"],"Handoff attempt rotation"),E0(_.previousWriterGenerationRef,_.nextWriterGenerationRef,$,["nextWriterGenerationRef"],"Handoff writer-generation rotation"),n9(_.stopEvidenceRef,_.leaseRevocationEvidenceRef,$,["leaseRevocationEvidenceRef"])}),Yk=N.object({ref:M("review"),pullRequestRef:M("pull_request"),base:X_,head:X_,reviewerRef:M("reviewer"),reviewRunRef:M("review_run"),proofBundleRef:M("proof_bundle"),verdict:N.enum(["approved","changes_requested","blocked"]),reviewedAt:q_}).strict(),Qk=N.object({pullRequestRef:M("pull_request"),remoteBranchRef:M("branch"),expectedBase:X_,providerPullRequestBase:X_,localHead:X_,remoteHead:X_,providerPullRequestHead:X_,equalityProofRef:M("proof_bundle"),ciProofBundleRefs:N.array(M("proof_bundle")).min(1),verifiedAt:q_}).strict().superRefine((_,$)=>{if(!o_(_.expectedBase,_.providerPullRequestBase))$.addIssue({code:N.ZodIssueCode.custom,message:"Expected and provider-observed pull-request bases must be exactly equal",path:["providerPullRequestBase"]});if(!o_(_.localHead,_.remoteHead)||!o_(_.localHead,_.providerPullRequestHead))$.addIssue({code:N.ZodIssueCode.custom,message:"Local, remote, and provider pull-request heads must be exactly equal",path:["providerPullRequestHead"]});let g=_.ciProofBundleRefs.map(AE);if(new Set(g).size!==g.length)$.addIssue({code:N.ZodIssueCode.custom,message:"CI proof bundle refs must have unique canonical identities",path:["ciProofBundleRefs"]});let U=_.ciProofBundleRefs.map((D)=>D.digest);if(new Set(U).size!==U.length)$.addIssue({code:N.ZodIssueCode.custom,message:"CI proof bundle refs must have unique canonical digests",path:["ciProofBundleRefs"]});if(_.ciProofBundleRefs.some((D)=>pW(D,_.equalityProofRef)))$.addIssue({code:N.ZodIssueCode.custom,message:"Head-equality and CI proof refs must have distinct canonical identities",path:["ciProofBundleRefs"]});if(_.ciProofBundleRefs.some((D)=>D.digest===_.equalityProofRef.digest))$.addIssue({code:N.ZodIssueCode.custom,message:"Head-equality and CI proof refs must have distinct canonical digests",path:["ciProofBundleRefs"]})}),Tk=N.object({ref:M("repair_cycle"),cycle:N.number().int().min(0).max(2),cap:N.literal(2),exhausted:N.boolean(),latestRepairRef:M("repair_cycle").optional()}).strict().superRefine((_,$)=>{if(_.exhausted!==(_.cycle===_.cap))$.addIssue({code:N.ZodIssueCode.custom,message:"Repair exhaustion must equal the cumulative cycle cap",path:["exhausted"]});if(_.cycle===0&&_.latestRepairRef)$.addIssue({code:N.ZodIssueCode.custom,message:"Cycle zero cannot reference a repair",path:["latestRepairRef"]});if(_.cycle>0&&!_.latestRepairRef)$.addIssue({code:N.ZodIssueCode.custom,message:"Non-zero repair state requires the latest immutable repair ref",path:["latestRepairRef"]});if(_.latestRepairRef&&pW(_.ref,_.latestRepairRef))$.addIssue({code:N.ZodIssueCode.custom,message:"Repair-state and latest-repair refs must be distinct canonical records",path:["latestRepairRef"]});if(_.latestRepairRef&&_.ref.digest===_.latestRepairRef.digest)$.addIssue({code:N.ZodIssueCode.custom,message:"Repair-state and latest-repair refs must have distinct canonical digests",path:["latestRepairRef"]})}),Kk=N.object({ref:M("merge_guard"),pullRequestRef:M("pull_request"),expectedBase:X_,expectedHead:X_,reviewRefs:N.array(M("review")).min(1),proofBundleRefs:N.array(M("proof_bundle")).min(1),operatorRef:M("merge_operator"),operatorRunRef:M("merge_operator_run"),providerGuardReceiptRef:M("merge_guard_receipt"),mechanism:N.enum(["compare_and_swap","queue_expected_head"]),decision:N.enum(["eligible","denied","consumed","revoked"]),evaluatedAt:q_}).strict().superRefine((_,$)=>{if(new Set(_.reviewRefs.map((I)=>I.id)).size!==_.reviewRefs.length)$.addIssue({code:N.ZodIssueCode.custom,message:"Merge guard review refs must be unique",path:["reviewRefs"]});if(new Set(_.proofBundleRefs.map(AE)).size!==_.proofBundleRefs.length)$.addIssue({code:N.ZodIssueCode.custom,message:"Merge guard proof refs must have unique canonical identities",path:["proofBundleRefs"]});if(new Set(_.proofBundleRefs.map((I)=>I.digest)).size!==_.proofBundleRefs.length)$.addIssue({code:N.ZodIssueCode.custom,message:"Merge guard proof refs must have unique canonical digests",path:["proofBundleRefs"]})}),qk=N.object({ref:M("merge_outcome"),guardRef:M("merge_guard"),pullRequestRef:M("pull_request"),expectedBase:X_,observedBase:X_,expectedHead:X_,observedHead:X_,status:N.enum(["merged","closed_unmerged","refused","head_drift","base_drift"]),mergeCommitRef:M("commit").optional(),finishedAt:q_,evidenceRefs:N.array(z$).min(1)}).strict().superRefine((_,$)=>{let g=o_(_.expectedBase,_.observedBase),U=o_(_.expectedHead,_.observedHead);if(_.status==="merged"){if(!g||!U)$.addIssue({code:N.ZodIssueCode.custom,message:"Merged outcomes require observed base and head to equal the guarded values",path:[!g?"observedBase":"observedHead"]});if(!_.mergeCommitRef)$.addIssue({code:N.ZodIssueCode.custom,message:"Merged outcomes require an immutable merge commit ref",path:["mergeCommitRef"]})}else if(_.mergeCommitRef)$.addIssue({code:N.ZodIssueCode.custom,message:"Unmerged outcomes cannot claim a merge commit",path:["mergeCommitRef"]});if(_.status==="head_drift"&&U)$.addIssue({code:N.ZodIssueCode.custom,message:"Head-drift outcomes require distinct expected and observed heads",path:["observedHead"]});if(_.status==="head_drift"&&!g)$.addIssue({code:N.ZodIssueCode.custom,message:"Head-drift outcomes cannot also carry an unclassified base drift",path:["observedBase"]});if(_.status==="base_drift"&&g)$.addIssue({code:N.ZodIssueCode.custom,message:"Base-drift outcomes require distinct expected and observed bases",path:["observedBase"]});if(_.status==="base_drift"&&!U)$.addIssue({code:N.ZodIssueCode.custom,message:"Base-drift outcomes cannot also carry an unclassified head drift",path:["observedHead"]});if(!U&&_.status!=="head_drift")$.addIssue({code:N.ZodIssueCode.custom,message:"Only a head_drift outcome may record an observed head that differs from the expected head",path:["observedHead"]});if(!g&&_.status!=="base_drift")$.addIssue({code:N.ZodIssueCode.custom,message:"Only a base_drift outcome may record an observed base that differs from the expected base",path:["observedBase"]})}),Bk=N.object({guard:Kk,outcome:qk.optional()}).strict(),Vk=N.object({ref:M("recovery"),priorAttemptRef:M("attempt"),priorWriterGenerationRef:M("writer_generation"),priorWorkRunRef:M("work_run"),successorAttemptNonce:tW,successorWriterGenerationRef:M("writer_generation"),preservedStateRefs:N.array(oW).min(1),stopEvidenceRef:z$,leaseRevocationEvidenceRef:z$}).strict().superRefine((_,$)=>{E0(_.priorWriterGenerationRef,_.successorWriterGenerationRef,$,["successorWriterGenerationRef"],"Recovery writer-generation rotation"),n9(_.stopEvidenceRef,_.leaseRevocationEvidenceRef,$,["leaseRevocationEvidenceRef"])}),Fk=N.object({ref:M("cancellation"),cancelledAttemptRef:M("attempt"),preservedStateRefs:N.array(oW).min(1),evidenceRefs:N.array(z$).min(1)}).strict(),rk=N.object({ref:M("cleanup_eligibility"),status:N.enum(["not_ready","preserved","blocked","eligible"]),targetWorktreeRef:M("worktree"),eventCursorRef:M("replay_cursor"),terminalDispositionRef:M("terminal_disposition"),writerLeaseRef:M("writer_lease"),leaseRevocationEvidenceRef:z$,consumedEventEvidenceRef:z$,evaluatedAt:q_,evidenceRefs:N.array(z$).min(1)}).strict().superRefine((_,$)=>{if(_.leaseRevocationEvidenceRef.id===_.consumedEventEvidenceRef.id||_.leaseRevocationEvidenceRef.digest===_.consumedEventEvidenceRef.digest)$.addIssue({code:N.ZodIssueCode.custom,message:"Cleanup lease-revocation and consumed-event facts require distinct evidence identities and digests",path:["consumedEventEvidenceRef"]})}),bk=N.object({ref:M("cleanup_outcome"),eligibilityRef:M("cleanup_eligibility"),targetWorktreeRef:M("worktree"),status:N.enum(["preserved","deleted","failed","skipped"]),finishedAt:q_,evidenceRefs:N.array(z$).min(1)}).strict(),Mk=N.object({eligibility:rk,outcome:bk.optional()}).strict().superRefine((_,$)=>{if(_.outcome&&!K_(_.outcome.eligibilityRef,_.eligibility.ref))$.addIssue({code:N.ZodIssueCode.custom,message:"Cleanup outcomes must bind the exact eligibility decision",path:["outcome","eligibilityRef"]});if(_.outcome&&!K_(_.outcome.targetWorktreeRef,_.eligibility.targetWorktreeRef))$.addIssue({code:N.ZodIssueCode.custom,message:"Cleanup eligibility and outcome must bind the same target worktree",path:["outcome","targetWorktreeRef"]});if(_.outcome?.status==="deleted"&&_.eligibility.status!=="eligible")$.addIssue({code:N.ZodIssueCode.custom,message:"Deletion requires an eligible cleanup decision",path:["outcome","status"]})}),Zk=N.object({plan:N.object({ref:M("rollback_plan"),targetRef:N.union([M("commit"),M("branch")]),createdAt:q_}).strict(),outcome:N.object({ref:M("rollback_outcome"),planRef:M("rollback_plan"),targetRef:N.union([M("commit"),M("branch")]),status:N.enum(["not_run","succeeded","failed","cancelled"]),finishedAt:q_,evidenceRefs:N.array(z$).min(1)}).strict().optional()}).strict().superRefine((_,$)=>{if(_.outcome&&!K_(_.outcome.planRef,_.plan.ref))$.addIssue({code:N.ZodIssueCode.custom,message:"Rollback outcomes must bind the exact rollback plan",path:["outcome","planRef"]});if(_.outcome&&!K_(_.outcome.targetRef,_.plan.targetRef))$.addIssue({code:N.ZodIssueCode.custom,message:"Rollback outcomes must bind the exact rollback target",path:["outcome","targetRef"]});if(_.outcome&&Date.parse(_.outcome.finishedAt)({category:"ci_proof",ref:$,base:_.exactHead.expectedBase,head:_.exactHead.localHead}))]:[],..._.reviews.flatMap(($)=>[{category:"review_proof",ref:$.proofBundleRef,base:$.base,head:$.head},{category:"review_record",ref:$.ref,base:$.base,head:$.head},{category:"review_run",ref:$.reviewRunRef,base:$.base,head:$.head}]),..._.merge?[{category:"merge_guard",ref:_.merge.guard.ref},{category:"provider_guard_receipt",ref:_.merge.guard.providerGuardReceiptRef,base:_.merge.guard.expectedBase,head:_.merge.guard.expectedHead}]:[],..._.cleanup?[{category:"cleanup_eligibility",ref:_.cleanup.eligibility.ref}]:[],..._.rollback?[{category:"rollback_plan",ref:_.rollback.plan.ref}]:[],..._.terminalDispositionRef?[{category:"terminal_disposition",ref:_.terminalDispositionRef}]:[]]}function Ck(_,$){if(_.category!==$.category)return!1;if(_.category==="projection_id"&&$.category==="projection_id")return _.projectionId===$.projectionId;if(_.category==="attempt_nonce"&&$.category==="attempt_nonce")return _.nonce===$.nonce;if(_.category==="replay_prefix"&&$.category==="replay_prefix")return _.sequence===$.sequence&&_.prefixDigest===$.prefixDigest;if(!("ref"in _)||!("ref"in $))return!1;return K_(_.ref,$.ref)&&(("head"in _)&&("head"in $)&&("base"in _)&&("base"in $)&&o_(_.base,$.base)&&o_(_.head,$.head)||!("head"in _)&&!("head"in $)&&!("base"in _)&&!("base"in $))}var vk="hasna.task_to_pr_adapter_extension.",wk=N.object({mode:N.enum(["local","cloud"]),schema:nW,ref:M("adapter_extension"),digest:eg}).strict().superRefine((_,$)=>{if(!_.schema.startsWith(vk))$.addIssue({code:N.ZodIssueCode.custom,message:"Adapter extension schema ids must use the permanently reserved task-to-PR adapter-extension namespace",path:["schema"]})}),uk=N.enum(["admitted","running","handed_off","reviewing","repairing","merge_ready","merged","closed_unmerged","failed","blocked","cancelled","recovering","cleanup_complete","rolled_back"]),W9=new Set(["admitted","running","handed_off"]),J9=new Set(["merged","closed_unmerged","failed","blocked","cancelled","cleanup_complete","rolled_back"]),fk={admitted:new Set(["absent","denied:none","revoked:none"]),running:new Set(["absent","denied:none","revoked:none"]),handed_off:new Set(["absent","denied:none","revoked:none"]),reviewing:new Set(["absent","denied:none","revoked:none"]),repairing:new Set(["absent","denied:none","revoked:none"]),merge_ready:new Set(["eligible:none"]),merged:new Set(["consumed:merged"]),closed_unmerged:new Set(["consumed:closed_unmerged","consumed:refused","consumed:head_drift","consumed:base_drift"]),failed:new Set(["absent","revoked:none"]),blocked:new Set(["absent","revoked:none"]),cancelled:new Set(["absent","revoked:none"]),recovering:new Set(["absent","denied:none","revoked:none"]),cleanup_complete:new Set(["absent","revoked:none","consumed:merged","consumed:closed_unmerged","consumed:refused","consumed:head_drift","consumed:base_drift"]),rolled_back:new Set(["consumed:merged"])},xk=N.object({schema:N.literal(x.taskToPrProjection),id:h9,createdAt:q_,canonicalizationVersion:N.union([N.literal(1),N.literal(2)]),identityDigest:eg,frozenScopeDigest:eg,state:uk,workRunRef:M("work_run"),rootRequestRef:M("root_request"),prGroupRef:M("pr_group"),leafTaskRef:M("leaf_task"),attempt:zk,repository:Rk,events:Gk,openLoopsInvocationRef:M("openloops_invocation").optional(),pullRequestRef:M("pull_request").optional(),exactHead:Qk.optional(),handoff:Xk.optional(),reviews:N.array(Yk).default([]),repair:Tk,merge:Bk.optional(),recovery:Vk.optional(),cancellation:Fk.optional(),cleanup:Mk.optional(),rollback:Zk.optional(),terminalDispositionRef:M("terminal_disposition").optional(),provenanceLedger:N.array(Hk),adapterExtensions:N.array(wk).default([]),evidenceRefs:N.array(z$).default([])}).strict().superRefine((_,$)=>{let g=_.canonicalizationVersion===1?L9({canonicalizationVersion:1,rootRequestRef:_.rootRequestRef,prGroupRef:_.prGroupRef,leafTaskRef:_.leafTaskRef,repoRef:_.repository.repoRef,baseHead:_.repository.baseHead,frozenScopeDigest:_.frozenScopeDigest}):L9({canonicalizationVersion:2,rootRequestRef:_.rootRequestRef,prGroupRef:_.prGroupRef,leafTaskRef:_.leafTaskRef,repoRef:_.repository.repoRef,worktreeRef:_.repository.worktreeRef,branchRef:_.repository.branchRef,baseHead:_.repository.baseHead,frozenScopeDigest:_.frozenScopeDigest});if(_.identityDigest!==g)$.addIssue({code:N.ZodIssueCode.custom,message:"identityDigest must equal the selected v1 compatibility or v2 branch/worktree-bound canonical identity digest",path:["identityDigest"]});let U=new Set,D=new Set,I=new Set,j=new Set,E=new Set,A=new Set;for(let[T,K]of _.provenanceLedger.entries()){if("ref"in K){if(U.has(K.ref.id))$.addIssue({code:N.ZodIssueCode.custom,message:"Provenance entries cannot reuse a canonical owner id across categories or generations",path:["provenanceLedger",T,"ref","id"]});if(U.add(K.ref.id),D.has(K.ref.digest))$.addIssue({code:N.ZodIssueCode.custom,message:"Provenance entries cannot reuse a canonical digest across categories or generations",path:["provenanceLedger",T,"ref","digest"]});D.add(K.ref.digest);continue}if(K.category==="projection_id"){if(I.has(K.projectionId))$.addIssue({code:N.ZodIssueCode.custom,message:"Projection identity provenance tombstones must be globally unique",path:["provenanceLedger",T,"projectionId"]});I.add(K.projectionId);continue}if(K.category==="attempt_nonce"){if(j.has(K.nonce))$.addIssue({code:N.ZodIssueCode.custom,message:"Attempt nonce provenance tombstones must be globally unique",path:["provenanceLedger",T,"nonce"]});j.add(K.nonce);continue}if(E.has(K.prefixDigest))$.addIssue({code:N.ZodIssueCode.custom,message:"Replay prefix provenance tombstones must be globally unique",path:["provenanceLedger",T,"prefixDigest"]});if(E.add(K.prefixDigest),A.has(K.sequence))$.addIssue({code:N.ZodIssueCode.custom,message:"Replay prefix provenance entries must bind globally unique replay sequences",path:["provenanceLedger",T,"sequence"]});A.add(K.sequence)}for(let T of kk(_))if(!_.provenanceLedger.some((K)=>Ck(K,T)))$.addIssue({code:N.ZodIssueCode.custom,message:`The active ${T.category} identity must be represented exactly in the monotonic provenance ledger`,path:["provenanceLedger"]});let O=[_.rootRequestRef,_.prGroupRef,_.leafTaskRef,_.repository.repoRef,_.repository.worktreeRef,_.repository.branchRef,_.events.streamRef,..._.pullRequestRef?[_.pullRequestRef]:[]],P=(T,K,V,F)=>{let o=new Set(K.map((j_)=>j_.role)),I_=new Set;for(let[j_,p]of T.entries()){if(!o.has(p.role))$.addIssue({code:N.ZodIssueCode.custom,message:`${F} cannot preserve an unrecognized ${p.role} role`,path:[...V,j_]});if(I_.has(p.role))$.addIssue({code:N.ZodIssueCode.custom,message:`${F} must preserve exactly one canonical ref per role`,path:[...V,j_]});I_.add(p.role)}if(T.length!==K.length)$.addIssue({code:N.ZodIssueCode.custom,message:`${F} preservation refs must exactly equal the required canonical role set`,path:V});for(let j_ of K)if(!T.some((p)=>K_(p,j_)))$.addIssue({code:N.ZodIssueCode.custom,message:`${F} must preserve ${j_.role}`,path:V})};if(_.handoff&&!K_(_.handoff.nextWriterGenerationRef,_.attempt.writerGenerationRef))$.addIssue({code:N.ZodIssueCode.custom,message:"Handoff next generation must be the current attempt writer generation",path:["handoff","nextWriterGenerationRef"]});if(_.handoff&&!K_(_.handoff.nextAttemptRef,_.attempt.ref))$.addIssue({code:N.ZodIssueCode.custom,message:"Handoff next attempt must be the current attempt",path:["handoff","nextAttemptRef"]});if(_.handoff)E0(_.handoff.stoppedWorkRunRef,_.workRunRef,$,["handoff","stoppedWorkRunRef"],"Handoff WorkRun rotation");if(_.recovery){if(_.recovery.successorAttemptNonce!==_.attempt.nonce)$.addIssue({code:N.ZodIssueCode.custom,message:"Recovery successor nonce must equal the current attempt nonce",path:["recovery","successorAttemptNonce"]});if(!K_(_.recovery.successorWriterGenerationRef,_.attempt.writerGenerationRef))$.addIssue({code:N.ZodIssueCode.custom,message:"Recovery successor generation must equal the current writer generation",path:["recovery","successorWriterGenerationRef"]});E0(_.recovery.priorAttemptRef,_.attempt.ref,$,["recovery","priorAttemptRef"],"Recovery attempt rotation"),E0(_.recovery.priorWorkRunRef,_.workRunRef,$,["recovery","priorWorkRunRef"],"Recovery WorkRun rotation"),P(_.recovery.preservedStateRefs,[_.recovery.priorWorkRunRef,...O],["recovery","preservedStateRefs"],"Recovery")}if(_.cancellation&&!K_(_.cancellation.cancelledAttemptRef,_.attempt.ref))$.addIssue({code:N.ZodIssueCode.custom,message:"Cancellation must bind the current attempt",path:["cancellation","cancelledAttemptRef"]});if(_.cancellation)P(_.cancellation.preservedStateRefs,[_.workRunRef,_.attempt.ref,...O],["cancellation","preservedStateRefs"],"Cancellation");if(_.cancellation&&_.recovery)$.addIssue({code:N.ZodIssueCode.custom,message:"A projection cannot be both the cancellation and recovery snapshot",path:["recovery"]});if(_.handoff&&_.recovery)$.addIssue({code:N.ZodIssueCode.custom,message:"A projection cannot be both the handoff and recovery snapshot",path:["recovery"]});if(_.cleanup&&!K_(_.cleanup.eligibility.eventCursorRef,_.events.replayCursorRef))$.addIssue({code:N.ZodIssueCode.custom,message:"Cleanup eligibility must bind the current canonical replay cursor",path:["cleanup","eligibility","eventCursorRef"]});if(_.cleanup&&(!_.terminalDispositionRef||!K_(_.cleanup.eligibility.terminalDispositionRef,_.terminalDispositionRef)))$.addIssue({code:N.ZodIssueCode.custom,message:"Cleanup eligibility must bind the exact durable terminal owner fact",path:["cleanup","eligibility","terminalDispositionRef"]});if(_.cleanup&&!K_(_.cleanup.eligibility.writerLeaseRef,_.attempt.writerLeaseRef))$.addIssue({code:N.ZodIssueCode.custom,message:"Cleanup eligibility must bind the exact writer lease being revoked",path:["cleanup","eligibility","writerLeaseRef"]});if(_.cleanup&&!K_(_.cleanup.eligibility.targetWorktreeRef,_.repository.worktreeRef))$.addIssue({code:N.ZodIssueCode.custom,message:"Cleanup eligibility must bind the canonical worktree",path:["cleanup","eligibility","targetWorktreeRef"]});if(_.pullRequestRef){if(_.exactHead&&!K_(_.exactHead.pullRequestRef,_.pullRequestRef))$.addIssue({code:N.ZodIssueCode.custom,message:"Exact-head proof must bind the canonical pull request ref",path:["exactHead","pullRequestRef"]});for(let[T,K]of _.reviews.entries())if(!K_(K.pullRequestRef,_.pullRequestRef))$.addIssue({code:N.ZodIssueCode.custom,message:"Every review must bind the canonical pull request ref",path:["reviews",T,"pullRequestRef"]});if(_.merge&&!K_(_.merge.guard.pullRequestRef,_.pullRequestRef))$.addIssue({code:N.ZodIssueCode.custom,message:"Merge guard must bind the canonical pull request ref",path:["merge","guard","pullRequestRef"]});if(_.merge?.outcome&&!K_(_.merge.outcome.pullRequestRef,_.pullRequestRef))$.addIssue({code:N.ZodIssueCode.custom,message:"Merge outcome must bind the canonical pull request ref",path:["merge","outcome","pullRequestRef"]})}else if(_.exactHead||_.reviews.length>0||_.merge)$.addIssue({code:N.ZodIssueCode.custom,message:"Review and merge state require a canonical pull request ref",path:["pullRequestRef"]});if(_.exactHead&&!o_(_.exactHead.localHead,_.repository.branchHead))$.addIssue({code:N.ZodIssueCode.custom,message:"Exact local head must equal the canonical branch head",path:["exactHead","localHead"]});if(_.exactHead&&!o_(_.exactHead.expectedBase,_.repository.baseHead))$.addIssue({code:N.ZodIssueCode.custom,message:"Exact-head expected base must equal the canonical repository base",path:["exactHead","expectedBase"]});if(_.exactHead&&!K_(_.exactHead.remoteBranchRef,_.repository.branchRef))$.addIssue({code:N.ZodIssueCode.custom,message:"Exact-head remote branch ref must equal the canonical repository branch ref",path:["exactHead","remoteBranchRef"]});if(_.exactHead&&Date.parse(_.exactHead.verifiedAt)0&&!_.exactHead)$.addIssue({code:N.ZodIssueCode.custom,message:"Reviews require local/remote/provider exact-head proof",path:["exactHead"]});if(_.exactHead){let T=[{ref:_.exactHead.equalityProofRef,path:["exactHead","equalityProofRef"]},..._.exactHead.ciProofBundleRefs.map((F,o)=>({ref:F,path:["exactHead","ciProofBundleRefs",o]})),..._.reviews.map((F,o)=>({ref:F.proofBundleRef,path:["reviews",o,"proofBundleRef"]}))],K=new Set,V=new Set;for(let F of T){let o=AE(F.ref);if(K.has(o))$.addIssue({code:N.ZodIssueCode.custom,message:"Exact-head equality, CI, and review proof obligations require globally unique canonical identities",path:F.path});if(K.add(o),V.has(F.ref.digest))$.addIssue({code:N.ZodIssueCode.custom,message:"Exact-head equality, CI, and review proof obligations require globally unique canonical digests",path:F.path});V.add(F.ref.digest)}}let W=new Set,z=new Set,S=new Set,L=new Set,J=new Set,R=new Set,X=new Set,G=new Set;for(let[T,K]of _.reviews.entries()){if(!o_(K.base,_.repository.baseHead))$.addIssue({code:N.ZodIssueCode.custom,message:"Review base must equal the exact canonical pull-request base",path:["reviews",T,"base"]});if(!o_(K.head,_.repository.branchHead))$.addIssue({code:N.ZodIssueCode.custom,message:"Review head must equal the exact canonical branch head",path:["reviews",T,"head"]});for(let[F,o,I_]of[[K.ref.id,W,"ref"],[K.reviewerRef.id,S,"reviewerRef"],[K.reviewRunRef.id,J,"reviewRunRef"]]){if(o.has(F))$.addIssue({code:N.ZodIssueCode.custom,message:"Review, reviewer, and review-run refs must each be unique",path:["reviews",T,I_]});o.add(F)}if(z.has(K.ref.digest))$.addIssue({code:N.ZodIssueCode.custom,message:"Review refs must resolve to distinct canonical record digests",path:["reviews",T,"ref"]});if(z.add(K.ref.digest),L.has(K.reviewerRef.digest))$.addIssue({code:N.ZodIssueCode.custom,message:"Reviewer refs must resolve to distinct canonical actor digests",path:["reviews",T,"reviewerRef"]});if(L.add(K.reviewerRef.digest),R.has(K.reviewRunRef.digest))$.addIssue({code:N.ZodIssueCode.custom,message:"Review-run refs must resolve to distinct canonical run digests",path:["reviews",T,"reviewRunRef"]});R.add(K.reviewRunRef.digest);let V=AE(K.proofBundleRef);if(X.has(V))$.addIssue({code:N.ZodIssueCode.custom,message:"Review proof bundles must have unique canonical identities",path:["reviews",T,"proofBundleRef"]});if(X.add(V),G.has(K.proofBundleRef.digest))$.addIssue({code:N.ZodIssueCode.custom,message:"Review proof bundles must have unique canonical digests",path:["reviews",T,"proofBundleRef"]});if(G.add(K.proofBundleRef.digest),K.reviewerRef.digest===_.attempt.workerRef.digest)$.addIssue({code:N.ZodIssueCode.custom,message:"Worker and reviewer identities must resolve to distinct canonical digests",path:["reviews",T,"reviewerRef"]});if(K.reviewRunRef.digest===_.attempt.runtimeRef.digest)$.addIssue({code:N.ZodIssueCode.custom,message:"Worker runtime and review run must resolve to distinct canonical digests",path:["reviews",T,"reviewRunRef"]});if(_.exactHead&&Date.parse(K.reviewedAt)Date.parse(_.merge.guard.evaluatedAt)T.verdict!=="approved"))$.addIssue({code:N.ZodIssueCode.custom,message:"Eligible merge guards require at least one review and all reviews approved",path:["merge","guard","decision"]});if(_.merge.guard.reviewRefs.length!==_.reviews.length||_.merge.guard.reviewRefs.some((T)=>!_.reviews.some((K)=>K_(T,K.ref))))$.addIssue({code:N.ZodIssueCode.custom,message:"Eligible merge guard review refs must exactly equal the projected approved review refs as a canonical set",path:["merge","guard","reviewRefs"]});for(let T of _.reviews)if(!_.merge.guard.proofBundleRefs.some((K)=>K_(K,T.proofBundleRef)))$.addIssue({code:N.ZodIssueCode.custom,message:"Eligible merge guards must bind every exact review proof bundle",path:["merge","guard","proofBundleRefs"]});if(_.exactHead&&!_.merge.guard.proofBundleRefs.some((T)=>K_(T,_.exactHead.equalityProofRef)))$.addIssue({code:N.ZodIssueCode.custom,message:"Eligible merge guards must bind the exact-head equality proof",path:["merge","guard","proofBundleRefs"]});if(_.exactHead&&_.exactHead.ciProofBundleRefs.some((T)=>!_.merge.guard.proofBundleRefs.some((K)=>K_(K,T))))$.addIssue({code:N.ZodIssueCode.custom,message:"Eligible merge guards must bind every exact-head CI proof",path:["merge","guard","proofBundleRefs"]})}}if(_.merge?.outcome){if(!K_(_.merge.outcome.guardRef,_.merge.guard.ref))$.addIssue({code:N.ZodIssueCode.custom,message:"Merge outcome must bind the exact immutable merge guard",path:["merge","outcome","guardRef"]});if(!o_(_.merge.outcome.expectedHead,_.merge.guard.expectedHead))$.addIssue({code:N.ZodIssueCode.custom,message:"Merge outcome expected head must equal the guarded expected head",path:["merge","outcome","expectedHead"]});if(!o_(_.merge.outcome.expectedBase,_.merge.guard.expectedBase))$.addIssue({code:N.ZodIssueCode.custom,message:"Merge outcome expected base must equal the guarded expected base",path:["merge","outcome","expectedBase"]});if(_.merge.guard.decision!=="consumed")$.addIssue({code:N.ZodIssueCode.custom,message:"Every merge outcome requires an explicitly consumed merge guard",path:["merge","guard","decision"]});if(Date.parse(_.merge.outcome.finishedAt)0)$.addIssue({code:N.ZodIssueCode.custom,message:`${_.state} projections cannot carry review bindings before review authority is active`,path:["reviews"]});if((W9.has(_.state)||_.state==="recovering")&&(_.merge?.guard.reviewRefs.length??0)>0)$.addIssue({code:N.ZodIssueCode.custom,message:`${_.state} projections cannot hide review bindings in a merge guard before review authority is active`,path:["merge","guard","reviewRefs"]});let B=_.merge?`${_.merge.guard.decision}:${_.merge.outcome?.status??"none"}`:"absent";if(!fk[_.state].has(B))$.addIssue({code:N.ZodIssueCode.custom,message:`State ${_.state} is incompatible with merge authority ${B}`,path:["merge"]});if(J9.has(_.state)&&!_.terminalDispositionRef)$.addIssue({code:N.ZodIssueCode.custom,message:`${_.state} projections require a durable Todos terminal-disposition owner ref`,path:["terminalDispositionRef"]});if(!J9.has(_.state)&&_.terminalDispositionRef)$.addIssue({code:N.ZodIssueCode.custom,message:`${_.state} projections cannot carry a terminal-disposition owner ref`,path:["terminalDispositionRef"]});if(_.state==="reviewing"&&_.reviews.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Reviewing projections require review refs",path:["reviews"]});if(_.state==="cancelled"&&!_.cancellation)$.addIssue({code:N.ZodIssueCode.custom,message:"Cancelled projections require preservation state",path:["cancellation"]});if(_.cancellation&&_.merge?.outcome)$.addIssue({code:N.ZodIssueCode.custom,message:"Cancellation cannot coexist with a terminal merge outcome",path:["cancellation"]});if(_.state==="recovering"&&!_.recovery)$.addIssue({code:N.ZodIssueCode.custom,message:"Recovering projections require recovery state",path:["recovery"]});if(_.state==="repairing"&&_.repair.cycle===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Repairing projections require a non-zero repair cycle",path:["repair","cycle"]});if(_.merge&&(_.merge.guard.decision==="eligible"||_.merge.guard.decision==="consumed")&&!K_(_.attempt.admissionWriterGenerationRef,_.attempt.writerGenerationRef))$.addIssue({code:N.ZodIssueCode.custom,message:"Merge eligibility requires admission from the current writer generation",path:["attempt","admissionWriterGenerationRef"]});if(_.state==="merge_ready"&&_.merge?.guard.decision!=="eligible")$.addIssue({code:N.ZodIssueCode.custom,message:"Merge-ready projections require an eligible guard",path:["merge"]});if(_.state==="merged"&&_.merge?.outcome?.status!=="merged")$.addIssue({code:N.ZodIssueCode.custom,message:"Merged projections require a merged immutable outcome",path:["merge"]});if(_.state==="closed_unmerged"&&!_.merge?.outcome?.status.match(/^(closed_unmerged|refused|head_drift|base_drift)$/))$.addIssue({code:N.ZodIssueCode.custom,message:"Closed-unmerged projections require a non-merged terminal outcome",path:["merge"]});if(_.state==="cleanup_complete"&&(!_.cleanup?.outcome||!["deleted","preserved","skipped"].includes(_.cleanup.outcome.status)))$.addIssue({code:N.ZodIssueCode.custom,message:"Cleanup-complete projections require an immutable cleanup outcome",path:["cleanup"]});if(_.state==="rolled_back"&&_.rollback?.outcome?.status!=="succeeded")$.addIssue({code:N.ZodIssueCode.custom,message:"Rolled-back projections require a successful rollback outcome",path:["rollback"]});if((_.state==="failed"||_.state==="blocked")&&_.evidenceRefs.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Failed and blocked projections require redacted evidence refs",path:["evidenceRefs"]});if(["admitted","running","handed_off","reviewing","repairing","merge_ready","recovering"].includes(_.state)&&(_.merge?.outcome||_.cancellation||_.cleanup?.outcome||_.rollback?.outcome))$.addIssue({code:N.ZodIssueCode.custom,message:"Non-terminal projections cannot carry terminal owner outcomes",path:["state"]});let Q=new Set;for(let[T,K]of _.adapterExtensions.entries()){let V=`${K.mode}:${K.schema}`;if(Q.has(V))$.addIssue({code:N.ZodIssueCode.custom,message:"Adapter extensions must be unique per local/cloud mode and schema",path:["adapterExtensions",T]});Q.add(V)}});var yk=N.object({id:N.string().min(1),at:q_,kind:N.enum(["message","tool_call","command","file_change","error","test","decision","verification","status","other"]),summary:N.string().min(1),resourceRefs:N.array(s).default([]),evidenceRefs:N.array(Y_).default([]),costEstimate:QU.optional()}).strict(),ck=P_(x.agentTrajectory).extend({actor:d$,workRunRef:s.optional(),events:N.array(yk).default([]),outcome:N.enum(["succeeded","failed","cancelled","blocked","unknown"]).default("unknown"),proofBundleRef:s.optional()}).strict(),hk="v1",nk=N.enum(["library","cli-with-store","service","saas"]),dk=["user-hosted","hasna-saas"],mk=N.enum(dk),ik=["api","sdk","mcp","cli"],d9=N.enum(ik),lk=N.enum(["supported","deferred","unsupported"]),tk=N.enum(["none","local-only","api-key","session","service-token","custom"]),uW=N.object({method:N.enum(["GET","POST","PUT","PATCH","DELETE"]),path:N.string().regex(/^\/[A-Za-z0-9_./:*-]*$/,"Endpoint paths must be absolute HTTP paths"),public:N.boolean().default(!1),description:N.string().min(1).optional()}).strict(),ok=N.object({id:N.string().min(1),kind:N.enum(["auth","storage","secret-ref","migration","health","readiness","redaction","smoke","operator","other"]),required:N.boolean().default(!0),command:N.string().min(1).optional(),evidenceRef:Y_.optional(),status:N.enum(["pending","passed","failed","blocked","deferred"]).default("pending"),summary:N.string().min(1).optional()}).strict().superRefine((_,$)=>{if((_.status==="passed"||_.status==="failed"||_.status==="blocked")&&!_.command&&!_.evidenceRef&&!_.summary)$.addIssue({code:N.ZodIssueCode.custom,message:"Terminal readiness gates require command, evidenceRef, or summary",path:["status"]})}),pk=N.object({name:N.string().min(1),kind:d9.optional(),status:lk,bin:N.string().min(1).optional(),mcpBin:N.string().min(1).optional(),authMode:tk,health:uW.optional(),readiness:uW.optional(),version:uW.optional(),apiBasePath:N.string().regex(/^\/v[0-9]+$/,"Stable API base path must be /vN").optional(),openApiPath:N.string().regex(/^\/[A-Za-z0-9_./:-]*$/).optional(),exportSubpath:N.string().regex(/^\.(?:\/[A-Za-z0-9_.-]+(?:\/[A-Za-z0-9_.-]+)*)?$/,"SDK export subpaths must be package export keys such as . or ./sdk").optional(),generatedFrom:N.string().regex(/^\/[A-Za-z0-9_./:-]*$/,"SDK generatedFrom must reference an absolute OpenAPI path").optional(),clientClassName:N.string().regex(/^[A-Za-z_$][A-Za-z0-9_$]*$/).optional(),deferReason:N.string().min(1).optional(),readinessGates:N.array(ok).default([])}).strict().superRefine((_,$)=>{if(_.status==="supported"){if(!_.kind||_.kind==="api"){if(!_.bin)$.addIssue({code:N.ZodIssueCode.custom,message:"Supported API surfaces require a serve bin",path:["bin"]});if(!_.health)$.addIssue({code:N.ZodIssueCode.custom,message:"Supported API surfaces require a health endpoint",path:["health"]});if(!_.readiness)$.addIssue({code:N.ZodIssueCode.custom,message:"Supported API surfaces require a readiness endpoint",path:["readiness"]});if(!_.version)$.addIssue({code:N.ZodIssueCode.custom,message:"Supported API surfaces require a version endpoint",path:["version"]})}if(_.kind==="cli"&&!_.bin)$.addIssue({code:N.ZodIssueCode.custom,message:"Supported CLI surfaces require a bin",path:["bin"]});if(_.kind==="mcp"&&!_.mcpBin)$.addIssue({code:N.ZodIssueCode.custom,message:"Supported MCP surfaces require an mcpBin",path:["mcpBin"]});if(_.kind==="sdk"&&!_.exportSubpath)$.addIssue({code:N.ZodIssueCode.custom,message:"Supported SDK surfaces require an exportSubpath",path:["exportSubpath"]})}if((_.status==="deferred"||_.status==="unsupported")&&!_.deferReason)$.addIssue({code:N.ZodIssueCode.custom,message:"Deferred or unsupported service surfaces require a deferReason",path:["deferReason"]});if(_.health&&_.health.path!=="/health")$.addIssue({code:N.ZodIssueCode.custom,message:"Health endpoint must be /health",path:["health","path"]});if(_.health&&_.health.method!=="GET")$.addIssue({code:N.ZodIssueCode.custom,message:"Health endpoint must use GET",path:["health","method"]});if(_.readiness&&_.readiness.path!=="/ready")$.addIssue({code:N.ZodIssueCode.custom,message:"Readiness endpoint must be /ready",path:["readiness","path"]});if(_.readiness&&_.readiness.method!=="GET")$.addIssue({code:N.ZodIssueCode.custom,message:"Readiness endpoint must use GET",path:["readiness","method"]});if(_.version&&_.version.path!=="/version")$.addIssue({code:N.ZodIssueCode.custom,message:"Version endpoint must be /version",path:["version","path"]});if(_.version&&_.version.method!=="GET")$.addIssue({code:N.ZodIssueCode.custom,message:"Version endpoint must use GET",path:["version","method"]})}),ek=["sqlite","postgres"],m9=N.enum(ek),i9=["sqlite","postgres"],ak=N.enum(i9),hW=["postgres"],sk=N.object({kind:d9,reason:N.string().trim().min(1)}).strict(),eW=500,aW=200,OE=(_)=>N.string().trim().min(1).max(_).regex(/^[^\u0000-\u001f\u007f]+$/,"Waiver text must not contain control characters"),_C=["domain","host","ip","email"],$C=N.object({kind:N.enum(_C),reason:OE(eW),reviewedBy:OE(aW),expiresAt:q_}).strict(),gC=N.object({engine:N.enum(hW),reason:OE(eW),reviewedBy:OE(aW).optional(),expiresAt:q_.optional()}).strict();function DC(_){if(_.class!=="cli-with-store")return`storage waivers are not permitted for class ${_.class}`;if(_.bins.includes(`${_.name}-serve`))return`storage waivers are not permitted for a service-capable cli-with-store repo shipping ${_.name}-serve`;if(_.storageMode==="postgres")return"storage waivers are not permitted while storage.mode is postgres, which reads and writes PostgreSQL directly";if(_.hosting.includes("hasna-saas"))return"storage waivers are not permitted for a repo declaring the hasna-saas product story";return null}var UC=N.object({conformance:N.object({waivedSurfaces:N.array(sk).default([]),waiverProfile:N.literal("non-node-monorepo").optional(),waivedStorageEngines:N.array(gC).default([]),waivedAssetInventories:N.array($C).default([])}).catchall(N.unknown()).optional(),release:N.object({artifactScan:N.object({script:N.string().trim().min(1)}).strict().optional()}).catchall(N.unknown()).optional()}).catchall(N.unknown()),IC=N.string().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,"App names must be lowercase dashed identifiers"),jC=["","-cli","-mcp","-serve","-worker","-runner","-daemon","-migrate","-doctor"];function EC(_){return jC.map(($)=>`${_}${$}`)}function z9(_){return`hasna/oss/${_}/database-url`}var NC=N.object({mode:m9,engines:N.array(ak).min(1).optional(),envPrefix:N.string().regex(/^HASNA_[A-Z][A-Z0-9]*_$/).optional(),aliasEnvPrefix:N.string().regex(/^[A-Z][A-Z0-9]*_$/).optional(),databaseUrlSecretRef:N.string().regex(/^hasna\/oss\/[a-z0-9-]+\/database-url$/).optional(),sqlitePath:N.string().min(1).endsWith(".db","storage.sqlitePath must end in .db").optional(),pgTestGate:N.object({envVar:N.string().regex(/^[A-Z][A-Z0-9_]*_TEST_DATABASE_URL$/),command:N.string().trim().min(1)}).strict().optional()}).strict().superRefine((_,$)=>{if(_.engines&&new Set(_.engines).size!==_.engines.length)$.addIssue({code:N.ZodIssueCode.custom,message:"storage.engines must not contain duplicates",path:["engines"]});if(_.engines?.includes("postgres")&&!_.envPrefix)$.addIssue({code:N.ZodIssueCode.custom,message:"storage.engines containing postgres requires envPrefix for the HASNA__DATABASE_URL contract",path:["envPrefix"]})}),l9=N.enum(["0600"]),t9=N.enum(["0700"]),o9=N.enum([".hasna",".codewith"]),AC=N.enum(["directory","file","sqlite_db","sqlite_wal","sqlite_shm","backup","export","report","tmp","log","session","snapshot"]),U0=J$.refine((_)=>!_.startsWith("~"),"Local store path patterns must be relative to their declared root"),OC=N.object({id:N.string().min(1),source:N.enum(["sqlite","manifest","index","runtime","package_adapter"]),table:N.string().min(1).optional(),column:N.string().min(1).optional(),description:N.string().min(1),required:N.boolean().default(!0)}).strict(),PC=N.object({safeWhen:N.enum(["exclusive_access","offline_only","never"]),operations:N.array(N.enum(["wal_checkpoint_truncate","incremental_vacuum","optimize","vacuum"])).default([])}).strict().superRefine((_,$)=>{if(_.safeWhen==="never"&&_.operations.length>0)$.addIssue({code:N.ZodIssueCode.custom,message:"sqliteMaintenance.safeWhen=never cannot declare operations",path:["operations"]})}),SC=N.object({id:N.string().min(1),description:N.string().min(1),ttlDays:N.number().int().nonnegative().optional(),artifactClasses:N.array(AC).min(1),allowlistGlobs:N.array(U0).min(1),activeRecordExclusions:N.array(OC).default([]),sqliteMaintenance:PC.optional()}).strict(),LC=N.object({storeId:N.string().regex(/^[a-z][a-z0-9-]*$/),packageName:N.string().min(1),displayName:N.string().min(1),root:o9,relativePath:U0,directoryMode:t9.default("0700"),fileMode:l9.default("0600"),sqliteDatabaseGlobs:N.array(U0).default([]),sensitiveFileGlobs:N.array(U0).default([]),backupGlobs:N.array(U0).default([]),exportGlobs:N.array(U0).default([]),retentionAdapters:N.array(SC).default([]),notes:N.array(N.string().min(1)).default([])}).strict().superRefine((_,$)=>{if(_.relativePath.includes("*"))$.addIssue({code:N.ZodIssueCode.custom,message:"store relativePath must be a concrete directory; use glob fields for files",path:["relativePath"]});let g=new Set;for(let[U,D]of _.retentionAdapters.entries()){if(g.has(D.id))$.addIssue({code:N.ZodIssueCode.custom,message:"retention adapter ids must be unique within a store",path:["retentionAdapters",U,"id"]});g.add(D.id)}}),p9=P_(x.secureLocalStorePolicy).extend({version:N.string().min(1),scope:N.array(o9).min(1),defaults:N.object({directoryMode:t9.default("0700"),fileMode:l9.default("0600"),dryRunDefault:N.literal(!0),requireExplicitApply:N.literal(!0),includeSqliteSidecars:N.literal(!0),redactedEvidenceOnly:N.literal(!0)}).strict(),stores:N.array(LC).min(1),lifecycle:N.object({retentionDryRunDefault:N.literal(!0),requireActiveRecordExclusionProof:N.literal(!0),requireArtifactAllowlist:N.literal(!0),sqliteMaintenanceRequiresExclusiveAccess:N.literal(!0)}).strict(),warnings:N.array(N.string().min(1)).default([])}).strict().superRefine((_,$)=>{let g=new Set;for(let[U,D]of _.stores.entries()){if(g.has(D.storeId))$.addIssue({code:N.ZodIssueCode.custom,message:"store ids must be unique",path:["stores",U,"storeId"]});if(g.add(D.storeId),!_.scope.includes(D.root))$.addIssue({code:N.ZodIssueCode.custom,message:"store root must be listed in policy scope",path:["stores",U,"root"]})}}),WC=N.object({$schema:N.string().min(1).optional(),schema:N.literal(x.serviceContract),name:IC,class:nk,contractVersion:N.literal(hk),kitVersion:N.string().min(1),description:N.string().min(1).optional(),bins:N.array(N.string().min(1)).default([]),storage:NC.optional(),hosting:N.array(mk).min(1).default(["user-hosted"]),serviceSurfaces:N.array(pk).default([]),metadata:UC.optional()}).strict().superRefine((_,$)=>{if(new Set(_.hosting).size!==_.hosting.length)$.addIssue({code:N.ZodIssueCode.custom,message:"hosting must not contain duplicates",path:["hosting"]});let g=new Set(EC(_.name)),U=new Set;for(let[O,P]of _.bins.entries()){if(U.has(P))$.addIssue({code:N.ZodIssueCode.custom,message:"Duplicate bin declaration",path:["bins",O]});if(U.add(P),!g.has(P))$.addIssue({code:N.ZodIssueCode.custom,message:`Bin "${P}" is not allowlisted for app "${_.name}"; allowed: ${[...g].join(", ")}`,path:["bins",O]})}let D=(O)=>U.has(`${_.name}${O}`);if(_.storage){let O=_.name.toUpperCase().replace(/-/g,"_");if(_.storage.envPrefix&&_.storage.envPrefix!==`HASNA_${O}_`)$.addIssue({code:N.ZodIssueCode.custom,message:`storage.envPrefix must be HASNA_${O}_`,path:["storage","envPrefix"]});if(_.storage.databaseUrlSecretRef&&_.storage.databaseUrlSecretRef!==z9(_.name))$.addIssue({code:N.ZodIssueCode.custom,message:`storage.databaseUrlSecretRef must be ${z9(_.name)}`,path:["storage","databaseUrlSecretRef"]})}if(_.class==="library"){if(_.storage)$.addIssue({code:N.ZodIssueCode.custom,message:"library repos must not declare storage",path:["storage"]});if(D("-serve")||D("-mcp"))$.addIssue({code:N.ZodIssueCode.custom,message:"library repos must not ship a -serve or -mcp bin",path:["bins"]})}if(_.class==="cli-with-store"){if(!_.storage)$.addIssue({code:N.ZodIssueCode.custom,message:"cli-with-store repos must declare storage",path:["storage"]});else{if(_.storage.mode==="sqlite"&&!_.storage.sqlitePath)$.addIssue({code:N.ZodIssueCode.custom,message:"sqlite cli-with-store storage requires sqlitePath (~/.hasna//.db)",path:["storage","sqlitePath"]});if(_.storage.engines){let O=new Set(_.storage.engines),P=_.metadata?.conformance?.waivedStorageEngines??[],W=DC({class:_.class,name:_.name,bins:_.bins,hosting:_.hosting,storageMode:_.storage.mode}),z=new Set(W?[]:P.map((L)=>L.engine)),S=i9.filter((L)=>!O.has(L)&&!z.has(L));if(S.length>0){let L=W&&P.length>0?`; declared waiver ignored: ${W}`:"";$.addIssue({code:N.ZodIssueCode.custom,message:`cli-with-store storage.engines must declare both sqlite and postgres unless the engine carries a metadata.conformance.waivedStorageEngines waiver; missing: ${S.join(", ")}${L}`,path:["storage","engines"]})}}}if(!U.has(_.name))$.addIssue({code:N.ZodIssueCode.custom,message:`cli-with-store repos must ship the "${_.name}" bin`,path:["bins"]})}if(_.class==="service"){if(!_.storage)$.addIssue({code:N.ZodIssueCode.custom,message:"service repos must declare storage",path:["storage"]});else if(_.storage.engines&&(!_.storage.engines.includes("sqlite")||!_.storage.engines.includes("postgres")))$.addIssue({code:N.ZodIssueCode.custom,message:"service storage.engines must declare both sqlite and postgres",path:["storage","engines"]});if(!D("-serve"))$.addIssue({code:N.ZodIssueCode.custom,message:`service repos must ship the "${_.name}-serve" bin`,path:["bins"]});if(_.serviceSurfaces.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"service repos must declare at least one service surface",path:["serviceSurfaces"]})}if(_.class==="saas"){if(!_.storage)$.addIssue({code:N.ZodIssueCode.custom,message:"saas repos must declare storage",path:["storage"]});else{if(_.storage.mode!=="postgres")$.addIssue({code:N.ZodIssueCode.custom,message:"saas repos must use the postgres storage backend",path:["storage","mode"]});if(!_.storage.envPrefix)$.addIssue({code:N.ZodIssueCode.custom,message:"saas storage requires envPrefix for the public DATABASE_URL contract",path:["storage","envPrefix"]})}if(!D("-serve"))$.addIssue({code:N.ZodIssueCode.custom,message:`saas repos must ship the "${_.name}-serve" bin`,path:["bins"]});if(_.serviceSurfaces.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"saas repos must declare at least one service surface",path:["serviceSurfaces"]})}for(let[O,P]of _.serviceSurfaces.entries()){if(P.bin&&!U.has(P.bin))$.addIssue({code:N.ZodIssueCode.custom,message:`Service surface bin "${P.bin}" must be declared in bins`,path:["serviceSurfaces",O,"bin"]});if(P.mcpBin&&!U.has(P.mcpBin))$.addIssue({code:N.ZodIssueCode.custom,message:`Service surface MCP bin "${P.mcpBin}" must be declared in bins`,path:["serviceSurfaces",O,"mcpBin"]})}let I=_.metadata?.conformance?.waivedSurfaces??[],j=new Set;for(let[O,P]of I.entries()){if(j.has(P.kind))$.addIssue({code:N.ZodIssueCode.custom,message:`Duplicate conformance waiver for ${P.kind}`,path:["metadata","conformance","waivedSurfaces",O,"kind"]});j.add(P.kind)}let E=_.metadata?.conformance?.waivedStorageEngines??[],A=new Set;for(let[O,P]of E.entries()){if(A.has(P.engine))$.addIssue({code:N.ZodIssueCode.custom,message:`Duplicate storage-engine waiver for ${P.engine}`,path:["metadata","conformance","waivedStorageEngines",O,"engine"]});A.add(P.engine)}}),Md=N.object({status:N.enum(["ok","degraded","unavailable"]),version:N.string().min(1),mode:m9}).strict(),Zd=N.object({ready:N.boolean(),reason:N.string().min(1).optional()}).strict(),Hd=N.object({version:N.string().min(1)}).strict(),JC=N.enum(["info","notice","breaking","critical"]),zC=N.string().regex(/^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*){1,3}$/,"Comms event types must be 2-4 lowercase dot-separated segments (..)"),RC=["FREEZE","UNFREEZE","BREAKING","CUTOVER","POLICY","RELEASE"],GC=N.enum(RC);var XC=N.enum(["fleet","package","machine"]),e9=P_(x.commsEventEnvelope).extend({type:zC,severity:JC,scope:XC,summary:N.string().min(1).optional(),source:d$.optional(),affected_packages:N.array(t).default([]),affected_machines:N.array(t).default([]),action_required:N.boolean().default(!1),ack_by:q_.optional(),dedupe_key:t,resourceRefs:N.array(s).default([]),evidenceRefs:N.array(Y_).default([])}).strict().superRefine((_,$)=>{if(_.scope==="package"&&_.affected_packages.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Package-scoped comms events require affected_packages",path:["affected_packages"]});if(_.scope==="machine"&&_.affected_machines.length===0)$.addIssue({code:N.ZodIssueCode.custom,message:"Machine-scoped comms events require affected_machines",path:["affected_machines"]});if(_.ack_by&&!_.action_required)$.addIssue({code:N.ZodIssueCode.custom,message:"Comms events with an ack_by deadline require action_required",path:["action_required"]});if(_.type==="fleet.freeze"||_.type==="fleet.unfreeze"){if(_.severity!=="critical")$.addIssue({code:N.ZodIssueCode.custom,message:`${_.type} events are always critical`,path:["severity"]});if(_.scope!=="fleet")$.addIssue({code:N.ZodIssueCode.custom,message:`${_.type} events are always fleet-scoped`,path:["scope"]});if(!_.action_required)$.addIssue({code:N.ZodIssueCode.custom,message:`${_.type} events require action_required`,path:["action_required"]})}}),YC=N.enum(["fleet","package","product","loop-lane","initiative","personal"]),QC=N.enum(["quiet","work","firehose"]),TC=t.refine((_)=>/^(?:\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?Z)?|gate:[0-9a-f][0-9a-f-]{7,35})$/.test(_),"until must be an ISO date (YYYY-MM-DD), a UTC timestamp, or a gate id (gate:)"),KC=P_(x.commsChannelMetadata).extend({class:YC,noise:QC.optional(),owner:t.optional(),until:TC.optional(),successor:t.optional()}).strict().superRefine((_,$)=>{if(_.class==="initiative"){if(!_.owner)$.addIssue({code:N.ZodIssueCode.custom,message:"Initiative channels require an owner",path:["owner"]});if(!_.until)$.addIssue({code:N.ZodIssueCode.custom,message:"Initiative channels require an until horizon (date or gate id)",path:["until"]})}}),R9={FREEZE:{defaultSeverity:"critical",allowedSeverities:["critical"],requiredEventType:"fleet.freeze"},UNFREEZE:{defaultSeverity:"critical",allowedSeverities:["critical"],requiredEventType:"fleet.unfreeze"},BREAKING:{defaultSeverity:"breaking",allowedSeverities:["breaking"],requiredEventType:null},CUTOVER:{defaultSeverity:"notice",allowedSeverities:["notice","breaking"],requiredEventType:null},POLICY:{defaultSeverity:"breaking",allowedSeverities:["notice","breaking"],requiredEventType:null},RELEASE:{defaultSeverity:"info",allowedSeverities:["info","notice"],requiredEventType:null}},qC=P_(x.commsMessageMetadata).extend({tag:GC,envelope:e9}).strict().superRefine((_,$)=>{let g=R9[_.tag];if(!g.allowedSeverities.includes(_.envelope.severity))$.addIssue({code:N.ZodIssueCode.custom,message:`[${_.tag}] posts allow severities ${g.allowedSeverities.join(", ")}`,path:["envelope","severity"]});if(g.requiredEventType&&_.envelope.type!==g.requiredEventType)$.addIssue({code:N.ZodIssueCode.custom,message:`[${_.tag}] posts require event type ${g.requiredEventType}`,path:["envelope","type"]});for(let[U,D]of Object.entries(R9))if(D.requiredEventType===_.envelope.type&&_.tag!==U)$.addIssue({code:N.ZodIssueCode.custom,message:`${_.envelope.type} events must use the [${U}] tag`,path:["tag"]})});var BC={[x.actorRef]:pZ,[x.resourceRef]:eZ,[x.evidenceRef]:sZ,[x.workRun]:Ak,[x.taskToPrProjection]:xk,[x.decisionEnvelope]:H9,[x.costEstimate]:QU,[x.capabilityCard]:$H,[x.providerLiveModeStandard]:EH,[x.contextPack]:k9,[x.integrationRef]:C9,[x.projectManifest]:SH,[x.projectPanel]:v9,[x.projectSnapshot]:TH,[x.renderManifest]:zH,[x.agentTrajectory]:ck,[x.validationPlan]:KH,[x.proofBundle]:Nk,[x.scaffoldManifest]:MH,[x.scaffoldInstallRecord]:HH,[x.appCloudManifest]:f9,[x.noCloudEvidencePack]:jk,[x.secureLocalStorePolicy]:p9,[x.serviceContract]:WC,[x.commsEventEnvelope]:e9,[x.commsChannelMetadata]:KC,[x.commsMessageMetadata]:qC,[x.app]:yH,[x.release]:hH,[x.rolloutRecord]:mH,[x.announcement]:oH,[x.audience]:$k};class a9 extends Error{schemaId;issues;constructor(_,$){super(`Contract validation failed for ${_}`);this.name="ContractValidationError",this.schemaId=_,this.issues=$}}function s9(_,$){let U=BC[_].safeParse($);if(!U.success)throw new a9(_,U.error.issues);return U.data}var kd=String.raw`(?:^|[^\w$])(?:_*(?:import|require)|createRequire|Module\s*\.\s*_load)`;var sW=[{pattern:"@hasna/cloud",kind:"module",message:"Shared @hasna/cloud runtime reference is forbidden"},{pattern:"open-cloud",kind:"module",message:"Shared open-cloud runtime reference is forbidden"},{pattern:"cloud-mcp",kind:"module",message:"Legacy cloud-mcp runtime surface is forbidden"},{pattern:"registerCloudTools",kind:"symbol",message:"Legacy registerCloudTools runtime surface is forbidden"},{pattern:"registerCloudCommands",kind:"symbol",message:"Legacy registerCloudCommands runtime surface is forbidden"},{pattern:".hasna/cloud",kind:"config",checkKind:"runtime_config",message:"Legacy .hasna/cloud runtime config is forbidden"},{pattern:"HASNA_CLOUD_",kind:"config",message:"Shared HASNA_CLOUD_* runtime config is forbidden"},{pattern:"HASNA_RDS_PASSWORD",kind:"config",message:"Legacy shared RDS credential config is forbidden"}],Cd=sW.filter((_)=>("checkKind"in _)),VC=sW.filter((_)=>_.kind==="module"),vd=[...new Set([...jE,...VC.map((_)=>_.pattern)])],wd=sW.filter((_)=>_.kind==="config");var G9="^[^\\u0000-\\u001f\\u007f]*$",ud={$schema:"http://json-schema.org/draft-07/schema#",$id:"https://github.com/hasna/contracts/schema/hasna.service_contract.v1.json",title:"Hasna Service Contract v1",description:"Repo self-description (hasna.contract.json) for the Hasna Service Contract v1. Hosting story, product surfaces, and storage capabilities are separate declarations; the storage backend (sqlite | postgres) is the only runtime switch.",type:"object",additionalProperties:!1,required:["schema","name","class","contractVersion","kitVersion"],allOf:[{if:{required:["class"],properties:{class:{const:"saas"}}},then:{required:["storage"],properties:{storage:{required:["mode","envPrefix"],properties:{mode:{const:"postgres"}}}}}}],properties:{$schema:{type:"string",description:"Optional editor hint pointing at this JSON Schema."},schema:{const:x.serviceContract},name:{type:"string",pattern:"^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$",description:"Lowercase dashed app short-name, e.g. todos, mailery, loops."},class:{enum:["library","cli-with-store","service","saas"]},contractVersion:{const:"v1"},kitVersion:{type:"string",minLength:1,description:"Version of @hasna/contracts (the contract kit) the repo tracks."},description:{type:"string",minLength:1},bins:{type:"array",items:{type:"string",minLength:1},description:"Declared bins. Allowlisted: , -cli, -mcp, -serve, -worker, -runner, -daemon, -migrate, -doctor."},hosting:{type:"array",items:{enum:["user-hosted","hasna-saas"]},minItems:1,uniqueItems:!0,description:"Customer-facing product stories. Public OSS cores include user-hosted; add hasna-saas only when a managed control plane exists."},serviceSurfaces:{type:"array",items:{type:"object",additionalProperties:!1,required:["name","status","authMode"],allOf:[{if:{required:["status"],properties:{status:{const:"supported"},kind:{const:"api"}}},then:{required:["bin","health","readiness","version"]}}],properties:{name:{type:"string",minLength:1},kind:{enum:["api","sdk","mcp","cli"]},status:{enum:["supported","deferred","unsupported"]},bin:{type:"string",minLength:1},mcpBin:{type:"string",minLength:1},authMode:{enum:["none","local-only","api-key","session","service-token","custom"]},health:{type:"object",additionalProperties:!1,required:["method","path"],properties:{method:{const:"GET"},path:{type:"string",pattern:"^/[A-Za-z0-9_./:*-]*$"},public:{type:"boolean"},description:{type:"string",minLength:1}}},readiness:{type:"object",additionalProperties:!1,required:["method","path"],properties:{method:{const:"GET"},path:{type:"string",pattern:"^/[A-Za-z0-9_./:*-]*$"},public:{type:"boolean"},description:{type:"string",minLength:1}}},version:{type:"object",additionalProperties:!1,required:["method","path"],properties:{method:{const:"GET"},path:{type:"string",pattern:"^/[A-Za-z0-9_./:*-]*$"},public:{type:"boolean"},description:{type:"string",minLength:1}}},apiBasePath:{type:"string",pattern:"^/v[0-9]+$"},openApiPath:{type:"string",pattern:"^/[A-Za-z0-9_./:-]*$"},exportSubpath:{type:"string",pattern:"^\\.(?:\\/[A-Za-z0-9_.-]+(?:\\/[A-Za-z0-9_.-]+)*)?$",description:"SDK package export key such as . or ./sdk."},generatedFrom:{type:"string",pattern:"^/[A-Za-z0-9_./:-]*$",description:"OpenAPI path used to generate the SDK."},clientClassName:{type:"string",pattern:"^[A-Za-z_$][A-Za-z0-9_$]*$"},deferReason:{type:"string",minLength:1},readinessGates:{type:"array",items:{type:"object",additionalProperties:!1,required:["id","kind"],properties:{id:{type:"string",minLength:1},kind:{enum:["auth","storage","secret-ref","migration","health","readiness","redaction","smoke","operator","other"]},required:{type:"boolean"},command:{type:"string",minLength:1},evidenceRef:{type:"object"},status:{enum:["pending","passed","failed","blocked","deferred"]},summary:{type:"string",minLength:1}}}}}},description:"Declared API, SDK, MCP, and CLI product surfaces. Legacy entries without kind remain parseable; new manifests declare kind explicitly."},storage:{type:"object",additionalProperties:!1,required:["mode"],properties:{mode:{enum:["sqlite","postgres"],description:"Active data backend. sqlite|postgres ONLY \u2014 the single runtime switch."},engines:{type:"array",items:{enum:["sqlite","postgres"]},minItems:1,uniqueItems:!0,description:"Supported storage engines; capability metadata independent of the active backend."},envPrefix:{type:"string",pattern:"^HASNA_[A-Z][A-Z0-9]*_$",description:"Primary env prefix, e.g. HASNA_TODOS_."},aliasEnvPrefix:{type:"string",pattern:"^[A-Z][A-Z0-9]*_$",description:"Optional short alias env prefix, e.g. TODOS_."},databaseUrlSecretRef:{type:"string",pattern:"^hasna/oss/[a-z0-9-]+/database-url$",description:"Legacy/private-tier database secret ref. Public conformance rejects this field."},sqlitePath:{type:"string",pattern:"\\.db$",description:"Local sqlite path (~/.hasna//.db)."},pgTestGate:{type:"object",additionalProperties:!1,required:["envVar","command"],properties:{envVar:{type:"string",pattern:"^[A-Z][A-Z0-9_]*_TEST_DATABASE_URL$"},command:{type:"string",minLength:1}},description:"Environment-gated live PostgreSQL test command."}}},metadata:{type:"object",additionalProperties:!0,properties:{conformance:{type:"object",additionalProperties:!0,properties:{waiverProfile:{const:"non-node-monorepo",description:"Explicit surface-waiver eligibility for exceptional non-Node monorepos. Libraries are eligible for API/MCP waivers without this profile."},waivedSurfaces:{type:"array",uniqueItems:!0,items:{type:"object",additionalProperties:!1,required:["kind","reason"],properties:{kind:{enum:["api","sdk","mcp","cli"]},reason:{type:"string",minLength:1}}}},waivedStorageEngines:{type:"array",uniqueItems:!0,maxItems:hW.length,items:{type:"object",additionalProperties:!1,required:["engine","reason"],properties:{engine:{enum:[...hW]},reason:{type:"string",minLength:1,maxLength:eW,allOf:[{pattern:"\\S"},{pattern:G9}]},reviewedBy:{type:"string",minLength:1,maxLength:aW,allOf:[{pattern:"\\S"},{pattern:G9}]},expiresAt:{type:"string",format:"date-time"}}},description:"Explicit storage-engine exceptions, at most one per engine. Only a CLI-only cli-with-store repo (no -serve bin, storage.mode sqlite, no hasna-saas story) may waive postgres; sqlite is never waivable, expiresAt is a UTC RFC 3339 timestamp, and conformance stops honouring a waiver once it has passed."}}}}}}};var FC="2026-07-06";function c$(_,$,g,U,D,I=[],j){return{id:_,description:$,ttlDays:g,artifactClasses:U,allowlistGlobs:D,activeRecordExclusions:I.map((E)=>({...E,required:E.required??!0})),sqliteMaintenance:j}}var fd=p9.parse({schema:x.secureLocalStorePolicy,id:"hasna-secure-local-store-defaults",createdAt:"2026-07-06T00:00:00.000Z",version:FC,scope:[".hasna",".codewith"],defaults:{directoryMode:"0700",fileMode:"0600",dryRunDefault:!0,requireExplicitApply:!0,includeSqliteSidecars:!0,redactedEvidenceOnly:!0},lifecycle:{retentionDryRunDefault:!0,requireActiveRecordExclusionProof:!0,requireArtifactAllowlist:!0,sqliteMaintenanceRequiresExclusiveAccess:!0},stores:[{storeId:"codewith",packageName:"codewith",displayName:"Codewith native state",root:".codewith",relativePath:".",sqliteDatabaseGlobs:["logs_*.sqlite","state_*.sqlite","goals_*.sqlite"],sensitiveFileGlobs:["sessions/**/*.jsonl","shell_snapshots/**/*","logs*.sqlite","state*.sqlite","goals*.sqlite"],backupGlobs:["backups/**/*"],exportGlobs:["exports/**/*"],retentionAdapters:[c$("codewith-session-snapshots","Codewith sessions, shell snapshots, logs, monitor output, mailbox payloads, and scheduler state need package-owned redaction before retention applies.",30,["session","snapshot","log"],["sessions/**/*.jsonl","shell_snapshots/**/*","logs/**/*"],[{id:"codewith-active-session",source:"package_adapter",description:"Exclude currently active sessions, leased schedules, monitors, pending interactions, and active goal rows."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})],notes:["Includes native .codewith DBs and transcript-like artifacts; redaction-before-persistence remains package-owned."]},{storeId:"todos",packageName:"@hasna/todos",displayName:"Todos",root:".hasna",relativePath:"todos",sqliteDatabaseGlobs:["todos.db"],sensitiveFileGlobs:["todos.db","todos.db-wal","todos.db-shm","exports/**/*","backups/**/*"],backupGlobs:["backups/**/*","*.bak","*.backup"],exportGlobs:["exports/**/*","*.jsonl","*.csv"],retentionAdapters:[c$("todos-exports-backups","Todos backups and exports are deleted only after package redaction and active task/evidence references are excluded.",14,["backup","export"],["backups/**/*","exports/**/*"],[{id:"todos-active-evidence",source:"sqlite",table:"task_files",column:"path",description:"Exclude files still referenced by active tasks, verification evidence, task comments, or handoff records."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"conversations",packageName:"@hasna/conversations",displayName:"Conversations",root:".hasna",relativePath:"conversations",sqliteDatabaseGlobs:["messages.db"],sensitiveFileGlobs:["messages.db","messages.db-wal","messages.db-shm","exports/**/*","attachments/**/*"],backupGlobs:["backups/**/*","*.bak"],exportGlobs:["exports/**/*","*.json","*.csv"],retentionAdapters:[c$("conversations-exports-attachments","Conversation exports and attachments require message-id redaction and active attachment reference checks before deletion.",14,["export","backup"],["exports/**/*","backups/**/*","attachments/**/*"],[{id:"conversations-active-attachments",source:"sqlite",table:"messages",column:"attachments",description:"Exclude attachments still referenced by retained messages or audited redaction records."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"mementos",packageName:"@hasna/mementos",displayName:"Mementos",root:".hasna",relativePath:"mementos",sqliteDatabaseGlobs:["mementos.db"],sensitiveFileGlobs:["mementos.db","mementos.db-wal","mementos.db-shm","exports/**/*","backups/**/*"],backupGlobs:["backups/**/*","*.bak"],exportGlobs:["exports/**/*"],retentionAdapters:[c$("mementos-audit-search-history","Mementos retention must preserve active memory versions while compacting audit/search surfaces through package-owned adapters.",30,["backup","export","log"],["backups/**/*","exports/**/*","audit/**/*"],[{id:"mementos-active-memory-versions",source:"sqlite",table:"memory_versions",column:"memory_id",description:"Exclude current memory versions and audit entries required for provenance."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"knowledge",packageName:"@hasna/knowledge",displayName:"Knowledge",root:".hasna",relativePath:"knowledge",sqliteDatabaseGlobs:["knowledge.db"],sensitiveFileGlobs:["knowledge.db","knowledge.db-wal","knowledge.db-shm","db.json","migration-exports/**/*","*.bak"],backupGlobs:["*.bak","backups/**/*","*.pre-cloud-*"],exportGlobs:["migration-exports/**/*","exports/**/*","*.jsonl"],retentionAdapters:[c$("knowledge-migrations-exports","Knowledge migration exports and pre-cloud backups require replacement, encryption, or redaction before retention deletion.",14,["backup","export"],["migration-exports/**/*","exports/**/*","*.bak","*.pre-cloud-*"],[{id:"knowledge-current-catalog",source:"manifest",description:"Exclude files referenced by the active catalog or migration ledger."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"projects",packageName:"@hasna/projects",displayName:"Projects",root:".hasna",relativePath:"projects",sqliteDatabaseGlobs:["projects.db","data/*/project.db"],sensitiveFileGlobs:["projects.db","projects.db-wal","projects.db-shm","data/*/project.db","data/*/project.db-wal","data/*/project.db-shm","reports/**/*"],backupGlobs:["backups/**/*","data/*/backups/**/*"],exportGlobs:["reports/**/*","exports/**/*"],retentionAdapters:[c$("projects-reports-workspaces","Project reports, dashboards, workspaces, and per-project DBs need active workspace/location references before cleanup.",30,["backup","export","report","tmp"],["backups/**/*","reports/**/*","workspaces/**/*","data/*/backups/**/*"],[{id:"projects-active-workspaces",source:"sqlite",table:"workspaces",column:"primary_path",description:"Exclude active workspace paths, locations, linked reports, and project store artifacts."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"browser",packageName:"@hasna/browser",displayName:"Browser",root:".hasna",relativePath:"browser",sqliteDatabaseGlobs:["browser.db"],sensitiveFileGlobs:["browser.db","browser.db-wal","browser.db-shm","profiles/**/cookies.json","states/**/*.json","auth/**/*"],backupGlobs:["backups/**/*"],exportGlobs:["exports/**/*","traces/**/*","har/**/*"],retentionAdapters:[c$("browser-auth-traces","Browser state, trace, HAR, and auth artifacts require session invalidation or redaction before deletion.",7,["backup","export","session","snapshot"],["profiles/**/*","states/**/*","traces/**/*","har/**/*","exports/**/*"],[{id:"browser-active-profiles",source:"sqlite",table:"sessions",column:"profile_path",description:"Exclude profiles, cookies, and storage state used by active browser sessions."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"terminal",packageName:"@hasna/terminal",displayName:"Terminal",root:".hasna",relativePath:"terminal",sqliteDatabaseGlobs:["sessions.db"],sensitiveFileGlobs:["sessions.db","sessions.db-wal","sessions.db-shm","exports/**/*"],backupGlobs:["backups/**/*"],exportGlobs:["exports/**/*"],retentionAdapters:[c$("terminal-sessions","Terminal sessions and interactions need active session exclusion plus command-output redaction before retention.",30,["backup","export","session","log"],["backups/**/*","exports/**/*","sessions/**/*"],[{id:"terminal-active-sessions",source:"sqlite",table:"sessions",column:"id",description:"Exclude active terminal session records and any linked interaction artifacts."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"logs",packageName:"@hasna/logs",displayName:"Logs",root:".hasna",relativePath:"logs",sqliteDatabaseGlobs:["logs.db"],sensitiveFileGlobs:["logs.db","logs.db-wal","logs.db-shm","exports/**/*"],backupGlobs:["backups/**/*"],exportGlobs:["exports/**/*"],retentionAdapters:[c$("logs-retention","Logs require redaction before compaction and must preserve active incident/evidence references.",14,["backup","export","log"],["backups/**/*","exports/**/*","*.log","logs/**/*"],[{id:"logs-active-evidence",source:"sqlite",table:"logs",column:"id",description:"Exclude log rows or files linked to active incidents, tasks, or proof bundles."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]},{storeId:"loops",packageName:"@hasna/loops",displayName:"OpenLoops",root:".hasna",relativePath:"loops",sqliteDatabaseGlobs:["loops.db","state.db","*.sqlite"],sensitiveFileGlobs:["*.db","*.sqlite","*.db-wal","*.db-shm","reports/**/*","tmp/**/*","runs/**/*"],backupGlobs:["backups/**/*","tmp/**/*"],exportGlobs:["reports/**/*","runs/**/*","exports/**/*"],retentionAdapters:[c$("loops-reports-tmp","Loop reports, tmp files, workflow artifacts, and command output need run-state checks and redaction before retention deletion.",14,["backup","export","report","tmp","log"],["reports/**/*","tmp/**/*","runs/**/*","exports/**/*"],[{id:"loops-active-runs",source:"sqlite",table:"loop_runs",column:"id",description:"Exclude active, leased, recently failed, or evidence-linked loop and workflow run artifacts."}],{safeWhen:"exclusive_access",operations:["wal_checkpoint_truncate","optimize"]})]}],warnings:["This package publishes declarations only; each owning package implements and verifies its own local-store lifecycle.","Retention and redaction evidence remain package-owned and must preserve active-record exclusions.","SQLite maintenance is descriptive policy metadata only and is never executed by @hasna/contracts."]});var rC=64,xd=new RegExp(`^[A-Za-z0-9][A-Za-z0-9._-]{0,${rC-1}}$`),g0="[0-9a-fA-F]",yd=new RegExp(`^\\{?(?:${g0}{8}-${g0}{4}-${g0}{4}-${g0}{4}-${g0}{12}|${g0}{32})\\}?$`);var bC=/^hasna_([a-z][a-z0-9-]*)_([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)$/;var cd=new RegExp(bC.source.replace(/^\^/,"\\b").replace(/\$$/,"\\b"));var _8="@hasna/knowledge";function MC(_){if(!Number.isFinite(_??0))return 20;return Math.max(1,Math.min(100,Math.trunc(_??20)))}function ZC(_){return _.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")||"project"}function TU(_,$=180){let g=String(_??"").replace(/\s+/g," ").trim();if(g.length<=$)return g;return`${g.slice(0,Math.max(0,$-3))}...`}function Z_(_,$=""){return typeof _==="string"&&_.length>0?_:$}function KU(_){return typeof _==="number"&&Number.isFinite(_)?_:0}function K0(_){if(typeof _!=="string"||_.length===0)return;let $=_.includes("T")?_:`${_.replace(" ","T")}Z`,g=new Date($);return Number.isNaN(g.valueOf())?void 0:g.toISOString()}function WE(_){return M$.safeParse(_).success}function Z$(_,$,g,U,D=[]){return{kind:_,id:$,name:g,uri:U&&WE(U)?U:void 0,externalId:$,sourcePackage:_8,tags:D}}function HC(_){return[..._.items.flatMap((g)=>[g.updated_at,g.created_at]),..._.sources.flatMap((g)=>[g.updated_at,g.created_at]),..._.chunks.map((g)=>g.created_at),..._.wiki_pages.flatMap((g)=>[g.updated_at,g.created_at]),..._.storage_objects.flatMap((g)=>[g.updated_at,g.created_at]),..._.runs.flatMap((g)=>[g.updated_at,g.created_at]),..._.reindex_queue.flatMap((g)=>[g.updated_at,g.created_at]),..._.sync_conflicts.map((g)=>g.created_at),..._.approval_gates.flatMap((g)=>[g.updated_at,g.created_at])].map(K0).filter(Boolean).sort((g,U)=>U.localeCompare(g))[0]}function kC(_){if(!_)return"unknown";let $=Date.now()-new Date(_).valueOf();if(!Number.isFinite($))return"unknown";return $>2592000000?"stale":"fresh"}function CC(_){let $=(g)=>{let U=String(g??"").toLowerCase();return U!==""&&!["done","complete","completed","resolved","succeeded","skipped"].includes(U)};return _.reindex_queue.filter((g)=>$(g.status)).length+_.sync_conflicts.filter((g)=>$(g.status)).length+_.approval_gates.filter((g)=>$(g.status)).length}function vC(_,$){let g=[];for(let U of _.items.slice(0,$))g.push({id:`item_${U.id}`,title:U.title,summary:TU(U.content_preview),status:U.archived?"archived":"active",priority:"medium",timestamp:K0(U.updated_at??U.created_at),resourceRefs:[Z$("knowledge",U.id,U.title,`knowledge://item/${encodeURIComponent(U.id)}`,U.tags)],evidenceRefs:U.url&&WE(U.url)?[{id:`url_${U.id}`,kind:"url",uri:U.url,summary:"Source URL for this knowledge item."}]:[],metadata:{source:"legacy_store",archived:U.archived,tags:U.tags,url:U.url||void 0}});for(let U of _.sources.slice(0,Math.max(0,$-g.length))){let D=Z_(U.id,Z_(U.uri,"source")),I=Z_(U.title,Z_(U.uri,D)),j=Z_(U.uri,`knowledge://source/${encodeURIComponent(D)}`);g.push({id:`source_${D}`,title:I,summary:TU(`${KU(U.chunks)} chunk(s), ${KU(U.revisions)} revision(s)`),status:KU(U.chunks)>0?"indexed":"source",priority:"medium",timestamp:K0(U.updated_at??U.created_at),resourceRefs:[Z$("document",D,I,j)],evidenceRefs:WE(j)?[{id:`source_${D}`,kind:"url",uri:j,summary:"Source reference."}]:[],metadata:{source:"knowledge_db.sources",kind:U.kind,chunks:KU(U.chunks),revisions:KU(U.revisions)}})}for(let U of _.chunks.slice(0,Math.max(0,$-g.length))){let D=Z_(U.id,"chunk"),I=Z_(U.source_uri);g.push({id:`chunk_${D}`,title:Z_(U.wiki_title,I?`Chunk from ${I}`:`Knowledge chunk ${D}`),summary:TU(U.text_preview),status:"chunk",priority:"low",timestamp:K0(U.created_at),resourceRefs:[Z$("context_pack",D,Z_(U.wiki_title,D),`knowledge://chunk/${encodeURIComponent(D)}`)],evidenceRefs:I&&WE(I)?[{id:`chunk_source_${D}`,kind:"url",uri:I,summary:"Chunk source reference."}]:[],metadata:{source:"knowledge_db.chunks",source_uri:I||void 0,token_count:U.token_count,ordinal:U.ordinal}})}for(let U of _.sync_conflicts.slice(0,Math.max(0,$-g.length))){let D=Z_(U.id,"sync_conflict");g.push({id:`sync_conflict_${D}`,title:`Sync conflict: ${Z_(U.entity_kind,"entity")}/${Z_(U.entity_id,D)}`,summary:TU(`Status ${Z_(U.status,"unknown")}; strategy ${Z_(U.resolution_strategy,"none")}.`),status:Z_(U.status,"unknown"),priority:"critical",timestamp:K0(U.created_at),resourceRefs:[Z$("finding",D,"Knowledge sync conflict",`knowledge://sync-conflict/${encodeURIComponent(D)}`)],metadata:{source:"knowledge_db.sync_conflicts",local_machine_id:U.local_machine_id,remote_machine_id:U.remote_machine_id}})}for(let U of _.reindex_queue.slice(0,Math.max(0,$-g.length))){let D=Z_(U.id,"reindex");g.push({id:`reindex_${D}`,title:`Reindex ${Z_(U.kind,"item")}: ${Z_(U.target_id,D)}`,summary:TU(U.reason),status:Z_(U.status,"unknown"),priority:Z_(U.status).toLowerCase()==="failed"?"high":"medium",timestamp:K0(U.updated_at??U.created_at),resourceRefs:[Z$("action",D,"Knowledge reindex work item",`knowledge://reindex/${encodeURIComponent(D)}`)],metadata:{source:"knowledge_db.reindex_queue",attempts:U.attempts,source_uri:U.source_uri}})}return g.slice(0,$)}async function $8(_,$={}){let g=MC($.limit),U=new Date().toISOString(),D=ZC(_),j=await($.service??IE({scope:$.scope??"project",cwd:$.cwd})).resolveInventory({limit:g,storePath:$.storePath,includeArchived:$.includeArchived}),E=HC(j),A=kC(E),O=j.summary.active_items+j.summary.sources+j.summary.chunks+j.summary.wiki_pages+j.summary.storage_objects,P=CC(j),W=O===0?"empty":A==="stale"?"stale":"ready",z=vC(j,g),S={schema:x.projectPanel,id:`knowledge_panel_${D}`,createdAt:U,projectId:D,provider:{kind:"knowledge",id:`knowledge_${D}`,name:"Knowledge",sourcePackage:_8,externalId:j.home},kind:"knowledge",title:"Knowledge",summary:W==="empty"?"No project knowledge items, sources, chunks, or wiki pages are available yet.":`${j.summary.active_items} active note(s), ${j.summary.sources} source(s), ${j.summary.chunks} chunk(s), and ${j.summary.wiki_pages} wiki page(s).`,state:W,stateReason:W==="stale"?"Latest indexed knowledge activity is older than 30 days.":void 0,generatedAt:U,freshness:A,metrics:[{id:"active_items",label:"Active notes",value:j.summary.active_items,status:j.summary.active_items>0?"good":"unknown"},{id:"sources",label:"Sources",value:j.summary.sources,status:j.summary.sources>0?"good":"unknown"},{id:"chunks",label:"Chunks",value:j.summary.chunks,status:j.summary.chunks>0?"good":"unknown"},{id:"wiki_pages",label:"Wiki pages",value:j.summary.wiki_pages,status:j.summary.wiki_pages>0?"good":"unknown"},{id:"artifacts",label:"Artifacts",value:j.summary.storage_objects,status:j.summary.storage_objects>0?"good":"unknown"},{id:"vector_entries",label:"Vector entries",value:j.summary.vector_entries,status:j.summary.vector_entries>0?"good":"unknown"},{id:"unresolved",label:"Unresolved",value:P,status:P>0?"warning":"good"}],items:z,actions:[Z$("action","knowledge:inventory","Inspect knowledge inventory"),Z$("action","knowledge:context-pack","Build cited context pack"),Z$("action","knowledge:ingest","Ingest project source")],resourceRefs:[Z$("project",D,_,`project://${D}`),Z$("knowledge",`home_${D}`,"Knowledge workspace",`knowledge://workspace/${encodeURIComponent(D)}`),Z$("artifact",`db_${D}`,"Knowledge database",`knowledge://db/${encodeURIComponent(D)}`)],renderFragment:{renderer:"json_render",title:"Knowledge",spec:{component:"project.knowledge.summary",metrics:["active_items","sources","chunks","wiki_pages","unresolved"],itemLimit:g}},metadata:{scope:j.scope,home:j.home,json_store_exists:j.paths.json_store_exists,latest_activity_at:E}};return s9(x.projectPanel,S)}function g8(_){let $=[`${_.title}: ${_.state}`,_.summary??"",..._.metrics.map((g)=>`${g.label}: ${g.value}`)].filter(Boolean);if(_.items.length>0){$.push("Items:");for(let g of _.items.slice(0,10))if($.push(`- ${g.title}${g.status?` [${g.status}]`:""}`),g.summary)$.push(` ${g.summary}`)}return $.join(` +`)}var I8=["sources","wiki_pages","source_revisions","chunks","chunk_embeddings","wiki_backlinks","citations","knowledge_indexes","runs","run_events","provider_usage","redaction_findings","storage_objects","audit_events","approval_gates","vector_index_entries","reindex_queue","knowledge_machines","knowledge_sync_snapshots","knowledge_sync_changes","knowledge_sync_conflicts","knowledge_sync_table_clocks","knowledge_sync_imports"];var j8="HASNA_KNOWLEDGE_STORAGE_MODE",E8="KNOWLEDGE_STORAGE_MODE";function D8(_){return process.env[_]?.trim()||void 0}function U8(_){let $=_?.trim().toLowerCase().replace(/-/g,"_");if($==="sqlite")return"sqlite";if($==="postgres"||$==="postgresql")return"postgres";return}function wC(_={}){let $=U4(MU(_.scope,_.cwd).home);return c($.knowledgeDbPath),{db:v($.knowledgeDbPath),path:$.knowledgeDbPath,scope:_.scope??"global"}}function N8(){let _=U8(D8(j8))??U8(D8(E8));if(_)return _;return"sqlite"}function _J(_={}){let $=wC(_);try{uC($.db);let g=$.db.query("SELECT table_name, last_synced_at, direction FROM _knowledge_sync_meta ORDER BY table_name, direction").all();return{mode:N8(),service:"knowledge",scope:$.scope,databasePath:$.path,tables:I8,sync:g}}finally{$.db.close()}}function uC(_){_.exec(` CREATE TABLE IF NOT EXISTS _knowledge_sync_meta ( table_name TEXT NOT NULL, last_synced_at TEXT, direction TEXT NOT NULL CHECK(direction IN ('push', 'pull')), PRIMARY KEY (table_name, direction) ) - `)}var Y8=UY(G8(),1),{program:zm,createCommand:Sm,createArgument:Wm,createOption:Xm,CommanderError:Rm,InvalidArgumentError:Gm,InvalidOptionArgumentError:Ym,Command:Q8,Argument:Qm,Option:Tm,Help:qm}=Y8.default;import{chmod as Uz,mkdir as Kr,readFile as Fr,rename as Mr,writeFile as V8}from"fs/promises";import{Buffer as C8}from"buffer";import{existsSync as v8}from"fs";import{homedir as Zr}from"os";import{join as MU}from"path";import{createHmac as rr,timingSafeEqual as Hm}from"crypto";import{randomUUID as ur}from"crypto";import{spawn as xr}from"child_process";import{randomUUID as mr}from"crypto";function Rr(_,$){return $.split(".").reduce((D,U)=>{if(D&&typeof D==="object"&&U in D)return D[U];return},_)}function Gr(_,$){let D=[],U=(I)=>{if(!D.some((j)=>Object.is(j,I)))D.push(I)};if($.includes(".")&&$ in _)U(_[$]);let g=Rr(_,$);if(g!==void 0||!$.includes("."))U(g);return D}function Yr(_,$={}){let D="";for(let U=0;U<_.length;U+=1){let g=_[U];if(g==="*")if(_[U+1]==="*")D+=".*",U+=1;else D+=$.segmentSafe?"[^/]*":".*";else D+=g.replace(/[|\\{}()[\]^$+?.]/g,"\\$&")}return new RegExp(`^${D}$`)}function KU(_,$,D={}){if($===void 0)return!0;if(_===void 0)return!1;return(Array.isArray($)?$:[$]).some((g)=>Yr(g,D).test(_))}function T8(_,$){if(!$)return!0;return Object.entries($).every(([D,U])=>{let g=Gr(_,D);return Qr(g,U,D)})}function Qr(_,$,D){if(Br($))return!_.some((U)=>q8(U,$.not,D));return _.some((U)=>q8(U,$,D))}function q8(_,$,D){if(typeof $==="string"||Array.isArray($))return Tr(_).some((U)=>KU(U,$,{segmentSafe:D.endsWith("_path")||D.endsWith(".path")}));if(Array.isArray(_))return _.some((U)=>U===$);return _===$}function Tr(_){if(_===void 0)return[];if(Array.isArray(_))return _.flatMap(($)=>qr($)?[String($)]:[]);return[String(_)]}function qr(_){return _===null||typeof _==="string"||typeof _==="number"||typeof _==="boolean"}function Br(_){return Boolean(_&&typeof _==="object"&&!Array.isArray(_)&&"not"in _)}function Vr(_,$){return KU(_.source,$.source)&&KU(_.type,$.type)&&KU(_.subject,$.subject)&&KU(_.severity,$.severity)&&T8(_.data,$.data)&&T8(_.metadata,$.metadata)}function B8(_,$){if(!_.enabled)return!1;if(!_.filters||_.filters.length===0)return!0;return _.filters.some((D)=>Vr($,D))}var RN="HASNA_EVENTS_DIR",GN="HASNA_EVENTS_HOME",Ez="local-json-v1:",br=100,Hr=1000;function r8(_){return _||process.env[RN]||process.env[GN]||MU(Zr(),".hasna","events")}function kr(){if(process.env[RN])return RN;if(process.env[GN])return GN;return null}class YN{dataDir;runtime;channelsPath;eventsPath;deliveriesPath;constructor(_=r8()){this.dataDir=_,this.runtime=Cr(_),this.channelsPath=MU(_,"channels.json"),this.eventsPath=MU(_,"events.json"),this.deliveriesPath=MU(_,"deliveries.json")}async init(){await Kr(this.dataDir,{recursive:!0,mode:448}),await Uz(this.dataDir,448).catch(()=>{return}),await this.ensureArrayFile(this.channelsPath),await this.ensureArrayFile(this.eventsPath),await this.ensureArrayFile(this.deliveriesPath)}async addChannel(_){await this.init();let $=await this.readJson(this.channelsPath,[]),D=$.findIndex((U)=>U.id===_.id);if(D>=0)$[D]={..._,createdAt:$[D].createdAt,updatedAt:new Date().toISOString()};else $.push(_);return await this.writeJson(this.channelsPath,$),D>=0?$[D]:_}async listChannels(){return await this.init(),this.readJson(this.channelsPath,[])}async getChannel(_){return(await this.listChannels()).find((D)=>D.id===_)}async removeChannel(_){await this.init();let $=await this.readJson(this.channelsPath,[]),D=$.filter((U)=>U.id!==_);return await this.writeJson(this.channelsPath,D),D.length!==$.length}async appendEvent(_){await this.init();let $=await this.readJson(this.eventsPath,[]);return $.push(_),await this.writeJson(this.eventsPath,$),_}async appendEventOnce(_,$={}){await this.init();let D=await this.readJson(this.eventsPath,[]);if($.dedupe!==!1){let g=F8(D,{id:_.id,dedupeKey:_.dedupeKey});if(g)return{event:g,stored:!1,deduped:!0,identity:{id:g.id,dedupeKey:g.dedupeKey}}}return D.push(_),await this.writeJson(this.eventsPath,D),{event:_,stored:!0,deduped:!1,identity:{id:_.id,dedupeKey:_.dedupeKey}}}async listEvents(_={}){await this.init();let $=await this.readJson(this.eventsPath,[]);return K8($,_)}async listEventsPage(_={}){await this.init();let $=await this.readJson(this.eventsPath,[]),D=K8($,{eventId:_.eventId,source:_.source,type:_.type}),U=QN(_.cursor,_),g=TN(_.limit),I=D.slice(U,U+g),j=U+I.length,N=j{return})}async readJson(_,$){try{let D=await Fr(_,"utf-8");if(!D.trim())return $;return JSON.parse(D)}catch(D){if(D.code==="ENOENT")return $;throw D}}async writeJson(_,$){let D=`${_}.${process.pid}.${Date.now()}.tmp`;await V8(D,`${JSON.stringify($,null,2)} -`,{encoding:"utf-8",mode:384}),await Mr(D,_),await Uz(_,384).catch(()=>{return})}}function Cr(_=r8()){return{mode:"local-files",name:"json-events-store",remote:!1,localFiles:!0,localSqlite:!1,postgres:!1,s3:!1,aws:!1,durable:!0,idempotency:"best-effort-local",replayCursors:!0,description:`Local JSON files in ${_}; no SQLite, Postgres, S3, or AWS runtime is configured by this store.`}}function f8(_,$={}){if(!Number.isInteger(_)||_<0)throw Error(`Invalid event cursor offset: ${_}`);let D={offset:_,eventId:$.eventId,source:$.source,type:$.type};return`${Ez}${C8.from(JSON.stringify(D),"utf-8").toString("base64url")}`}function QN(_,$={}){if(!_)return 0;if(!_.startsWith(Ez))throw Error(`Invalid local JSON event cursor: ${_}`);let D=_.slice(Ez.length),U;try{U=JSON.parse(C8.from(D,"base64url").toString("utf-8"))}catch{throw Error(`Invalid local JSON event cursor: ${_}`)}let g=U.offset;if(!Number.isInteger(g)||g<0)throw Error(`Invalid local JSON event cursor: ${_}`);return Iz("eventId",U.eventId,$.eventId),Iz("source",U.source,$.source),Iz("type",U.type,$.type),g}function TN(_){if(_===void 0)return br;if(!Number.isInteger(_)||_<1)throw Error(`Event page limit must be a positive integer, got ${_}`);return Math.min(_,Hr)}function K8(_,$){let D=_;if($.eventId)D=D.filter((U)=>U.id===$.eventId);if($.source)D=D.filter((U)=>U.source===$.source);if($.type)D=D.filter((U)=>U.type===$.type);if($.cursor){let U=QN($.cursor,$);D=D.slice(U)}if($.limit!==void 0)D=D.slice(0,TN($.limit));return D}function Iz(_,$,D){if($!==D)throw Error(`Local JSON event cursor ${_} filter mismatch`)}function F8(_,$){return _.find((D)=>$.id!==void 0&&D.id===$.id||$.dedupeKey!==void 0&&D.dedupeKey===$.dedupeKey)}async function vr(_){let $=new YN(_);await $.init();let[D,U,g]=await Promise.all([$.listChannels(),$.listEvents(),$.listDeliveries()]),I=D.reduce((j,N)=>{return j[N.transport]=(j[N.transport]??0)+1,j},{});return{service:"events",schemaVersion:"1.0",dataDir:$.dataDir,storage:$.runtime,env:{primary:RN,fallback:GN,active:kr()},files:{channels:jz($.dataDir,"channels.json",D.length),events:jz($.dataDir,"events.json",U.length),deliveries:jz($.dataDir,"deliveries.json",g.length)},counts:{channels:D.length,enabledChannels:D.filter((j)=>j.enabled).length,disabledChannels:D.filter((j)=>!j.enabled).length,events:U.length,deliveries:g.length},transports:I,safety:{includesEventPayloads:!1,includesWebhookSecrets:!1,listOutputsRedactSecrets:!0,statusOutputIsMetadataOnly:!0}}}function jz(_,$,D){let U=MU(_,$);return{path:U,exists:v8(U),records:D}}function fr(_,$){return`${_}.${$}`}function wr(_,$,D){return`sha256=${rr("sha256",_).update(fr($,D)).digest("hex")}`}function i$(){return new Date().toISOString()}function FU(_,$=4096){return _.length>$?`${_.slice(0,$)}...`:_}function yr(_,$){if(!$.webhook)throw Error(`Channel ${$.id} has no webhook config`);let D=JSON.stringify(_),U=_.time,g={"Content-Type":"application/json","User-Agent":"@hasna/events","X-Hasna-Event-Id":_.id,"X-Hasna-Event-Type":_.type,"X-Hasna-Timestamp":U,...$.webhook.headers};if($.webhook.secret)g["X-Hasna-Signature"]=wr($.webhook.secret,U,D);return{body:D,headers:g}}async function hr(_,$,D={}){if(!$.webhook)throw Error(`Channel ${$.id} has no webhook config`);let U=i$(),{body:g,headers:I}=yr(_,$),j=new AbortController,N=setTimeout(()=>j.abort(),$.webhook.timeoutMs??15000);try{let O=await(D.fetchImpl??fetch)($.webhook.url,{method:"POST",headers:I,body:g,signal:j.signal}),A=FU(await O.text());return{attempt:1,status:O.ok?"success":"failed",startedAt:U,completedAt:i$(),responseStatus:O.status,responseBody:A,error:O.ok?void 0:`Webhook returned HTTP ${O.status}`}}catch(O){return{attempt:1,status:"failed",startedAt:U,completedAt:i$(),error:O instanceof Error?O.message:String(O)}}finally{clearTimeout(N)}}async function cr(_,$){if(!$.command)throw Error(`Channel ${$.id} has no command config`);let D=i$(),U=JSON.stringify(_),g={...process.env,...$.command.env,HASNA_CHANNEL_ID:$.id,HASNA_EVENT_ID:_.id,HASNA_EVENT_TYPE:_.type,HASNA_EVENT_SOURCE:_.source,HASNA_EVENT_SUBJECT:_.subject??"",HASNA_EVENT_SEVERITY:_.severity,HASNA_EVENT_TIME:_.time,HASNA_EVENT_DEDUPE_KEY:_.dedupeKey??"",HASNA_EVENT_SCHEMA_VERSION:_.schemaVersion,HASNA_EVENT_JSON:U};return new Promise((I)=>{let j=xr($.command.command,$.command.args??[],{cwd:$.command.cwd,env:g,stdio:["pipe","pipe","pipe"]}),N="",O="",A=setTimeout(()=>j.kill("SIGTERM"),$.command.timeoutMs??15000);j.stdin.end(U),j.stdout.on("data",(L)=>{N+=L.toString()}),j.stderr.on("data",(L)=>{O+=L.toString()}),j.on("error",(L)=>{clearTimeout(A),I({attempt:1,status:"failed",startedAt:D,completedAt:i$(),stdout:FU(N),stderr:FU(O),error:L.message})}),j.on("close",(L,z)=>{clearTimeout(A);let W=L===0;I({attempt:1,status:W?"success":"failed",startedAt:D,completedAt:i$(),stdout:FU(N),stderr:FU(O),error:W?void 0:`Command exited with ${z?`signal ${z}`:`code ${L}`}`})})})}async function nr(_,$,D={}){if($.transport==="webhook")return hr(_,$,D);if($.transport==="command")return cr(_,$);return{attempt:1,status:"skipped",startedAt:i$(),completedAt:i$(),error:`Unsupported transport: ${$.transport}`}}function M8(_,$,D){let U=D.some((g)=>g.status==="success")?"success":D.every((g)=>g.status==="skipped")?"skipped":"failed";return{id:ur(),eventId:_.id,channelId:$.id,transport:$.transport,status:U,attempts:D,createdAt:D[0]?.startedAt??i$(),completedAt:D.at(-1)?.completedAt??i$()}}class w8 extends Error{eventType;issues;constructor(_,$){let D=$.map((U)=>`${U.path||""}: ${U.message}`).join("; ");super(`Event validation failed for type "${_}": ${D}`);this.name="EventValidationError",this.eventType=_,this.issues=$}}class u8{definitions=new Map;register(_){return this.definitions.set(_.type,_),this}unregister(_){return this.definitions.delete(_)}has(_){return this.definitions.has(_)}get(_){return this.definitions.get(_)}list(){return[...this.definitions.values()]}validateEvent(_){let $=this.definitions.get(_.type);if(!$)return{ok:!0};return $.validate(_.data,_)}assertEventValid(_){let $=this.validateEvent(_);if(!$.ok)throw new w8(_.type,$.issues)}}var dr=new u8;function Nz(_){return{id:_.id??mr(),source:_.source,type:_.type,time:pr(_.time),subject:_.subject,severity:_.severity??"info",data:_.data??{},message:_.message,dedupeKey:_.dedupeKey,schemaVersion:_.schemaVersion??"1.0",metadata:_.metadata??{}}}class x8{store;redactors;transportOptions;catalog;validateCatalogTypes;constructor(_={}){this.store=_.store??new YN(_.dataDir),this.redactors=_.redactors??[],this.transportOptions={fetchImpl:_.fetchImpl},this.catalog=_.catalog??dr,this.validateCatalogTypes=_.validateCatalogTypes??!1}async addChannel(_){let $=new Date().toISOString();return this.store.addChannel({..._,createdAt:_.createdAt??$,updatedAt:_.updatedAt??$})}async listChannels(){return this.store.listChannels()}async removeChannel(_){return this.store.removeChannel(_)}async emit(_,$={}){let D=$.redactSensitiveData===!1?Nz(_):tr(Nz(_));if($.validate??this.validateCatalogTypes)this.catalog.assertEventValid(D);let U=await this.appendEvent(D,{dedupe:$.dedupe!==!1});if(U.deduped)return{event:U.event,deliveries:[],deduped:!0};let g=$.deliver===!1?[]:await this.deliver(U.event);return{event:U.event,deliveries:g,deduped:!1}}async listEvents(_={}){if(Object.keys(_).length===0)return this.store.listEvents();return Z8(await this.store.listEvents(),_)}async listEventsPage(_={}){if(this.store.listEventsPage)return this.store.listEventsPage(_);let $=Z8(await this.store.listEvents(),{eventId:_.eventId,source:_.source,type:_.type}),D=QN(_.cursor,_),U=TN(_.limit),g=$.slice(D,D+U),I=D+g.length,j=I<$.length;return{events:g,cursor:_.cursor,nextCursor:j?f8(I,_):void 0,hasMore:j}}async listDeliveries(){return this.store.listDeliveries()}async deliver(_){let D=(await this.store.listChannels()).filter((g)=>B8(g,_)),U=[];for(let g of D){let I=await this.applyRedaction(_,g),j=await this.deliverWithRetry(I,g);await this.store.appendDelivery(j),U.push(j)}return U}async matchChannel(_,$={}){let D=await this.store.getChannel(_);if(!D)throw Error(`Channel not found: ${_}`);let U=Nz({source:$.source??"hasna.events",type:$.type??"events.test",subject:$.subject??_,severity:$.severity??"info",data:$.data??{test:!0},message:$.message??"Hasna events test delivery",dedupeKey:$.dedupeKey,schemaVersion:$.schemaVersion,metadata:$.metadata,time:$.time,id:$.id}),g=B8(D,U);return{channelId:D.id,matched:g,event:U,filters:D.filters,reason:g?void 0:D.enabled?"event did not match channel filters":"channel is disabled"}}async testChannel(_,$={},D={}){let U=await this.store.getChannel(_);if(!U)throw Error(`Channel not found: ${_}`);let g=await this.matchChannel(_,$),I=g.event;if(D.honorFilters&&!g.matched){let O=new Date().toISOString(),A=M8(I,U,[{attempt:1,status:"skipped",startedAt:O,completedAt:O,error:g.reason}]);return A.metadata={reason:"filter_mismatch"},await this.store.appendDelivery(A),A}let j=await this.applyRedaction(I,U),N=await this.deliverWithRetry(j,U);return await this.store.appendDelivery(N),N}async replay(_={}){let $=_.cursor||_.limit!==void 0?await this.listEventsPage(_):{events:await this.listEvents(_),hasMore:!1};if(_.dryRun)return{events:$.events,deliveries:[],cursor:$.cursor,nextCursor:$.nextCursor,hasMore:$.hasMore};let D=[];for(let U of $.events)D.push(...await this.deliver(U));return{events:$.events,deliveries:D,cursor:$.cursor,nextCursor:$.nextCursor,hasMore:$.hasMore}}async appendEvent(_,$){if(this.store.appendEventOnce)return this.store.appendEventOnce(_,{dedupe:$.dedupe});if($.dedupe){let U=await this.store.findEventByIdentity({id:_.id,dedupeKey:_.dedupeKey});if(U)return{event:U,stored:!1,deduped:!0,identity:{id:U.id,dedupeKey:U.dedupeKey}}}let D=await this.store.appendEvent(_);return{event:D,stored:!0,deduped:!1,identity:{id:D.id,dedupeKey:D.dedupeKey}}}async applyRedaction(_,$){let D=ir(_,$.redact?.paths??[],$.redact?.replacement??"[REDACTED]");for(let U of this.redactors)D=await U(D,$);return D}async deliverWithRetry(_,$){let D=er($.retry),U=[];for(let g=0;g[D,h8(D)?"[REDACTED]":U]));return $}function lr(_){return _.map(y8)}function tr(_,$="[REDACTED]"){return Oz(_,$)}function h8(_){return/secret|token|password|api[_-]?key|authorization/i.test(_)}function Oz(_,$){if(Array.isArray(_))return _.map((D)=>Oz(D,$));if(!_||typeof _!=="object")return _;return Object.fromEntries(Object.entries(_).map(([D,U])=>[D,h8(D)?$:Oz(U,$)]))}function or(_,$,D){let U=$.split("."),g=_;for(let j of U.slice(0,-1)){let N=g[j];if(!N||typeof N!=="object")return;g=N}let I=U.at(-1);if(I&&I in g)g[I]=D}function Z8(_,$){let D=_;if($.eventId)D=D.filter((U)=>U.id===$.eventId);if($.source)D=D.filter((U)=>U.source===$.source);if($.type)D=D.filter((U)=>U.type===$.type);if($.cursor)D=D.slice(QN($.cursor,$));if($.limit!==void 0)D=D.slice(0,TN($.limit));return D}function pr(_){if(!_)return new Date().toISOString();return _ instanceof Date?_.toISOString():_}function er(_){return{maxAttempts:Math.max(1,_?.maxAttempts??1),backoffMs:Math.max(0,_?.backoffMs??250),multiplier:Math.max(1,_?.multiplier??2)}}function XN(_,$,D=!1){if(!_?.length)return;let U={};for(let g of _){let I=_f(g,$),j=I.path;if(j in U)throw Error(`Duplicate ${$} filter path: ${j}`);let N=D?sr(I.rawValue,$):I.rawValue;U[j]=I.negated?{not:N}:N}return U}function ar(_){let $={};if(_.source)$.source=_.source;if(_.type)$.type=_.type;if(_.subject)$.subject=_.subject;if(_.severity)$.severity=_.severity;let D=b8(XN(_.data,"data"),XN(_.dataJson,"data-json",!0)),U=b8(XN(_.metadata,"metadata"),XN(_.metadataJson,"metadata-json",!0));if(Object.keys(D).length>0)$.data=D;if(Object.keys(U).length>0)$.metadata=U;return Object.keys($).length>0?[$]:void 0}function b8(..._){let $={};for(let D of _){if(!D)continue;for(let[U,g]of Object.entries(D)){if(U in $)throw Error(`Duplicate filter path: ${U}`);$[U]=g}}return $}function sr(_,$){let D=JSON.parse(_);if(D===null||typeof D==="string"||typeof D==="number"||typeof D==="boolean"||Array.isArray(D)&&D.every((U)=>typeof U==="string"))return D;throw Error(`${$} filter JSON values must be string, string[], number, boolean, or null`)}function _f(_,$){let D=_.indexOf("!=");if(D>0)return{path:_.slice(0,D),rawValue:_.slice(D+2),negated:!0};let U=_.indexOf("=");if(U<=0)throw Error(`Invalid ${$} filter, expected path=value or path!=value: ${_}`);return{path:_.slice(0,U),rawValue:_.slice(U+1),negated:!1}}var $f=100;function VD(_,$){if(!_)return $;let D=JSON.parse(_);if(!D||typeof D!=="object"||Array.isArray(D))throw Error("Expected a JSON object");return D}function Df(_){if(!_?.length)return;let $={};for(let D of _){let U=D.indexOf("=");if(U===-1)throw Error(`Invalid header, expected name=value: ${D}`);$[D.slice(0,U)]=D.slice(U+1)}return $}function p6(_){if(_.createClient)return _.createClient();return new x8({store:new YN(_.dataDir)})}function s4(_,$,D){if($)console.log(JSON.stringify(_,null,2));else console.log(D)}function H8(_,$){let D=_ instanceof Error?_.message:String(_);if($)console.log(JSON.stringify({error:D},null,2));else console.error(D);process.exitCode=1}function k8(_){return Boolean(_?.json||_?.opts?.().json||_?.optsWithGlobals?.().json||_?.parent?.opts?.().json||_?.parent?.optsWithGlobals?.().json)}function W6(_,$){return k8(_)||k8($)}function gf(_,$){let D=_.command($.channelsCommandName??"channels").description("Manage Hasna event channels");return D.command("add").description("Add or replace a channel").argument("","Webhook URL or command binary").requiredOption("--id ","Channel identifier").option("--transport ","Transport kind: webhook or command","webhook").option("--name ","Display name").option("--type ","Event type filter, e.g. todos.task.*").option("--source ","Event source filter").option("--subject ","Event subject filter").option("--severity ","Event severity filter").option("--data ","Event data field filter; string values, path!=value negatives, array-member matching, dot paths, * segment wildcard, ** recursive wildcard",a4,[]).option("--metadata ","Event metadata field filter; string values, path!=value negatives, array-member matching, dot paths, * segment wildcard, ** recursive wildcard",a4,[]).option("--data-json ","Event data field filter with typed JSON value; path!=json negatives supported",a4,[]).option("--metadata-json ","Event metadata field filter with typed JSON value; path!=json negatives supported",a4,[]).option("--secret ","Webhook HMAC secret").option("--header ","Webhook header",a4,[]).option("--arg ","Command argument",a4,[]).option("--timeout-ms ","Transport timeout in milliseconds",ZU).option("--retry-attempts ","Maximum delivery attempts",ZU).option("--retry-backoff-ms ","Initial retry backoff in milliseconds",ZU).option("--redact ","Event field path to redact before delivery",a4,[]).option("--disabled","Create channel disabled",!1).option("-j, --json","Print JSON output",!1).action(async(U,g,I)=>{let j=new Date().toISOString(),N={id:g.id,name:g.name,enabled:!g.disabled,transport:g.transport,filters:ar(g),retry:g.retryAttempts||g.retryBackoffMs?{maxAttempts:g.retryAttempts,backoffMs:g.retryBackoffMs}:void 0,redact:g.redact?.length?{paths:g.redact}:void 0,createdAt:j,updatedAt:j};if(g.transport==="webhook")N.webhook={url:U,secret:g.secret,headers:Df(g.header),timeoutMs:g.timeoutMs};else if(g.transport==="command")N.command={command:U,args:g.arg??[],timeoutMs:g.timeoutMs};else throw Error(`Transport ${g.transport} is reserved for future use and cannot be added yet`);let O=await p6($).addChannel(N);s4(y8(O),W6(g,I),`Added ${O.transport} channel ${O.id}`)}),D.command("list").description("List configured channels").option("-j, --json","Print JSON output",!1).action(async(U,g)=>{let I=await p6($).listChannels();if(W6(U,g)){console.log(JSON.stringify(lr(I),null,2));return}if(!I.length){console.log("No channels configured.");return}for(let j of I)console.log(`${j.id} ${j.enabled?"enabled":"disabled"} ${j.transport} ${j.webhook?.url??j.command?.command??j.transport}`)}),D.command("status").description("Show events channel storage status").option("-j, --json","Print JSON output",!1).action(async(U,g)=>{let I=await vr($.dataDir);s4(I,W6(U,g),`events dataDir: ${I.dataDir}`)}),D.command("remove").description("Remove a channel").argument("","Channel identifier").option("-j, --json","Print JSON output",!1).action(async(U,g,I)=>{let j=await p6($).removeChannel(U);s4({removed:j},W6(g,I),j?`Removed ${U}`:`Channel not found: ${U}`)}),D.command("test").description("Send a test event to one channel").argument("","Channel identifier").option("--source ","Event source override").option("--type ","Event type","events.test").option("--subject ","Event subject").option("--message ","Event message","Hasna events test delivery").option("--data ","Event data JSON object").option("--metadata ","Event metadata JSON object").option("--honor-filters","Skip delivery when the sample event does not match channel filters",!1).option("-j, --json","Print JSON output",!1).action(async(U,g,I)=>{let j=W6(g,I);try{let N=await p6($).testChannel(U,{source:g.source??$.source,type:g.type,subject:g.subject??U,message:g.message,data:VD(g.data,{test:!0}),metadata:VD(g.metadata,{})},{honorFilters:g.honorFilters});s4(N,j,`${N.status}: ${N.channelId}`)}catch(N){H8(N,j)}}),D.command("match").description("Check whether a sample event matches one channel without delivering").argument("","Channel identifier").option("--source ","Event source override").option("--type ","Event type","events.test").option("--subject ","Event subject").option("--message ","Event message","Hasna events match preview").option("--data ","Event data JSON object").option("--metadata ","Event metadata JSON object").option("-j, --json","Print JSON output",!1).action(async(U,g,I)=>{let j=W6(g,I);try{let N=await p6($).matchChannel(U,{source:g.source??$.source,type:g.type,subject:g.subject??U,message:g.message,data:VD(g.data,{test:!0}),metadata:VD(g.metadata,{})});s4(N,j,`${N.matched?"matched":"skipped"}: ${N.channelId}`)}catch(N){H8(N,j)}}),D}function Uf(_,$){let D=_.command($.eventsCommandName??"events").description("Emit, list, and replay Hasna events");D.command("emit").description("Emit an event from this app").argument("","Event type").option("--source ","Event source override").option("--subject ","Event subject").option("--severity ","Event severity","info").option("--message ","Event message").option("--dedupe-key ","Dedupe key").option("--data ","Event data JSON object").option("--metadata ","Event metadata JSON object").option("--no-deliver","Record without delivering").option("--no-dedupe","Allow duplicate id/dedupeKey events").option("-j, --json","Print JSON output",!1).action(async(g,I,j)=>{let N=await p6($).emit({source:I.source??$.source,type:g,subject:I.subject,severity:I.severity,message:I.message,dedupeKey:I.dedupeKey,data:VD(I.data,{}),metadata:VD(I.metadata,{})},{deliver:I.deliver,dedupe:I.dedupe});s4(N,W6(I,j),`${N.deduped?"Deduped":"Emitted"} ${N.event.id} to ${N.deliveries.length} channel(s)`)});let U=$.defaultEventListLimit??$f;return D.command("list").description("List recorded events").option("--source ","Filter by source").option("--type ","Filter by type").option("--limit ",`Limit to the most recent events (default ${U}; use 0 for all)`,ZU,U).option("-j, --json","Print JSON output",!1).action(async(g,I)=>{let j=await p6($).listEvents();if(g.source)j=j.filter((N)=>N.source===g.source);if(g.type)j=j.filter((N)=>N.type===g.type);if(g.limit)j=j.slice(-g.limit);if(W6(g,I)){console.log(JSON.stringify(j,null,2));return}if(!j.length){console.log("No events recorded.");return}for(let N of j)console.log(`${N.time} ${N.id} ${N.source} ${N.type} ${N.severity}`)}),D.command("replay").description("Replay recorded events").option("--id ","Replay one event id").option("--source ","Filter by source").option("--type ","Filter by type").option("--cursor ","Opaque replay cursor from a previous page").option("--limit ","Maximum events to replay",ZU).option("--dry-run","Preview without delivery",!1).option("-j, --json","Print JSON output",!1).action(async(g,I)=>{let j=await p6($).replay({eventId:g.id,source:g.source,type:g.type,cursor:g.cursor,limit:g.limit,dryRun:g.dryRun});s4(j,W6(g,I),If(j.events.length,j.deliveries.length,j.nextCursor))}),D}function c8(_,$){gf(_,$),Uf(_,$)}function ZU(_){let $=Number(_);if(!Number.isFinite($))throw Error(`Expected a number, got ${_}`);return $}function a4(_,$){return $.push(_),$}function If(_,$,D){let U=D?`, next cursor: ${D}`:"";return`Replayed ${_} event(s), ${$} delivery result(s)${U}`}import{basename as Nf}from"path";var C$={name:"@hasna/knowledge",version:"0.2.100",description:"Agent-friendly local knowledge CLI with JSON output, pagination, and safe destructive actions",type:"module",exports:{".":{import:"./dist/index.js",types:"./dist/index.d.ts"},"./storage":{import:"./dist/storage.js",types:"./dist/storage.d.ts"},"./serve":{import:"./dist/serve.js",types:"./dist/serve.d.ts"}},main:"./dist/index.js",types:"./dist/index.d.ts",bin:{knowledge:"bin/knowledge.js","knowledge-mcp":"bin/knowledge-mcp.js","knowledge-serve":"bin/knowledge-serve.js"},files:["bin","dist","scripts/apply-cloud-migrations.mjs","scripts/lib/remote-temp-dir.mjs","scripts/smoke-machine-sync-release.mjs","scripts/smoke-machines-adapter.mjs","scripts/smoke-open-files-installed-boundary.mjs","scripts/strip-generated-trailing-whitespace.mjs","scripts/verify-generated-artifacts.mjs","docs/architecture/ai-native-knowledge-base.md","docs/architecture/hosted-wrapper-responsibilities.md","docs/architecture/hybrid-semantic-search.md","docs/architecture/machine-sync-schema.md","docs/examples/app-project-wiki-standard.md","docs/examples/company-wiki-workflow.md","docs/migration/global-rules-provenance-import.md","docs/migration/json-to-sqlite.md","LICENSE","README.md"],scripts:{test:"bun test","test:cli":"bun test tests/cli.test.ts","test:package":"bun test tests/package-release.test.ts","release:pack:check":"node scripts/validate-public-package.mjs","smoke:machines-adapter":"bun scripts/smoke-machines-adapter.mjs","smoke:machine-sync-release":"bun scripts/smoke-machine-sync-release.mjs","smoke:open-files-installed-boundary":"bun scripts/smoke-open-files-installed-boundary.mjs","migrate:cloud":"bun scripts/apply-cloud-migrations.mjs",serve:"bun src/serve-entry.ts","verify:generated":"bun scripts/verify-generated-artifacts.mjs","contracts:conformance":"contracts conformance fixtures",build:"rm -rf dist && bun build --target=bun --outfile=bin/knowledge.js --minify --external pg --external @hasna/machines --external @hasna/machines/consumer --external @aws-sdk/client-s3 --external @aws-sdk/credential-providers --external ai --external @ai-sdk/openai --external @ai-sdk/anthropic --external @ai-sdk/deepseek src/cli.ts && bun build --target=bun --outfile=bin/knowledge-mcp.js --external pg --external @hasna/machines --external @hasna/machines/consumer --external @modelcontextprotocol/sdk --external @aws-sdk/client-s3 --external @aws-sdk/credential-providers --external ai --external @ai-sdk/openai --external @ai-sdk/anthropic --external @ai-sdk/deepseek src/mcp.js && bun build --target=bun --outfile=bin/knowledge-serve.js --external pg --external @hasna/machines --external @hasna/machines/consumer --external @aws-sdk/client-s3 --external @aws-sdk/credential-providers --external ai --external @ai-sdk/openai --external @ai-sdk/anthropic --external @ai-sdk/deepseek src/serve-entry.ts && bun build ./src/index.ts ./src/storage.ts ./src/serve.ts --outdir ./dist --target bun --external pg --external @hasna/machines --external @hasna/machines/consumer --external @aws-sdk/client-s3 --external @aws-sdk/credential-providers --external ai --external @ai-sdk/openai --external @ai-sdk/anthropic --external @ai-sdk/deepseek && bun scripts/strip-generated-trailing-whitespace.mjs && bunx tsc -p tsconfig.build.json",prepublishOnly:"bun run contracts:conformance && contracts no-cloud-scan . && bun run build && node scripts/validate-public-package.mjs"},keywords:["knowledge","cli","agents","json","notes","local","store"],license:"Apache-2.0",publishConfig:{registry:"https://registry.npmjs.org",access:"public"},repository:{type:"git",url:"git+https://github.com/hasna/knowledge.git"},bugs:{url:"https://github.com/hasna/knowledge/issues"},author:"Hasna Inc. ",engines:{bun:">=1.0",node:">=18"},dependencies:{"@ai-sdk/anthropic":"^3.0.81","@ai-sdk/deepseek":"^2.0.35","@ai-sdk/openai":"^3.0.68","@aws-sdk/client-s3":"^3.1063.0","@aws-sdk/credential-providers":"^3.1063.0","@hasna/events":"^0.1.3","@modelcontextprotocol/sdk":"^1.29.0","@types/json-schema":"^7.0.15",ai:"^6.0.197",commander:"^13.1.0",pg:"^8.16.3",zod:"^4.3.6"},devDependencies:{"@electric-sql/pglite":"^0.5.4","@hasna/contracts":"0.8.5","@types/bun":"^1.3.14","@types/pg":"^8.15.6"}};var n8={debug:0,info:1,warn:2,error:3},Ef=()=>{if(process.env.DEBUG)return"debug";if(process.env.LOG_LEVEL==="debug")return"debug";if(process.env.LOG_LEVEL==="warn")return"warn";if(process.env.LOG_LEVEL==="error")return"error";return"info"};function $0(_,$,D){if(n8[_]U.toLowerCase()));return $.filter((U)=>!D.has(U.toLowerCase()))}function Az(_,$,D){if(D===void 0)return{..._,message:$};return{..._,added:D.length,message:`${$} (added ${D.length} tag${D.length===1?"":"s"})`}}function Jf(_,$){if($===void 0)throw Error("Missing value for --tag. Example: knowledge add <content> -t <tag> -t <tag>");let D=$.split(",").map((U)=>U.trim()).filter((U)=>U.length>0);if(D.length===0)throw Error(`Invalid --tag value ${JSON.stringify($)}: no tag name found. Example: knowledge add <title> <content> -t <tag> -t <tag>`);return Lf([..._??[],...D])}function Pf(_){let $=[],D={},U=!1;for(let g=0;g<_.length;g+=1){let I=_[g];if(U){$.push(I);continue}if(I==="--"){U=!0;continue}if(!I.startsWith("-")||$[0]==="add"&&$.length===2&&I.startsWith("---")){$.push(I);continue}switch(I){case"--json":D.json=!0;break;case"--verbose":D.verbose=!0;break;case"--yes":case"-y":D.yes=!0;break;case"--help":case"-h":D.help=!0;break;case"--version":case"-v":D.version=!0;break;case"--desc":D.desc=!0;break;case"--page":case"-p":D.page=Number(_[g+1]),g+=1;break;case"--limit":case"-l":D.limit=Number(_[g+1]),g+=1;break;case"--search":case"-s":D.search=_[g+1],g+=1;break;case"--sort":D.sort=_[g+1],g+=1;break;case"--id":D.id=_[g+1],g+=1;break;case"--store":D.store=_[g+1],g+=1;break;case"--title":D.title=_[g+1],g+=1;break;case"--content":D.content=_[g+1],g+=1;break;case"--url":D.url=_[g+1],g+=1;break;case"--tag":case"-t":D.tag=Jf(D.tag,_[g+1]),D.tagRaw=[...D.tagRaw??[],_[g+1]],g+=1;break;case"--format":D.format=_[g+1],g+=1;break;case"--completions":D.completions=_[g+1],g+=1;break;case"--purpose":D.purpose=_[g+1],g+=1;break;case"--model":D.model=_[g+1],g+=1;break;case"--strategy":D.strategy=_[g+1],g+=1;break;case"--dimensions":D.dimensions=Number(_[g+1]),g+=1;break;case"--semantic":D.semantic=!0;break;case"--context":D.context=!0;break;case"--max-tokens":D.maxTokens=Number(_[g+1]),g+=1;break;case"--max-items":D.maxItems=Number(_[g+1]),g+=1;break;case"--from":D.from=_[g+1],g+=1;break;case"--to":D.to=_[g+1],g+=1;break;case"--rev":D.rev=Number(_[g+1]),g+=1;break;case"--if-version":D.ifVersion=Number(_[g+1]),g+=1;break;case"--since":D.since=_[g+1],g+=1;break;case"--topic":D.topic=_[g+1],g+=1;break;case"--dedupe":D.dedupe=!0;break;case"--generate":D.generate=!0;break;case"--approve-write":D.approveWrite=!0;break;case"--provider":D.provider=_[g+1],g+=1;break;case"--mode":D.mode=_[g+1],g+=1;break;case"--machine":D.machine=_[g+1],g+=1;break;case"--workspace":D.workspace=_[g+1],g+=1;break;case"--api-url":D.apiUrl=_[g+1],g+=1;break;case"--canonical-example":D.canonicalExample=!0;break;case"--api-key":D.apiKey=_[g+1],g+=1;break;case"--email":D.email=_[g+1],g+=1;break;case"--org":D.org=_[g+1],g+=1;break;case"--org-id":D.orgId=_[g+1],g+=1;break;case"--user-id":D.userId=_[g+1],g+=1;break;case"--owner":D.owner=_[g+1],g+=1;break;case"--approved-by":D.approvedBy=_[g+1],g+=1;break;case"--patch-uri":D.patchUri=_[g+1],g+=1;break;case"--domain":D.domain=[...D.domain??[],_[g+1]],g+=1;break;case"--file-results":D.fileResults=!0;break;case"--full":D.full=!0;break;case"--dry-run":D.dryRun=!0;break;case"--fake":D.fake=!0;break;case"--no-tailscale":D.tailscale=!1;break;case"--no-artifact-content":D.artifactContent=!1;break;case"--no-color":D.noColor=!0;break;case"--scope":D.scope=_[g+1],g+=1;break;case"--tables":D.tables=_[g+1],g+=1;break;case"--peer-workspace":D.peerWorkspace=_[g+1],g+=1;break;case"--older-than":D.olderThan=Number(_[g+1]),g+=1;break;case"--empty":D.empty=!0;break;case"--archived":D.archived=!0;break;case"--include-archived":D.includeArchived=!0;break;case"--project":D.project=_[g+1],g+=1;break;case"--contract":D.contract=!0;break;case"--source-ref":D.sourceRef=[...D.sourceRef??[],_[g+1]],g+=1;break;case"--allow-global":D.allowGlobal=!0;break;default:throw Error(`Unknown flag: ${I}. Run 'knowledge --help' for valid options.`)}}return{positional:$,flags:D}}function zf(_){if(!_)return"";return p8[_]??_}function Sf(_,$){let D=Array.from({length:_.length+1},()=>Array($.length+1).fill(0));for(let U=0;U<=_.length;U+=1)D[U][0]=U;for(let U=0;U<=$.length;U+=1)D[0][U]=U;for(let U=1;U<=_.length;U+=1)for(let g=1;g<=$.length;g+=1){let I=_[U-1]===$[g-1]?0:1;D[U][g]=Math.min(D[U-1][g]+1,D[U][g-1]+1,D[U-1][g-1]+I)}return D[_.length][$.length]}function Wf(_){if(!_)return"";let $=[...o8,...Object.keys(p8)],D="",U=Number.POSITIVE_INFINITY;for(let g of $){let I=Sf(_,g);if(I<U)U=I,D=g}return U<=3?D:""}function Xf(){return Nf(process.argv[1]??"").replace(/\.(?:js|ts|mjs|cjs)$/,"")==="knowledge"}async function Rf(_){if(!t8.includes(_[0]??""))return!1;let $=new Q8;return $.name("knowledge").description("Agent-friendly local knowledge CLI with JSON output, pagination, and safe destructive actions"),c8($,{source:"knowledge"}),await $.parseAsync(_,{from:"user"}),!0}function Gf(){console.log(`knowledge - local agent knowledge store + `)}var B8=AY(q8(),1),{program:Fm,createCommand:rm,createArgument:bm,createOption:Mm,CommanderError:Zm,InvalidArgumentError:Hm,InvalidOptionArgumentError:km,Command:V8,Argument:Cm,Option:vm,Help:wm}=B8.default;import{chmod as AJ,mkdir as wv,readFile as uv,rename as fv,writeFile as M8}from"fs/promises";import{Buffer as f8}from"buffer";import{existsSync as x8}from"fs";import{homedir as xv}from"os";import{join as FU}from"path";import{createHmac as mv,timingSafeEqual as dm}from"crypto";import{randomUUID as tv}from"crypto";import{spawn as ov}from"child_process";import{randomUUID as $w}from"crypto";function rv(_,$){return $.split(".").reduce((g,U)=>{if(g&&typeof g==="object"&&U in g)return g[U];return},_)}function bv(_,$){let g=[],U=(I)=>{if(!g.some((j)=>Object.is(j,I)))g.push(I)};if($.includes(".")&&$ in _)U(_[$]);let D=rv(_,$);if(D!==void 0||!$.includes("."))U(D);return g}function Mv(_,$={}){let g="";for(let U=0;U<_.length;U+=1){let D=_[U];if(D==="*")if(_[U+1]==="*")g+=".*",U+=1;else g+=$.segmentSafe?"[^/]*":".*";else g+=D.replace(/[|\\{}()[\]^$+?.]/g,"\\$&")}return new RegExp(`^${g}$`)}function BU(_,$,g={}){if($===void 0)return!0;if(_===void 0)return!1;return(Array.isArray($)?$:[$]).some((D)=>Mv(D,g).test(_))}function F8(_,$){if(!$)return!0;return Object.entries($).every(([g,U])=>{let D=bv(_,g);return Zv(D,U,g)})}function Zv(_,$,g){if(Cv($))return!_.some((U)=>r8(U,$.not,g));return _.some((U)=>r8(U,$,g))}function r8(_,$,g){if(typeof $==="string"||Array.isArray($))return Hv(_).some((U)=>BU(U,$,{segmentSafe:g.endsWith("_path")||g.endsWith(".path")}));if(Array.isArray(_))return _.some((U)=>U===$);return _===$}function Hv(_){if(_===void 0)return[];if(Array.isArray(_))return _.flatMap(($)=>kv($)?[String($)]:[]);return[String(_)]}function kv(_){return _===null||typeof _==="string"||typeof _==="number"||typeof _==="boolean"}function Cv(_){return Boolean(_&&typeof _==="object"&&!Array.isArray(_)&&"not"in _)}function vv(_,$){return BU(_.source,$.source)&&BU(_.type,$.type)&&BU(_.subject,$.subject)&&BU(_.severity,$.severity)&&F8(_.data,$.data)&&F8(_.metadata,$.metadata)}function b8(_,$){if(!_.enabled)return!1;if(!_.filters||_.filters.length===0)return!0;return _.filters.some((g)=>vv($,g))}var GE="HASNA_EVENTS_DIR",XE="HASNA_EVENTS_HOME",LJ="local-json-v1:",yv=100,cv=1000;function y8(_){return _||process.env[GE]||process.env[XE]||FU(xv(),".hasna","events")}function hv(){if(process.env[GE])return GE;if(process.env[XE])return XE;return null}class YE{dataDir;runtime;channelsPath;eventsPath;deliveriesPath;constructor(_=y8()){this.dataDir=_,this.runtime=nv(_),this.channelsPath=FU(_,"channels.json"),this.eventsPath=FU(_,"events.json"),this.deliveriesPath=FU(_,"deliveries.json")}async init(){await wv(this.dataDir,{recursive:!0,mode:448}),await AJ(this.dataDir,448).catch(()=>{return}),await this.ensureArrayFile(this.channelsPath),await this.ensureArrayFile(this.eventsPath),await this.ensureArrayFile(this.deliveriesPath)}async addChannel(_){await this.init();let $=await this.readJson(this.channelsPath,[]),g=$.findIndex((U)=>U.id===_.id);if(g>=0)$[g]={..._,createdAt:$[g].createdAt,updatedAt:new Date().toISOString()};else $.push(_);return await this.writeJson(this.channelsPath,$),g>=0?$[g]:_}async listChannels(){return await this.init(),this.readJson(this.channelsPath,[])}async getChannel(_){return(await this.listChannels()).find((g)=>g.id===_)}async removeChannel(_){await this.init();let $=await this.readJson(this.channelsPath,[]),g=$.filter((U)=>U.id!==_);return await this.writeJson(this.channelsPath,g),g.length!==$.length}async appendEvent(_){await this.init();let $=await this.readJson(this.eventsPath,[]);return $.push(_),await this.writeJson(this.eventsPath,$),_}async appendEventOnce(_,$={}){await this.init();let g=await this.readJson(this.eventsPath,[]);if($.dedupe!==!1){let D=H8(g,{id:_.id,dedupeKey:_.dedupeKey});if(D)return{event:D,stored:!1,deduped:!0,identity:{id:D.id,dedupeKey:D.dedupeKey}}}return g.push(_),await this.writeJson(this.eventsPath,g),{event:_,stored:!0,deduped:!1,identity:{id:_.id,dedupeKey:_.dedupeKey}}}async listEvents(_={}){await this.init();let $=await this.readJson(this.eventsPath,[]);return Z8($,_)}async listEventsPage(_={}){await this.init();let $=await this.readJson(this.eventsPath,[]),g=Z8($,{eventId:_.eventId,source:_.source,type:_.type}),U=QE(_.cursor,_),D=TE(_.limit),I=g.slice(U,U+D),j=U+I.length,E=j<g.length;return{events:I,cursor:_.cursor,nextCursor:E?c8(j,_):void 0,hasMore:E}}async findEventByIdentity(_){let $=await this.listEvents();return H8($,_)}async appendDelivery(_){await this.init();let $=await this.readJson(this.deliveriesPath,[]);return $.push(_),await this.writeJson(this.deliveriesPath,$),_}async listDeliveries(){return await this.init(),this.readJson(this.deliveriesPath,[])}async exportData(){return{channels:await this.listChannels(),events:await this.listEvents(),deliveries:await this.listDeliveries()}}async ensureArrayFile(_){if(!x8(_))await M8(_,`[] +`,{encoding:"utf-8",mode:384});await AJ(_,384).catch(()=>{return})}async readJson(_,$){try{let g=await uv(_,"utf-8");if(!g.trim())return $;return JSON.parse(g)}catch(g){if(g.code==="ENOENT")return $;throw g}}async writeJson(_,$){let g=`${_}.${process.pid}.${Date.now()}.tmp`;await M8(g,`${JSON.stringify($,null,2)} +`,{encoding:"utf-8",mode:384}),await fv(g,_),await AJ(_,384).catch(()=>{return})}}function nv(_=y8()){return{mode:"local-files",name:"json-events-store",remote:!1,localFiles:!0,localSqlite:!1,postgres:!1,s3:!1,aws:!1,durable:!0,idempotency:"best-effort-local",replayCursors:!0,description:`Local JSON files in ${_}; no SQLite, Postgres, S3, or AWS runtime is configured by this store.`}}function c8(_,$={}){if(!Number.isInteger(_)||_<0)throw Error(`Invalid event cursor offset: ${_}`);let g={offset:_,eventId:$.eventId,source:$.source,type:$.type};return`${LJ}${f8.from(JSON.stringify(g),"utf-8").toString("base64url")}`}function QE(_,$={}){if(!_)return 0;if(!_.startsWith(LJ))throw Error(`Invalid local JSON event cursor: ${_}`);let g=_.slice(LJ.length),U;try{U=JSON.parse(f8.from(g,"base64url").toString("utf-8"))}catch{throw Error(`Invalid local JSON event cursor: ${_}`)}let D=U.offset;if(!Number.isInteger(D)||D<0)throw Error(`Invalid local JSON event cursor: ${_}`);return OJ("eventId",U.eventId,$.eventId),OJ("source",U.source,$.source),OJ("type",U.type,$.type),D}function TE(_){if(_===void 0)return yv;if(!Number.isInteger(_)||_<1)throw Error(`Event page limit must be a positive integer, got ${_}`);return Math.min(_,cv)}function Z8(_,$){let g=_;if($.eventId)g=g.filter((U)=>U.id===$.eventId);if($.source)g=g.filter((U)=>U.source===$.source);if($.type)g=g.filter((U)=>U.type===$.type);if($.cursor){let U=QE($.cursor,$);g=g.slice(U)}if($.limit!==void 0)g=g.slice(0,TE($.limit));return g}function OJ(_,$,g){if($!==g)throw Error(`Local JSON event cursor ${_} filter mismatch`)}function H8(_,$){return _.find((g)=>$.id!==void 0&&g.id===$.id||$.dedupeKey!==void 0&&g.dedupeKey===$.dedupeKey)}async function dv(_){let $=new YE(_);await $.init();let[g,U,D]=await Promise.all([$.listChannels(),$.listEvents(),$.listDeliveries()]),I=g.reduce((j,E)=>{return j[E.transport]=(j[E.transport]??0)+1,j},{});return{service:"events",schemaVersion:"1.0",dataDir:$.dataDir,storage:$.runtime,env:{primary:GE,fallback:XE,active:hv()},files:{channels:PJ($.dataDir,"channels.json",g.length),events:PJ($.dataDir,"events.json",U.length),deliveries:PJ($.dataDir,"deliveries.json",D.length)},counts:{channels:g.length,enabledChannels:g.filter((j)=>j.enabled).length,disabledChannels:g.filter((j)=>!j.enabled).length,events:U.length,deliveries:D.length},transports:I,safety:{includesEventPayloads:!1,includesWebhookSecrets:!1,listOutputsRedactSecrets:!0,statusOutputIsMetadataOnly:!0}}}function PJ(_,$,g){let U=FU(_,$);return{path:U,exists:x8(U),records:g}}function iv(_,$){return`${_}.${$}`}function lv(_,$,g){return`sha256=${mv("sha256",_).update(iv($,g)).digest("hex")}`}function m$(){return new Date().toISOString()}function VU(_,$=4096){return _.length>$?`${_.slice(0,$)}...`:_}function pv(_,$){if(!$.webhook)throw Error(`Channel ${$.id} has no webhook config`);let g=JSON.stringify(_),U=_.time,D={"Content-Type":"application/json","User-Agent":"@hasna/events","X-Hasna-Event-Id":_.id,"X-Hasna-Event-Type":_.type,"X-Hasna-Timestamp":U,...$.webhook.headers};if($.webhook.secret)D["X-Hasna-Signature"]=lv($.webhook.secret,U,g);return{body:g,headers:D}}async function ev(_,$,g={}){if(!$.webhook)throw Error(`Channel ${$.id} has no webhook config`);let U=m$(),{body:D,headers:I}=pv(_,$),j=new AbortController,E=setTimeout(()=>j.abort(),$.webhook.timeoutMs??15000);try{let A=await(g.fetchImpl??fetch)($.webhook.url,{method:"POST",headers:I,body:D,signal:j.signal}),O=VU(await A.text());return{attempt:1,status:A.ok?"success":"failed",startedAt:U,completedAt:m$(),responseStatus:A.status,responseBody:O,error:A.ok?void 0:`Webhook returned HTTP ${A.status}`}}catch(A){return{attempt:1,status:"failed",startedAt:U,completedAt:m$(),error:A instanceof Error?A.message:String(A)}}finally{clearTimeout(E)}}async function av(_,$){if(!$.command)throw Error(`Channel ${$.id} has no command config`);let g=m$(),U=JSON.stringify(_),D={...process.env,...$.command.env,HASNA_CHANNEL_ID:$.id,HASNA_EVENT_ID:_.id,HASNA_EVENT_TYPE:_.type,HASNA_EVENT_SOURCE:_.source,HASNA_EVENT_SUBJECT:_.subject??"",HASNA_EVENT_SEVERITY:_.severity,HASNA_EVENT_TIME:_.time,HASNA_EVENT_DEDUPE_KEY:_.dedupeKey??"",HASNA_EVENT_SCHEMA_VERSION:_.schemaVersion,HASNA_EVENT_JSON:U};return new Promise((I)=>{let j=ov($.command.command,$.command.args??[],{cwd:$.command.cwd,env:D,stdio:["pipe","pipe","pipe"]}),E="",A="",O=setTimeout(()=>j.kill("SIGTERM"),$.command.timeoutMs??15000);j.stdin.end(U),j.stdout.on("data",(P)=>{E+=P.toString()}),j.stderr.on("data",(P)=>{A+=P.toString()}),j.on("error",(P)=>{clearTimeout(O),I({attempt:1,status:"failed",startedAt:g,completedAt:m$(),stdout:VU(E),stderr:VU(A),error:P.message})}),j.on("close",(P,W)=>{clearTimeout(O);let z=P===0;I({attempt:1,status:z?"success":"failed",startedAt:g,completedAt:m$(),stdout:VU(E),stderr:VU(A),error:z?void 0:`Command exited with ${W?`signal ${W}`:`code ${P}`}`})})})}async function sv(_,$,g={}){if($.transport==="webhook")return ev(_,$,g);if($.transport==="command")return av(_,$);return{attempt:1,status:"skipped",startedAt:m$(),completedAt:m$(),error:`Unsupported transport: ${$.transport}`}}function k8(_,$,g){let U=g.some((D)=>D.status==="success")?"success":g.every((D)=>D.status==="skipped")?"skipped":"failed";return{id:tv(),eventId:_.id,channelId:$.id,transport:$.transport,status:U,attempts:g,createdAt:g[0]?.startedAt??m$(),completedAt:g.at(-1)?.completedAt??m$()}}class h8 extends Error{eventType;issues;constructor(_,$){let g=$.map((U)=>`${U.path||"<root>"}: ${U.message}`).join("; ");super(`Event validation failed for type "${_}": ${g}`);this.name="EventValidationError",this.eventType=_,this.issues=$}}class n8{definitions=new Map;register(_){return this.definitions.set(_.type,_),this}unregister(_){return this.definitions.delete(_)}has(_){return this.definitions.has(_)}get(_){return this.definitions.get(_)}list(){return[...this.definitions.values()]}validateEvent(_){let $=this.definitions.get(_.type);if(!$)return{ok:!0};return $.validate(_.data,_)}assertEventValid(_){let $=this.validateEvent(_);if(!$.ok)throw new h8(_.type,$.issues)}}var _w=new n8;function SJ(_){return{id:_.id??$w(),source:_.source,type:_.type,time:jw(_.time),subject:_.subject,severity:_.severity??"info",data:_.data??{},message:_.message,dedupeKey:_.dedupeKey,schemaVersion:_.schemaVersion??"1.0",metadata:_.metadata??{}}}class d8{store;redactors;transportOptions;catalog;validateCatalogTypes;constructor(_={}){this.store=_.store??new YE(_.dataDir),this.redactors=_.redactors??[],this.transportOptions={fetchImpl:_.fetchImpl},this.catalog=_.catalog??_w,this.validateCatalogTypes=_.validateCatalogTypes??!1}async addChannel(_){let $=new Date().toISOString();return this.store.addChannel({..._,createdAt:_.createdAt??$,updatedAt:_.updatedAt??$})}async listChannels(){return this.store.listChannels()}async removeChannel(_){return this.store.removeChannel(_)}async emit(_,$={}){let g=$.redactSensitiveData===!1?SJ(_):Uw(SJ(_));if($.validate??this.validateCatalogTypes)this.catalog.assertEventValid(g);let U=await this.appendEvent(g,{dedupe:$.dedupe!==!1});if(U.deduped)return{event:U.event,deliveries:[],deduped:!0};let D=$.deliver===!1?[]:await this.deliver(U.event);return{event:U.event,deliveries:D,deduped:!1}}async listEvents(_={}){if(Object.keys(_).length===0)return this.store.listEvents();return C8(await this.store.listEvents(),_)}async listEventsPage(_={}){if(this.store.listEventsPage)return this.store.listEventsPage(_);let $=C8(await this.store.listEvents(),{eventId:_.eventId,source:_.source,type:_.type}),g=QE(_.cursor,_),U=TE(_.limit),D=$.slice(g,g+U),I=g+D.length,j=I<$.length;return{events:D,cursor:_.cursor,nextCursor:j?c8(I,_):void 0,hasMore:j}}async listDeliveries(){return this.store.listDeliveries()}async deliver(_){let g=(await this.store.listChannels()).filter((D)=>b8(D,_)),U=[];for(let D of g){let I=await this.applyRedaction(_,D),j=await this.deliverWithRetry(I,D);await this.store.appendDelivery(j),U.push(j)}return U}async matchChannel(_,$={}){let g=await this.store.getChannel(_);if(!g)throw Error(`Channel not found: ${_}`);let U=SJ({source:$.source??"hasna.events",type:$.type??"events.test",subject:$.subject??_,severity:$.severity??"info",data:$.data??{test:!0},message:$.message??"Hasna events test delivery",dedupeKey:$.dedupeKey,schemaVersion:$.schemaVersion,metadata:$.metadata,time:$.time,id:$.id}),D=b8(g,U);return{channelId:g.id,matched:D,event:U,filters:g.filters,reason:D?void 0:g.enabled?"event did not match channel filters":"channel is disabled"}}async testChannel(_,$={},g={}){let U=await this.store.getChannel(_);if(!U)throw Error(`Channel not found: ${_}`);let D=await this.matchChannel(_,$),I=D.event;if(g.honorFilters&&!D.matched){let A=new Date().toISOString(),O=k8(I,U,[{attempt:1,status:"skipped",startedAt:A,completedAt:A,error:D.reason}]);return O.metadata={reason:"filter_mismatch"},await this.store.appendDelivery(O),O}let j=await this.applyRedaction(I,U),E=await this.deliverWithRetry(j,U);return await this.store.appendDelivery(E),E}async replay(_={}){let $=_.cursor||_.limit!==void 0?await this.listEventsPage(_):{events:await this.listEvents(_),hasMore:!1};if(_.dryRun)return{events:$.events,deliveries:[],cursor:$.cursor,nextCursor:$.nextCursor,hasMore:$.hasMore};let g=[];for(let U of $.events)g.push(...await this.deliver(U));return{events:$.events,deliveries:g,cursor:$.cursor,nextCursor:$.nextCursor,hasMore:$.hasMore}}async appendEvent(_,$){if(this.store.appendEventOnce)return this.store.appendEventOnce(_,{dedupe:$.dedupe});if($.dedupe){let U=await this.store.findEventByIdentity({id:_.id,dedupeKey:_.dedupeKey});if(U)return{event:U,stored:!1,deduped:!0,identity:{id:U.id,dedupeKey:U.dedupeKey}}}let g=await this.store.appendEvent(_);return{event:g,stored:!0,deduped:!1,identity:{id:g.id,dedupeKey:g.dedupeKey}}}async applyRedaction(_,$){let g=gw(_,$.redact?.paths??[],$.redact?.replacement??"[REDACTED]");for(let U of this.redactors)g=await U(g,$);return g}async deliverWithRetry(_,$){let g=Ew($.retry),U=[];for(let D=0;D<g.maxAttempts;D+=1){let I=await sv(_,$,this.transportOptions);if(I.attempt=D+1,I.status==="failed"&&D+1<g.maxAttempts)I.nextBackoffMs=Math.round(g.backoffMs*g.multiplier**D);if(U.push(I),I.status!=="failed")break;if(I.nextBackoffMs)await Bun.sleep(I.nextBackoffMs)}return k8(_,$,U)}}function gw(_,$,g="[REDACTED]"){if($.length===0)return _;let U=structuredClone(_);for(let D of $)Iw(U,D,g);return U}function m8(_){let $=structuredClone(_);if($.webhook?.secret)$.webhook.secret="[REDACTED]";if($.command?.env)$.command.env=Object.fromEntries(Object.entries($.command.env).map(([g,U])=>[g,i8(g)?"[REDACTED]":U]));return $}function Dw(_){return _.map(m8)}function Uw(_,$="[REDACTED]"){return WJ(_,$)}function i8(_){return/secret|token|password|api[_-]?key|authorization/i.test(_)}function WJ(_,$){if(Array.isArray(_))return _.map((g)=>WJ(g,$));if(!_||typeof _!=="object")return _;return Object.fromEntries(Object.entries(_).map(([g,U])=>[g,i8(g)?$:WJ(U,$)]))}function Iw(_,$,g){let U=$.split("."),D=_;for(let j of U.slice(0,-1)){let E=D[j];if(!E||typeof E!=="object")return;D=E}let I=U.at(-1);if(I&&I in D)D[I]=g}function C8(_,$){let g=_;if($.eventId)g=g.filter((U)=>U.id===$.eventId);if($.source)g=g.filter((U)=>U.source===$.source);if($.type)g=g.filter((U)=>U.type===$.type);if($.cursor)g=g.slice(QE($.cursor,$));if($.limit!==void 0)g=g.slice(0,TE($.limit));return g}function jw(_){if(!_)return new Date().toISOString();return _ instanceof Date?_.toISOString():_}function Ew(_){return{maxAttempts:Math.max(1,_?.maxAttempts??1),backoffMs:Math.max(0,_?.backoffMs??250),multiplier:Math.max(1,_?.multiplier??2)}}function RE(_,$,g=!1){if(!_?.length)return;let U={};for(let D of _){let I=Ow(D,$),j=I.path;if(j in U)throw Error(`Duplicate ${$} filter path: ${j}`);let E=g?Aw(I.rawValue,$):I.rawValue;U[j]=I.negated?{not:E}:E}return U}function Nw(_){let $={};if(_.source)$.source=_.source;if(_.type)$.type=_.type;if(_.subject)$.subject=_.subject;if(_.severity)$.severity=_.severity;let g=v8(RE(_.data,"data"),RE(_.dataJson,"data-json",!0)),U=v8(RE(_.metadata,"metadata"),RE(_.metadataJson,"metadata-json",!0));if(Object.keys(g).length>0)$.data=g;if(Object.keys(U).length>0)$.metadata=U;return Object.keys($).length>0?[$]:void 0}function v8(..._){let $={};for(let g of _){if(!g)continue;for(let[U,D]of Object.entries(g)){if(U in $)throw Error(`Duplicate filter path: ${U}`);$[U]=D}}return $}function Aw(_,$){let g=JSON.parse(_);if(g===null||typeof g==="string"||typeof g==="number"||typeof g==="boolean"||Array.isArray(g)&&g.every((U)=>typeof U==="string"))return g;throw Error(`${$} filter JSON values must be string, string[], number, boolean, or null`)}function Ow(_,$){let g=_.indexOf("!=");if(g>0)return{path:_.slice(0,g),rawValue:_.slice(g+2),negated:!0};let U=_.indexOf("=");if(U<=0)throw Error(`Invalid ${$} filter, expected path=value or path!=value: ${_}`);return{path:_.slice(0,U),rawValue:_.slice(U+1),negated:!1}}var Pw=100;function q0(_,$){if(!_)return $;let g=JSON.parse(_);if(!g||typeof g!=="object"||Array.isArray(g))throw Error("Expected a JSON object");return g}function Sw(_){if(!_?.length)return;let $={};for(let g of _){let U=g.indexOf("=");if(U===-1)throw Error(`Invalid header, expected name=value: ${g}`);$[g.slice(0,U)]=g.slice(U+1)}return $}function e6(_){if(_.createClient)return _.createClient();return new d8({store:new YE(_.dataDir)})}function _4(_,$,g){if($)console.log(JSON.stringify(_,null,2));else console.log(g)}function w8(_,$){let g=_ instanceof Error?_.message:String(_);if($)console.log(JSON.stringify({error:g},null,2));else console.error(g);process.exitCode=1}function u8(_){return Boolean(_?.json||_?.opts?.().json||_?.optsWithGlobals?.().json||_?.parent?.opts?.().json||_?.parent?.optsWithGlobals?.().json)}function G6(_,$){return u8(_)||u8($)}function Lw(_,$){let g=_.command($.channelsCommandName??"channels").description("Manage Hasna event channels");return g.command("add").description("Add or replace a channel").argument("<target>","Webhook URL or command binary").requiredOption("--id <id>","Channel identifier").option("--transport <kind>","Transport kind: webhook or command","webhook").option("--name <name>","Display name").option("--type <pattern>","Event type filter, e.g. todos.task.*").option("--source <pattern>","Event source filter").option("--subject <pattern>","Event subject filter").option("--severity <pattern>","Event severity filter").option("--data <path=value...>","Event data field filter; string values, path!=value negatives, array-member matching, dot paths, * segment wildcard, ** recursive wildcard",sg,[]).option("--metadata <path=value...>","Event metadata field filter; string values, path!=value negatives, array-member matching, dot paths, * segment wildcard, ** recursive wildcard",sg,[]).option("--data-json <path=json...>","Event data field filter with typed JSON value; path!=json negatives supported",sg,[]).option("--metadata-json <path=json...>","Event metadata field filter with typed JSON value; path!=json negatives supported",sg,[]).option("--secret <secret>","Webhook HMAC secret").option("--header <name=value...>","Webhook header",sg,[]).option("--arg <arg...>","Command argument",sg,[]).option("--timeout-ms <ms>","Transport timeout in milliseconds",rU).option("--retry-attempts <n>","Maximum delivery attempts",rU).option("--retry-backoff-ms <ms>","Initial retry backoff in milliseconds",rU).option("--redact <path...>","Event field path to redact before delivery",sg,[]).option("--disabled","Create channel disabled",!1).option("-j, --json","Print JSON output",!1).action(async(U,D,I)=>{let j=new Date().toISOString(),E={id:D.id,name:D.name,enabled:!D.disabled,transport:D.transport,filters:Nw(D),retry:D.retryAttempts||D.retryBackoffMs?{maxAttempts:D.retryAttempts,backoffMs:D.retryBackoffMs}:void 0,redact:D.redact?.length?{paths:D.redact}:void 0,createdAt:j,updatedAt:j};if(D.transport==="webhook")E.webhook={url:U,secret:D.secret,headers:Sw(D.header),timeoutMs:D.timeoutMs};else if(D.transport==="command")E.command={command:U,args:D.arg??[],timeoutMs:D.timeoutMs};else throw Error(`Transport ${D.transport} is reserved for future use and cannot be added yet`);let A=await e6($).addChannel(E);_4(m8(A),G6(D,I),`Added ${A.transport} channel ${A.id}`)}),g.command("list").description("List configured channels").option("-j, --json","Print JSON output",!1).action(async(U,D)=>{let I=await e6($).listChannels();if(G6(U,D)){console.log(JSON.stringify(Dw(I),null,2));return}if(!I.length){console.log("No channels configured.");return}for(let j of I)console.log(`${j.id} ${j.enabled?"enabled":"disabled"} ${j.transport} ${j.webhook?.url??j.command?.command??j.transport}`)}),g.command("status").description("Show events channel storage status").option("-j, --json","Print JSON output",!1).action(async(U,D)=>{let I=await dv($.dataDir);_4(I,G6(U,D),`events dataDir: ${I.dataDir}`)}),g.command("remove").description("Remove a channel").argument("<id>","Channel identifier").option("-j, --json","Print JSON output",!1).action(async(U,D,I)=>{let j=await e6($).removeChannel(U);_4({removed:j},G6(D,I),j?`Removed ${U}`:`Channel not found: ${U}`)}),g.command("test").description("Send a test event to one channel").argument("<id>","Channel identifier").option("--source <source>","Event source override").option("--type <type>","Event type","events.test").option("--subject <subject>","Event subject").option("--message <message>","Event message","Hasna events test delivery").option("--data <json>","Event data JSON object").option("--metadata <json>","Event metadata JSON object").option("--honor-filters","Skip delivery when the sample event does not match channel filters",!1).option("-j, --json","Print JSON output",!1).action(async(U,D,I)=>{let j=G6(D,I);try{let E=await e6($).testChannel(U,{source:D.source??$.source,type:D.type,subject:D.subject??U,message:D.message,data:q0(D.data,{test:!0}),metadata:q0(D.metadata,{})},{honorFilters:D.honorFilters});_4(E,j,`${E.status}: ${E.channelId}`)}catch(E){w8(E,j)}}),g.command("match").description("Check whether a sample event matches one channel without delivering").argument("<id>","Channel identifier").option("--source <source>","Event source override").option("--type <type>","Event type","events.test").option("--subject <subject>","Event subject").option("--message <message>","Event message","Hasna events match preview").option("--data <json>","Event data JSON object").option("--metadata <json>","Event metadata JSON object").option("-j, --json","Print JSON output",!1).action(async(U,D,I)=>{let j=G6(D,I);try{let E=await e6($).matchChannel(U,{source:D.source??$.source,type:D.type,subject:D.subject??U,message:D.message,data:q0(D.data,{test:!0}),metadata:q0(D.metadata,{})});_4(E,j,`${E.matched?"matched":"skipped"}: ${E.channelId}`)}catch(E){w8(E,j)}}),g}function Ww(_,$){let g=_.command($.eventsCommandName??"events").description("Emit, list, and replay Hasna events");g.command("emit").description("Emit an event from this app").argument("<type>","Event type").option("--source <source>","Event source override").option("--subject <subject>","Event subject").option("--severity <severity>","Event severity","info").option("--message <message>","Event message").option("--dedupe-key <key>","Dedupe key").option("--data <json>","Event data JSON object").option("--metadata <json>","Event metadata JSON object").option("--no-deliver","Record without delivering").option("--no-dedupe","Allow duplicate id/dedupeKey events").option("-j, --json","Print JSON output",!1).action(async(D,I,j)=>{let E=await e6($).emit({source:I.source??$.source,type:D,subject:I.subject,severity:I.severity,message:I.message,dedupeKey:I.dedupeKey,data:q0(I.data,{}),metadata:q0(I.metadata,{})},{deliver:I.deliver,dedupe:I.dedupe});_4(E,G6(I,j),`${E.deduped?"Deduped":"Emitted"} ${E.event.id} to ${E.deliveries.length} channel(s)`)});let U=$.defaultEventListLimit??Pw;return g.command("list").description("List recorded events").option("--source <source>","Filter by source").option("--type <type>","Filter by type").option("--limit <n>",`Limit to the most recent <n> events (default ${U}; use 0 for all)`,rU,U).option("-j, --json","Print JSON output",!1).action(async(D,I)=>{let j=await e6($).listEvents();if(D.source)j=j.filter((E)=>E.source===D.source);if(D.type)j=j.filter((E)=>E.type===D.type);if(D.limit)j=j.slice(-D.limit);if(G6(D,I)){console.log(JSON.stringify(j,null,2));return}if(!j.length){console.log("No events recorded.");return}for(let E of j)console.log(`${E.time} ${E.id} ${E.source} ${E.type} ${E.severity}`)}),g.command("replay").description("Replay recorded events").option("--id <id>","Replay one event id").option("--source <source>","Filter by source").option("--type <type>","Filter by type").option("--cursor <cursor>","Opaque replay cursor from a previous page").option("--limit <n>","Maximum events to replay",rU).option("--dry-run","Preview without delivery",!1).option("-j, --json","Print JSON output",!1).action(async(D,I)=>{let j=await e6($).replay({eventId:D.id,source:D.source,type:D.type,cursor:D.cursor,limit:D.limit,dryRun:D.dryRun});_4(j,G6(D,I),Jw(j.events.length,j.deliveries.length,j.nextCursor))}),g}function l8(_,$){Lw(_,$),Ww(_,$)}function rU(_){let $=Number(_);if(!Number.isFinite($))throw Error(`Expected a number, got ${_}`);return $}function sg(_,$){return $.push(_),$}function Jw(_,$,g){let U=g?`, next cursor: ${g}`:"";return`Replayed ${_} event(s), ${$} delivery result(s)${U}`}import{basename as Rw}from"path";var H$={name:"@hasna/knowledge",version:"0.2.100",description:"Agent-friendly local knowledge CLI with JSON output, pagination, and safe destructive actions",type:"module",exports:{".":{import:"./dist/index.js",types:"./dist/index.d.ts"},"./storage":{import:"./dist/storage.js",types:"./dist/storage.d.ts"},"./serve":{import:"./dist/serve.js",types:"./dist/serve.d.ts"}},main:"./dist/index.js",types:"./dist/index.d.ts",bin:{knowledge:"bin/knowledge.js","knowledge-mcp":"bin/knowledge-mcp.js","knowledge-serve":"bin/knowledge-serve.js"},files:["bin","dist","scripts/apply-cloud-migrations.mjs","scripts/live-private-query.mjs","scripts/lib/remote-temp-dir.mjs","scripts/smoke-machine-sync-release.mjs","scripts/smoke-machines-adapter.mjs","scripts/smoke-open-files-installed-boundary.mjs","scripts/strip-generated-trailing-whitespace.mjs","scripts/verify-generated-artifacts.mjs","docs/architecture/ai-native-knowledge-base.md","docs/architecture/hosted-wrapper-responsibilities.md","docs/architecture/hybrid-semantic-search.md","docs/architecture/machine-sync-schema.md","docs/examples/app-project-wiki-standard.md","docs/examples/company-wiki-workflow.md","docs/migration/global-rules-provenance-import.md","docs/migration/json-to-sqlite.md","LICENSE","README.md"],scripts:{test:"bun test","test:cli":"bun test tests/cli.test.ts","test:package":"bun test tests/package-release.test.ts","release:pack:check":"node scripts/validate-public-package.mjs","smoke:machines-adapter":"bun scripts/smoke-machines-adapter.mjs","smoke:machine-sync-release":"bun scripts/smoke-machine-sync-release.mjs","smoke:open-files-installed-boundary":"bun scripts/smoke-open-files-installed-boundary.mjs","migrate:cloud":"bun scripts/apply-cloud-migrations.mjs","live:private-query":"bun scripts/live-private-query.mjs",serve:"bun src/serve-entry.ts","verify:generated":"bun scripts/verify-generated-artifacts.mjs","contracts:conformance":"contracts conformance fixtures",build:"rm -rf dist && bun build --target=bun --outfile=bin/knowledge.js --minify --external pg --external @hasna/machines --external @hasna/machines/consumer --external @aws-sdk/client-s3 --external @aws-sdk/credential-providers --external ai --external @ai-sdk/openai --external @ai-sdk/anthropic --external @ai-sdk/deepseek src/cli.ts && bun build --target=bun --outfile=bin/knowledge-mcp.js --external pg --external @hasna/machines --external @hasna/machines/consumer --external @modelcontextprotocol/sdk --external @aws-sdk/client-s3 --external @aws-sdk/credential-providers --external ai --external @ai-sdk/openai --external @ai-sdk/anthropic --external @ai-sdk/deepseek src/mcp.js && bun build --target=bun --outfile=bin/knowledge-serve.js --external pg --external @hasna/machines --external @hasna/machines/consumer --external @aws-sdk/client-s3 --external @aws-sdk/credential-providers --external ai --external @ai-sdk/openai --external @ai-sdk/anthropic --external @ai-sdk/deepseek src/serve-entry.ts && bun build ./src/index.ts ./src/storage.ts ./src/serve.ts --outdir ./dist --target bun --external pg --external @hasna/machines --external @hasna/machines/consumer --external @aws-sdk/client-s3 --external @aws-sdk/credential-providers --external ai --external @ai-sdk/openai --external @ai-sdk/anthropic --external @ai-sdk/deepseek && bun scripts/strip-generated-trailing-whitespace.mjs && bunx tsc -p tsconfig.build.json",prepublishOnly:"bun run contracts:conformance && contracts no-cloud-scan . && bun run build && node scripts/validate-public-package.mjs"},keywords:["knowledge","cli","agents","json","notes","local","store"],license:"Apache-2.0",publishConfig:{registry:"https://registry.npmjs.org",access:"public"},repository:{type:"git",url:"git+https://github.com/hasna/knowledge.git"},bugs:{url:"https://github.com/hasna/knowledge/issues"},author:"Hasna Inc. <hasna@example.com>",engines:{bun:">=1.0",node:">=18"},dependencies:{"@ai-sdk/anthropic":"^3.0.81","@ai-sdk/deepseek":"^2.0.35","@ai-sdk/openai":"^3.0.68","@aws-sdk/client-s3":"^3.1063.0","@aws-sdk/credential-providers":"^3.1063.0","@hasna/events":"^0.1.3","@modelcontextprotocol/sdk":"^1.29.0","@types/json-schema":"^7.0.15",ai:"^6.0.197",commander:"^13.1.0",pg:"^8.16.3",zod:"^4.3.6"},devDependencies:{"@electric-sql/pglite":"^0.5.4","@hasna/contracts":"0.8.5","@types/bun":"^1.3.14","@types/pg":"^8.15.6"}};var t8={debug:0,info:1,warn:2,error:3},Gw=()=>{if(process.env.DEBUG)return"debug";if(process.env.LOG_LEVEL==="debug")return"debug";if(process.env.LOG_LEVEL==="warn")return"warn";if(process.env.LOG_LEVEL==="error")return"error";return"info"};function g4(_,$,g){if(t8[_]<t8[Gw()])return;let U={debug:"[DEBUG]",info:"[INFO]",warn:"[WARN]",error:"[ERROR]"}[_],D=g?`${U} ${$} ${JSON.stringify(g)}`:`${U} ${$}`;if(_==="error")console.error(D);else console.error(D)}var s8=["events","webhooks"],_Y=["add","list","get","delete","update","archive","restore","upsert","untag","versions","diff","export","prune","dedupe","stats","inventory","project-panel","paths","mode","guarded","setup","auth","storage","machines","sync","db","wiki","app-wiki","source","ingest","reindex","search","context","proposals","web","ask","build","embeddings","providers","safety","help",...s8],$Y={ls:"list",rm:"delete",edit:"update",unarchive:"restore"},Xw=/^k_[A-Za-z0-9][A-Za-z0-9_-]*$/;async function Yw(_,$,g){if(/\s/.test($))return!0;if(_.length<=1)return!1;let U=_[1]??"";if(Xw.test(U))return!1;return await g.get(U)===null}function Qw(_){let $=new Set,g=[];for(let U of _){let D=U.toLowerCase();if($.has(D))continue;$.add(D),g.push(U)}return g}function o8(_,$){let g=new Set((_??[]).map((U)=>U.toLowerCase()));return $.filter((U)=>!g.has(U.toLowerCase()))}function JJ(_,$,g){if(g===void 0)return{..._,message:$};return{..._,added:g.length,message:`${$} (added ${g.length} tag${g.length===1?"":"s"})`}}function Tw(_,$){if($===void 0)throw Error("Missing value for --tag. Example: knowledge add <title> <content> -t <tag> -t <tag>");let g=$.split(",").map((U)=>U.trim()).filter((U)=>U.length>0);if(g.length===0)throw Error(`Invalid --tag value ${JSON.stringify($)}: no tag name found. Example: knowledge add <title> <content> -t <tag> -t <tag>`);return Qw([..._??[],...g])}function Kw(_){let $=[],g={},U=!1;for(let D=0;D<_.length;D+=1){let I=_[D];if(U){$.push(I);continue}if(I==="--"){U=!0;continue}if(!I.startsWith("-")||$[0]==="add"&&$.length===2&&I.startsWith("---")){$.push(I);continue}switch(I){case"--json":g.json=!0;break;case"--verbose":g.verbose=!0;break;case"--yes":case"-y":g.yes=!0;break;case"--help":case"-h":g.help=!0;break;case"--version":case"-v":g.version=!0;break;case"--desc":g.desc=!0;break;case"--page":case"-p":g.page=Number(_[D+1]),D+=1;break;case"--limit":case"-l":g.limit=Number(_[D+1]),D+=1;break;case"--search":case"-s":g.search=_[D+1],D+=1;break;case"--sort":g.sort=_[D+1],D+=1;break;case"--id":g.id=_[D+1],D+=1;break;case"--store":g.store=_[D+1],D+=1;break;case"--title":g.title=_[D+1],D+=1;break;case"--content":g.content=_[D+1],D+=1;break;case"--url":g.url=_[D+1],D+=1;break;case"--tag":case"-t":g.tag=Tw(g.tag,_[D+1]),g.tagRaw=[...g.tagRaw??[],_[D+1]],D+=1;break;case"--format":g.format=_[D+1],D+=1;break;case"--completions":g.completions=_[D+1],D+=1;break;case"--purpose":g.purpose=_[D+1],D+=1;break;case"--model":g.model=_[D+1],D+=1;break;case"--strategy":g.strategy=_[D+1],D+=1;break;case"--dimensions":g.dimensions=Number(_[D+1]),D+=1;break;case"--semantic":g.semantic=!0;break;case"--context":g.context=!0;break;case"--max-tokens":g.maxTokens=Number(_[D+1]),D+=1;break;case"--max-items":g.maxItems=Number(_[D+1]),D+=1;break;case"--from":g.from=_[D+1],D+=1;break;case"--to":g.to=_[D+1],D+=1;break;case"--rev":g.rev=Number(_[D+1]),D+=1;break;case"--if-version":g.ifVersion=Number(_[D+1]),D+=1;break;case"--since":g.since=_[D+1],D+=1;break;case"--topic":g.topic=_[D+1],D+=1;break;case"--dedupe":g.dedupe=!0;break;case"--generate":g.generate=!0;break;case"--approve-write":g.approveWrite=!0;break;case"--provider":g.provider=_[D+1],D+=1;break;case"--mode":g.mode=_[D+1],D+=1;break;case"--machine":g.machine=_[D+1],D+=1;break;case"--workspace":g.workspace=_[D+1],D+=1;break;case"--api-url":g.apiUrl=_[D+1],D+=1;break;case"--canonical-example":g.canonicalExample=!0;break;case"--api-key":g.apiKey=_[D+1],D+=1;break;case"--email":g.email=_[D+1],D+=1;break;case"--org":g.org=_[D+1],D+=1;break;case"--org-id":g.orgId=_[D+1],D+=1;break;case"--user-id":g.userId=_[D+1],D+=1;break;case"--owner":g.owner=_[D+1],D+=1;break;case"--approved-by":g.approvedBy=_[D+1],D+=1;break;case"--patch-uri":g.patchUri=_[D+1],D+=1;break;case"--domain":g.domain=[...g.domain??[],_[D+1]],D+=1;break;case"--file-results":g.fileResults=!0;break;case"--full":g.full=!0;break;case"--dry-run":g.dryRun=!0;break;case"--fake":g.fake=!0;break;case"--no-tailscale":g.tailscale=!1;break;case"--no-artifact-content":g.artifactContent=!1;break;case"--no-color":g.noColor=!0;break;case"--scope":g.scope=_[D+1],D+=1;break;case"--tables":g.tables=_[D+1],D+=1;break;case"--peer-workspace":g.peerWorkspace=_[D+1],D+=1;break;case"--older-than":g.olderThan=Number(_[D+1]),D+=1;break;case"--empty":g.empty=!0;break;case"--archived":g.archived=!0;break;case"--include-archived":g.includeArchived=!0;break;case"--project":g.project=_[D+1],D+=1;break;case"--contract":g.contract=!0;break;case"--source-ref":g.sourceRef=[...g.sourceRef??[],_[D+1]],D+=1;break;case"--allow-global":g.allowGlobal=!0;break;default:throw Error(`Unknown flag: ${I}. Run 'knowledge --help' for valid options.`)}}return{positional:$,flags:g}}function qw(_){if(!_)return"";return $Y[_]??_}function Bw(_,$){let g=Array.from({length:_.length+1},()=>Array($.length+1).fill(0));for(let U=0;U<=_.length;U+=1)g[U][0]=U;for(let U=0;U<=$.length;U+=1)g[0][U]=U;for(let U=1;U<=_.length;U+=1)for(let D=1;D<=$.length;D+=1){let I=_[U-1]===$[D-1]?0:1;g[U][D]=Math.min(g[U-1][D]+1,g[U][D-1]+1,g[U-1][D-1]+I)}return g[_.length][$.length]}function Vw(_){if(!_)return"";let $=[..._Y,...Object.keys($Y)],g="",U=Number.POSITIVE_INFINITY;for(let D of $){let I=Bw(_,D);if(I<U)U=I,g=D}return U<=3?g:""}function Fw(){return Rw(process.argv[1]??"").replace(/\.(?:js|ts|mjs|cjs)$/,"")==="knowledge"}async function rw(_){if(!s8.includes(_[0]??""))return!1;let $=new V8;return $.name("knowledge").description("Agent-friendly local knowledge CLI with JSON output, pagination, and safe destructive actions"),l8($,{source:"knowledge"}),await $.parseAsync(_,{from:"user"}),!0}function bw(){console.log(`knowledge - local agent knowledge store Usage: knowledge <command> [options] @@ -1492,7 +1492,7 @@ Export Options: Prune Options: --older-than <days> Remove items older than N days - --empty Remove items with empty content`)}function Yf(_){if(_==="add"){console.log(`Usage: knowledge add <title> <content> [--url <url>] [-t <tag>]... [--json] + --empty Remove items with empty content`)}function Mw(_){if(_==="add"){console.log(`Usage: knowledge add <title> <content> [--url <url>] [-t <tag>]... [--json] -t/--tag is repeatable and accepts comma-separated values: -t a -t b == -t "a,b"`);return}if(_==="list"||_==="ls"){console.log(`Usage: knowledge list|ls [--format table|json] [-p <page>] [-l <limit>] [-s <search>] [-t <tag>]... [--sort created|title] [--desc] [--archived] [--include-archived] [--verbose] [--json] -s/--search is a CASE-INSENSITIVE LITERAL SUBSTRING filter over id, title and content \u2014 not a tokenised or semantic search, so a word order that never appears verbatim matches nothing. It @@ -1533,30 +1533,30 @@ Prune Options: which env var selected it. Reads the environment only: no store is opened, no config file is read, and no request is made, so it is safe on a machine with no config and no network. Selection is EXPLICIT-ONLY: set ${o$[0]}=sqlite|postgres. Setting only - ${xU[0]} / ${yU[0]} does NOT switch backends; + ${fU[0]} / ${xU[0]} does NOT switch backends; those are reported as present-but-ignored pointers. Env var NAMES are printed, never values.`);return}if(_==="guarded"){console.log(`Usage: knowledge guarded capabilities [--json] Reports metadata-only FCAME-1 private input, private result, and exact-title lookup support.`);return}if(_==="setup"){console.log("Usage: knowledge setup --mode local|hosted [--api-url https://...] [--canonical-example] [--scope local|global|project] [--json]");return}if(_==="auth"){console.log("Usage: knowledge auth login|whoami|logout [--api-key <key>] [--email <email>] [--org <slug>] [--api-url https://...] [--scope local|global|project] [--json]");return}if(_==="storage"){console.log(`Usage: knowledge storage status|validate|repair-artifact-keys|migrate-legacy-path|merge-legacy-path [--approve-write --approved-by <name>] [--scope local|global|project] [--json] knowledge storage import-legacy [--dry-run] [--scope global] [--json]`);return}if(_==="machines"){console.log("Usage: knowledge machines topology [--no-tailscale] | preflight [machine] [--workspace <repo>] [--scope local|global|project] [--verbose] [--json]");return}if(_==="sync"){console.log(`Usage: knowledge sync status|doctor|readiness|snapshot|machines|conflicts [show|propose|resolve] [id] | dry-run|pull|push|sync|export|import [--peer-workspace <path>] [--machine <ssh-alias>] [--tables <names>] [--dry-run] [--limit <n>] [--approve-write] [--approved-by <name>] [--strategy <name>] [--mode deterministic|ai] [--model <alias|provider:model>] [--fake] [--no-tailscale] [--scope local|global|project] [--verbose] [--json] -Remote machine sync resolves peer paths through @hasna/machines when --peer-workspace is omitted.`);return}if(_==="db"){console.log("Usage: knowledge db init|stats|storage status [--scope local|global|project] [--json]");return}if(_==="wiki"){console.log("Usage: knowledge wiki init|compile|file-answer|lint [query|prompt] [--title <title>] [--content <answer>] [--approve-write] [--limit <n>] [--scope local|global|project] [--json]");return}if(_==="app-wiki"){console.log("Usage: knowledge app-wiki init | note add|get|list | source add <source-ref> | search <query> | query <query> [--title <title>] [--content <text>] [--tag <tag>] [--source-ref <uri>] [--scope project|local|global] [--allow-global] [--json]");return}if(_==="source"){console.log("Usage: knowledge source resolve <source-ref> [--purpose knowledge_answer|knowledge_index] [--limit <n>] [--scope local|global|project] [--json]");return}if(_==="ingest"){console.log("Usage: knowledge ingest manifest <file|s3://bucket/key> | source <source-ref> | rules [--workspace <path>] [--owner <name>] [--dry-run] [--max-items <n>] [--limit <n>] [--purpose knowledge_index] [--scope local|global|project] [--json]");return}if(_==="reindex"){console.log("Usage: knowledge reindex status|enqueue|embeddings|outbox [file|s3://bucket/key] [--full] [--fake] [--scope local|global|project] [--json]");return}if(_==="search"){console.log("Usage: knowledge search <query> [--context] [--semantic] [--model openai:text-embedding-3-small] [--limit <n>] [--dimensions <n>] [--fake] [--scope local|global|project] [--verbose] [--json]");return}if(_==="context"){console.log("Usage: knowledge context pack <query> [--from search|runs|loops] [--max-tokens <n>] [--max-items <n>] [--limit <n>] [--semantic] [--model openai:text-embedding-3-small] [--dimensions <n>] [--fake] [--scope local|global|project] [--verbose] [--json]");return}if(_==="proposals"){console.log("Usage: knowledge proposals context --from loops --topic <text> [--since <duration|ISO>] [--dedupe] [--max-tokens <n>] [--max-items <n>] [--scope local|global|project] [--json]");return}if(_==="web"){console.log("Usage: knowledge web search <query> [--provider openai|anthropic] [--model provider:model] [--domain <domain>] [--file-results] [--fake] [--scope local|global|project] [--verbose] [--json]");return}if(_==="ask"||_==="build"){console.log("Usage: knowledge ask|build <prompt> [--generate] [--semantic] [--model default|provider:model] [--approve-write] [--scope local|global|project] [--verbose] [--json]");return}if(_==="embeddings"){console.log("Usage: knowledge embeddings status|index|search [query] [--model openai:text-embedding-3-small] [--limit <n>] [--dimensions <n>] [--fake] [--scope local|global|project] [--verbose] [--json]");return}if(_==="providers"){console.log("Usage: knowledge providers status|models|check [provider|model-alias] [--scope local|global|project] [--json]");return}if(_==="safety"){console.log("Usage: knowledge safety status|check|approve|audit|redact [args] [--scope local|global|project] [--json]");return}if(_==="events"){console.log("Usage: knowledge events emit|list|replay [args] [--json]");return}if(_==="webhooks"){console.log("Usage: knowledge webhooks add|list|remove|test [args] [--json]");return}Gf()}function Qf(_){if(_.noColor||process.env.NO_COLOR)return!1;if(process.env.FORCE_COLOR)return!0;return process.stdout.isTTY===!0}function v(_,$,D){if($){console.log(JSON.stringify(_,null,2));return}if(typeof _==="string"){console.log(_);return}if(D?.verbose){console.log(JSON.stringify(_,null,2));return}let U=_.message;console.log(U?`${U} -${i_()}`:Tf(_))}function i_(_="full details"){return`Hint: use --verbose for ${_}, or --json for machine-readable output.`}function D_(_,$=120){let D=_===null||_===void 0?"":String(_).replace(/\s+/g," ").trim();if(D.length<=$)return D;return`${D.slice(0,Math.max(0,$-3))}...`}function Tf(_){if(!_||typeof _!=="object")return String(_);let $=_,D=[$.ok===!1?"Result: not ok":"Result: ok"];for(let[U,g]of Object.entries($).slice(0,8)){if(U==="ok"||U==="message")continue;if(Array.isArray(g))D.push(`${U}: ${g.length} item(s)`);else if(g&&typeof g==="object")D.push(`${U}: ${Object.keys(g).length} field(s)`);else D.push(`${U}: ${D_(g,100)}`)}return D.push(i_()),D.join(` -`)}function qf(_){let $=_.mode==="postgres"?"postgres (HTTP /v1 API)":"sqlite (on-box store)",D=_.source.kind==="env"?`selected by ${_.source.name}=${_.source.value}`:`default (no mode var set; set ${o$[0]}=postgres to use the API)`,U=[`Knowledge mode: ${$}`,` ${D}`];if(_.pointer_env_present.length>0){let g=_.pointer_ignored?"present but IGNORED for mode selection":"present";U.push(` Pointer env ${g}: ${_.pointer_env_present.join(", ")}`)}if(_.network_guard_active)U.push(" Outbound guard: ACTIVE (NODE_ENV=test) \u2014 non-loopback requests are refused.");if(_.warning)U.push(` Note: ${_.warning}`);return U.join(` -`)}function Bf(_){return[`Knowledge paths (${_.scope})`,`Home: ${_.home}`,`SQLite: ${_.knowledge_db_path}`,`JSON store: ${_.json_store_path}`,`Wiki: ${_.wiki_dir}`,i_("config and all paths")].join(` -`)}function m8(_){console.log(JSON.stringify(_))}function Vf(_){let $=_.summary,D=[`Knowledge inventory (${_.scope})`,`Home: ${_.home}`,`JSON store: ${_.paths.json_store_path}${_.paths.json_store_exists?"":" (missing)"}`,`SQLite catalog: ${_.paths.knowledge_db_path}`,`Summary: ${$.legacy_items} item(s), ${$.sources} source(s), ${$.chunks} chunk(s), ${$.wiki_pages} wiki page(s), ${$.indexes} index(es), ${$.storage_objects} artifact(s), ${$.runs} run(s)`],U=(g,I,j)=>{if(I.length===0)return;D.push("",`${g}:`);for(let N of I.slice(0,_.limit))D.push(`- ${j(N)}`)};return U("Items",_.items,(g)=>`${g.id}: ${g.title}`),U("Sources",_.sources,(g)=>`${g.kind??"source"} ${g.uri} (${g.chunks??0} chunk(s))`),U("Chunks",_.chunks,(g)=>`${g.kind??"chunk"} ${g.id}: ${g.text_preview??""}`),U("Wiki pages",_.wiki_pages,(g)=>`${g.path}: ${g.title}`),U("Indexes",_.indexes,(g)=>`${g.kind??"index"} ${g.name}${g.shard_key?` (${g.shard_key})`:""}`),U("Artifacts",_.storage_objects,(g)=>`${g.kind??"artifact"} ${g.artifact_uri}`),U("Runs",_.runs,(g)=>`${g.type??"run"} ${g.id}: ${g.status??"unknown"}`),U("Machines",_.machines,(g)=>`${g.machine_id}${g.workspace_home?` ${g.workspace_home}`:""}`),U("Sync conflicts",_.sync_conflicts,(g)=>`${g.id}: ${g.entity_kind}/${g.entity_id} ${g.status}`),D.join(` -`)}function Kf(_){let $=Array.isArray(_.results)?_.results:[],D=[`${$.length} search result(s) for "${D_(_.query,80)}"${_.mode?.semantic?" (semantic enabled)":""}`];for(let U of $.slice(0,_.limit??10)){let g=U.source?.uri??U.provenance?.source_uri??U.artifact?.path??U.artifact?.uri??U.id,I=typeof U.score==="number"?` score=${U.score.toFixed(3)}`:"";if(D.push(`- ${U.kind??"result"} ${D_(U.title??U.id,80)}${I}`),g)D.push(` source: ${D_(g,120)}`);if(U.text)D.push(` text: ${D_(U.text,180)}`)}if($.length===0)D.push("- No matches. Try a broader query or run `knowledge inventory --scope project`.");if(D.push(i_("scores, provenance, and full result objects")),!_.context)D.push("Next: use --context for an agent-ready citation pack, or --limit <n> to change the result count.");return D.join(` -`)}function Ff(_){let $=Array.isArray(_.excerpts)?_.excerpts:[],D=Array.isArray(_.citations)?_.citations:[],U=[`${$.length} context excerpt(s) for "${D_(_.query??_.normalized_query,80)}"`];for(let g of $.slice(0,10)){let I=D.find((O)=>O.id===g.citation_id||O.result_id===g.result_id),j=I?.source_uri??I?.artifact_path??g.result_id,N=typeof g.score==="number"?` score=${g.score.toFixed(3)}`:"";if(U.push(`- ${g.kind??"excerpt"} ${D_(g.id,44)}${N}`),j)U.push(` source: ${D_(j,120)}`);U.push(` text: ${D_(g.text,220)}`)}return U.push(`Citations: ${D.length}`),U.push(i_("citations, graph, notes, and full excerpts")),U.join(` -`)}function Mf(_){let $=Array.isArray(_.results)?_.results:[],D=[`${$.length} semantic result(s) for "${D_(_.query,80)}"`,`Index: ${_.provider??"unknown"}:${_.model??"unknown"} (${_.dimensions??"?"} dimensions)`];for(let U of $.slice(0,_.limit??10)){let g=typeof U.score==="number"?` score=${U.score.toFixed(3)}`:"";if(D.push(`- ${D_(U.chunk_id,44)}${g}`),U.source_uri)D.push(` source: ${D_(U.source_uri,120)}`);if(U.text)D.push(` text: ${D_(U.text,180)}`)}return D.push(i_("provenance and full vector result objects")),D.join(` -`)}function Zf(_){let $=Array.isArray(_.sources)?_.sources:[],D=[`${$.length} web source(s) for "${D_(_.query,80)}"`,`Provider: ${_.provider??"unknown"}${_.model?` (${_.model})`:""}`];for(let U of $.slice(0,_.limit??10)){D.push(`- ${D_(U.title??U.url??U.uri??"source",100)}`);let g=U.url??U.uri??U.source_ref;if(g)D.push(` url: ${D_(g,140)}`);if(U.snippet)D.push(` snippet: ${D_(U.snippet,180)}`)}return D.push(i_("provider payloads and filed source refs")),D.join(` -`)}function bf(_){let $=Array.isArray(_.machines)?_.machines:[],D=[`${$.length} machine(s) discovered via ${_.source??"unknown"}`,`Adapter: ${_.adapter?.package??"@hasna/machines"} ${_.adapter?.available?"available":"unavailable"}`];for(let U of $.slice(0,10)){let g=U.local?" local":"",I=U.tailscale_dns??U.ssh_target??U.hostname??"";D.push(`- ${D_(U.machine_id??U.id??"unknown",48)}${g}${I?` -> ${D_(I,80)}`:""}`)}if($.length>10)D.push(`... ${$.length-10} more machine(s).`);if(Array.isArray(_.warnings)&&_.warnings.length>0)D.push(`Warnings: ${_.warnings.slice(0,3).join("; ")}`);return D.push(i_("full topology, route hints, and adapter evidence")),D.join(` -`)}function Hf(_){let $=Array.isArray(_.checks)?_.checks:[],D=$.filter((I)=>I.status==="fail"||I.severity==="fail"),U=$.filter((I)=>I.status==="warn"||I.severity==="warn"),g=[`Machine preflight ${_.ok?"passed":"needs attention"} for ${_.machine_id??_.requested_machine_id??"local"}`,`Checks: ${$.length} total, ${D.length} failed, ${U.length} warning(s)`];for(let I of[...D,...U].slice(0,8))g.push(`- ${I.status??I.severity??"check"} ${D_(I.id??I.kind??"check",72)}: ${D_(I.message??I.detail??"",140)}`);return g.push(i_("all checks and repair hints")),g.join(` -`)}function kf(_){return[`Sync status (${_.scope??"scope"})`,`Schema: v${_.sqlite_schema_version??"unknown"}`,`Machines: ${_.machines?.total??0}; snapshots: ${_.snapshots?.total??0}; open conflicts: ${_.conflicts?.open??0}`,`Tables: ${Object.entries(_.table_counts??{}).slice(0,8).map(([D,U])=>`${D}=${U}`).join(", ")||"none"}`,i_("registry rows, clocks, snapshots, imports, and conflicts")].join(` -`)}function Cf(_){let $=Array.isArray(_.warnings)?_.warnings:[],D=Array.isArray(_.recommended_commands)?_.recommended_commands:[],U=[_.message??`Sync readiness ${_.ok?"ok":"needs attention"}`,`Storage: ${_.storage?.validation?.ok?"ok":"needs attention"}; open-files: ${_.open_files?.ok?"ok":"needs attention"}; open conflicts: ${_.sync?.open_conflicts??0}`];if($.length>0)U.push(`Warnings: ${$.slice(0,5).join("; ")}`);for(let g of D.slice(0,5))U.push(`- next: ${D_(g.shell_command??g.command?.join(" ")??g.id,160)}`);return U.push(i_("diagnostics, route evidence, and all recommended commands")),U.join(` -`)}function vf(_){let $=_.snapshot??{};return[`Sync snapshot ${_.ok?"recorded":"failed"}`,`Snapshot: ${D_($.id??$.snapshot_id??"unknown",80)} ${$.content_hash?`(${D_($.content_hash,80)})`:""}`,`Machines upserted: ${_.machines_upserted??0}; machine: ${_.machine_id??$.machine_id??"unknown"}`,i_("snapshot payload and topology evidence")].join(` -`)}function rf(_){let $=Array.isArray(_.conflicts)?_.conflicts:[],D=[`${$.length} sync conflict(s)`];for(let U of $.slice(0,10))D.push(`- ${D_(U.id,48)} ${U.status??"unknown"} ${U.entity_kind??""}/${D_(U.entity_id,80)}`);return D.push("Next: use `knowledge sync conflicts show <id> --json` for one conflict."),D.push(i_("full conflict objects")),D.join(` -`)}function ff(_){let $=Array.isArray(_.machines)?_.machines:[],D=[`${$.length} registered sync machine(s)`];for(let U of $.slice(0,10))D.push(`- ${D_(U.machine_id,48)} ${D_(U.hostname??U.workspace_home??"",100)}`);return D.push(i_("machine registry rows")),D.join(` -`)}function i8(_,$){let D=[`Sync ${$} ${_.ok===!1?"needs attention":"completed"}${_.dry_run?" (dry run)":""}`],U=(g,I)=>{if(!I)return;let N=(Array.isArray(I.tables)?I.tables:[]).reduce((L,z)=>L+(z.inserted??0)+(z.updated??0)+(z.deleted??0),0),O=I.artifacts?.copied??0,A=Array.isArray(I.errors)?I.errors.length:0;D.push(`${g}: ${N} table row change(s), ${O} artifact(s), ${A} error(s)`)};if(U("pull",_.pull),U("push",_.push),Array.isArray(_.errors)&&_.errors.length>0)D.push(`Errors: ${_.errors.slice(0,3).map((g)=>D_(g,120)).join("; ")}`);return D.push(i_("per-table rows, artifacts, clocks, and errors")),D.join(` -`)}function wf(_){let $=Array.isArray(_.citations)?_.citations:[],D=Array.isArray(_.context?.excerpts)?_.context.excerpts:Array.isArray(_.excerpts)?_.excerpts:[],U=[_.generated?"Generated answer with citations":"Prepared citation context draft",`Citations: ${$.length}; excerpts: ${D.length}`];if(_.answer)U.push(`Answer: ${D_(_.answer,500)}`);for(let g of $.slice(0,5))U.push(`- ${D_(g.source_uri??g.ref??g.id,120)}`);return U.push(i_("full answer payload, context, citations, and run ledger")),U.join(` -`)}function uf(_,$){return[`Export preview: ${_.length} item(s) available`,"Default output is compact to avoid terminal/context bloat.","Use --verbose or --json for a JSON object, or --format jsonl for newline-delimited records.",$!=="json"?`Requested format: ${$}`:""].filter(Boolean).join(` -`)}function l8(_){return!_||_==="local"||_==="localhost"}function _0(_){if(!_.id)throw Error("Missing required --id. Example: knowledge get --id <id>")}function xf(_,$){let D=$.sort??"created";if(D!=="created"&&D!=="title")throw Error("Invalid --sort value. Use 'created' or 'title'.");let U=[..._].sort((g,I)=>{if(D==="title")return g.title.localeCompare(I.title);return g.created_at.localeCompare(I.created_at)});if($.desc)U.reverse();return{sorted:U,sort:D,direction:$.desc?"desc":"asc"}}async function yf(_){if(await Rf(_))return;let{positional:$,flags:D}=Pf(_);if($0("debug","CLI invoked",{command:$[0],flags:{json:D.json,store:D.store}}),D.version){console.log(D.json?JSON.stringify({name:C$.name,version:C$.version},null,2):`${C$.name} ${C$.version}`);return}if(D.completions){let J=D.completions;if(J==="bash")console.log('_knowledge() { local cur; cur="${COMP_WORDS[COMP_CWORD]}"; COMPREPLY=($(compgen -W "add list get update archive restore upsert untag versions diff delete export prune dedupe stats inventory project-panel paths mode guarded setup auth storage machines sync db wiki app-wiki source ingest reindex search context proposals web ask build embeddings providers safety events webhooks help ls rm edit unarchive --json --verbose --yes --help --version --desc --page --limit --search --sort --id --store --title --content --url --tag --rev --to --format --completions --purpose --model --dimensions --semantic --context --max-tokens --max-items --from --since --topic --dedupe --generate --approve-write --provider --mode --machine --workspace --peer-workspace --api-url --canonical-example --api-key --email --org --org-id --user-id --owner --domain --file-results --full --dry-run --fake --no-tailscale --no-artifact-content --no-color --scope --tables --archived --include-archived --project --contract --source-ref --allow-global" -- "$cur")); }; complete -F _knowledge knowledge');else if(J==="zsh")console.log(`#compdef knowledge -_knowledge() { _arguments -C "1: :(add list get update archive restore upsert untag versions diff delete export prune dedupe stats inventory project-panel paths mode guarded setup auth storage machines sync db wiki app-wiki source ingest reindex search context proposals web ask build embeddings providers safety events webhooks help ls rm edit unarchive)" "(--json)--json" "(--verbose)--verbose" "(--yes)-y" "(--help)--help" "(--version)--version" "(--desc)--desc" "(--archived)--archived" "(--include-archived)--include-archived" "(--semantic)--semantic" "(--context)--context" "(--dedupe)--dedupe" "(--generate)--generate" "(--approve-write)--approve-write" "(--canonical-example)--canonical-example" "(--file-results)--file-results" "(--full)--full" "(--dry-run)--dry-run" "(--fake)--fake" "(--no-tailscale)--no-tailscale" "(--no-artifact-content)--no-artifact-content" "(--contract)--contract" "(--allow-global)--allow-global" "(-p --page)"{-p,--page}"[page number]:number:" "(-l --limit)"{-l,--limit}"[items per page]:number:" "(-s --search)"{-s,--search}"[search text]:text:" "(--sort)--sort"{created,title}:" "(--id)--id[item id]:id:" "(--store)--store[store path]:path:" "(--title)--title[new title]:" "(--content)--content[new content]:" "(--url)--url[source url]:" "(-t --tag)"{-t,--tag}"[tag]:tag:" "(--format)--format[json|jsonl]:" "(--completions)--completions[output completions]:shell:(bash zsh fish):" "(--purpose)--purpose[purpose]:" "(--model)--model[model ref]:" "(--dimensions)--dimensions[embedding dimensions]:number:" "(--max-tokens)--max-tokens[token budget]:number:" "(--max-items)--max-items[item budget]:number:" "(--from)--from"{search,loops,runs}:" "(--to)--to[diff target: version number or current]:" "(--rev)--rev[entry version for diff]:number:" "(--since)--since[duration or ISO time]:" "(--topic)--topic[topic text]:" "(--provider)--provider[provider]:" "(--mode)--mode"{local,hosted}:" "(--machine)--machine[machine id or SSH alias]:" "(--workspace)--workspace[repo workspace path]:path:" "(--peer-workspace)--peer-workspace[peer repo or knowledge home path]:path:" "(--api-url)--api-url[hosted API URL]:" "(--api-key)--api-key[hosted API key]:" "(--email)--email[email]:" "(--org)--org[org slug]:" "(--org-id)--org-id[org id]:" "(--user-id)--user-id[user id]:" "(--owner)--owner[provenance owner]:" "(--domain)--domain[domain]:" "(--project)--project[project id/name/slug]:" "(--source-ref)--source-ref[source ref]:" "(--no-color)--no-color[disable color]" "(--scope)--scope"{local,global,project}:" "(--tables)--tables[comma-separated DB sync tables]:" }; _knowledge`);else if(J==="fish")console.log('complete -c knowledge -f; complete -c knowledge -a "add list get update archive restore upsert untag versions diff delete export prune dedupe stats inventory project-panel paths mode guarded setup auth storage machines sync db wiki app-wiki source ingest reindex search context proposals web ask build embeddings providers safety events webhooks help ls rm edit unarchive"; complete -c knowledge -l json; complete -c knowledge -l verbose; complete -c knowledge -l yes -s y; complete -c knowledge -l help -s h; complete -c knowledge -l version -s v; complete -c knowledge -l desc; complete -c knowledge -l archived; complete -c knowledge -l include-archived; complete -c knowledge -l semantic; complete -c knowledge -l context; complete -c knowledge -l max-tokens; complete -c knowledge -l max-items; complete -c knowledge -l from -a "search loops runs"; complete -c knowledge -l to; complete -c knowledge -l rev; complete -c knowledge -l since; complete -c knowledge -l topic; complete -c knowledge -l dedupe; complete -c knowledge -l generate; complete -c knowledge -l approve-write; complete -c knowledge -l allow-global; complete -c knowledge -l canonical-example; complete -c knowledge -l provider; complete -c knowledge -l mode; complete -c knowledge -l machine; complete -c knowledge -l workspace; complete -c knowledge -l peer-workspace; complete -c knowledge -l api-url; complete -c knowledge -l api-key; complete -c knowledge -l email; complete -c knowledge -l org; complete -c knowledge -l org-id; complete -c knowledge -l user-id; complete -c knowledge -l owner; complete -c knowledge -l domain; complete -c knowledge -l project; complete -c knowledge -l contract; complete -c knowledge -l source-ref; complete -c knowledge -l file-results; complete -c knowledge -l full; complete -c knowledge -l dry-run; complete -c knowledge -l fake; complete -c knowledge -l no-tailscale; complete -c knowledge -l no-artifact-content; complete -c knowledge -s p -l page; complete -c knowledge -s l -l limit; complete -c knowledge -s s -l search; complete -c knowledge -l sort; complete -c knowledge -l id; complete -c knowledge -l store; complete -c knowledge -l title; complete -c knowledge -l content; complete -c knowledge -l url; complete -c knowledge -s t -l tag; complete -c knowledge -l format; complete -c knowledge -l completions; complete -c knowledge -l purpose; complete -c knowledge -l model; complete -c knowledge -l dimensions; complete -c knowledge -l no-color; complete -c knowledge -l scope -a "local global project"; complete -c knowledge -l tables');else throw Error("Invalid --completions value. Use 'bash', 'zsh', or 'fish'.");return}let U=zf($[0]),g=1,I=Xf()&&U&&!o8.includes(U);if(!U||D.help||U==="help"){let J=U==="help"?$[1]:U||$[1];Yf(J);return}if(U==="mode"){let J=ES(process.env);v(D.json||D.verbose?{ok:!0,...J}:qf(J),D.json,D);return}if(U==="guarded"){if(($[1]??"capabilities")!=="capabilities")throw Error("Usage: knowledge guarded capabilities [--json]");v({ok:!0,contract:"FCAME-1",private_input:!0,private_result:!0,exact_title_lookup:!0,private_transport_body_output:!1},D.json,D);return}NS(process.env,{storePathOverridden:Boolean(D.store)});let j=U==="project-panel"||U==="app-wiki"?D.scope??"project":D.scope,N=IN({scope:j});if(U==="storage"){let J=$[1]??"status";if(J==="import-legacy"){if(D.scope&&D.scope!=="global")throw Error("knowledge storage import-legacy only supports --scope global because ~/.open-knowledge is a global legacy store.");let P=uN({dryRun:D.dryRun});if(v(P,D.json),!P.ok)process.exitCode=1;return}if(J==="migrate-legacy-path"||J==="migrate-legacy"||J==="migrate-path"){let P=N.migrateLegacyPath({approveWrite:D.approveWrite,approvedBy:D.approvedBy});if(v(P,D.json),!P.ok&&!D.json)process.exitCode=1;return}if(J==="merge-legacy-path"||J==="merge-legacy"||J==="merge-path"){let P=N.mergeLegacyPath({approveWrite:D.approveWrite,approvedBy:D.approvedBy});if(v(P,D.json),!P.ok&&!D.json)process.exitCode=1;return}}let O=Boolean(D.store),A=D.store;if(!A)if(j==="project"||j==="local")A=N.workspace.jsonStorePath;else A=CU();let L=cU({storePath:A,storePathOverridden:O});if(I&&await Af($,U,L))U="ask",g=0;if(!O&&(U==="ask"||U==="build")&&!Y6())kD(A);if(U==="inventory"){let J=await N.resolveInventory({limit:D.limit,includeArchived:D.includeArchived||D.archived,storePath:Y6()?void 0:A});v(D.json||D.verbose?J:Vf(J),D.json,D);return}if(U==="project-panel"){let J=D.project??$[1];if(!J)throw Error("Usage: knowledge project-panel --project <id|name|slug> [--json|--contract]");let P=await pG(J,{service:N,limit:D.limit,storePath:Y6()?void 0:A,includeArchived:D.includeArchived||D.archived});v(D.json||D.contract?P:eG(P),D.json||D.contract);return}if(U==="paths"){let J=N.paths();v(D.json||D.verbose?J:Bf(J),D.json,D);return}if(U==="setup"){let J=N.setup({mode:D.mode,apiUrl:D.apiUrl,canonicalExample:D.canonicalExample});v(J,D.json,D);return}if(U==="auth"){let J=$[1]??"whoami";if(J==="whoami"||J==="status"){let P=N.authStatus(process.env);v({ok:!0,...P,message:P.authenticated?`Authenticated via ${P.source}`:"Not authenticated"},D.json,D);return}if(J==="login"){let P=D.apiKey??process.env.KNOWLEDGE_API_KEY??process.env.HASNA_KNOWLEDGE_API_KEY;if(!P)throw Error("Usage: knowledge auth login --api-key <key> [--email <email>]");let S=N.saveAuth({apiKey:P,email:D.email,orgSlug:D.org,orgId:D.orgId,userId:D.userId,apiUrl:D.apiUrl},process.env);v({ok:!0,authenticated:!0,email:S.email??null,org_slug:S.org_slug??null,api_url:S.api_url??N.authStatus(process.env).api_url,auth_path:N.authStatus(process.env).auth_path,message:`Saved hosted credentials for ${S.email??"API key"}`},D.json,D);return}if(J==="logout"){let P=N.clearAuth(process.env);v({ok:!0,removed:P,message:P?"Removed hosted credentials":"No hosted credentials found"},D.json,D);return}throw Error("Invalid auth action. Use 'login', 'whoami', or 'logout'.")}if(U==="storage"){let J=$[1]??"status";if(J==="status"){let P=N.storageContract(),S=N.validateStorage();v({ok:S.ok,...P,validation:S,message:`${P.storage_type} artifact storage at ${P.artifact_store.uri_prefix}`},D.json,D);return}if(J==="validate"){let P=N.validateStorage();if(v({ok:P.ok,validation:P,message:P.ok?"Storage contract valid":`Storage contract invalid: ${P.errors.join("; ")}`},D.json,D),!P.ok)process.exitCode=1;return}if(J==="repair-artifact-keys"||J==="repair-keys"){let P=N.repairArtifactManifestKeys({approveWrite:D.approveWrite,approvedBy:D.approvedBy,dryRun:D.dryRun});v(P,D.json,D);return}if(J==="migrate-legacy-path"||J==="migrate-legacy"||J==="migrate-path"){let P=N.migrateLegacyPath({approveWrite:D.approveWrite,approvedBy:D.approvedBy});if(v(P,D.json),!P.ok&&!D.json)process.exitCode=1;return}if(J==="merge-legacy-path"||J==="merge-legacy"||J==="merge-path"){let P=N.mergeLegacyPath({approveWrite:D.approveWrite,approvedBy:D.approvedBy});if(v(P,D.json),!P.ok&&!D.json)process.exitCode=1;return}throw Error("Invalid storage action. Use 'status', 'validate', 'repair-artifact-keys', 'migrate-legacy-path', 'merge-legacy-path', or 'import-legacy'.")}if(U==="machines"){let J=$[1]??"topology";if(J==="topology"||J==="status"){let P=await N.machineTopology({includeTailscale:D.tailscale!==!1});v(D.json||D.verbose?P:bf(P),D.json,D);return}if(J==="preflight"||J==="check"){let P=$[2]??D.machine??"local",S=D.workspace??process.cwd(),X=await N.machinePreflight({machineId:P,commands:[{command:"bun",required:!0},{command:"knowledge",required:!0}],packages:[{name:C$.name,command:"knowledge",expectedVersion:C$.version,required:!0},{name:"@hasna/machines",command:"machines",required:!1}],workspaces:[{label:"open-knowledge",path:S,expectedPackageName:C$.name,expectedVersion:C$.version,required:!0}]});if(v(D.json||D.verbose?X:Hf(X),D.json,D),!X.ok&&!D.json)process.exitCode=1;return}throw Error("Invalid machines action. Use 'topology' or 'preflight'.")}if(U==="sync"){let J=$[1]??"status",P=D.tables?D.tables.split(",").map((S)=>S.trim()).filter(Boolean):void 0;if(J==="status"){let S=N.syncStatus();v(D.json||D.verbose?S:kf(S),D.json,D);return}if(J==="doctor"||J==="readiness"||J==="preflight"){let S=await N.syncDoctor({machine:D.machine??null,peerWorkspace:D.peerWorkspace??null,includeTailscale:D.tailscale!==!1,tables:P}),X={package:{name:C$.name,version:C$.version},...S};if(v(D.json||D.verbose?X:Cf(X),D.json,D),!S.ok&&!D.json)process.exitCode=1;return}if(J==="snapshot"||J==="record"){let S=await N.createSyncSnapshot({includeTailscale:D.tailscale!==!1,machineId:D.machine});v(D.json||D.verbose?S:vf(S),D.json,D);return}if(J==="conflicts"||J==="conflict"){let S=$[2];if(S==="show"||S==="get"){let R=$[3]??D.id;if(!R)throw Error("Usage: knowledge sync conflicts show <id>");let V=N.syncConflict(R);v({ok:!0,conflict:V,message:`Sync conflict ${R}`},D.json,D);return}if(S==="propose"||S==="proposal"){let R=$[3]??D.id;if(!R)throw Error("Usage: knowledge sync conflicts propose <id>");v(D.mode==="ai"?await N.proposeSyncConflictResolutionWithAi({id:R,modelRef:D.model,fake:D.fake}):N.proposeSyncConflictResolution(R),D.json,D);return}if(S==="resolve"){let R=$[3]??D.id;if(!R)throw Error("Usage: knowledge sync conflicts resolve <id> --approve-write --approved-by <name> [--strategy <name>]");let V=N.resolveSyncConflict({id:R,strategy:D.strategy,approvedBy:D.approvedBy,approveWrite:D.approveWrite,proposedPatchUri:D.patchUri});if(v(V,D.json,D),!V.ok&&!D.json)process.exitCode=1;return}let X=N.syncConflicts({status:S,limit:D.limit}),G={ok:!0,conflicts:X,message:`${X.length} sync conflict(s)`};v(D.json||D.verbose?G:rf(G),D.json,D);return}if(J==="machines"||J==="registry"){let S=N.syncMachines(),X={ok:!0,machines:S,message:`${S.length} registered sync machine(s)`};v(D.json||D.verbose?X:ff(X),D.json,D);return}if(J==="export"){let S=N.exportSyncBundle({machineId:D.machine??null,tables:P,includeArtifactContent:D.artifactContent!==!1});v(S,!0);return}if(J==="import"){let S=await Bun.stdin.text();if(!S.trim())throw Error("Usage: knowledge sync import < bundle.json");let X=await N.importSyncBundle({bundle:JSON.parse(S),dryRun:D.dryRun,direction:"import",machineId:D.machine??null});v(D.json||D.verbose?X:i8(X,J),D.json,D);return}if(J==="dry-run"||J==="pull"||J==="push"||J==="sync"){if(!D.peerWorkspace&&l8(D.machine))throw Error(`Usage: knowledge sync ${J} --peer-workspace <repo-or-knowledge-home> [--scope project] -Remote machine sync can omit --peer-workspace when machines path mapping is configured.`);let S=J==="dry-run"?"both":J==="sync"?"both":J,X=!l8(D.machine)?await N.syncRemotePeer({direction:S,machine:D.machine,peerWorkspace:D.peerWorkspace,tables:P,dryRun:D.dryRun===!0||J==="dry-run",includeArtifactContent:D.artifactContent!==!1,includeTailscale:D.tailscale!==!1}):await N.syncPeer({peerWorkspace:D.peerWorkspace,direction:S,dryRun:D.dryRun===!0||J==="dry-run",tables:P,includeArtifactContent:D.artifactContent!==!1,machineId:D.machine??null});if(v(D.json||D.verbose?X:i8(X,J),D.json,D),!X.ok&&!D.json)process.exitCode=1;return}throw Error("Invalid sync action. Use 'status', 'doctor', 'snapshot', 'conflicts', 'machines', 'dry-run', 'pull', 'push', 'sync', 'export', or 'import'.")}if(U==="db"){let J=$[1]??"init";if(J==="init"){let P=N.initDb();v({ok:!0,...P,message:`Initialized ${P.path}`},D.json,D);return}if(J==="stats"){let P=N.dbStats();v({ok:!0,path:N.workspace.knowledgeDbPath,...P,message:`knowledge.db schema v${P.schema_version}`},D.json,D);return}if(J==="storage"){if(($[2]??"status")==="status"){let S=o3({scope:D.scope});v({ok:!0,...S,message:`knowledge.db storage mode ${S.mode}`},D.json,D);return}throw Error("Invalid db storage action. Only 'status' is supported. The 'push'/'pull'/'sync' Postgres sync commands were removed (DSN-on-client is forbidden); use the cloud API flip instead.")}throw Error("Invalid db action. Use 'init', 'stats', or 'storage'.")}if(U==="app-wiki"){let J=$[1]??"init";if(J==="paths"||J==="status"){v({ok:!0,standard:"hasna-app-wiki.v1",default_scope:"project",global_writes_require:"--allow-global",...N.paths()},D.json);return}if(J==="init"||J==="open"){let P=await N.initAppWiki({allowGlobal:D.allowGlobal});v(P,D.json);return}if(J==="note"||J==="notes"){let P=$[2]??"list";if(P==="add"||P==="create"){let S=D.title??$[3],X=D.content??$.slice(4).join(" ");if(!S||!X)throw Error("Usage: knowledge app-wiki note add --title <title> --content <text> [--source-ref <uri>]");let G=await N.addAppWikiNote({title:S,content:X,tags:D.tag,sourceRefs:D.sourceRef,allowGlobal:D.allowGlobal});v(G,D.json);return}if(P==="list"||P==="ls"){let S=N.listAppWikiNotes({limit:D.limit});v({ok:!0,scope:N.scope,home:N.workspace.home,notes:S,message:`${S.length} app wiki note(s)`},D.json);return}if(P==="get"||P==="show"){let S=$[3]??D.id;if(!S)throw Error("Usage: knowledge app-wiki note get <id-or-path>");let X=await N.getAppWikiNote(S,{includeContent:!0});if(!X)throw Error(`App wiki note not found: ${S}`);v(X,D.json);return}throw Error("Invalid app-wiki note action. Use 'add', 'list', or 'get'.")}if(J==="source"||J==="sources"){let P=$[2]??"add";if(P!=="add"&&P!=="ingest")throw Error("Invalid app-wiki source action. Use 'add'.");let S=$[3]??D.sourceRef?.[0];if(!S)throw Error("Usage: knowledge app-wiki source add <source-ref>");let X=await N.addAppWikiSourceRef({sourceRef:S,purpose:D.purpose,allowGlobal:D.allowGlobal});v({ok:!0,...X,message:`Added app wiki source ${X.source_ref}`},D.json);return}if(J==="search"){let P=$.slice(2).join(" ");if(!P)throw Error("Usage: knowledge app-wiki search <query>");let S=await N.searchAppWiki({query:P,limit:D.limit,semantic:D.semantic,modelRef:D.model,dimensions:D.dimensions,fake:D.fake});v({ok:!0,...S,message:`${S.results.length} app wiki result(s)`},D.json);return}if(J==="query"||J==="context"){let P=$.slice(2).join(" ");if(!P)throw Error("Usage: knowledge app-wiki query <query>");let S=await N.queryAppWiki({query:P,limit:D.limit,semantic:D.semantic,modelRef:D.model,dimensions:D.dimensions,fake:D.fake});v({ok:!0,...S,message:`${S.excerpts.length} app wiki excerpt(s)`},D.json);return}throw Error("Invalid app-wiki action. Use 'init', 'paths', 'note', 'source', 'search', or 'query'.")}if(U==="wiki"){let J=$[1]??"init";if(J==="init"){let P=await N.initWiki();v({ok:!0,...P,message:`Initialized wiki layout in ${N.workspace.home}`},D.json,D);return}if(J==="compile"){let P=$.slice(2),S=P.filter((R)=>/^(open-files|file|s3|https?):\/\//.test(R)),X=P.filter((R)=>!/^(open-files|file|s3|https?):\/\//.test(R)).join(" "),G=await N.compileWiki({title:D.title,query:X||D.search,sourceRefs:S.length>0?S:void 0,limit:D.limit});v({ok:!0,...G,message:`Compiled wiki page ${G.path}`},D.json,D);return}if(J==="file-answer"||J==="answer"){let P=$.slice(2).join(" ");if(!P)throw Error("Usage: knowledge wiki file-answer <prompt> --content <answer> --approve-write");if(!D.content)throw Error("Missing --content <answer> for wiki file-answer.");let S=await N.fileAnswer({prompt:P,answer:D.content,approveWrite:D.approveWrite,limit:D.limit,semantic:D.semantic,modelRef:D.model,dimensions:D.dimensions,fake:D.fake});v({ok:!0,...S},D.json,D);return}if(J==="lint"){let P=N.lintWiki();v({ok:P.ok,...P,message:P.ok?"Wiki lint passed":`Wiki lint found ${P.issue_count} issue(s)`},D.json,D);return}throw Error("Invalid wiki action. Use 'init', 'compile', 'file-answer', or 'lint'.")}if(U==="safety"){let J=$[1]??"status",P=N.ensureWorkspace(),S=N.safetyPolicy();N.initDb();let X=r(P.knowledgeDbPath);try{if(J==="status"){v({ok:!0,mode:S.mode,workspace:P.home,allow_write_roots:S.allowWriteRoots,read_only_source_access:S.readOnlySourceAccess,network:S.network,redaction:S.redaction,approvals:S.approvals,message:`Safety policy: ${S.mode}`},D.json,D);return}if(J==="check"){let G=$[2]??"generated_write",R=$[3]??null,V;try{if(G==="web_search")P0(S),V={action:G,target_uri:R,approval_required:!1,approved:!0,decision:"allow"};else if(G==="s3_read"){if(!R)throw Error("safety check s3_read requires an s3:// target.");q6(R,S),V={action:G,target_uri:R,approval_required:!1,approved:!0,decision:"allow"}}else V=cS(X,S,G,R);X_(X,{event_type:"safety_check",action:G,target_uri:R,decision:V.decision==="allow"?"allow":"requires_approval",metadata:V}),v({ok:!0,...V,message:`Safety check ${V.decision}`},D.json,D);return}catch(Q){throw X_(X,{event_type:"safety_check",action:G,target_uri:R,decision:"deny",metadata:{error:Q instanceof Error?Q.message:String(Q)}}),Q}}if(J==="approve"){let G=$[2]??"generated_write",R=$[3]??null,V=iU(X,{action:G,target_uri:R,reason:"local-cli approval",metadata:{scope:D.scope??"global"}});X_(X,{event_type:"approval",action:G,target_uri:R,decision:"allow",metadata:{approval_id:V.id}}),v({ok:!0,...V,action:G,target_uri:R,message:`Approved ${G}`},D.json,D);return}if(J==="audit"){let G=X.query("SELECT id, event_type, action, target_uri, decision, metadata_json, created_at FROM audit_events ORDER BY created_at DESC LIMIT 50").all().map((R)=>({id:R.id,event_type:R.event_type,action:R.action,target_uri:R.target_uri,decision:R.decision,metadata:JSON.parse(R.metadata_json),created_at:R.created_at}));v({ok:!0,events:G,message:`${G.length} audit event(s)`},D.json,D);return}if(J==="redact"){let G=$.slice(2).join(" ");if(!G)throw Error("Usage: knowledge safety redact <text>");let R=u_(G,S);if(R.findings.length>0)z0(X,{source_uri:"safety://redact",findings:R.findings,metadata:{command:"safety redact"}});X_(X,{event_type:"redaction",action:"safety_redact",target_uri:"safety://redact",decision:R.findings.length>0?"redacted":"allow",metadata:{findings:R.findings.length}}),v({ok:!0,text:R.text,findings:R.findings,message:`Redacted ${R.findings.length} finding(s)`},D.json,D);return}throw Error("Invalid safety action. Use 'status', 'check', 'approve', 'audit', or 'redact'.")}finally{X.close()}}if(U==="source"){if(($[1]??"")!=="resolve")throw Error("Invalid source action. Use 'resolve'.");let P=$[2];if(!P)throw Error("Usage: knowledge source resolve <source-ref>");let S=await N.resolveSource(P,{purpose:D.purpose,limit:D.limit});v({ok:!0,...S,message:S.resolved?`Resolved ${S.source_ref} (${S.content.chunks_returned}/${S.content.chunks_total} chunks)`:`Source not indexed: ${P}`},D.json,D);return}if(U==="ingest"){let J=$[1]??"";if(J==="rules"||J==="global-rules"||J==="agent-rules"){let P=await N.importRulesProvenance({root:D.workspace??process.cwd(),owner:D.owner,dryRun:D.dryRun===!0,maxItems:D.maxItems,limit:D.limit});v({ok:!0,...P},D.json);return}if(J==="manifest"){let P=$[2];if(!P)throw Error("Usage: knowledge ingest manifest <file|s3://bucket/key>");let S=await N.ingestManifest(P);v({ok:!0,...S,message:`Ingested ${S.items_seen} manifest item(s)`},D.json,D);return}if(J==="source"){let P=$[2];if(!P)throw Error("Usage: knowledge ingest source <source-ref>");let S=await N.ingestSource(P,D.purpose);v({ok:!0,...S,message:`Ingested source ${S.source_ref} (${S.chunks_inserted} chunks)`},D.json,D);return}throw Error("Invalid ingest action. Use 'manifest' or 'source'.")}if(U==="reindex"){let J=$[1]??"status";if(J==="status"){let P=N.reindexHealth({modelRef:D.model,dimensions:D.dimensions,fake:D.fake});v({ok:!0,...P,message:`${P.missing_embeddings} chunk(s) missing embeddings`},D.json,D);return}if(J==="enqueue"){let P=N.enqueueReindex({modelRef:D.model,dimensions:D.dimensions,fake:D.fake});v({ok:!0,...P,message:`Queued ${P.enqueued} embedding refresh item(s)`},D.json,D);return}if(J==="embeddings"){let P=await N.refreshEmbeddings({full:D.full,limit:D.limit,modelRef:D.model,dimensions:D.dimensions,fake:D.fake});v({ok:!0,...P,message:`Embedded ${P.indexed.chunks_embedded} chunk(s)`},D.json,D);return}if(J==="outbox"){let P=$[2];if(!P)throw Error("Usage: knowledge reindex outbox <file|s3://bucket/key>");let S=await N.consumeOutbox(P);v({ok:!0,...S,message:`Consumed ${S.events_seen} outbox event(s)`},D.json,D);return}throw Error("Invalid reindex action. Use 'status', 'enqueue', 'embeddings', or 'outbox'.")}if(U==="embeddings"){let J=$[1]??"status";if(J==="status"){let P=N.embeddingStatus();v({ok:!0,...P,message:`${P.total_vector_entries} vector index entries`},D.json,D);return}if(J==="index"){let P=await N.indexEmbeddings({limit:D.limit,modelRef:D.model,dimensions:D.dimensions,fake:D.fake});v({ok:!0,...P,message:`Embedded ${P.chunks_embedded} chunk(s)`},D.json,D);return}if(J==="search"){let P=$.slice(2).join(" ");if(!P)throw Error("Usage: knowledge embeddings search <query>");let S=await N.semanticSearch({query:P,limit:D.limit,modelRef:D.model,dimensions:D.dimensions,fake:D.fake}),X={ok:!0,...S,message:`${S.results.length} semantic result(s)`};v(D.json||D.verbose?X:Mf(X),D.json,D);return}throw Error("Invalid embeddings action. Use 'status', 'index', or 'search'.")}if(U==="context"){if(($[1]??"pack")!=="pack")throw Error("Invalid context action. Use 'pack'.");let P=D.from??"search";if(!["search","loops","runs"].includes(P))throw Error("Invalid --from value. Use 'search', 'loops', or 'runs'.");let S=$.slice(2).join(" ")||D.topic||"",X=await N.contextPack({source:P,purpose:P==="loops"||P==="runs"?"proposal":"agent_context",query:S,topic:D.topic,since:D.since,dedupe:D.dedupe,maxTokens:D.maxTokens,maxItems:D.maxItems,limit:D.limit,semantic:D.semantic,modelRef:D.model,dimensions:D.dimensions,fake:D.fake,legacyStorePath:A});m8({ok:!0,...X,message:X.message});return}if(U==="proposals"){if(($[1]??"context")!=="context")throw Error("Invalid proposals action. Use 'context'.");let P=D.from??"loops";if(!["loops","runs"].includes(P))throw Error("Invalid --from value for proposals. Use 'loops' or 'runs'.");let S=D.topic??$.slice(2).join(" ");if(!S.trim())throw Error("Usage: knowledge proposals context --from loops --topic <text>");let X=await N.contextPack({source:P,purpose:"proposal",query:S,topic:S,since:D.since,dedupe:D.dedupe??!0,maxTokens:D.maxTokens,maxItems:D.maxItems,limit:D.limit});m8({ok:!0,...X,message:X.message});return}if(U==="search"){let J=$.slice(1).join(" ");if(!J)throw Error("Usage: knowledge search <query>");if(D.context){let X=await N.retrieveContext({query:J,limit:D.limit,semantic:D.semantic,modelRef:D.model,dimensions:D.dimensions,fake:D.fake,legacyStorePath:A}),G={ok:!0,...X,message:`${X.excerpts.length} context excerpt(s)`};v(D.json||D.verbose?G:Ff(G),D.json,D);return}let P=await N.search({query:J,limit:D.limit,semantic:D.semantic,modelRef:D.model,dimensions:D.dimensions,fake:D.fake,legacyStorePath:A}),S={ok:!0,...P,message:`${P.results.length} search result(s)`};v(D.json||D.verbose?S:Kf(S),D.json,D);return}if(U==="web"){if(($[1]??"search")!=="search")throw Error("Invalid web action. Use 'search'.");let P=$.slice(2).join(" ");if(!P)throw Error("Usage: knowledge web search <query>");let S=await N.webSearch({query:P,limit:D.limit,modelRef:D.model,provider:D.provider,domains:D.domain,fake:D.fake,fileResults:D.fileResults}),X={ok:!0,...S,message:`${S.sources.length} web source(s)`};v(D.json||D.verbose?X:Zf(X),D.json,D);return}if(U==="ask"||U==="build"){let J=$.slice(g).join(" ");if(!J)throw Error("Usage: knowledge ask <prompt>");let P=await N.runPrompt({prompt:J,limit:D.limit,semantic:D.semantic,modelRef:D.model,dimensions:D.dimensions,fake:D.fake,generate:D.generate,approveWrite:D.approveWrite,legacyStorePath:A}),S={ok:!0,...P,message:P.generated?"Generated answer with citations":"Prepared citation context draft"};v(D.json||D.verbose?S:wf(S),D.json,D);return}if(U==="providers"){let J=$[1]??"status";if(J==="status"){let P=N.providerStatus(),S=P.providers.filter((X)=>X.configured).length;v({ok:!0,...P,message:`${S}/${P.providers.length} provider credential(s) configured`},D.json,D);return}if(J==="models"){let P=N.modelRegistry();v({ok:!0,models:P,message:`${P.length} model alias(es)`},D.json,D);return}if(J==="check"){let P=$[2]??"default",S=G$(P,N.config()),X=f_(S),G=g4(X.provider,N.config());v({ok:!0,target:P,model_ref:S,provider:X.provider,model:X.model,credential:G,message:`${X.provider} credentials configured`},D.json,D);return}throw Error("Invalid providers action. Use 'status', 'models', or 'check'.")}if(U==="add"){let J=$[1],P=$[2];if(!J||!P)throw Error("Usage: knowledge add <title> <content>");let S=await L.create({title:J,content:P,url:D.url??null,tags:D.tag??[]});$0("info","Item added",{id:S.id,title:S.title,tags:S.tags?.length??0,transport:L.kind}),v({ok:!0,item:S,message:`Added ${S.id}`},D.json,D);return}if(U==="list"){if(D.format!==void 0&&D.format!=="table"&&D.format!=="json")throw Error("Invalid --format value for list. Use 'table' or 'json'.");let J=await L.listAll(),P=Number.isFinite(D.page)&&D.page>0?D.page:1,S=Number.isFinite(D.limit)&&D.limit>0?D.limit:20,X=D.search?String(D.search).toLowerCase():"",G=(D.tagRaw??D.tag??[]).map((a)=>({whole:a.trim().toLowerCase(),parts:a.split(",").map((v_)=>v_.trim().toLowerCase()).filter((v_)=>v_.length>0)})),R=D.tag?.length?D.tag.map((a)=>a.toLowerCase()).join(","):"none",V=D.format==="table"||!D.json&&!D.format&&Qf(D),Q=D.json||D.format==="json",T=J.items;if(D.archived)T=T.filter((a)=>a.archived===!0);else if(!D.includeArchived)T=T.filter((a)=>!a.archived);if(X)T=T.filter((a)=>Vz(a,X));if(G.length>0)T=T.filter((a)=>{let v_=new Set((a.tags??[]).map((V_)=>V_.toLowerCase()));return G.every(({whole:V_,parts:G_})=>V_.length>0&&v_.has(V_)||G_.every((H_)=>v_.has(H_)))});let{sorted:q,sort:K,direction:Z}=xf(T,D),e=(P-1)*S,g_=q.slice(e,e+S),I_=Math.max(1,Math.ceil(q.length/S)),J_={ok:!0,page:P,limit:S,total:q.length,total_pages:I_,sort:K,direction:Z,items:g_,store_exists:J.exists};if(Q){v(J_,!0);return}if(D.verbose){v(J_,!1,D);return}if(g_.length===0){v(`No items found (search=${X||"none"}, tag=${R})`,!1);return}if(V){let a=(V_)=>V_,v_=`${a("ID")} ${a("TITLE")} ${a("CREATED")} ${a("URL")} ${a("TAGS")}`;console.log(v_);for(let V_ of g_)console.log(`${V_.id} ${a(D_(V_.title,80))} ${V_.created_at} ${V_.url?a(D_(V_.url,90)):""} ${V_.tags?.length?a(D_(`[${V_.tags.join(", ")}]`,80)):""}`);console.log(`Page ${P}/${I_} | showing ${g_.length} of ${q.length} | sort=${K} ${Z} | search=${X||"none"} | tag=${R}`),console.log("Hint: use `knowledge get --id <id> --json` for full item content.")}else{for(let a of g_)console.log(`${a.id} ${D_(a.title,80)} ${a.created_at}${a.url?` ${D_(a.url,90)}`:""}${a.tags?.length?` ${D_(`[${a.tags.join(", ")}]`,80)}`:""}`);console.log(`Page ${P}/${I_} | showing ${g_.length} of ${q.length} | sort=${K} ${Z} | search=${X||"none"} | tag=${R}`),console.log("Hint: use `knowledge get --id <id> --json` for full item content.")}return}if(U==="get"){_0(D);let J=await L.get(D.id);if(!J)throw Error(`Item not found: ${D.id}`);v({ok:!0,item:J,store_exists:L.exists,message:`${J.id}: ${J.title}`},D.json,D);return}if(U==="versions"){_0(D);let J=Number.isFinite(D.page)&&D.page>0?D.page:1,P=Number.isFinite(D.limit)&&D.limit>0?D.limit:void 0,S=await L.listVersions(D.id,{limit:P,offset:(J-1)*(P??50)});if(!S)throw Error(`Item not found: ${D.id}`);let X={ok:!0,id:S.item_id,current_version:S.current_version,total:S.total,page:J,store:L.location,versions:S.items,message:S.total===0?`${S.item_id} is at version ${S.current_version} with no retained prior versions`:`${S.item_id} is at version ${S.current_version}; ${S.total} prior version(s) retained`};if(D.json||D.verbose){v(X,D.json,D);return}console.log(X.message);for(let G of S.items){let R=G.actor?` by ${G.actor}`:"",V=G.reason?` (${G.reason})`:"";console.log(`v${G.version} ${G.valid_to}${R}${V} ${G.content_bytes} bytes ${G.content_hash.slice(0,12)}`)}if(S.items.length>0)console.log("Hint: `knowledge diff --id <id> --rev <n>` shows what changed.");return}if(U==="diff"){_0(D);let J=await L.get(D.id);if(!J)throw Error(`Item not found: ${D.id}`);if(D.rev!==void 0&&(D.from!==void 0||D.to!==void 0))throw Error("Use either --rev <n> or --from <a> --to <b>, not both.");let P=()=>({title:J.title,content:J.content,url:J.url,tags:J.tags??[],metadata:J.metadata??{},archived:J.archived??!1}),S=`v${J.version??"?"} (current)`,X=async(q)=>{if(q==="current")return{label:S,snapshot:P()};let K=Number(q);if(!Number.isInteger(K)||K<1)throw Error(`Not a version number: ${q}`);if(J.version!==void 0&&K===J.version)return{label:S,snapshot:P()};let Z=await L.getVersion(J.id,K);if(!Z)throw Error(`No version ${K} retained for ${J.id} (it is at version ${J.version??"?"}). Run \`knowledge versions --id <id>\` to see what is retained.`);return{label:`v${Z.version}`,snapshot:{title:Z.title,content:Z.content,url:Z.url,tags:Z.tags,metadata:Z.metadata,archived:Z.archived}}},G,R;if(D.rev!==void 0){if(!Number.isInteger(D.rev)||D.rev<1)throw Error("--rev must be a positive version number.");if(D.rev===1)throw Error("Version 1 has no predecessor to diff against.");G=String(D.rev-1),R=String(D.rev)}else if(D.from!==void 0||D.to!==void 0){if(D.from===void 0||D.to===void 0)throw Error("--from and --to must be given together.");G=D.from,R=D.to}else{let q=await L.listVersions(J.id,{limit:1});if(!q)throw Error(`Item not found: ${D.id}`);if(q.items.length===0)throw Error(`${J.id} is at version ${q.current_version} with no retained prior versions to diff against.`);G=String(q.items[0].version),R="current"}let V=await X(G),Q=await X(R),T=PS(V.snapshot,Q.snapshot);if(D.json||D.verbose){v({ok:!0,id:J.id,from:V.label,to:Q.label,...T},D.json,D);return}console.log(zS(T,`${J.id} ${V.label}`,`${J.id} ${Q.label}`));return}if(U==="update"){_0(D);let J=await L.get(D.id);if(!J)throw Error(`Item not found: ${D.id}`);if(D.ifVersion!==void 0&&(!Number.isInteger(D.ifVersion)||D.ifVersion<1))throw Error(`Invalid --if-version ${JSON.stringify(String(D.ifVersion))}: must be a positive integer version number, e.g. the "version" field from a prior 'knowledge get'.`);let P={};if(D.title!==void 0)P.title=D.title;if(D.content!==void 0)P.content=D.content;if(D.url!==void 0)P.url=D.url;let S;if(D.tag!==void 0){if(S=d8(J.tags,D.tag),S.length>0)P.tags=[...J.tags??[],...S]}let X=D.ifVersion!==void 0?D.ifVersion:J.version,G=await L.update(J.id,P,{expectedVersion:X});v(Az({ok:!0,item:G},`Updated ${G?.id??J.id}`,S),D.json,D);return}if(U==="archive"||U==="restore"){_0(D);let J=await L.get(D.id);if(!J)throw Error(`Item not found: ${D.id}`);let P=await L.update(J.id,{archived:U==="archive"},{expectedVersion:J.version});v({ok:!0,item:P,message:`${U==="archive"?"Archived":"Restored"} ${P?.id??J.id}`},D.json,D);return}if(U==="untag"){if(_0(D),!D.tag?.length)throw Error("Missing required --tag. Example: knowledge untag --id <id> -t <tag>");let J=await L.get(D.id);if(!J)throw Error(`Item not found: ${D.id}`);let P=J.tags??[],S=new Set(P.map((K)=>K.toLowerCase())),X=new Set;for(let K of D.tagRaw??D.tag){let Z=K.trim().toLowerCase();if(Z.length>0&&S.has(Z)){X.add(Z);continue}for(let e of K.split(",").map((g_)=>g_.trim().toLowerCase()).filter((g_)=>g_.length>0))X.add(e)}let G=P.filter((K)=>!X.has(K.toLowerCase())),R=P.length-G.length,V=[...X].filter((K)=>!S.has(K));if(R===0)throw Error(`No matching tag on ${J.id}: ${V.map((K)=>JSON.stringify(K)).join(", ")} not in [${P.map((K)=>JSON.stringify(K)).join(", ")}]`);let Q=await L.update(J.id,{tags:G},{expectedVersion:J.version}),T=V.length>0?` (not found: ${V.map((K)=>JSON.stringify(K)).join(", ")})`:"",q={ok:!0,item:Q,removed:R,message:`Removed ${R} tag${R===1?"":"s"} from ${Q?.id??J.id}${T}`};if(V.length>0)q.not_found=V;v(q,D.json,D);return}if(U==="upsert"){let J=D.title??$[1],P=D.content??$[2],S=D.id?await L.get(D.id):null;if(!S){if(!J||!P)throw Error("New item requires title and content. Example: knowledge upsert <title> <content> [--id <id>]");let V=await L.create({id:D.id,title:J,content:P,url:D.url??null,tags:D.tag??[]});v(Az({ok:!0,created:!0,item:V},`Upserted ${V.id}`,D.tag),D.json,D);return}let X={};if(J!==void 0)X.title=J;if(P!==void 0)X.content=P;if(D.url!==void 0)X.url=D.url;let G;if(D.tag!==void 0){if(G=d8(S.tags,D.tag),G.length>0)X.tags=[...S.tags??[],...G]}let R=await L.update(S.id,X,{expectedVersion:S.version});v(Az({ok:!0,created:!1,item:R},`Upserted ${R?.id??S.id}`,G),D.json,D);return}if(U==="delete"){if(_0(D),!D.yes)throw Error("Refusing delete without --yes. Re-run with: knowledge delete --id <id> --yes");if(!await L.delete(D.id))throw Error(`Item not found: ${D.id}`);$0("info","Item deleted",{id:D.id,transport:L.kind}),v({ok:!0,deleted_id:D.id,message:`Deleted ${D.id}`},D.json,D);return}if(U==="export"){let J=D.format??"json";if(J!=="json"&&J!=="jsonl")throw Error("Invalid --format. Use 'json' or 'jsonl'.");let P=await L.listAll();if(J==="jsonl")for(let S of P.items)console.log(JSON.stringify(S));else if(D.json||D.format==="json"||D.verbose)v({ok:!0,items:P.items,store_exists:P.exists},D.json||D.format==="json",D);else v(uf(P.items,J),!1);return}if(U==="prune"){if(!D.yes)throw Error("Refusing prune without --yes. Re-run with: knowledge prune --yes [--older-than <days>] [--empty]");let{items:J}=await L.listAll(),P=D.olderThan!==void 0?new Date(Date.now()-D.olderThan*86400000):null,S=J.filter((R)=>P!==null&&new Date(R.created_at)<P||D.empty&&R.content.trim().length===0),X=await L.deleteMany(S.map((R)=>R.id)),G=J.length-X;$0("info","Prune completed",{pruned:X,remaining:G,transport:L.kind}),v({ok:!0,pruned:X,remaining:G,message:`Pruned ${X} item(s)`},D.json,D);return}if(U==="dedupe"){if(!D.yes)throw Error("Refusing dedupe without --yes. Re-run with: knowledge dedupe --yes [--json]");let{items:J}=await L.listAll(),P=new Set,S=[];for(let R of J){let V=`${R.title}\x00${R.content}`;if(P.has(V))S.push(R);else P.add(V)}let X=await L.deleteMany(S.map((R)=>R.id)),G=J.length-X;$0("info","Dedupe completed",{removed:X,remaining:G,transport:L.kind}),v({ok:!0,removed:X,remaining:G,message:`Dedupe removed ${X} duplicate(s)`},D.json,D);return}if(U==="stats"){let J=await L.listAll(),P=J.items.filter((K)=>!K.archived),S=P.length,X=J.items.length-S,G=P.filter((K)=>K.url).length,R=P.filter((K)=>K.tags&&K.tags.length>0).length,V=S>0?P.map((K)=>K.created_at).sort()[0]:null,Q=S>0?P.map((K)=>K.created_at).sort()[S-1]:null,T={};for(let K of P)for(let Z of K.tags||[])T[Z]=(T[Z]||0)+1;let q=Object.entries(T).sort((K,Z)=>Z[1]-K[1]).slice(0,5).map(([K,Z])=>({tag:K,count:Z}));v({ok:!0,total:S,archived:X,with_url:G,with_tags:R,oldest:V,newest:Q,top_tags:q,store_exists:J.exists,message:`${S} items | ${G} with URL | ${R} with tags`},D.json,D);return}let z=Wf($[0]),W=z?` Did you mean '${z}'?`:"";throw $0("warn","Unknown command",{input:$[0],suggestion:z}),Error(`Unknown command: ${$[0]}.${W} Run 'knowledge --help' for available commands.`)}function hf(_,$){let D=_ instanceof Error?_.message:String(_);$0("debug","CLI error",{message:D,stack:_ instanceof Error?_.stack:void 0}),console.error(`Error: ${D}`);let U=_ instanceof L0?_:null;if($.includes("--json"))v({ok:!1,error:D,message:D,...U?{code:"version_conflict",expected:U.expected,current:U.current}:{}},!0);process.exitCode=U?2:1}if(import.meta.main){let _=process.argv.slice(2);yf(_).catch(($)=>hf($,_))}export{Wf as suggestCommand,xf as sortItems,yf as run,Pf as parseArgs,hf as emitCliError}; +Remote machine sync resolves peer paths through @hasna/machines when --peer-workspace is omitted.`);return}if(_==="db"){console.log("Usage: knowledge db init|stats|storage status [--scope local|global|project] [--json]");return}if(_==="wiki"){console.log("Usage: knowledge wiki init|compile|file-answer|lint [query|prompt] [--title <title>] [--content <answer>] [--approve-write] [--limit <n>] [--scope local|global|project] [--json]");return}if(_==="app-wiki"){console.log("Usage: knowledge app-wiki init | note add|get|list | source add <source-ref> | search <query> | query <query> [--title <title>] [--content <text>] [--tag <tag>] [--source-ref <uri>] [--scope project|local|global] [--allow-global] [--json]");return}if(_==="source"){console.log("Usage: knowledge source resolve <source-ref> [--purpose knowledge_answer|knowledge_index] [--limit <n>] [--scope local|global|project] [--json]");return}if(_==="ingest"){console.log("Usage: knowledge ingest manifest <file|s3://bucket/key> | source <source-ref> | rules [--workspace <path>] [--owner <name>] [--dry-run] [--max-items <n>] [--limit <n>] [--purpose knowledge_index] [--scope local|global|project] [--json]");return}if(_==="reindex"){console.log("Usage: knowledge reindex status|enqueue|embeddings|outbox [file|s3://bucket/key] [--full] [--fake] [--scope local|global|project] [--json]");return}if(_==="search"){console.log("Usage: knowledge search <query> [--context] [--semantic] [--model openai:text-embedding-3-small] [--limit <n>] [--dimensions <n>] [--fake] [--scope local|global|project] [--verbose] [--json]");return}if(_==="context"){console.log("Usage: knowledge context pack <query> [--from search|runs|loops] [--max-tokens <n>] [--max-items <n>] [--limit <n>] [--semantic] [--model openai:text-embedding-3-small] [--dimensions <n>] [--fake] [--scope local|global|project] [--verbose] [--json]");return}if(_==="proposals"){console.log("Usage: knowledge proposals context --from loops --topic <text> [--since <duration|ISO>] [--dedupe] [--max-tokens <n>] [--max-items <n>] [--scope local|global|project] [--json]");return}if(_==="web"){console.log("Usage: knowledge web search <query> [--provider openai|anthropic] [--model provider:model] [--domain <domain>] [--file-results] [--fake] [--scope local|global|project] [--verbose] [--json]");return}if(_==="ask"||_==="build"){console.log("Usage: knowledge ask|build <prompt> [--generate] [--semantic] [--model default|provider:model] [--approve-write] [--scope local|global|project] [--verbose] [--json]");return}if(_==="embeddings"){console.log("Usage: knowledge embeddings status|index|search [query] [--model openai:text-embedding-3-small] [--limit <n>] [--dimensions <n>] [--fake] [--scope local|global|project] [--verbose] [--json]");return}if(_==="providers"){console.log("Usage: knowledge providers status|models|check [provider|model-alias] [--scope local|global|project] [--json]");return}if(_==="safety"){console.log("Usage: knowledge safety status|check|approve|audit|redact [args] [--scope local|global|project] [--json]");return}if(_==="events"){console.log("Usage: knowledge events emit|list|replay [args] [--json]");return}if(_==="webhooks"){console.log("Usage: knowledge webhooks add|list|remove|test [args] [--json]");return}bw()}function Zw(_){if(_.noColor||process.env.NO_COLOR)return!1;if(process.env.FORCE_COLOR)return!0;return process.stdout.isTTY===!0}function C(_,$,g){if($){console.log(JSON.stringify(_,null,2));return}if(typeof _==="string"){console.log(_);return}if(g?.verbose){console.log(JSON.stringify(_,null,2));return}let U=_.message;console.log(U?`${U} +${d_()}`:Hw(_))}function d_(_="full details"){return`Hint: use --verbose for ${_}, or --json for machine-readable output.`}function g_(_,$=120){let g=_===null||_===void 0?"":String(_).replace(/\s+/g," ").trim();if(g.length<=$)return g;return`${g.slice(0,Math.max(0,$-3))}...`}function Hw(_){if(!_||typeof _!=="object")return String(_);let $=_,g=[$.ok===!1?"Result: not ok":"Result: ok"];for(let[U,D]of Object.entries($).slice(0,8)){if(U==="ok"||U==="message")continue;if(Array.isArray(D))g.push(`${U}: ${D.length} item(s)`);else if(D&&typeof D==="object")g.push(`${U}: ${Object.keys(D).length} field(s)`);else g.push(`${U}: ${g_(D,100)}`)}return g.push(d_()),g.join(` +`)}function kw(_){let $=_.mode==="postgres"?"postgres (HTTP /v1 API)":"sqlite (on-box store)",g=_.source.kind==="env"?`selected by ${_.source.name}=${_.source.value}`:`default (no mode var set; set ${o$[0]}=postgres to use the API)`,U=[`Knowledge mode: ${$}`,` ${g}`];if(_.pointer_env_present.length>0){let D=_.pointer_ignored?"present but IGNORED for mode selection":"present";U.push(` Pointer env ${D}: ${_.pointer_env_present.join(", ")}`)}if(_.network_guard_active)U.push(" Outbound guard: ACTIVE (NODE_ENV=test) \u2014 non-loopback requests are refused.");if(_.warning)U.push(` Note: ${_.warning}`);return U.join(` +`)}function Cw(_){return[`Knowledge paths (${_.scope})`,`Home: ${_.home}`,`SQLite: ${_.knowledge_db_path}`,`JSON store: ${_.json_store_path}`,`Wiki: ${_.wiki_dir}`,d_("config and all paths")].join(` +`)}function p8(_){console.log(JSON.stringify(_))}function vw(_){let $=_.summary,g=[`Knowledge inventory (${_.scope})`,`Home: ${_.home}`,`JSON store: ${_.paths.json_store_path}${_.paths.json_store_exists?"":" (missing)"}`,`SQLite catalog: ${_.paths.knowledge_db_path}`,`Summary: ${$.legacy_items} item(s), ${$.sources} source(s), ${$.chunks} chunk(s), ${$.wiki_pages} wiki page(s), ${$.indexes} index(es), ${$.storage_objects} artifact(s), ${$.runs} run(s)`],U=(D,I,j)=>{if(I.length===0)return;g.push("",`${D}:`);for(let E of I.slice(0,_.limit))g.push(`- ${j(E)}`)};return U("Items",_.items,(D)=>`${D.id}: ${D.title}`),U("Sources",_.sources,(D)=>`${D.kind??"source"} ${D.uri} (${D.chunks??0} chunk(s))`),U("Chunks",_.chunks,(D)=>`${D.kind??"chunk"} ${D.id}: ${D.text_preview??""}`),U("Wiki pages",_.wiki_pages,(D)=>`${D.path}: ${D.title}`),U("Indexes",_.indexes,(D)=>`${D.kind??"index"} ${D.name}${D.shard_key?` (${D.shard_key})`:""}`),U("Artifacts",_.storage_objects,(D)=>`${D.kind??"artifact"} ${D.artifact_uri}`),U("Runs",_.runs,(D)=>`${D.type??"run"} ${D.id}: ${D.status??"unknown"}`),U("Machines",_.machines,(D)=>`${D.machine_id}${D.workspace_home?` ${D.workspace_home}`:""}`),U("Sync conflicts",_.sync_conflicts,(D)=>`${D.id}: ${D.entity_kind}/${D.entity_id} ${D.status}`),g.join(` +`)}function ww(_){let $=Array.isArray(_.results)?_.results:[],g=[`${$.length} search result(s) for "${g_(_.query,80)}"${_.mode?.semantic?" (semantic enabled)":""}`];for(let U of $.slice(0,_.limit??10)){let D=U.source?.uri??U.provenance?.source_uri??U.artifact?.path??U.artifact?.uri??U.id,I=typeof U.score==="number"?` score=${U.score.toFixed(3)}`:"";if(g.push(`- ${U.kind??"result"} ${g_(U.title??U.id,80)}${I}`),D)g.push(` source: ${g_(D,120)}`);if(U.text)g.push(` text: ${g_(U.text,180)}`)}if($.length===0)g.push("- No matches. Try a broader query or run `knowledge inventory --scope project`.");if(g.push(d_("scores, provenance, and full result objects")),!_.context)g.push("Next: use --context for an agent-ready citation pack, or --limit <n> to change the result count.");return g.join(` +`)}function uw(_){let $=Array.isArray(_.excerpts)?_.excerpts:[],g=Array.isArray(_.citations)?_.citations:[],U=[`${$.length} context excerpt(s) for "${g_(_.query??_.normalized_query,80)}"`];for(let D of $.slice(0,10)){let I=g.find((A)=>A.id===D.citation_id||A.result_id===D.result_id),j=I?.source_uri??I?.artifact_path??D.result_id,E=typeof D.score==="number"?` score=${D.score.toFixed(3)}`:"";if(U.push(`- ${D.kind??"excerpt"} ${g_(D.id,44)}${E}`),j)U.push(` source: ${g_(j,120)}`);U.push(` text: ${g_(D.text,220)}`)}return U.push(`Citations: ${g.length}`),U.push(d_("citations, graph, notes, and full excerpts")),U.join(` +`)}function fw(_){let $=Array.isArray(_.results)?_.results:[],g=[`${$.length} semantic result(s) for "${g_(_.query,80)}"`,`Index: ${_.provider??"unknown"}:${_.model??"unknown"} (${_.dimensions??"?"} dimensions)`];for(let U of $.slice(0,_.limit??10)){let D=typeof U.score==="number"?` score=${U.score.toFixed(3)}`:"";if(g.push(`- ${g_(U.chunk_id,44)}${D}`),U.source_uri)g.push(` source: ${g_(U.source_uri,120)}`);if(U.text)g.push(` text: ${g_(U.text,180)}`)}return g.push(d_("provenance and full vector result objects")),g.join(` +`)}function xw(_){let $=Array.isArray(_.sources)?_.sources:[],g=[`${$.length} web source(s) for "${g_(_.query,80)}"`,`Provider: ${_.provider??"unknown"}${_.model?` (${_.model})`:""}`];for(let U of $.slice(0,_.limit??10)){g.push(`- ${g_(U.title??U.url??U.uri??"source",100)}`);let D=U.url??U.uri??U.source_ref;if(D)g.push(` url: ${g_(D,140)}`);if(U.snippet)g.push(` snippet: ${g_(U.snippet,180)}`)}return g.push(d_("provider payloads and filed source refs")),g.join(` +`)}function yw(_){let $=Array.isArray(_.machines)?_.machines:[],g=[`${$.length} machine(s) discovered via ${_.source??"unknown"}`,`Adapter: ${_.adapter?.package??"@hasna/machines"} ${_.adapter?.available?"available":"unavailable"}`];for(let U of $.slice(0,10)){let D=U.local?" local":"",I=U.tailscale_dns??U.ssh_target??U.hostname??"";g.push(`- ${g_(U.machine_id??U.id??"unknown",48)}${D}${I?` -> ${g_(I,80)}`:""}`)}if($.length>10)g.push(`... ${$.length-10} more machine(s).`);if(Array.isArray(_.warnings)&&_.warnings.length>0)g.push(`Warnings: ${_.warnings.slice(0,3).join("; ")}`);return g.push(d_("full topology, route hints, and adapter evidence")),g.join(` +`)}function cw(_){let $=Array.isArray(_.checks)?_.checks:[],g=$.filter((I)=>I.status==="fail"||I.severity==="fail"),U=$.filter((I)=>I.status==="warn"||I.severity==="warn"),D=[`Machine preflight ${_.ok?"passed":"needs attention"} for ${_.machine_id??_.requested_machine_id??"local"}`,`Checks: ${$.length} total, ${g.length} failed, ${U.length} warning(s)`];for(let I of[...g,...U].slice(0,8))D.push(`- ${I.status??I.severity??"check"} ${g_(I.id??I.kind??"check",72)}: ${g_(I.message??I.detail??"",140)}`);return D.push(d_("all checks and repair hints")),D.join(` +`)}function hw(_){return[`Sync status (${_.scope??"scope"})`,`Schema: v${_.sqlite_schema_version??"unknown"}`,`Machines: ${_.machines?.total??0}; snapshots: ${_.snapshots?.total??0}; open conflicts: ${_.conflicts?.open??0}`,`Tables: ${Object.entries(_.table_counts??{}).slice(0,8).map(([g,U])=>`${g}=${U}`).join(", ")||"none"}`,d_("registry rows, clocks, snapshots, imports, and conflicts")].join(` +`)}function nw(_){let $=Array.isArray(_.warnings)?_.warnings:[],g=Array.isArray(_.recommended_commands)?_.recommended_commands:[],U=[_.message??`Sync readiness ${_.ok?"ok":"needs attention"}`,`Storage: ${_.storage?.validation?.ok?"ok":"needs attention"}; open-files: ${_.open_files?.ok?"ok":"needs attention"}; open conflicts: ${_.sync?.open_conflicts??0}`];if($.length>0)U.push(`Warnings: ${$.slice(0,5).join("; ")}`);for(let D of g.slice(0,5))U.push(`- next: ${g_(D.shell_command??D.command?.join(" ")??D.id,160)}`);return U.push(d_("diagnostics, route evidence, and all recommended commands")),U.join(` +`)}function dw(_){let $=_.snapshot??{};return[`Sync snapshot ${_.ok?"recorded":"failed"}`,`Snapshot: ${g_($.id??$.snapshot_id??"unknown",80)} ${$.content_hash?`(${g_($.content_hash,80)})`:""}`,`Machines upserted: ${_.machines_upserted??0}; machine: ${_.machine_id??$.machine_id??"unknown"}`,d_("snapshot payload and topology evidence")].join(` +`)}function mw(_){let $=Array.isArray(_.conflicts)?_.conflicts:[],g=[`${$.length} sync conflict(s)`];for(let U of $.slice(0,10))g.push(`- ${g_(U.id,48)} ${U.status??"unknown"} ${U.entity_kind??""}/${g_(U.entity_id,80)}`);return g.push("Next: use `knowledge sync conflicts show <id> --json` for one conflict."),g.push(d_("full conflict objects")),g.join(` +`)}function iw(_){let $=Array.isArray(_.machines)?_.machines:[],g=[`${$.length} registered sync machine(s)`];for(let U of $.slice(0,10))g.push(`- ${g_(U.machine_id,48)} ${g_(U.hostname??U.workspace_home??"",100)}`);return g.push(d_("machine registry rows")),g.join(` +`)}function e8(_,$){let g=[`Sync ${$} ${_.ok===!1?"needs attention":"completed"}${_.dry_run?" (dry run)":""}`],U=(D,I)=>{if(!I)return;let E=(Array.isArray(I.tables)?I.tables:[]).reduce((P,W)=>P+(W.inserted??0)+(W.updated??0)+(W.deleted??0),0),A=I.artifacts?.copied??0,O=Array.isArray(I.errors)?I.errors.length:0;g.push(`${D}: ${E} table row change(s), ${A} artifact(s), ${O} error(s)`)};if(U("pull",_.pull),U("push",_.push),Array.isArray(_.errors)&&_.errors.length>0)g.push(`Errors: ${_.errors.slice(0,3).map((D)=>g_(D,120)).join("; ")}`);return g.push(d_("per-table rows, artifacts, clocks, and errors")),g.join(` +`)}function lw(_){let $=Array.isArray(_.citations)?_.citations:[],g=Array.isArray(_.context?.excerpts)?_.context.excerpts:Array.isArray(_.excerpts)?_.excerpts:[],U=[_.generated?"Generated answer with citations":"Prepared citation context draft",`Citations: ${$.length}; excerpts: ${g.length}`];if(_.answer)U.push(`Answer: ${g_(_.answer,500)}`);for(let D of $.slice(0,5))U.push(`- ${g_(D.source_uri??D.ref??D.id,120)}`);return U.push(d_("full answer payload, context, citations, and run ledger")),U.join(` +`)}function tw(_,$){return[`Export preview: ${_.length} item(s) available`,"Default output is compact to avoid terminal/context bloat.","Use --verbose or --json for a JSON object, or --format jsonl for newline-delimited records.",$!=="json"?`Requested format: ${$}`:""].filter(Boolean).join(` +`)}function a8(_){return!_||_==="local"||_==="localhost"}function $4(_){if(!_.id)throw Error("Missing required --id. Example: knowledge get --id <id>")}function ow(_,$){let g=$.sort??"created";if(g!=="created"&&g!=="title")throw Error("Invalid --sort value. Use 'created' or 'title'.");let U=[..._].sort((D,I)=>{if(g==="title")return D.title.localeCompare(I.title);return D.created_at.localeCompare(I.created_at)});if($.desc)U.reverse();return{sorted:U,sort:g,direction:$.desc?"desc":"asc"}}async function pw(_){if(await rw(_))return;let{positional:$,flags:g}=Kw(_);if(g4("debug","CLI invoked",{command:$[0],flags:{json:g.json,store:g.store}}),g.version){console.log(g.json?JSON.stringify({name:H$.name,version:H$.version},null,2):`${H$.name} ${H$.version}`);return}if(g.completions){let S=g.completions;if(S==="bash")console.log('_knowledge() { local cur; cur="${COMP_WORDS[COMP_CWORD]}"; COMPREPLY=($(compgen -W "add list get update archive restore upsert untag versions diff delete export prune dedupe stats inventory project-panel paths mode guarded setup auth storage machines sync db wiki app-wiki source ingest reindex search context proposals web ask build embeddings providers safety events webhooks help ls rm edit unarchive --json --verbose --yes --help --version --desc --page --limit --search --sort --id --store --title --content --url --tag --rev --to --format --completions --purpose --model --dimensions --semantic --context --max-tokens --max-items --from --since --topic --dedupe --generate --approve-write --provider --mode --machine --workspace --peer-workspace --api-url --canonical-example --api-key --email --org --org-id --user-id --owner --domain --file-results --full --dry-run --fake --no-tailscale --no-artifact-content --no-color --scope --tables --archived --include-archived --project --contract --source-ref --allow-global" -- "$cur")); }; complete -F _knowledge knowledge');else if(S==="zsh")console.log(`#compdef knowledge +_knowledge() { _arguments -C "1: :(add list get update archive restore upsert untag versions diff delete export prune dedupe stats inventory project-panel paths mode guarded setup auth storage machines sync db wiki app-wiki source ingest reindex search context proposals web ask build embeddings providers safety events webhooks help ls rm edit unarchive)" "(--json)--json" "(--verbose)--verbose" "(--yes)-y" "(--help)--help" "(--version)--version" "(--desc)--desc" "(--archived)--archived" "(--include-archived)--include-archived" "(--semantic)--semantic" "(--context)--context" "(--dedupe)--dedupe" "(--generate)--generate" "(--approve-write)--approve-write" "(--canonical-example)--canonical-example" "(--file-results)--file-results" "(--full)--full" "(--dry-run)--dry-run" "(--fake)--fake" "(--no-tailscale)--no-tailscale" "(--no-artifact-content)--no-artifact-content" "(--contract)--contract" "(--allow-global)--allow-global" "(-p --page)"{-p,--page}"[page number]:number:" "(-l --limit)"{-l,--limit}"[items per page]:number:" "(-s --search)"{-s,--search}"[search text]:text:" "(--sort)--sort"{created,title}:" "(--id)--id[item id]:id:" "(--store)--store[store path]:path:" "(--title)--title[new title]:" "(--content)--content[new content]:" "(--url)--url[source url]:" "(-t --tag)"{-t,--tag}"[tag]:tag:" "(--format)--format[json|jsonl]:" "(--completions)--completions[output completions]:shell:(bash zsh fish):" "(--purpose)--purpose[purpose]:" "(--model)--model[model ref]:" "(--dimensions)--dimensions[embedding dimensions]:number:" "(--max-tokens)--max-tokens[token budget]:number:" "(--max-items)--max-items[item budget]:number:" "(--from)--from"{search,loops,runs}:" "(--to)--to[diff target: version number or current]:" "(--rev)--rev[entry version for diff]:number:" "(--since)--since[duration or ISO time]:" "(--topic)--topic[topic text]:" "(--provider)--provider[provider]:" "(--mode)--mode"{local,hosted}:" "(--machine)--machine[machine id or SSH alias]:" "(--workspace)--workspace[repo workspace path]:path:" "(--peer-workspace)--peer-workspace[peer repo or knowledge home path]:path:" "(--api-url)--api-url[hosted API URL]:" "(--api-key)--api-key[hosted API key]:" "(--email)--email[email]:" "(--org)--org[org slug]:" "(--org-id)--org-id[org id]:" "(--user-id)--user-id[user id]:" "(--owner)--owner[provenance owner]:" "(--domain)--domain[domain]:" "(--project)--project[project id/name/slug]:" "(--source-ref)--source-ref[source ref]:" "(--no-color)--no-color[disable color]" "(--scope)--scope"{local,global,project}:" "(--tables)--tables[comma-separated DB sync tables]:" }; _knowledge`);else if(S==="fish")console.log('complete -c knowledge -f; complete -c knowledge -a "add list get update archive restore upsert untag versions diff delete export prune dedupe stats inventory project-panel paths mode guarded setup auth storage machines sync db wiki app-wiki source ingest reindex search context proposals web ask build embeddings providers safety events webhooks help ls rm edit unarchive"; complete -c knowledge -l json; complete -c knowledge -l verbose; complete -c knowledge -l yes -s y; complete -c knowledge -l help -s h; complete -c knowledge -l version -s v; complete -c knowledge -l desc; complete -c knowledge -l archived; complete -c knowledge -l include-archived; complete -c knowledge -l semantic; complete -c knowledge -l context; complete -c knowledge -l max-tokens; complete -c knowledge -l max-items; complete -c knowledge -l from -a "search loops runs"; complete -c knowledge -l to; complete -c knowledge -l rev; complete -c knowledge -l since; complete -c knowledge -l topic; complete -c knowledge -l dedupe; complete -c knowledge -l generate; complete -c knowledge -l approve-write; complete -c knowledge -l allow-global; complete -c knowledge -l canonical-example; complete -c knowledge -l provider; complete -c knowledge -l mode; complete -c knowledge -l machine; complete -c knowledge -l workspace; complete -c knowledge -l peer-workspace; complete -c knowledge -l api-url; complete -c knowledge -l api-key; complete -c knowledge -l email; complete -c knowledge -l org; complete -c knowledge -l org-id; complete -c knowledge -l user-id; complete -c knowledge -l owner; complete -c knowledge -l domain; complete -c knowledge -l project; complete -c knowledge -l contract; complete -c knowledge -l source-ref; complete -c knowledge -l file-results; complete -c knowledge -l full; complete -c knowledge -l dry-run; complete -c knowledge -l fake; complete -c knowledge -l no-tailscale; complete -c knowledge -l no-artifact-content; complete -c knowledge -s p -l page; complete -c knowledge -s l -l limit; complete -c knowledge -s s -l search; complete -c knowledge -l sort; complete -c knowledge -l id; complete -c knowledge -l store; complete -c knowledge -l title; complete -c knowledge -l content; complete -c knowledge -l url; complete -c knowledge -s t -l tag; complete -c knowledge -l format; complete -c knowledge -l completions; complete -c knowledge -l purpose; complete -c knowledge -l model; complete -c knowledge -l dimensions; complete -c knowledge -l no-color; complete -c knowledge -l scope -a "local global project"; complete -c knowledge -l tables');else throw Error("Invalid --completions value. Use 'bash', 'zsh', or 'fish'.");return}let U=qw($[0]),D=1,I=Fw()&&U&&!_Y.includes(U);if(!U||g.help||U==="help"){let S=U==="help"?$[1]:U||$[1];Mw(S);return}if(U==="mode"){let S=Sz(process.env);C(g.json||g.verbose?{ok:!0,...S}:kw(S),g.json,g);return}if(U==="guarded"){if(($[1]??"capabilities")!=="capabilities")throw Error("Usage: knowledge guarded capabilities [--json]");C({ok:!0,contract:"FCAME-1",private_input:!0,private_result:!0,exact_title_lookup:!0,private_transport_body_output:!1},g.json,g);return}Pz(process.env,{storePathOverridden:Boolean(g.store)});let j=U==="project-panel"||U==="app-wiki"?g.scope??"project":g.scope,E=IE({scope:j});if(U==="storage"){let S=$[1]??"status";if(S==="import-legacy"){if(g.scope&&g.scope!=="global")throw Error("knowledge storage import-legacy only supports --scope global because ~/.open-knowledge is a global legacy store.");let L=fE({dryRun:g.dryRun});if(C(L,g.json),!L.ok)process.exitCode=1;return}if(S==="migrate-legacy-path"||S==="migrate-legacy"||S==="migrate-path"){let L=E.migrateLegacyPath({approveWrite:g.approveWrite,approvedBy:g.approvedBy});if(C(L,g.json),!L.ok&&!g.json)process.exitCode=1;return}if(S==="merge-legacy-path"||S==="merge-legacy"||S==="merge-path"){let L=E.mergeLegacyPath({approveWrite:g.approveWrite,approvedBy:g.approvedBy});if(C(L,g.json),!L.ok&&!g.json)process.exitCode=1;return}}let A=Boolean(g.store),O=g.store;if(!O)if(j==="project"||j==="local")O=E.workspace.jsonStorePath;else O=HU();let P=hU({storePath:O,storePathOverridden:A});if(I&&await Yw($,U,P))U="ask",D=0;if(!A&&(U==="ask"||U==="build")&&!Q6())Z0(O);if(U==="inventory"){let S=await E.resolveInventory({limit:g.limit,includeArchived:g.includeArchived||g.archived,storePath:Q6()?void 0:O});C(g.json||g.verbose?S:vw(S),g.json,g);return}if(U==="project-panel"){let S=g.project??$[1];if(!S)throw Error("Usage: knowledge project-panel --project <id|name|slug> [--json|--contract]");let L=await $8(S,{service:E,limit:g.limit,storePath:Q6()?void 0:O,includeArchived:g.includeArchived||g.archived});C(g.json||g.contract?L:g8(L),g.json||g.contract);return}if(U==="paths"){let S=E.paths();C(g.json||g.verbose?S:Cw(S),g.json,g);return}if(U==="setup"){let S=E.setup({mode:g.mode,apiUrl:g.apiUrl,canonicalExample:g.canonicalExample});C(S,g.json,g);return}if(U==="auth"){let S=$[1]??"whoami";if(S==="whoami"||S==="status"){let L=E.authStatus(process.env);C({ok:!0,...L,message:L.authenticated?`Authenticated via ${L.source}`:"Not authenticated"},g.json,g);return}if(S==="login"){let L=g.apiKey??process.env.KNOWLEDGE_API_KEY??process.env.HASNA_KNOWLEDGE_API_KEY;if(!L)throw Error("Usage: knowledge auth login --api-key <key> [--email <email>]");let J=E.saveAuth({apiKey:L,email:g.email,orgSlug:g.org,orgId:g.orgId,userId:g.userId,apiUrl:g.apiUrl},process.env);C({ok:!0,authenticated:!0,email:J.email??null,org_slug:J.org_slug??null,api_url:J.api_url??E.authStatus(process.env).api_url,auth_path:E.authStatus(process.env).auth_path,message:`Saved hosted credentials for ${J.email??"API key"}`},g.json,g);return}if(S==="logout"){let L=E.clearAuth(process.env);C({ok:!0,removed:L,message:L?"Removed hosted credentials":"No hosted credentials found"},g.json,g);return}throw Error("Invalid auth action. Use 'login', 'whoami', or 'logout'.")}if(U==="storage"){let S=$[1]??"status";if(S==="status"){let L=E.storageContract(),J=E.validateStorage();C({ok:J.ok,...L,validation:J,message:`${L.storage_type} artifact storage at ${L.artifact_store.uri_prefix}`},g.json,g);return}if(S==="validate"){let L=E.validateStorage();if(C({ok:L.ok,validation:L,message:L.ok?"Storage contract valid":`Storage contract invalid: ${L.errors.join("; ")}`},g.json,g),!L.ok)process.exitCode=1;return}if(S==="repair-artifact-keys"||S==="repair-keys"){let L=E.repairArtifactManifestKeys({approveWrite:g.approveWrite,approvedBy:g.approvedBy,dryRun:g.dryRun});C(L,g.json,g);return}if(S==="migrate-legacy-path"||S==="migrate-legacy"||S==="migrate-path"){let L=E.migrateLegacyPath({approveWrite:g.approveWrite,approvedBy:g.approvedBy});if(C(L,g.json),!L.ok&&!g.json)process.exitCode=1;return}if(S==="merge-legacy-path"||S==="merge-legacy"||S==="merge-path"){let L=E.mergeLegacyPath({approveWrite:g.approveWrite,approvedBy:g.approvedBy});if(C(L,g.json),!L.ok&&!g.json)process.exitCode=1;return}throw Error("Invalid storage action. Use 'status', 'validate', 'repair-artifact-keys', 'migrate-legacy-path', 'merge-legacy-path', or 'import-legacy'.")}if(U==="machines"){let S=$[1]??"topology";if(S==="topology"||S==="status"){let L=await E.machineTopology({includeTailscale:g.tailscale!==!1});C(g.json||g.verbose?L:yw(L),g.json,g);return}if(S==="preflight"||S==="check"){let L=$[2]??g.machine??"local",J=g.workspace??process.cwd(),R=await E.machinePreflight({machineId:L,commands:[{command:"bun",required:!0},{command:"knowledge",required:!0}],packages:[{name:H$.name,command:"knowledge",expectedVersion:H$.version,required:!0},{name:"@hasna/machines",command:"machines",required:!1}],workspaces:[{label:"open-knowledge",path:J,expectedPackageName:H$.name,expectedVersion:H$.version,required:!0}]});if(C(g.json||g.verbose?R:cw(R),g.json,g),!R.ok&&!g.json)process.exitCode=1;return}throw Error("Invalid machines action. Use 'topology' or 'preflight'.")}if(U==="sync"){let S=$[1]??"status",L=g.tables?g.tables.split(",").map((J)=>J.trim()).filter(Boolean):void 0;if(S==="status"){let J=E.syncStatus();C(g.json||g.verbose?J:hw(J),g.json,g);return}if(S==="doctor"||S==="readiness"||S==="preflight"){let J=await E.syncDoctor({machine:g.machine??null,peerWorkspace:g.peerWorkspace??null,includeTailscale:g.tailscale!==!1,tables:L}),R={package:{name:H$.name,version:H$.version},...J};if(C(g.json||g.verbose?R:nw(R),g.json,g),!J.ok&&!g.json)process.exitCode=1;return}if(S==="snapshot"||S==="record"){let J=await E.createSyncSnapshot({includeTailscale:g.tailscale!==!1,machineId:g.machine});C(g.json||g.verbose?J:dw(J),g.json,g);return}if(S==="conflicts"||S==="conflict"){let J=$[2];if(J==="show"||J==="get"){let G=$[3]??g.id;if(!G)throw Error("Usage: knowledge sync conflicts show <id>");let B=E.syncConflict(G);C({ok:!0,conflict:B,message:`Sync conflict ${G}`},g.json,g);return}if(J==="propose"||J==="proposal"){let G=$[3]??g.id;if(!G)throw Error("Usage: knowledge sync conflicts propose <id>");C(g.mode==="ai"?await E.proposeSyncConflictResolutionWithAi({id:G,modelRef:g.model,fake:g.fake}):E.proposeSyncConflictResolution(G),g.json,g);return}if(J==="resolve"){let G=$[3]??g.id;if(!G)throw Error("Usage: knowledge sync conflicts resolve <id> --approve-write --approved-by <name> [--strategy <name>]");let B=E.resolveSyncConflict({id:G,strategy:g.strategy,approvedBy:g.approvedBy,approveWrite:g.approveWrite,proposedPatchUri:g.patchUri});if(C(B,g.json,g),!B.ok&&!g.json)process.exitCode=1;return}let R=E.syncConflicts({status:J,limit:g.limit}),X={ok:!0,conflicts:R,message:`${R.length} sync conflict(s)`};C(g.json||g.verbose?X:mw(X),g.json,g);return}if(S==="machines"||S==="registry"){let J=E.syncMachines(),R={ok:!0,machines:J,message:`${J.length} registered sync machine(s)`};C(g.json||g.verbose?R:iw(R),g.json,g);return}if(S==="export"){let J=E.exportSyncBundle({machineId:g.machine??null,tables:L,includeArtifactContent:g.artifactContent!==!1});C(J,!0);return}if(S==="import"){let J=await Bun.stdin.text();if(!J.trim())throw Error("Usage: knowledge sync import < bundle.json");let R=await E.importSyncBundle({bundle:JSON.parse(J),dryRun:g.dryRun,direction:"import",machineId:g.machine??null});C(g.json||g.verbose?R:e8(R,S),g.json,g);return}if(S==="dry-run"||S==="pull"||S==="push"||S==="sync"){if(!g.peerWorkspace&&a8(g.machine))throw Error(`Usage: knowledge sync ${S} --peer-workspace <repo-or-knowledge-home> [--scope project] +Remote machine sync can omit --peer-workspace when machines path mapping is configured.`);let J=S==="dry-run"?"both":S==="sync"?"both":S,R=!a8(g.machine)?await E.syncRemotePeer({direction:J,machine:g.machine,peerWorkspace:g.peerWorkspace,tables:L,dryRun:g.dryRun===!0||S==="dry-run",includeArtifactContent:g.artifactContent!==!1,includeTailscale:g.tailscale!==!1}):await E.syncPeer({peerWorkspace:g.peerWorkspace,direction:J,dryRun:g.dryRun===!0||S==="dry-run",tables:L,includeArtifactContent:g.artifactContent!==!1,machineId:g.machine??null});if(C(g.json||g.verbose?R:e8(R,S),g.json,g),!R.ok&&!g.json)process.exitCode=1;return}throw Error("Invalid sync action. Use 'status', 'doctor', 'snapshot', 'conflicts', 'machines', 'dry-run', 'pull', 'push', 'sync', 'export', or 'import'.")}if(U==="db"){let S=$[1]??"init";if(S==="init"){let L=E.initDb();C({ok:!0,...L,message:`Initialized ${L.path}`},g.json,g);return}if(S==="stats"){let L=E.dbStats();C({ok:!0,path:E.workspace.knowledgeDbPath,...L,message:`knowledge.db schema v${L.schema_version}`},g.json,g);return}if(S==="storage"){if(($[2]??"status")==="status"){let J=_J({scope:g.scope});C({ok:!0,...J,message:`knowledge.db storage mode ${J.mode}`},g.json,g);return}throw Error("Invalid db storage action. Only 'status' is supported. The 'push'/'pull'/'sync' Postgres sync commands were removed (DSN-on-client is forbidden); use the cloud API flip instead.")}throw Error("Invalid db action. Use 'init', 'stats', or 'storage'.")}if(U==="app-wiki"){let S=$[1]??"init";if(S==="paths"||S==="status"){C({ok:!0,standard:"hasna-app-wiki.v1",default_scope:"project",global_writes_require:"--allow-global",...E.paths()},g.json);return}if(S==="init"||S==="open"){let L=await E.initAppWiki({allowGlobal:g.allowGlobal});C(L,g.json);return}if(S==="note"||S==="notes"){let L=$[2]??"list";if(L==="add"||L==="create"){let J=g.title??$[3],R=g.content??$.slice(4).join(" ");if(!J||!R)throw Error("Usage: knowledge app-wiki note add --title <title> --content <text> [--source-ref <uri>]");let X=await E.addAppWikiNote({title:J,content:R,tags:g.tag,sourceRefs:g.sourceRef,allowGlobal:g.allowGlobal});C(X,g.json);return}if(L==="list"||L==="ls"){let J=E.listAppWikiNotes({limit:g.limit});C({ok:!0,scope:E.scope,home:E.workspace.home,notes:J,message:`${J.length} app wiki note(s)`},g.json);return}if(L==="get"||L==="show"){let J=$[3]??g.id;if(!J)throw Error("Usage: knowledge app-wiki note get <id-or-path>");let R=await E.getAppWikiNote(J,{includeContent:!0});if(!R)throw Error(`App wiki note not found: ${J}`);C(R,g.json);return}throw Error("Invalid app-wiki note action. Use 'add', 'list', or 'get'.")}if(S==="source"||S==="sources"){let L=$[2]??"add";if(L!=="add"&&L!=="ingest")throw Error("Invalid app-wiki source action. Use 'add'.");let J=$[3]??g.sourceRef?.[0];if(!J)throw Error("Usage: knowledge app-wiki source add <source-ref>");let R=await E.addAppWikiSourceRef({sourceRef:J,purpose:g.purpose,allowGlobal:g.allowGlobal});C({ok:!0,...R,message:`Added app wiki source ${R.source_ref}`},g.json);return}if(S==="search"){let L=$.slice(2).join(" ");if(!L)throw Error("Usage: knowledge app-wiki search <query>");let J=await E.searchAppWiki({query:L,limit:g.limit,semantic:g.semantic,modelRef:g.model,dimensions:g.dimensions,fake:g.fake});C({ok:!0,...J,message:`${J.results.length} app wiki result(s)`},g.json);return}if(S==="query"||S==="context"){let L=$.slice(2).join(" ");if(!L)throw Error("Usage: knowledge app-wiki query <query>");let J=await E.queryAppWiki({query:L,limit:g.limit,semantic:g.semantic,modelRef:g.model,dimensions:g.dimensions,fake:g.fake});C({ok:!0,...J,message:`${J.excerpts.length} app wiki excerpt(s)`},g.json);return}throw Error("Invalid app-wiki action. Use 'init', 'paths', 'note', 'source', 'search', or 'query'.")}if(U==="wiki"){let S=$[1]??"init";if(S==="init"){let L=await E.initWiki();C({ok:!0,...L,message:`Initialized wiki layout in ${E.workspace.home}`},g.json,g);return}if(S==="compile"){let L=$.slice(2),J=L.filter((G)=>/^(open-files|file|s3|https?):\/\//.test(G)),R=L.filter((G)=>!/^(open-files|file|s3|https?):\/\//.test(G)).join(" "),X=await E.compileWiki({title:g.title,query:R||g.search,sourceRefs:J.length>0?J:void 0,limit:g.limit});C({ok:!0,...X,message:`Compiled wiki page ${X.path}`},g.json,g);return}if(S==="file-answer"||S==="answer"){let L=$.slice(2).join(" ");if(!L)throw Error("Usage: knowledge wiki file-answer <prompt> --content <answer> --approve-write");if(!g.content)throw Error("Missing --content <answer> for wiki file-answer.");let J=await E.fileAnswer({prompt:L,answer:g.content,approveWrite:g.approveWrite,limit:g.limit,semantic:g.semantic,modelRef:g.model,dimensions:g.dimensions,fake:g.fake});C({ok:!0,...J},g.json,g);return}if(S==="lint"){let L=E.lintWiki();C({ok:L.ok,...L,message:L.ok?"Wiki lint passed":`Wiki lint found ${L.issue_count} issue(s)`},g.json,g);return}throw Error("Invalid wiki action. Use 'init', 'compile', 'file-answer', or 'lint'.")}if(U==="safety"){let S=$[1]??"status",L=E.ensureWorkspace(),J=E.safetyPolicy();E.initDb();let R=v(L.knowledgeDbPath);try{if(S==="status"){C({ok:!0,mode:J.mode,workspace:L.home,allow_write_roots:J.allowWriteRoots,read_only_source_access:J.readOnlySourceAccess,network:J.network,redaction:J.redaction,approvals:J.approvals,message:`Safety policy: ${J.mode}`},g.json,g);return}if(S==="check"){let X=$[2]??"generated_write",G=$[3]??null,B;try{if(X==="web_search")L4(J),B={action:X,target_uri:G,approval_required:!1,approved:!0,decision:"allow"};else if(X==="s3_read"){if(!G)throw Error("safety check s3_read requires an s3:// target.");q6(G,J),B={action:X,target_uri:G,approval_required:!1,approved:!0,decision:"allow"}}else B=lz(R,J,X,G);z_(R,{event_type:"safety_check",action:X,target_uri:G,decision:B.decision==="allow"?"allow":"requires_approval",metadata:B}),C({ok:!0,...B,message:`Safety check ${B.decision}`},g.json,g);return}catch(Q){throw z_(R,{event_type:"safety_check",action:X,target_uri:G,decision:"deny",metadata:{error:Q instanceof Error?Q.message:String(Q)}}),Q}}if(S==="approve"){let X=$[2]??"generated_write",G=$[3]??null,B=iU(R,{action:X,target_uri:G,reason:"local-cli approval",metadata:{scope:g.scope??"global"}});z_(R,{event_type:"approval",action:X,target_uri:G,decision:"allow",metadata:{approval_id:B.id}}),C({ok:!0,...B,action:X,target_uri:G,message:`Approved ${X}`},g.json,g);return}if(S==="audit"){let X=R.query("SELECT id, event_type, action, target_uri, decision, metadata_json, created_at FROM audit_events ORDER BY created_at DESC LIMIT 50").all().map((G)=>({id:G.id,event_type:G.event_type,action:G.action,target_uri:G.target_uri,decision:G.decision,metadata:JSON.parse(G.metadata_json),created_at:G.created_at}));C({ok:!0,events:X,message:`${X.length} audit event(s)`},g.json,g);return}if(S==="redact"){let X=$.slice(2).join(" ");if(!X)throw Error("Usage: knowledge safety redact <text>");let G=w_(X,J);if(G.findings.length>0)W4(R,{source_uri:"safety://redact",findings:G.findings,metadata:{command:"safety redact"}});z_(R,{event_type:"redaction",action:"safety_redact",target_uri:"safety://redact",decision:G.findings.length>0?"redacted":"allow",metadata:{findings:G.findings.length}}),C({ok:!0,text:G.text,findings:G.findings,message:`Redacted ${G.findings.length} finding(s)`},g.json,g);return}throw Error("Invalid safety action. Use 'status', 'check', 'approve', 'audit', or 'redact'.")}finally{R.close()}}if(U==="source"){if(($[1]??"")!=="resolve")throw Error("Invalid source action. Use 'resolve'.");let L=$[2];if(!L)throw Error("Usage: knowledge source resolve <source-ref>");let J=await E.resolveSource(L,{purpose:g.purpose,limit:g.limit});C({ok:!0,...J,message:J.resolved?`Resolved ${J.source_ref} (${J.content.chunks_returned}/${J.content.chunks_total} chunks)`:`Source not indexed: ${L}`},g.json,g);return}if(U==="ingest"){let S=$[1]??"";if(S==="rules"||S==="global-rules"||S==="agent-rules"){let L=await E.importRulesProvenance({root:g.workspace??process.cwd(),owner:g.owner,dryRun:g.dryRun===!0,maxItems:g.maxItems,limit:g.limit});C({ok:!0,...L},g.json);return}if(S==="manifest"){let L=$[2];if(!L)throw Error("Usage: knowledge ingest manifest <file|s3://bucket/key>");let J=await E.ingestManifest(L);C({ok:!0,...J,message:`Ingested ${J.items_seen} manifest item(s)`},g.json,g);return}if(S==="source"){let L=$[2];if(!L)throw Error("Usage: knowledge ingest source <source-ref>");let J=await E.ingestSource(L,g.purpose);C({ok:!0,...J,message:`Ingested source ${J.source_ref} (${J.chunks_inserted} chunks)`},g.json,g);return}throw Error("Invalid ingest action. Use 'manifest' or 'source'.")}if(U==="reindex"){let S=$[1]??"status";if(S==="status"){let L=E.reindexHealth({modelRef:g.model,dimensions:g.dimensions,fake:g.fake});C({ok:!0,...L,message:`${L.missing_embeddings} chunk(s) missing embeddings`},g.json,g);return}if(S==="enqueue"){let L=E.enqueueReindex({modelRef:g.model,dimensions:g.dimensions,fake:g.fake});C({ok:!0,...L,message:`Queued ${L.enqueued} embedding refresh item(s)`},g.json,g);return}if(S==="embeddings"){let L=await E.refreshEmbeddings({full:g.full,limit:g.limit,modelRef:g.model,dimensions:g.dimensions,fake:g.fake});C({ok:!0,...L,message:`Embedded ${L.indexed.chunks_embedded} chunk(s)`},g.json,g);return}if(S==="outbox"){let L=$[2];if(!L)throw Error("Usage: knowledge reindex outbox <file|s3://bucket/key>");let J=await E.consumeOutbox(L);C({ok:!0,...J,message:`Consumed ${J.events_seen} outbox event(s)`},g.json,g);return}throw Error("Invalid reindex action. Use 'status', 'enqueue', 'embeddings', or 'outbox'.")}if(U==="embeddings"){let S=$[1]??"status";if(S==="status"){let L=E.embeddingStatus();C({ok:!0,...L,message:`${L.total_vector_entries} vector index entries`},g.json,g);return}if(S==="index"){let L=await E.indexEmbeddings({limit:g.limit,modelRef:g.model,dimensions:g.dimensions,fake:g.fake});C({ok:!0,...L,message:`Embedded ${L.chunks_embedded} chunk(s)`},g.json,g);return}if(S==="search"){let L=$.slice(2).join(" ");if(!L)throw Error("Usage: knowledge embeddings search <query>");let J=await E.semanticSearch({query:L,limit:g.limit,modelRef:g.model,dimensions:g.dimensions,fake:g.fake}),R={ok:!0,...J,message:`${J.results.length} semantic result(s)`};C(g.json||g.verbose?R:fw(R),g.json,g);return}throw Error("Invalid embeddings action. Use 'status', 'index', or 'search'.")}if(U==="context"){if(($[1]??"pack")!=="pack")throw Error("Invalid context action. Use 'pack'.");let L=g.from??"search";if(!["search","loops","runs"].includes(L))throw Error("Invalid --from value. Use 'search', 'loops', or 'runs'.");let J=$.slice(2).join(" ")||g.topic||"",R=await E.contextPack({source:L,purpose:L==="loops"||L==="runs"?"proposal":"agent_context",query:J,topic:g.topic,since:g.since,dedupe:g.dedupe,maxTokens:g.maxTokens,maxItems:g.maxItems,limit:g.limit,semantic:g.semantic,modelRef:g.model,dimensions:g.dimensions,fake:g.fake,legacyStorePath:O});p8({ok:!0,...R,message:R.message});return}if(U==="proposals"){if(($[1]??"context")!=="context")throw Error("Invalid proposals action. Use 'context'.");let L=g.from??"loops";if(!["loops","runs"].includes(L))throw Error("Invalid --from value for proposals. Use 'loops' or 'runs'.");let J=g.topic??$.slice(2).join(" ");if(!J.trim())throw Error("Usage: knowledge proposals context --from loops --topic <text>");let R=await E.contextPack({source:L,purpose:"proposal",query:J,topic:J,since:g.since,dedupe:g.dedupe??!0,maxTokens:g.maxTokens,maxItems:g.maxItems,limit:g.limit});p8({ok:!0,...R,message:R.message});return}if(U==="search"){let S=$.slice(1).join(" ");if(!S)throw Error("Usage: knowledge search <query>");if(g.context){let R=await E.retrieveContext({query:S,limit:g.limit,semantic:g.semantic,modelRef:g.model,dimensions:g.dimensions,fake:g.fake,legacyStorePath:O}),X={ok:!0,...R,message:`${R.excerpts.length} context excerpt(s)`};C(g.json||g.verbose?X:uw(X),g.json,g);return}let L=await E.search({query:S,limit:g.limit,semantic:g.semantic,modelRef:g.model,dimensions:g.dimensions,fake:g.fake,legacyStorePath:O}),J={ok:!0,...L,message:`${L.results.length} search result(s)`};C(g.json||g.verbose?J:ww(J),g.json,g);return}if(U==="web"){if(($[1]??"search")!=="search")throw Error("Invalid web action. Use 'search'.");let L=$.slice(2).join(" ");if(!L)throw Error("Usage: knowledge web search <query>");let J=await E.webSearch({query:L,limit:g.limit,modelRef:g.model,provider:g.provider,domains:g.domain,fake:g.fake,fileResults:g.fileResults}),R={ok:!0,...J,message:`${J.sources.length} web source(s)`};C(g.json||g.verbose?R:xw(R),g.json,g);return}if(U==="ask"||U==="build"){let S=$.slice(D).join(" ");if(!S)throw Error("Usage: knowledge ask <prompt>");let L=await E.runPrompt({prompt:S,limit:g.limit,semantic:g.semantic,modelRef:g.model,dimensions:g.dimensions,fake:g.fake,generate:g.generate,approveWrite:g.approveWrite,legacyStorePath:O}),J={ok:!0,...L,message:L.generated?"Generated answer with citations":"Prepared citation context draft"};C(g.json||g.verbose?J:lw(J),g.json,g);return}if(U==="providers"){let S=$[1]??"status";if(S==="status"){let L=E.providerStatus(),J=L.providers.filter((R)=>R.configured).length;C({ok:!0,...L,message:`${J}/${L.providers.length} provider credential(s) configured`},g.json,g);return}if(S==="models"){let L=E.modelRegistry();C({ok:!0,models:L,message:`${L.length} model alias(es)`},g.json,g);return}if(S==="check"){let L=$[2]??"default",J=G$(L,E.config()),R=C_(J),X=Ig(R.provider,E.config());C({ok:!0,target:L,model_ref:J,provider:R.provider,model:R.model,credential:X,message:`${R.provider} credentials configured`},g.json,g);return}throw Error("Invalid providers action. Use 'status', 'models', or 'check'.")}if(U==="add"){let S=$[1],L=$[2];if(!S||!L)throw Error("Usage: knowledge add <title> <content>");let J=await P.create({title:S,content:L,url:g.url??null,tags:g.tag??[]});g4("info","Item added",{id:J.id,title:J.title,tags:J.tags?.length??0,transport:P.kind}),C({ok:!0,item:J,message:`Added ${J.id}`},g.json,g);return}if(U==="list"){if(g.format!==void 0&&g.format!=="table"&&g.format!=="json")throw Error("Invalid --format value for list. Use 'table' or 'json'.");if(g.page!==void 0&&(!Number.isFinite(g.page)||!Number.isInteger(g.page)||g.page<1))throw Error("--page must be a positive integer.");if(g.limit!==void 0&&(!Number.isFinite(g.limit)||!Number.isInteger(g.limit)||g.limit<1||g.limit>200))throw Error("--limit must be an integer between 1 and 200.");let S=g.page??1,L=g.limit??20,J=g.search?String(g.search).toLowerCase():"",R=g.tagRaw??g.tag??[],X=g.tag?.length?g.tag.map((p)=>p.toLowerCase()).join(","):"none",G=g.format==="table"||!g.json&&!g.format&&Zw(g),B=g.json||g.format==="json",Q=g.archived?"archived":g.includeArchived?"all":"active",{sort:T,direction:K}=ow([],g),V=(S-1)*L;if(V>1e4)throw Error("The requested page exceeds the maximum bounded offset of 10000.");let F=await P.list({search:J,tags:R,archive:Q,sort:T,direction:K,limit:L,offset:V}),o=F.items,I_=Math.max(1,Math.ceil(F.total/L)),j_={ok:!0,page:S,limit:L,total:F.total,total_pages:I_,sort:T,direction:K,items:o,store_exists:F.exists};if(B){C(j_,!0);return}if(g.verbose){C(j_,!1,g);return}if(o.length===0){C(`No items found (search=${J||"none"}, tag=${X})`,!1);return}if(G){let p=(H_)=>H_,$$=`${p("ID")} ${p("TITLE")} ${p("CREATED")} ${p("URL")} ${p("TAGS")}`;console.log($$);for(let H_ of o)console.log(`${H_.id} ${p(g_(H_.title,80))} ${H_.created_at} ${H_.url?p(g_(H_.url,90)):""} ${H_.tags?.length?p(g_(`[${H_.tags.join(", ")}]`,80)):""}`);console.log(`Page ${S}/${I_} | showing ${o.length} of ${F.total} | sort=${T} ${K} | search=${J||"none"} | tag=${X}`),console.log("Hint: use `knowledge get --id <id> --json` for full item content.")}else{for(let p of o)console.log(`${p.id} ${g_(p.title,80)} ${p.created_at}${p.url?` ${g_(p.url,90)}`:""}${p.tags?.length?` ${g_(`[${p.tags.join(", ")}]`,80)}`:""}`);console.log(`Page ${S}/${I_} | showing ${o.length} of ${F.total} | sort=${T} ${K} | search=${J||"none"} | tag=${X}`),console.log("Hint: use `knowledge get --id <id> --json` for full item content.")}return}if(U==="get"){$4(g);let S=await P.get(g.id);if(!S)throw Error(`Item not found: ${g.id}`);C({ok:!0,item:S,store_exists:P.exists,message:`${S.id}: ${S.title}`},g.json,g);return}if(U==="versions"){$4(g);let S=Number.isFinite(g.page)&&g.page>0?g.page:1,L=Number.isFinite(g.limit)&&g.limit>0?g.limit:void 0,J=await P.listVersions(g.id,{limit:L,offset:(S-1)*(L??50)});if(!J)throw Error(`Item not found: ${g.id}`);let R={ok:!0,id:J.item_id,current_version:J.current_version,total:J.total,page:S,store:P.location,versions:J.items,message:J.total===0?`${J.item_id} is at version ${J.current_version} with no retained prior versions`:`${J.item_id} is at version ${J.current_version}; ${J.total} prior version(s) retained`};if(g.json||g.verbose){C(R,g.json,g);return}console.log(R.message);for(let X of J.items){let G=X.actor?` by ${X.actor}`:"",B=X.reason?` (${X.reason})`:"";console.log(`v${X.version} ${X.valid_to}${G}${B} ${X.content_bytes} bytes ${X.content_hash.slice(0,12)}`)}if(J.items.length>0)console.log("Hint: `knowledge diff --id <id> --rev <n>` shows what changed.");return}if(U==="diff"){$4(g);let S=await P.get(g.id);if(!S)throw Error(`Item not found: ${g.id}`);if(g.rev!==void 0&&(g.from!==void 0||g.to!==void 0))throw Error("Use either --rev <n> or --from <a> --to <b>, not both.");let L=()=>({title:S.title,content:S.content,url:S.url,tags:S.tags??[],metadata:S.metadata??{},archived:S.archived??!1}),J=`v${S.version??"?"} (current)`,R=async(K)=>{if(K==="current")return{label:J,snapshot:L()};let V=Number(K);if(!Number.isInteger(V)||V<1)throw Error(`Not a version number: ${K}`);if(S.version!==void 0&&V===S.version)return{label:J,snapshot:L()};let F=await P.getVersion(S.id,V);if(!F)throw Error(`No version ${V} retained for ${S.id} (it is at version ${S.version??"?"}). Run \`knowledge versions --id <id>\` to see what is retained.`);return{label:`v${F.version}`,snapshot:{title:F.title,content:F.content,url:F.url,tags:F.tags,metadata:F.metadata,archived:F.archived}}},X,G;if(g.rev!==void 0){if(!Number.isInteger(g.rev)||g.rev<1)throw Error("--rev must be a positive version number.");if(g.rev===1)throw Error("Version 1 has no predecessor to diff against.");X=String(g.rev-1),G=String(g.rev)}else if(g.from!==void 0||g.to!==void 0){if(g.from===void 0||g.to===void 0)throw Error("--from and --to must be given together.");X=g.from,G=g.to}else{let K=await P.listVersions(S.id,{limit:1});if(!K)throw Error(`Item not found: ${g.id}`);if(K.items.length===0)throw Error(`${S.id} is at version ${K.current_version} with no retained prior versions to diff against.`);X=String(K.items[0].version),G="current"}let B=await R(X),Q=await R(G),T=Gz(B.snapshot,Q.snapshot);if(g.json||g.verbose){C({ok:!0,id:S.id,from:B.label,to:Q.label,...T},g.json,g);return}console.log(Xz(T,`${S.id} ${B.label}`,`${S.id} ${Q.label}`));return}if(U==="update"){$4(g);let S=await P.get(g.id);if(!S)throw Error(`Item not found: ${g.id}`);if(g.ifVersion!==void 0&&(!Number.isInteger(g.ifVersion)||g.ifVersion<1))throw Error(`Invalid --if-version ${JSON.stringify(String(g.ifVersion))}: must be a positive integer version number, e.g. the "version" field from a prior 'knowledge get'.`);let L={};if(g.title!==void 0)L.title=g.title;if(g.content!==void 0)L.content=g.content;if(g.url!==void 0)L.url=g.url;let J;if(g.tag!==void 0){if(J=o8(S.tags,g.tag),J.length>0)L.tags=[...S.tags??[],...J]}let R=g.ifVersion!==void 0?g.ifVersion:S.version,X=await P.update(S.id,L,{expectedVersion:R});C(JJ({ok:!0,item:X},`Updated ${X?.id??S.id}`,J),g.json,g);return}if(U==="archive"||U==="restore"){$4(g);let S=await P.get(g.id);if(!S)throw Error(`Item not found: ${g.id}`);let L=await P.update(S.id,{archived:U==="archive"},{expectedVersion:S.version});C({ok:!0,item:L,message:`${U==="archive"?"Archived":"Restored"} ${L?.id??S.id}`},g.json,g);return}if(U==="untag"){if($4(g),!g.tag?.length)throw Error("Missing required --tag. Example: knowledge untag --id <id> -t <tag>");let S=await P.get(g.id);if(!S)throw Error(`Item not found: ${g.id}`);let L=S.tags??[],J=new Set(L.map((V)=>V.toLowerCase())),R=new Set;for(let V of g.tagRaw??g.tag){let F=V.trim().toLowerCase();if(F.length>0&&J.has(F)){R.add(F);continue}for(let o of V.split(",").map((I_)=>I_.trim().toLowerCase()).filter((I_)=>I_.length>0))R.add(o)}let X=L.filter((V)=>!R.has(V.toLowerCase())),G=L.length-X.length,B=[...R].filter((V)=>!J.has(V));if(G===0)throw Error(`No matching tag on ${S.id}: ${B.map((V)=>JSON.stringify(V)).join(", ")} not in [${L.map((V)=>JSON.stringify(V)).join(", ")}]`);let Q=await P.update(S.id,{tags:X},{expectedVersion:S.version}),T=B.length>0?` (not found: ${B.map((V)=>JSON.stringify(V)).join(", ")})`:"",K={ok:!0,item:Q,removed:G,message:`Removed ${G} tag${G===1?"":"s"} from ${Q?.id??S.id}${T}`};if(B.length>0)K.not_found=B;C(K,g.json,g);return}if(U==="upsert"){let S=g.title??$[1],L=g.content??$[2],J=g.id?await P.get(g.id):null;if(!J){if(!S||!L)throw Error("New item requires title and content. Example: knowledge upsert <title> <content> [--id <id>]");let B=await P.create({id:g.id,title:S,content:L,url:g.url??null,tags:g.tag??[]});C(JJ({ok:!0,created:!0,item:B},`Upserted ${B.id}`,g.tag),g.json,g);return}let R={};if(S!==void 0)R.title=S;if(L!==void 0)R.content=L;if(g.url!==void 0)R.url=g.url;let X;if(g.tag!==void 0){if(X=o8(J.tags,g.tag),X.length>0)R.tags=[...J.tags??[],...X]}let G=await P.update(J.id,R,{expectedVersion:J.version});C(JJ({ok:!0,created:!1,item:G},`Upserted ${G?.id??J.id}`,X),g.json,g);return}if(U==="delete"){if($4(g),!g.yes)throw Error("Refusing delete without --yes. Re-run with: knowledge delete --id <id> --yes");if(!await P.delete(g.id))throw Error(`Item not found: ${g.id}`);g4("info","Item deleted",{id:g.id,transport:P.kind}),C({ok:!0,deleted_id:g.id,message:`Deleted ${g.id}`},g.json,g);return}if(U==="export"){let S=g.format??"json";if(S!=="json"&&S!=="jsonl")throw Error("Invalid --format. Use 'json' or 'jsonl'.");let L=await P.listAll();if(S==="jsonl")for(let J of L.items)console.log(JSON.stringify(J));else if(g.json||g.format==="json"||g.verbose)C({ok:!0,items:L.items,store_exists:L.exists},g.json||g.format==="json",g);else C(tw(L.items,S),!1);return}if(U==="prune"){if(!g.yes)throw Error("Refusing prune without --yes. Re-run with: knowledge prune --yes [--older-than <days>] [--empty]");let{items:S}=await P.listAll(),L=g.olderThan!==void 0?new Date(Date.now()-g.olderThan*86400000):null,J=S.filter((G)=>L!==null&&new Date(G.created_at)<L||g.empty&&G.content.trim().length===0),R=await P.deleteMany(J.map((G)=>G.id)),X=S.length-R;g4("info","Prune completed",{pruned:R,remaining:X,transport:P.kind}),C({ok:!0,pruned:R,remaining:X,message:`Pruned ${R} item(s)`},g.json,g);return}if(U==="dedupe"){if(!g.yes)throw Error("Refusing dedupe without --yes. Re-run with: knowledge dedupe --yes [--json]");let{items:S}=await P.listAll(),L=new Set,J=[];for(let G of S){let B=`${G.title}\x00${G.content}`;if(L.has(B))J.push(G);else L.add(B)}let R=await P.deleteMany(J.map((G)=>G.id)),X=S.length-R;g4("info","Dedupe completed",{removed:R,remaining:X,transport:P.kind}),C({ok:!0,removed:R,remaining:X,message:`Dedupe removed ${R} duplicate(s)`},g.json,g);return}if(U==="stats"){let S=await P.listAll(),L=S.items.filter((V)=>!V.archived),J=L.length,R=S.items.length-J,X=L.filter((V)=>V.url).length,G=L.filter((V)=>V.tags&&V.tags.length>0).length,B=J>0?L.map((V)=>V.created_at).sort()[0]:null,Q=J>0?L.map((V)=>V.created_at).sort()[J-1]:null,T={};for(let V of L)for(let F of V.tags||[])T[F]=(T[F]||0)+1;let K=Object.entries(T).sort((V,F)=>F[1]-V[1]).slice(0,5).map(([V,F])=>({tag:V,count:F}));C({ok:!0,total:J,archived:R,with_url:X,with_tags:G,oldest:B,newest:Q,top_tags:K,store_exists:S.exists,message:`${J} items | ${X} with URL | ${G} with tags`},g.json,g);return}let W=Vw($[0]),z=W?` Did you mean '${W}'?`:"";throw g4("warn","Unknown command",{input:$[0],suggestion:W}),Error(`Unknown command: ${$[0]}.${z} Run 'knowledge --help' for available commands.`)}function ew(_,$){let g=_ instanceof Error?_.message:String(_);g4("debug","CLI error",{message:g,stack:_ instanceof Error?_.stack:void 0}),console.error(`Error: ${g}`);let U=_ instanceof P4?_:null;if($.includes("--json"))C({ok:!1,error:g,message:g,...U?{code:"version_conflict",expected:U.expected,current:U.current}:{}},!0);process.exitCode=U?2:1}if(import.meta.main){let _=process.argv.slice(2);pw(_).catch(($)=>ew($,_))}export{Vw as suggestCommand,ow as sortItems,pw as run,Kw as parseArgs,ew as emitCliError}; diff --git a/dist/agent.d.ts b/dist/agent.d.ts index 1d2c9b1..1557278 100644 --- a/dist/agent.d.ts +++ b/dist/agent.d.ts @@ -1,4 +1,5 @@ import { type KnowledgeContextPack, type RetrievalOptions } from './retrieval'; +import type { HybridSearchResult } from './search'; import type { KnowledgeItem } from './store'; export interface KnowledgePromptOptions extends Omit<RetrievalOptions, 'query'> { prompt: string; @@ -43,4 +44,4 @@ export interface KnowledgePromptOverItemsOptions extends Omit<KnowledgePromptOpt * key. There is no local sqlite catalog, so run telemetry is not persisted to a * local db (it would be split-brain); the run id is still returned for the shape. */ -export declare function runKnowledgePromptOverItems(items: KnowledgeItem[], options: KnowledgePromptOverItemsOptions): Promise<KnowledgePromptResult>; +export declare function runKnowledgePromptOverItems(items: KnowledgeItem[], options: KnowledgePromptOverItemsOptions, producerSearch?: HybridSearchResult): Promise<KnowledgePromptResult>; diff --git a/dist/cloud-store.d.ts b/dist/cloud-store.d.ts index d82e0ca..7706a3e 100644 --- a/dist/cloud-store.d.ts +++ b/dist/cloud-store.d.ts @@ -26,17 +26,31 @@ import { type HasnaStorageClient } from '@hasna/contracts/client/storage'; import type { KnowledgeItem, KnowledgeItemVersion, KnowledgeItemVersionList } from './store'; import { KNOWLEDGE_APP_SLUG } from './knowledge-mode.js'; -export { KNOWLEDGE_APP_SLUG }; +import { KNOWLEDGE_BOUNDED_QUERY_CAPABILITY } from './query-contract.js'; +export { KNOWLEDGE_APP_SLUG, KNOWLEDGE_BOUNDED_QUERY_CAPABILITY }; /** Cloud resource path served under /v1 by knowledge-serve. */ export declare const KNOWLEDGE_RESOURCE = "notes"; export interface KnowledgeCloudListOptions { + /** Literal id/title/content filter used by `knowledge list`. */ search?: string; - tag?: string; - includeArchived?: boolean; - archivedOnly?: boolean; + tags?: string[]; + archive?: 'active' | 'archived' | 'all'; + sort?: 'created' | 'title'; + direction?: 'asc' | 'desc'; limit?: number; offset?: number; } +export interface KnowledgeCloudSearchOptions { + query: string; + archive?: 'active' | 'archived' | 'all'; + limit?: number; + offset?: number; +} +export interface KnowledgeCloudSearchHit { + item: KnowledgeItem; + /** Producer-computed PostgreSQL ts_rank_cd score. */ + rank: number; +} export interface KnowledgeCloudCreateInput { /** Optional caller-supplied stable id. Forwarded to the server, which upserts * on it — giving `upsert --id`/import the same idempotency as the local store. */ @@ -76,6 +90,16 @@ export declare class KnowledgeVersionConflictError extends Error { readonly code = "version_conflict"; constructor(expected: number, current: number); } +/** + * Raised when the server response cannot prove that it applied a bounded query + * field that older servers silently ignored. + */ +export declare class KnowledgeBoundedQueryCapabilityError extends Error { + readonly operation: 'list' | 'search'; + readonly fields: readonly string[]; + readonly code = "bounded_query_capability_required"; + constructor(operation: 'list' | 'search', fields: readonly string[]); +} /** * The knowledge-item storage surface, cloud edition. Mirrors the operations the * local db.json store supports so the CLI can call either behind one shape. @@ -85,7 +109,12 @@ export interface KnowledgeCloudStore { readonly baseUrl: string; list(options?: KnowledgeCloudListOptions): Promise<{ items: KnowledgeItem[]; - total: number | null; + total: number; + }>; + /** Ranked producer-side PostgreSQL full-text query. */ + search(options: KnowledgeCloudSearchOptions): Promise<{ + items: KnowledgeCloudSearchHit[]; + total: number; }>; get(idOrShort: string): Promise<KnowledgeItem | null>; create(input: KnowledgeCloudCreateInput): Promise<KnowledgeItem>; diff --git a/dist/guarded-write-contract.d.ts b/dist/guarded-write-contract.d.ts index 174cf92..8a6faad 100644 --- a/dist/guarded-write-contract.d.ts +++ b/dist/guarded-write-contract.d.ts @@ -1,8 +1,11 @@ -import type { KnowledgeItem } from './store.js'; +import type { KnowledgeItem, KnowledgeItemVersion } from './store.js'; export declare const KNOWLEDGE_GUARDED_WRITE_CONTRACT: 'FCAME-1'; export declare const KNOWLEDGE_PRIVATE_INPUT_SCHEMA: 'hasna.knowledge.private-input.v1'; export declare const KNOWLEDGE_PRIVATE_TITLE_LOOKUP_SCHEMA: 'hasna.knowledge.private-title-lookup.v1'; +export declare const KNOWLEDGE_PRIVATE_QUERY_SCHEMA: 'hasna.knowledge.private-query.v1'; export declare const KNOWLEDGE_PRIVATE_RESULT_SCHEMA: 'hasna.knowledge.private-result.v1'; +export declare const KNOWLEDGE_RELATIONS_SCHEMA: 'hasna.knowledge.relations.v1'; +export declare const KNOWLEDGE_RELATIONS_METADATA_KEY: 'hasna_knowledge_relations'; export type KnowledgeAuthorityClassification = 'user_hosted' | 'hasna_saas'; export type KnowledgeGuardedWriteVerb = 'create' | 'update'; export interface KnowledgeAuthorityBinding { @@ -208,6 +211,76 @@ export interface CreateKnowledgePrivateTitleLookupDescriptorOptions { /** Defaults to five minutes; bounded to one hour. */ expires_in_ms?: number; } +export type KnowledgePrivateQueryKind = 'exact_title' | 'lexical_overlap' | 'semantic_overlap' | 'supersession' | 'current_version' | 'historical_version' | 'canonical_pointer'; +export type KnowledgePrivateQuerySelector = { + kind: 'exact_title'; + title: string; +} | { + kind: 'lexical_overlap'; + query: string; +} | { + kind: 'semantic_overlap'; + query: string; +} | { + kind: 'supersession'; + supersedes_item_id: string; +} | { + kind: 'current_version'; + item_id: string; +} | { + kind: 'historical_version'; + item_id: string; + version: number; +} | { + kind: 'canonical_pointer'; + canonical_item_id: string; +}; +export interface KnowledgeRelationsMetadata { + schema: typeof KNOWLEDGE_RELATIONS_SCHEMA; + supersedes_item_id?: string; + canonical_item_id?: string; +} +export type KnowledgePrivateQueryArchive = 'active' | 'archived' | 'all'; +export interface KnowledgePrivateQueryPage { + limit: number; + offset: number; +} +export interface KnowledgePrivateQueryBounds extends KnowledgeGuardedBounds { + max_items: number; +} +export interface KnowledgePrivateQueryDescriptor { + readonly contract: typeof KNOWLEDGE_GUARDED_WRITE_CONTRACT; + readonly schema: typeof KNOWLEDGE_PRIVATE_QUERY_SCHEMA; + /** Process-private handle. Deliberately non-enumerable and omitted by toJSON. */ + readonly descriptor_id: string; + readonly operation_id: string; + readonly step_id: string; + readonly query_kind: KnowledgePrivateQueryKind; + readonly selector_digest: string; + readonly binding_digest: string; + readonly binding: KnowledgeGuardedBinding; + readonly archive: KnowledgePrivateQueryArchive; + readonly page: KnowledgePrivateQueryPage; + readonly expires_at: string; + toJSON(): Omit<KnowledgePrivateQueryDescriptor, 'descriptor_id' | 'toJSON'>; +} +export interface CreateKnowledgePrivateQueryDescriptorOptions { + operation_id: string; + step_id: string; + binding: KnowledgeGuardedBinding; + selector: KnowledgePrivateQuerySelector; + archive?: KnowledgePrivateQueryArchive; + limit?: number; + offset?: number; + /** Defaults to five minutes; bounded to one hour. */ + expires_in_ms?: number; +} +export interface KnowledgePrivateQueryEnvelope { + contract: typeof KNOWLEDGE_GUARDED_WRITE_CONTRACT; + descriptor: Omit<KnowledgePrivateQueryDescriptor, 'descriptor_id' | 'toJSON'>; + selector: KnowledgePrivateQuerySelector; + limits: KnowledgePrivateQueryBounds; +} export interface KnowledgeGuardedTitleLookupEnvelope { contract: typeof KNOWLEDGE_GUARDED_WRITE_CONTRACT; descriptor: Omit<KnowledgePrivateTitleLookupDescriptor, 'descriptor_id' | 'toJSON'>; @@ -373,6 +446,40 @@ export interface KnowledgePrivateItemProof { metadata_sha256: string; archived: boolean; } +export interface KnowledgePrivateQueryItemProof { + /** The producer record id is private; only its digest crosses the result boundary. */ + id_sha256: string; + version: number; + title_sha256: string; + content_sha256: string; + url_sha256: string | null; + tags_sha256: string; + metadata_sha256: string; + archived: boolean; + record_kind: 'current' | 'historical'; + matched_value_sha256: string | null; +} +export interface KnowledgePrivateQueryResult { + contract: typeof KNOWLEDGE_GUARDED_WRITE_CONTRACT; + exact: true; + bounded: true; + private: true; + query_kind: KnowledgePrivateQueryKind; + status: 'available' | 'unavailable'; + code: null | 'semantic_query_unavailable'; + binding: KnowledgeGuardedBinding; + selector_digest: string; + total: number; + item_count: number; + page: { + limit: number; + offset: number; + returned: number; + has_more: boolean; + }; + items: readonly KnowledgePrivateQueryItemProof[]; + limits: KnowledgePrivateQueryBounds; +} export interface KnowledgeGuardedTitleLookup { contract: typeof KNOWLEDGE_GUARDED_WRITE_CONTRACT; exact: true; @@ -383,7 +490,7 @@ export interface KnowledgeGuardedTitleLookup { items: readonly KnowledgePrivateItemProof[]; limits: KnowledgeGuardedBounds; } -export type KnowledgePrivateResultKind = 'write' | 'readback' | 'title_lookup'; +export type KnowledgePrivateResultKind = 'write' | 'readback' | 'title_lookup' | 'query'; export interface KnowledgePrivateResultDescriptor { readonly contract: typeof KNOWLEDGE_GUARDED_WRITE_CONTRACT; readonly schema: typeof KNOWLEDGE_PRIVATE_RESULT_SCHEMA; @@ -398,16 +505,25 @@ export interface KnowledgePrivateResultDescriptor { export interface KnowledgePrivateResultProof { kind: KnowledgePrivateResultKind; item_count: number; - items: readonly KnowledgePrivateItemProof[]; + items: readonly (KnowledgePrivateItemProof | KnowledgePrivateQueryItemProof)[]; deterministic_key?: string; receipt_id?: string; duplicate?: boolean; + query_kind?: KnowledgePrivateQueryKind; + status?: KnowledgePrivateQueryResult['status']; + code?: KnowledgePrivateQueryResult['code']; + total?: number; + page?: KnowledgePrivateQueryResult['page']; } export declare const DEFAULT_KNOWLEDGE_GUARDED_LIMITS: KnowledgeGuardedLimits; export declare function assertKnowledgeGuardedBinding(binding: KnowledgeGuardedBinding): void; export declare function assertKnowledgeGuardedPrecondition(verb: KnowledgeGuardedWriteVerb, precondition: KnowledgeGuardedPrecondition): void; export declare function assertKnowledgeGuardedManifestBinding(manifest: KnowledgeGuardedManifestBinding): void; export declare function assertKnowledgeGuardedBounds(bounds: KnowledgeGuardedBounds, field?: string): void; +export declare function assertKnowledgePrivateQueryBounds(bounds: KnowledgePrivateQueryBounds, field?: string): void; +export declare function assertKnowledgePrivateQueryPage(page: KnowledgePrivateQueryPage, bounds: KnowledgePrivateQueryBounds): void; +export declare function assertKnowledgePrivateQuerySelector(selector: KnowledgePrivateQuerySelector): void; +export declare function assertKnowledgeRelationsMetadata(metadata: Record<string, unknown>, itemId?: string): void; export declare function normalizeKnowledgeGuardedLimits(limits?: Partial<KnowledgeGuardedLimits>): KnowledgeGuardedLimits; export declare function canonicalKnowledgeGuardedJson(value: unknown): string; export declare function knowledgeGuardedDigest(value: unknown): string; @@ -471,7 +587,11 @@ export declare function createKnowledgePrivateInputDescriptor(options: CreateKno export declare function revokeKnowledgePrivateInputDescriptor(descriptor: KnowledgePrivateInputDescriptor): void; export declare function createKnowledgePrivateTitleLookupDescriptor(options: CreateKnowledgePrivateTitleLookupDescriptorOptions): KnowledgePrivateTitleLookupDescriptor; export declare function revokeKnowledgePrivateTitleLookupDescriptor(descriptor: KnowledgePrivateTitleLookupDescriptor): void; +export declare function createKnowledgePrivateQueryDescriptor(options: CreateKnowledgePrivateQueryDescriptorOptions): KnowledgePrivateQueryDescriptor; +export declare function revokeKnowledgePrivateQueryDescriptor(descriptor: KnowledgePrivateQueryDescriptor): void; export declare function knowledgePrivateItemProof(item: KnowledgeItem): KnowledgePrivateItemProof; +export declare function knowledgePrivateQueryItemProof(item: KnowledgeItem, matchedValue?: string | null): KnowledgePrivateQueryItemProof; +export declare function knowledgePrivateHistoricalQueryItemProof(item: KnowledgeItemVersion, matchedValue?: string | null): KnowledgePrivateQueryItemProof; export declare function revokeKnowledgePrivateResultDescriptor(descriptor: KnowledgePrivateResultDescriptor): void; export declare function inspectKnowledgePrivateResult(descriptor: KnowledgePrivateResultDescriptor): KnowledgePrivateResultProof; export declare function assertKnowledgeTerminalCompleteness(reconciliation: KnowledgeTerminalReconciliation, expected: { diff --git a/dist/guarded-writer.d.ts b/dist/guarded-writer.d.ts index f2a9c09..74c4d22 100644 --- a/dist/guarded-writer.d.ts +++ b/dist/guarded-writer.d.ts @@ -1,4 +1,4 @@ -import { type CreateKnowledgeGuardedManifestOptions, type KnowledgeGuardedBinding, type KnowledgeGuardedBindingStateReadback, type KnowledgeGuardedBounds, type KnowledgeGuardedAdoptionReconciliation, type KnowledgeGuardedAdoptionReceipt, type KnowledgeGuardedAdoptionResult, type KnowledgeGuardedLegacyAdoptionOptions, type KnowledgeGuardedLegacyRollbackOptions, type KnowledgeGuardedLimits, type KnowledgeGuardedManifestReconciliation, type KnowledgeGuardedManifestSubmission, type KnowledgeGuardedReadback, type KnowledgeGuardedReceipt, type KnowledgeGuardedRollbackResult, type KnowledgeGuardedWriteResult, type KnowledgePrivateInputDescriptor, type KnowledgePrivateResultDescriptor, type KnowledgePrivateTitleLookupDescriptor, type KnowledgeTerminalReconciliation } from './guarded-write-contract.js'; +import { type CreateKnowledgeGuardedManifestOptions, type KnowledgeGuardedBinding, type KnowledgeGuardedBindingStateReadback, type KnowledgeGuardedBounds, type KnowledgeGuardedAdoptionReconciliation, type KnowledgeGuardedAdoptionReceipt, type KnowledgeGuardedAdoptionResult, type KnowledgeGuardedLegacyAdoptionOptions, type KnowledgeGuardedLegacyRollbackOptions, type KnowledgeGuardedLimits, type KnowledgeGuardedManifestReconciliation, type KnowledgeGuardedManifestSubmission, type KnowledgeGuardedReadback, type KnowledgeGuardedReceipt, type KnowledgeGuardedRollbackResult, type KnowledgeGuardedWriteResult, type KnowledgePrivateInputDescriptor, type KnowledgePrivateQueryBounds, type KnowledgePrivateQueryDescriptor, type KnowledgePrivateResultDescriptor, type KnowledgePrivateTitleLookupDescriptor, type KnowledgeTerminalReconciliation } from './guarded-write-contract.js'; export interface CreateKnowledgeGuardedWriterOptions { binding: KnowledgeGuardedBinding; env?: NodeJS.ProcessEnv; @@ -18,6 +18,7 @@ export interface KnowledgeGuardedWriter { execute(descriptor: KnowledgePrivateInputDescriptor): Promise<KnowledgeGuardedWriteResult>; executePrivate(descriptor: KnowledgePrivateInputDescriptor): Promise<KnowledgePrivateResultDescriptor>; lookupTitle(descriptor: KnowledgePrivateTitleLookupDescriptor): Promise<KnowledgePrivateResultDescriptor>; + query(descriptor: KnowledgePrivateQueryDescriptor, bounds?: KnowledgePrivateQueryBounds): Promise<KnowledgePrivateResultDescriptor>; reconcile(deterministicKey: string, operationId: string, stepId: string, bounds?: KnowledgeGuardedBounds): Promise<KnowledgeTerminalReconciliation>; readback(fullId: string, bounds?: KnowledgeGuardedBounds): Promise<KnowledgeGuardedReadback>; readbackPrivate(fullId: string, bounds?: KnowledgeGuardedBounds): Promise<KnowledgePrivateResultDescriptor>; @@ -41,6 +42,14 @@ export declare class KnowledgePrivateTitleLookupAmbiguousError extends Error { readonly code = "private_title_lookup_ambiguous"; constructor(); } +export declare class KnowledgePrivateQueryResponseError extends Error { + readonly code = "private_query_response_invalid"; + constructor(); +} +export declare class KnowledgeGuardedReadbackError extends Error { + readonly code = "guarded_readback_response_invalid"; + constructor(); +} export declare class KnowledgeGuardedManifestConflictError extends Error { readonly manifest: KnowledgeGuardedManifestSubmission['manifest']; readonly code = "guarded_manifest_conflict"; diff --git a/dist/index.d.ts b/dist/index.d.ts index f2a464d..a80da73 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,8 +1,8 @@ export { createAppWikiScope, createKnowledgeClient, createKnowledgeSdk, openGlobalWiki, openProjectWiki, type KnowledgeAgentContextPackOptions, type KnowledgeAppWikiInitOptions, type KnowledgeAppWikiNoteInput, type KnowledgeAppWikiQueryOptions, type KnowledgeAppWikiScopeOptions, type KnowledgeAppWikiSdk, type KnowledgeAppWikiSearchOptions, type KnowledgeAppWikiSourceInput, type KnowledgeAskOptions, type KnowledgeAuthInput, type KnowledgeClient, type KnowledgeClientOptions, type KnowledgeContextOptions, type KnowledgeInventoryOptions, type KnowledgeItemsSdk, type KnowledgeRulesProvenanceOptions, type KnowledgeSearchOptions, type KnowledgeSetupOptions, type KnowledgeSyncDoctorOptions, type KnowledgeWebSearchOptions, } from './sdk.js'; -export { resolveItemStore, type ItemStore, type ItemCreateInput, type ItemPatch, type ItemListResult, type ResolveItemStoreOptions, } from './item-store.js'; +export { resolveItemStore, type ItemStore, type ItemCreateInput, type ItemPatch, type ItemArchiveFilter, type ItemListDirection, type ItemListOptions, type ItemListResult, type ItemListSort, type ResolveItemStoreOptions, } from './item-store.js'; export { type KnowledgeItem, type Store as KnowledgeItemStoreFile, } from './store.js'; -export { KNOWLEDGE_APP_SLUG, KNOWLEDGE_RESOURCE, isKnowledgeApiMode, resolveKnowledgeCloudStore, type KnowledgeCloudStore, type KnowledgeCloudCreateInput, type KnowledgeCloudListOptions, type KnowledgeCloudPatch, } from './cloud-store.js'; -export { DEFAULT_KNOWLEDGE_GUARDED_LIMITS, KNOWLEDGE_GUARDED_WRITE_CONTRACT, KNOWLEDGE_PRIVATE_INPUT_SCHEMA, KNOWLEDGE_PRIVATE_RESULT_SCHEMA, KNOWLEDGE_PRIVATE_TITLE_LOOKUP_SCHEMA, assertKnowledgeGuardedBinding, assertKnowledgeGuardedBounds, assertKnowledgeGuardedManifestBinding, assertKnowledgeGuardedManifestOptions, assertKnowledgeGuardedManifestTerminalCompleteness, assertKnowledgeGuardedPayload, assertKnowledgeGuardedPrecondition, assertKnowledgeTerminalCompleteness, canonicalKnowledgeGuardedJson, computeKnowledgeGuardedAdoptionDeterministicKey, computeKnowledgeGuardedAdoptionReceiptId, computeKnowledgeGuardedDeterministicKey, computeKnowledgeGuardedManifestId, computeKnowledgeGuardedManifestDeterministicKey, computeKnowledgeGuardedManifestDigest, computeKnowledgeGuardedReceiptId, computeKnowledgeGuardedRecoveryKey, createKnowledgePrivateInputDescriptor, createKnowledgePrivateTitleLookupDescriptor, evaluateKnowledgeGuardedManifestCompletion, knowledgeGuardedDigest, knowledgeGuardedContentSha256, knowledgeGuardedUtf8Bytes, inspectKnowledgePrivateResult, normalizeKnowledgeGuardedLimits, revokeKnowledgePrivateInputDescriptor, revokeKnowledgePrivateResultDescriptor, revokeKnowledgePrivateTitleLookupDescriptor, type CreateKnowledgeGuardedManifestOptions, type CreateKnowledgePrivateInputDescriptorOptions, type CreateKnowledgePrivateTitleLookupDescriptorOptions, type KnowledgeAuthorityBinding, type KnowledgeAuthorityClassification, type KnowledgeGuardedAdoptionAction, type KnowledgeGuardedAdoptionEnvelope, type KnowledgeGuardedAdoptionKeyInput, type KnowledgeGuardedAdoptionReceipt, type KnowledgeGuardedAdoptionReconciliation, type KnowledgeGuardedAdoptionResult, type KnowledgeGuardedAdoptionSubmission, type KnowledgeGuardedBinding, type KnowledgeGuardedBindingState, type KnowledgeGuardedBindingStateReadback, type KnowledgeGuardedBounds, type KnowledgeGuardedCreatePayload, type KnowledgeGuardedDeterministicKeyInput, type KnowledgeGuardedLimits, type KnowledgeGuardedManifest, type KnowledgeGuardedManifestBinding, type KnowledgeGuardedManifestCompletion, type KnowledgeGuardedManifestEnvelope, type KnowledgeGuardedManifestReconciliation, type KnowledgeGuardedManifestReconciliationStep, type KnowledgeGuardedManifestRecovery, type KnowledgeGuardedManifestStep, type KnowledgeGuardedManifestStepState, type KnowledgeGuardedManifestSubmission, type KnowledgeGuardedLegacyAdoptionOptions, type KnowledgeGuardedLegacyRollbackOptions, type KnowledgeGuardedPayload, type KnowledgeGuardedPrecondition, type KnowledgeGuardedReadback, type KnowledgeGuardedReceipt, type KnowledgeGuardedReceiptStatus, type KnowledgeGuardedRecoveryKeyInput, type KnowledgeGuardedRecoveryStrategy, type KnowledgeGuardedRollbackResult, type KnowledgeGuardedSubmission, type KnowledgeGuardedTitleLookup, type KnowledgeGuardedUpdatePayload, type KnowledgeGuardedWriteEnvelope, type KnowledgeGuardedWriteResult, type KnowledgeGuardedWriteVerb, type KnowledgePrivateInputDescriptor, type KnowledgePrivateItemProof, type KnowledgePrivateResultDescriptor, type KnowledgePrivateResultProof, type KnowledgePrivateTitleLookupDescriptor, type KnowledgeTerminalReconciliation, } from './guarded-write-contract.js'; +export { KNOWLEDGE_APP_SLUG, KNOWLEDGE_BOUNDED_QUERY_CAPABILITY, KNOWLEDGE_RESOURCE, KnowledgeBoundedQueryCapabilityError, isKnowledgeApiMode, resolveKnowledgeCloudStore, type KnowledgeCloudStore, type KnowledgeCloudCreateInput, type KnowledgeCloudListOptions, type KnowledgeCloudPatch, type KnowledgeCloudSearchHit, type KnowledgeCloudSearchOptions, } from './cloud-store.js'; +export { DEFAULT_KNOWLEDGE_GUARDED_LIMITS, KNOWLEDGE_GUARDED_WRITE_CONTRACT, KNOWLEDGE_PRIVATE_INPUT_SCHEMA, KNOWLEDGE_PRIVATE_QUERY_SCHEMA, KNOWLEDGE_PRIVATE_RESULT_SCHEMA, KNOWLEDGE_PRIVATE_TITLE_LOOKUP_SCHEMA, KNOWLEDGE_RELATIONS_METADATA_KEY, KNOWLEDGE_RELATIONS_SCHEMA, assertKnowledgeGuardedBinding, assertKnowledgeGuardedBounds, assertKnowledgeGuardedManifestBinding, assertKnowledgeGuardedManifestOptions, assertKnowledgeGuardedManifestTerminalCompleteness, assertKnowledgeGuardedPayload, assertKnowledgeGuardedPrecondition, assertKnowledgePrivateQueryBounds, assertKnowledgePrivateQueryPage, assertKnowledgePrivateQuerySelector, assertKnowledgeRelationsMetadata, assertKnowledgeTerminalCompleteness, canonicalKnowledgeGuardedJson, computeKnowledgeGuardedAdoptionDeterministicKey, computeKnowledgeGuardedAdoptionReceiptId, computeKnowledgeGuardedDeterministicKey, computeKnowledgeGuardedManifestId, computeKnowledgeGuardedManifestDeterministicKey, computeKnowledgeGuardedManifestDigest, computeKnowledgeGuardedReceiptId, computeKnowledgeGuardedRecoveryKey, createKnowledgePrivateInputDescriptor, createKnowledgePrivateQueryDescriptor, createKnowledgePrivateTitleLookupDescriptor, evaluateKnowledgeGuardedManifestCompletion, knowledgeGuardedDigest, knowledgeGuardedContentSha256, knowledgeGuardedUtf8Bytes, inspectKnowledgePrivateResult, normalizeKnowledgeGuardedLimits, revokeKnowledgePrivateInputDescriptor, revokeKnowledgePrivateQueryDescriptor, revokeKnowledgePrivateResultDescriptor, revokeKnowledgePrivateTitleLookupDescriptor, type CreateKnowledgeGuardedManifestOptions, type CreateKnowledgePrivateInputDescriptorOptions, type CreateKnowledgePrivateQueryDescriptorOptions, type CreateKnowledgePrivateTitleLookupDescriptorOptions, type KnowledgeAuthorityBinding, type KnowledgeAuthorityClassification, type KnowledgeGuardedAdoptionAction, type KnowledgeGuardedAdoptionEnvelope, type KnowledgeGuardedAdoptionKeyInput, type KnowledgeGuardedAdoptionReceipt, type KnowledgeGuardedAdoptionReconciliation, type KnowledgeGuardedAdoptionResult, type KnowledgeGuardedAdoptionSubmission, type KnowledgeGuardedBinding, type KnowledgeGuardedBindingState, type KnowledgeGuardedBindingStateReadback, type KnowledgeGuardedBounds, type KnowledgeGuardedCreatePayload, type KnowledgeGuardedDeterministicKeyInput, type KnowledgeGuardedLimits, type KnowledgeGuardedManifest, type KnowledgeGuardedManifestBinding, type KnowledgeGuardedManifestCompletion, type KnowledgeGuardedManifestEnvelope, type KnowledgeGuardedManifestReconciliation, type KnowledgeGuardedManifestReconciliationStep, type KnowledgeGuardedManifestRecovery, type KnowledgeGuardedManifestStep, type KnowledgeGuardedManifestStepState, type KnowledgeGuardedManifestSubmission, type KnowledgeGuardedLegacyAdoptionOptions, type KnowledgeGuardedLegacyRollbackOptions, type KnowledgeGuardedPayload, type KnowledgeGuardedPrecondition, type KnowledgeGuardedReadback, type KnowledgeGuardedReceipt, type KnowledgeGuardedReceiptStatus, type KnowledgeGuardedRecoveryKeyInput, type KnowledgeGuardedRecoveryStrategy, type KnowledgeGuardedRollbackResult, type KnowledgeGuardedSubmission, type KnowledgeGuardedTitleLookup, type KnowledgeGuardedUpdatePayload, type KnowledgeGuardedWriteEnvelope, type KnowledgeGuardedWriteResult, type KnowledgeGuardedWriteVerb, type KnowledgePrivateInputDescriptor, type KnowledgePrivateItemProof, type KnowledgePrivateQueryArchive, type KnowledgePrivateQueryBounds, type KnowledgePrivateQueryDescriptor, type KnowledgePrivateQueryEnvelope, type KnowledgePrivateQueryItemProof, type KnowledgePrivateQueryKind, type KnowledgePrivateQueryPage, type KnowledgePrivateQueryResult, type KnowledgePrivateQuerySelector, type KnowledgePrivateResultDescriptor, type KnowledgePrivateResultProof, type KnowledgePrivateTitleLookupDescriptor, type KnowledgeRelationsMetadata, type KnowledgeTerminalReconciliation, } from './guarded-write-contract.js'; export * from './guarded-writer.js'; export { KNOWLEDGE_API_KEY_ENV_KEYS, KNOWLEDGE_API_URL_ENV_KEYS, KNOWLEDGE_MODE_ENV_KEYS, LOCAL_MODE_CANDIDATES, SERVER_MODE_CANDIDATES, contractsStorageModeFor, knowledgeModeReport, localStorageMode, pinnedTransportEnv, resolveKnowledgeModeSelection, serverStorageMode, type KnowledgeMode, type ModeNormalizer, type KnowledgeModeReport, type KnowledgeModeResolution, type KnowledgeModeSource, } from './knowledge-mode.js'; export { NETWORK_GUARD_ENV, KnowledgeNetworkGuardError, assertOutboundRequestAllowed, guardedFetch, isLoopbackHostname, isNetworkGuardActive, } from './net-guard.js'; diff --git a/dist/index.js b/dist/index.js index db0bec6..d8680e0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -16529,6 +16529,12 @@ function knowledgeModeReport(env = process.env) { }; } +// src/query-contract.ts +var KNOWLEDGE_BOUNDED_QUERY_CAPABILITY = "hasna.knowledge.bounded-query.v1"; +function hasKnowledgeBoundedQueryCapability(value) { + return Boolean(value && typeof value === "object" && value.query_capability === KNOWLEDGE_BOUNDED_QUERY_CAPABILITY); +} + // src/cloud-store.ts function transportOverrides(env) { return { @@ -16549,33 +16555,95 @@ class KnowledgeVersionConflictError extends Error { this.name = "KnowledgeVersionConflictError"; } } + +class KnowledgeBoundedQueryCapabilityError extends Error { + operation; + fields; + code = "bounded_query_capability_required"; + constructor(operation, fields) { + super(`bounded_query_capability_required: the Knowledge server did not prove support for ${operation} field(s): ` + `${fields.join(", ")}. Refusing to accept a possibly unfiltered response; update the server and retry.`); + this.operation = operation; + this.fields = fields; + this.name = "KnowledgeBoundedQueryCapabilityError"; + } +} function toQuery(options) { const q = {}; - if (options.search) + if (options.search) { + q.filter = options.search; q.search = options.search; + } + if (options.tags?.length) + q.tags = options.tags; + if (options.archive) { + q.archive = options.archive; + if (options.archive === "all") + q.includeArchived = true; + } + if (options.sort) + q.sort = options.sort; + if (options.direction) + q.direction = options.direction; if (options.limit !== undefined) q.limit = options.limit; if (options.offset !== undefined) q.offset = options.offset; - if (options.includeArchived || options.archivedOnly) - q.includeArchived = true; return q; } +function listFieldsRequiringCapability(options) { + const fields = []; + if (options.tags?.length) + fields.push("tags"); + if (options.sort !== undefined) + fields.push("sort"); + if (options.direction !== undefined) + fields.push("direction"); + if (options.archive === "archived") + fields.push("archive=archived"); + return fields; +} +function boundedQueryInteger(value, fallback, field, minimum, maximum) { + const resolved = value ?? fallback; + if (!Number.isFinite(resolved) || !Number.isInteger(resolved) || resolved < minimum || resolved > maximum) { + throw new Error(`${field} must be an integer between ${minimum} and ${maximum}.`); + } + return resolved; +} function wrap(client) { return { baseUrl: client.baseUrl, async list(options = {}) { - const wantLimit = options.limit ?? 200; - const query2 = toQuery({ ...options, limit: Math.min(Math.max(wantLimit, 1), 200) }); + const limit = boundedQueryInteger(options.limit, 200, "limit", 1, 200); + const offset = boundedQueryInteger(options.offset, 0, "offset", 0, 1e4); + const query2 = toQuery({ ...options, limit, offset }); const res = await client.list(KNOWLEDGE_RESOURCE, { query: query2 }); - let items = res.items; - if (options.archivedOnly) - items = items.filter((x) => x.archived === true); - if (options.tag) { - const t = options.tag.toLowerCase(); - items = items.filter((x) => (x.tags ?? []).some((tag) => tag.toLowerCase() === t)); - } - return { items, total: res.total }; + if (!Number.isInteger(res.total) || Number(res.total) < 0) { + throw new Error("knowledge cloud list response is missing a valid producer total."); + } + const requiredFields = listFieldsRequiringCapability(options); + if (requiredFields.length > 0 && !hasKnowledgeBoundedQueryCapability(res.raw)) { + throw new KnowledgeBoundedQueryCapabilityError("list", requiredFields); + } + return { items: res.items, total: Number(res.total) }; + }, + async search(options) { + const limit = boundedQueryInteger(options.limit, 20, "limit", 1, 200); + const offset = boundedQueryInteger(options.offset, 0, "offset", 0, 1e4); + const response = await client.transport.get(`/${KNOWLEDGE_RESOURCE}/search`, { + query: { + q: options.query, + archive: options.archive ?? "active", + limit, + offset + } + }); + if (!Number.isInteger(response.total) || response.total < 0 || !Array.isArray(response.items) || response.items.some((hit) => !hit || typeof hit !== "object" || !hit.item || typeof hit.rank !== "number" || !Number.isFinite(hit.rank))) { + throw new Error("knowledge cloud search response is missing producer rank or total evidence."); + } + if (!hasKnowledgeBoundedQueryCapability(response)) { + throw new KnowledgeBoundedQueryCapabilityError("search", ["q", "rank", "total"]); + } + return { items: response.items, total: response.total }; }, async get(idOrShort) { return client.get(KNOWLEDGE_RESOURCE, idOrShort); @@ -16686,7 +16754,7 @@ async function fetchAllCloudItems(store) { const pageSize = 200; const all = []; for (let offset = 0;; offset += pageSize) { - const { items } = await store.list({ includeArchived: true, limit: pageSize, offset }); + const { items } = await store.list({ archive: "all", limit: pageSize, offset }); all.push(...items); if (items.length < pageSize) break; @@ -18686,7 +18754,60 @@ var PG_MIGRATIONS = [ BEFORE UPDATE OF id ON knowledge_items FOR EACH ROW EXECUTE FUNCTION knowledge_guarded_item_id_immutable()`, `ALTER TABLE knowledge_items - ENABLE ALWAYS TRIGGER trg_knowledge_guarded_00_item_id_immutable` + ENABLE ALWAYS TRIGGER trg_knowledge_guarded_00_item_id_immutable`, + `ALTER TABLE knowledge_items + DROP CONSTRAINT IF EXISTS knowledge_items_relation_metadata_contract`, + `ALTER TABLE knowledge_items + ADD CONSTRAINT knowledge_items_relation_metadata_contract CHECK ( + metadata -> 'hasna_knowledge_relations' IS NULL + OR ( + jsonb_typeof(metadata -> 'hasna_knowledge_relations') = 'object' + AND metadata #>> '{hasna_knowledge_relations,schema}' = 'hasna.knowledge.relations.v1' + AND ( + metadata #>> '{hasna_knowledge_relations,supersedes_item_id}' IS NOT NULL + OR metadata #>> '{hasna_knowledge_relations,canonical_item_id}' IS NOT NULL + ) + AND ( + (metadata -> 'hasna_knowledge_relations') + - ARRAY['schema', 'supersedes_item_id', 'canonical_item_id'] + ) = '{}'::jsonb + AND ( + metadata #>> '{hasna_knowledge_relations,supersedes_item_id}' IS NULL + OR ( + btrim(metadata #>> '{hasna_knowledge_relations,supersedes_item_id}') <> '' + AND metadata #>> '{hasna_knowledge_relations,supersedes_item_id}' <> id + ) + ) + AND ( + metadata #>> '{hasna_knowledge_relations,canonical_item_id}' IS NULL + OR ( + btrim(metadata #>> '{hasna_knowledge_relations,canonical_item_id}') <> '' + AND metadata #>> '{hasna_knowledge_relations,canonical_item_id}' <> id + ) + ) + ) + )`, + `CREATE INDEX IF NOT EXISTS idx_knowledge_items_guarded_title + ON knowledge_items ( + authority_classification, authority_id, tenant_id, scope, parent_id, + title, archived, id + )`, + `CREATE INDEX IF NOT EXISTS idx_knowledge_items_guarded_supersedes + ON knowledge_items ( + authority_classification, authority_id, tenant_id, scope, parent_id, + (metadata #>> '{hasna_knowledge_relations,supersedes_item_id}'), + archived, id + ) + WHERE metadata #>> '{hasna_knowledge_relations,schema}' + = 'hasna.knowledge.relations.v1'`, + `CREATE INDEX IF NOT EXISTS idx_knowledge_items_guarded_canonical + ON knowledge_items ( + authority_classification, authority_id, tenant_id, scope, parent_id, + (metadata #>> '{hasna_knowledge_relations,canonical_item_id}'), + archived, id + ) + WHERE metadata #>> '{hasna_knowledge_relations,schema}' + = 'hasna.knowledge.relations.v1'` ]; // src/serve.ts import { readFileSync as readFileSync5 } from "fs"; @@ -19557,7 +19678,10 @@ import { createHash as createHash3, randomUUID as randomUUID2 } from "crypto"; var KNOWLEDGE_GUARDED_WRITE_CONTRACT = "FCAME-1"; var KNOWLEDGE_PRIVATE_INPUT_SCHEMA = "hasna.knowledge.private-input.v1"; var KNOWLEDGE_PRIVATE_TITLE_LOOKUP_SCHEMA = "hasna.knowledge.private-title-lookup.v1"; +var KNOWLEDGE_PRIVATE_QUERY_SCHEMA = "hasna.knowledge.private-query.v1"; var KNOWLEDGE_PRIVATE_RESULT_SCHEMA = "hasna.knowledge.private-result.v1"; +var KNOWLEDGE_RELATIONS_SCHEMA = "hasna.knowledge.relations.v1"; +var KNOWLEDGE_RELATIONS_METADATA_KEY = "hasna_knowledge_relations"; var DEFAULT_KNOWLEDGE_GUARDED_LIMITS = Object.freeze({ submission: Object.freeze({ max_calls: 1, @@ -19583,6 +19707,7 @@ var MAX_GUARDED_WALL_TIME_MS = 30000; var MAX_DESCRIPTOR_LIFETIME_MS = 60 * 60 * 1000; var PRIVATE_PAYLOADS = new WeakMap; var PRIVATE_TITLE_LOOKUPS = new WeakMap; +var PRIVATE_QUERIES = new WeakMap; var PRIVATE_RESULTS = new WeakMap; function assertObjectKeys(value, field, allowed, required = allowed) { if (!value || typeof value !== "object" || Array.isArray(value)) { @@ -19656,6 +19781,92 @@ function assertKnowledgeGuardedBounds(bounds, field = "limits") { throw new Error(`${field}.wall_time_ms must be a positive integer no greater than ${MAX_GUARDED_WALL_TIME_MS}.`); } } +function assertKnowledgePrivateQueryBounds(bounds, field = "query limits") { + assertObjectKeys(bounds, field, ["max_calls", "max_items", "max_bytes", "wall_time_ms"]); + if (bounds.max_calls !== 1) + throw new Error(`${field}.max_calls must be exactly 1.`); + if (!Number.isInteger(bounds.max_items) || bounds.max_items < 1 || bounds.max_items > 50) { + throw new Error(`${field}.max_items must be an integer between 1 and 50.`); + } + if (!Number.isInteger(bounds.max_bytes) || bounds.max_bytes < 1 || bounds.max_bytes > MAX_GUARDED_BYTES) { + throw new Error(`${field}.max_bytes must be a positive integer no greater than ${MAX_GUARDED_BYTES}.`); + } + if (!Number.isInteger(bounds.wall_time_ms) || bounds.wall_time_ms < 1 || bounds.wall_time_ms > MAX_GUARDED_WALL_TIME_MS) { + throw new Error(`${field}.wall_time_ms must be a positive integer no greater than ${MAX_GUARDED_WALL_TIME_MS}.`); + } +} +function assertKnowledgePrivateQueryPage(page, bounds) { + assertObjectKeys(page, "query page", ["limit", "offset"]); + if (!Number.isInteger(page.limit) || page.limit < 1 || page.limit > bounds.max_items) { + throw new Error("query page.limit must be a positive integer no greater than limits.max_items."); + } + if (!Number.isInteger(page.offset) || page.offset < 0 || page.offset > 1e4) { + throw new Error("query page.offset must be an integer between 0 and 10000."); + } +} +function assertKnowledgePrivateQuerySelector(selector) { + if (!selector || typeof selector !== "object" || Array.isArray(selector)) { + throw new Error("private query selector must be an object."); + } + switch (selector.kind) { + case "exact_title": + assertObjectKeys(selector, "private query selector", ["kind", "title"]); + assertBoundText(selector.title, "private query selector.title", 2048); + return; + case "lexical_overlap": + case "semantic_overlap": + assertObjectKeys(selector, "private query selector", ["kind", "query"]); + assertBoundText(selector.query, "private query selector.query", 4096); + return; + case "supersession": + assertObjectKeys(selector, "private query selector", ["kind", "supersedes_item_id"]); + assertBoundText(selector.supersedes_item_id, "private query selector.supersedes_item_id"); + return; + case "current_version": + assertObjectKeys(selector, "private query selector", ["kind", "item_id"]); + assertBoundText(selector.item_id, "private query selector.item_id"); + return; + case "historical_version": + assertObjectKeys(selector, "private query selector", ["kind", "item_id", "version"]); + assertBoundText(selector.item_id, "private query selector.item_id"); + if (!Number.isInteger(selector.version) || selector.version < 1) { + throw new Error("private query selector.version must be a positive integer."); + } + return; + case "canonical_pointer": + assertObjectKeys(selector, "private query selector", ["kind", "canonical_item_id"]); + assertBoundText(selector.canonical_item_id, "private query selector.canonical_item_id"); + return; + default: + throw new Error("private query selector.kind is unsupported."); + } +} +function assertKnowledgeRelationsMetadata(metadata, itemId) { + const raw = metadata[KNOWLEDGE_RELATIONS_METADATA_KEY]; + if (raw === undefined) + return; + assertObjectKeys(raw, `metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}`, ["schema", "supersedes_item_id", "canonical_item_id"], ["schema"]); + if (raw.schema !== KNOWLEDGE_RELATIONS_SCHEMA) { + throw new Error(`metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.schema is unsupported.`); + } + const supersedes = raw.supersedes_item_id; + const canonical = raw.canonical_item_id; + if (supersedes === undefined && canonical === undefined) { + throw new Error(`metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY} must contain at least one pointer.`); + } + if (supersedes !== undefined) { + assertBoundText(supersedes, `metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.supersedes_item_id`); + if (itemId && supersedes === itemId) { + throw new Error("an item cannot supersede itself."); + } + } + if (canonical !== undefined) { + assertBoundText(canonical, `metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.canonical_item_id`); + if (itemId && canonical === itemId) { + throw new Error(`metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.canonical_item_id cannot reference itself.`); + } + } +} function normalizeKnowledgeGuardedLimits(limits = {}) { assertObjectKeys(limits, "limits", ["submission", "reconciliation", "readback"], []); if (limits.submission !== undefined) { @@ -20168,6 +20379,93 @@ function materializeKnowledgePrivateTitleLookup(descriptor) { } return state.title; } +function createKnowledgePrivateQueryDescriptor(options) { + assertBoundText(options.operation_id, "operation_id"); + assertBoundText(options.step_id, "step_id"); + assertKnowledgeGuardedBinding(options.binding); + assertKnowledgePrivateQuerySelector(options.selector); + const archive = options.archive ?? "active"; + if (!["active", "archived", "all"].includes(archive)) { + throw new Error("archive must be active, archived, or all."); + } + const limit = options.limit ?? 10; + const offset = options.offset ?? 0; + const bounds = { + max_calls: 1, + max_items: 50, + max_bytes: 1048576, + wall_time_ms: 1e4 + }; + assertKnowledgePrivateQueryPage({ limit, offset }, bounds); + const expiresIn = options.expires_in_ms ?? 5 * 60 * 1000; + if (!Number.isInteger(expiresIn) || expiresIn < 1 || expiresIn > MAX_DESCRIPTOR_LIFETIME_MS) { + throw new Error(`expires_in_ms must be between 1 and ${MAX_DESCRIPTOR_LIFETIME_MS}.`); + } + const selector = deepFreezeJson(JSON.parse(canonicalKnowledgeGuardedJson(options.selector))); + const selectorDigest = knowledgeGuardedDigest(selector); + const page = Object.freeze({ limit, offset }); + const binding = Object.freeze({ + authority: Object.freeze({ ...options.binding.authority }), + tenant_id: options.binding.tenant_id, + scope: options.binding.scope, + parent_id: options.binding.parent_id + }); + const bindingDigest = knowledgeGuardedDigest({ + binding, + operation_id: options.operation_id, + step_id: options.step_id, + query_kind: selector.kind, + selector_digest: selectorDigest, + archive, + page + }); + const metadata = Object.freeze({ + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + schema: KNOWLEDGE_PRIVATE_QUERY_SCHEMA, + operation_id: options.operation_id, + step_id: options.step_id, + query_kind: selector.kind, + selector_digest: selectorDigest, + binding_digest: bindingDigest, + binding, + archive, + page, + expires_at: new Date(Date.now() + expiresIn).toISOString() + }); + const descriptor = { + ...metadata, + toJSON: () => metadata + }; + Object.defineProperty(descriptor, "descriptor_id", { + value: `kpq_${randomUUID2()}`, + enumerable: false, + configurable: false, + writable: false + }); + Object.freeze(descriptor); + PRIVATE_QUERIES.set(descriptor, { selector, revoked: false }); + return descriptor; +} +function revokeKnowledgePrivateQueryDescriptor(descriptor) { + const state = PRIVATE_QUERIES.get(descriptor); + if (!state) + throw new Error("private query descriptor was not created by @hasna/knowledge."); + state.revoked = true; +} +function materializeKnowledgePrivateQuery(descriptor) { + const state = PRIVATE_QUERIES.get(descriptor); + if (!state) + throw new Error("private query descriptor was not created by @hasna/knowledge."); + if (state.revoked) + throw new Error("private query descriptor has been revoked."); + if (Date.parse(descriptor.expires_at) <= Date.now()) { + throw new Error("private query descriptor has expired."); + } + if (knowledgeGuardedDigest(state.selector) !== descriptor.selector_digest) { + throw new Error("private query descriptor selector digest changed after freeze."); + } + return state.selector; +} function knowledgePrivateItemProof(item) { return Object.freeze({ id: item.id, @@ -20180,11 +20478,39 @@ function knowledgePrivateItemProof(item) { archived: item.archived === true }); } +function knowledgePrivateQueryItemProof(item, matchedValue = null) { + return Object.freeze({ + id_sha256: knowledgeGuardedContentSha256(item.id), + version: Number(item.version ?? 1), + title_sha256: knowledgeGuardedContentSha256(item.title), + content_sha256: knowledgeGuardedContentSha256(item.content), + url_sha256: item.url === null || item.url === undefined ? null : knowledgeGuardedContentSha256(item.url), + tags_sha256: knowledgeGuardedDigest(item.tags ?? []), + metadata_sha256: knowledgeGuardedDigest(item.metadata ?? {}), + archived: item.archived === true, + record_kind: "current", + matched_value_sha256: matchedValue === null ? null : knowledgeGuardedContentSha256(matchedValue) + }); +} +function knowledgePrivateHistoricalQueryItemProof(item, matchedValue = null) { + return Object.freeze({ + id_sha256: knowledgeGuardedContentSha256(item.item_id), + version: item.version, + title_sha256: knowledgeGuardedContentSha256(item.title), + content_sha256: item.content_hash, + url_sha256: item.url === null ? null : knowledgeGuardedContentSha256(item.url), + tags_sha256: knowledgeGuardedDigest(item.tags), + metadata_sha256: knowledgeGuardedDigest(item.metadata), + archived: item.archived, + record_kind: "historical", + matched_value_sha256: matchedValue === null ? null : knowledgeGuardedContentSha256(matchedValue) + }); +} function createKnowledgePrivateResultDescriptor(result, expiresInMs = 5 * 60 * 1000) { if (!Number.isInteger(expiresInMs) || expiresInMs < 1 || expiresInMs > MAX_DESCRIPTOR_LIFETIME_MS) { throw new Error(`expires_in_ms must be between 1 and ${MAX_DESCRIPTOR_LIFETIME_MS}.`); } - const itemCount = result.kind === "title_lookup" ? result.value.item_count : 1; + const itemCount = result.kind === "title_lookup" || result.kind === "query" ? result.value.item_count : 1; const metadata = Object.freeze({ contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, schema: KNOWLEDGE_PRIVATE_RESULT_SCHEMA, @@ -20242,6 +20568,18 @@ function inspectKnowledgePrivateResult(descriptor) { items: Object.freeze([knowledgePrivateItemProof(state.result.value.item)]) }); } + if (state.result.kind === "query") { + return Object.freeze({ + kind: "query", + item_count: state.result.value.item_count, + items: Object.freeze([...state.result.value.items]), + query_kind: state.result.value.query_kind, + status: state.result.value.status, + code: state.result.value.code, + total: state.result.value.total, + page: Object.freeze({ ...state.result.value.page }) + }); + } return Object.freeze({ kind: "title_lookup", item_count: state.result.value.item_count, @@ -20326,7 +20664,7 @@ function resolveVersion() { const pkg = JSON.parse(readFileSync5(url, "utf8")); return pkg.version ?? "0.0.0"; } catch { - return process.env.npm_package_version ?? "0.0.0"; + return "0.0.0"; } } function resolveSigningSecret(env = process.env) { @@ -20360,6 +20698,13 @@ function parseJsonColumn(value, fallback) { } return value; } +function boundedInteger(value, fallback, field, minimum, maximum) { + const resolved = value ?? fallback; + if (!Number.isFinite(resolved) || !Number.isInteger(resolved) || resolved < minimum || resolved > maximum) { + throw new HttpError(400, `${field} must be an integer between ${minimum} and ${maximum}.`); + } + return resolved; +} function rowToVersion(row) { return { id: String(row.id), @@ -20429,6 +20774,13 @@ class NoteRepo { } const now = new Date().toISOString(); const suppliedId = typeof input.id === "string" ? input.id.trim() : ""; + if (input.metadata) { + try { + assertKnowledgeRelationsMetadata(input.metadata, suppliedId || undefined); + } catch (error) { + throw new HttpError(400, error instanceof Error ? error.message : "invalid relation metadata."); + } + } if (suppliedId) { const guarded = await this.client.get(`SELECT TRUE AS guarded FROM knowledge_items WHERE id = $1 AND authority_classification IS NOT NULL @@ -20474,8 +20826,8 @@ class NoteRepo { return rowToItem(row); } async list(options = {}, guardedTenantId) { - const limit = Math.min(Math.max(options.limit ?? 50, 1), 200); - const offset = Math.max(options.offset ?? 0, 0); + const limit = boundedInteger(options.limit, 50, "limit", 1, 200); + const offset = boundedInteger(options.offset, 0, "offset", 0, 1e4); const params = []; const where = []; if (guardedTenantId) { @@ -20484,21 +20836,88 @@ class NoteRepo { } else { where.push("authority_classification IS NULL"); } - if (!options.includeArchived) + const archive = options.archive ?? "active"; + if (archive === "active") where.push("archived = FALSE"); - const search = options.search?.trim(); - let tsQueryExpr = null; - if (search) { - params.push(search); - tsQueryExpr = `websearch_to_tsquery('english', $${params.length})`; - where.push(`search_vector @@ ${tsQueryExpr}`); + else if (archive === "archived") + where.push("archived = TRUE"); + const filter = options.filter?.trim(); + if (filter) { + params.push(filter); + const position = params.length; + where.push(`(strpos(LOWER(id), LOWER($${position})) > 0 + OR strpos(LOWER(title), LOWER($${position})) > 0 + OR strpos(LOWER(content), LOWER($${position})) > 0)`); + } + for (const raw of options.tags ?? []) { + const whole = raw.trim().toLowerCase(); + const parts = raw.split(",").map((tag) => tag.trim().toLowerCase()).filter(Boolean); + const tagPredicates = []; + if (whole) { + params.push(whole); + tagPredicates.push(`EXISTS ( + SELECT 1 FROM jsonb_array_elements_text(tags) AS item_tag + WHERE LOWER(item_tag) = $${params.length} + )`); + } + if (parts.length > 0) { + const partPredicates = parts.map((part) => { + params.push(part); + return `EXISTS ( + SELECT 1 FROM jsonb_array_elements_text(tags) AS item_tag + WHERE LOWER(item_tag) = $${params.length} + )`; + }); + tagPredicates.push(`(${partPredicates.join(" AND ")})`); + } + if (tagPredicates.length > 0) + where.push(`(${tagPredicates.join(" OR ")})`); } const whereSql = where.length ? `WHERE ${where.join(" AND ")}` : ""; - const orderSql = tsQueryExpr ? `ORDER BY ts_rank_cd(search_vector, ${tsQueryExpr}) DESC, created_at DESC` : "ORDER BY created_at DESC"; + const sortColumn = options.sort === "title" ? "title" : "created_at"; + const direction = options.direction === "desc" ? "DESC" : "ASC"; + const orderSql = `ORDER BY ${sortColumn} ${direction}, id ${direction}`; const totalRow = await this.client.get(`SELECT count(*)::text AS count FROM knowledge_items ${whereSql}`, params); const rows = await this.client.many(`SELECT * FROM knowledge_items ${whereSql} ${orderSql} LIMIT ${limit} OFFSET ${offset}`, params); return { items: rows.map(rowToItem), total: Number(totalRow?.count ?? 0) }; } + async search(options, guardedTenantId) { + const query2 = options.query.trim(); + if (!query2) + throw new HttpError(400, "q is required"); + const limit = boundedInteger(options.limit, 20, "limit", 1, 200); + const offset = boundedInteger(options.offset, 0, "offset", 0, 1e4); + const params = []; + const where = []; + if (guardedTenantId) { + params.push(guardedTenantId); + where.push(`(authority_classification IS NULL OR tenant_id = $${params.length})`); + } else { + where.push("authority_classification IS NULL"); + } + const archive = options.archive ?? "active"; + if (archive === "active") + where.push("archived = FALSE"); + else if (archive === "archived") + where.push("archived = TRUE"); + params.push(query2); + const tsQueryExpr = `websearch_to_tsquery('english', $${params.length})`; + where.push(`search_vector @@ ${tsQueryExpr}`); + const whereSql = `WHERE ${where.join(" AND ")}`; + const totalRow = await this.client.get(`SELECT count(*)::text AS count FROM knowledge_items ${whereSql}`, params); + const rows = await this.client.many(`SELECT *, ts_rank_cd(search_vector, ${tsQueryExpr}) AS search_rank + FROM knowledge_items + ${whereSql} + ORDER BY search_rank DESC, created_at DESC, id ASC + LIMIT ${limit} OFFSET ${offset}`, params); + return { + items: rows.map((row) => ({ + item: rowToItem(row), + rank: Number(row.search_rank ?? 0) + })), + total: Number(totalRow?.count ?? 0) + }; + } async get(idOrShort, guardedTenantId) { const guardedVisibility = guardedTenantId ? "AND (authority_classification IS NULL OR tenant_id = $2)" : "AND authority_classification IS NULL"; const row = await this.client.get(`SELECT * FROM knowledge_items @@ -20511,6 +20930,13 @@ class NoteRepo { const existing = await this.get(idOrShort); if (!existing) return null; + if (patch.metadata !== undefined) { + try { + assertKnowledgeRelationsMetadata(patch.metadata, existing.id); + } catch (error) { + throw new HttpError(400, error instanceof Error ? error.message : "invalid relation metadata."); + } + } const sets = []; const params = []; const push = (col, val, cast = "") => { @@ -20673,6 +21099,15 @@ function rowToGuardedReceipt(row) { function rowMatchesGuardedBinding(row, binding) { return row.authority_classification === binding.authority.classification && row.authority_id === binding.authority.authority_id && row.tenant_id === binding.tenant_id && row.scope === binding.scope && row.parent_id === binding.parent_id; } +function guardedRelationTargets(payload) { + if (!("metadata" in payload) || !payload.metadata) + return []; + const relation = payload.metadata[KNOWLEDGE_RELATIONS_METADATA_KEY]; + if (!relation || typeof relation !== "object" || Array.isArray(relation)) + return []; + const value = relation; + return [value.supersedes_item_id, value.canonical_item_id].filter((target) => typeof target === "string"); +} function rowToManifestStep(row) { return { ordinal: Number(row.ordinal), @@ -21431,6 +21866,32 @@ class GuardedWriteRepo { duplicate: true }; } + for (const targetId of guardedRelationTargets(envelope.payload)) { + const target = await tx.get(`SELECT id FROM knowledge_items + WHERE id = $1 + AND authority_classification = $2 + AND authority_id = $3 + AND tenant_id = $4 + AND scope = $5 + AND parent_id = $6 + LIMIT 1`, [ + targetId, + binding.authority.classification, + binding.authority.authority_id, + binding.tenant_id, + binding.scope, + binding.parent_id + ]); + if (!target) { + const receipt2 = await this.finish(tx, envelope, "rejected", "relation_binding_mismatch", null); + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + deterministic_key: envelope.deterministic_key, + receipt: receipt2, + duplicate: false + }; + } + } if (descriptor.verb === "create") { const payload = envelope.payload; const now = new Date().toISOString(); @@ -21674,6 +22135,162 @@ class GuardedWriteRepo { limits }; } + async query(selector, selectorDigest, archive, page, binding, limits) { + if (selector.kind === "semantic_overlap") { + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + exact: true, + bounded: true, + private: true, + query_kind: selector.kind, + status: "unavailable", + code: "semantic_query_unavailable", + binding, + selector_digest: selectorDigest, + total: 0, + item_count: 0, + page: { + limit: page.limit, + offset: page.offset, + returned: 0, + has_more: false + }, + items: [], + limits + }; + } + const bindingParams = [ + binding.authority.classification, + binding.authority.authority_id, + binding.tenant_id, + binding.scope, + binding.parent_id + ]; + const currentWhere = [ + "authority_classification = $1", + "authority_id = $2", + "tenant_id = $3", + "scope = $4", + "parent_id = $5" + ]; + if (archive === "active") + currentWhere.push("archived = FALSE"); + else if (archive === "archived") + currentWhere.push("archived = TRUE"); + let currentOrder = "ORDER BY id ASC"; + let matchedValue; + if (selector.kind === "historical_version") { + const params = [...bindingParams, selector.item_id, selector.version]; + const historyWhere = [ + "i.authority_classification = $1", + "i.authority_id = $2", + "i.tenant_id = $3", + "i.scope = $4", + "i.parent_id = $5", + "v.item_id = $6", + "v.version = $7" + ]; + if (archive === "active") + historyWhere.push("v.archived = FALSE"); + else if (archive === "archived") + historyWhere.push("v.archived = TRUE"); + const whereSql2 = `WHERE ${historyWhere.join(" AND ")}`; + const totalRow2 = await this.client.get(`SELECT count(*)::text AS count + FROM knowledge_item_versions v + JOIN knowledge_items i ON i.id = v.item_id + ${whereSql2}`, params); + const rows2 = await this.client.many(`SELECT v.* + FROM knowledge_item_versions v + JOIN knowledge_items i ON i.id = v.item_id + ${whereSql2} + ORDER BY v.version ASC + LIMIT ${page.limit} OFFSET ${page.offset}`, params); + const total2 = Number(totalRow2?.count ?? 0); + const items2 = rows2.map((row) => knowledgePrivateHistoricalQueryItemProof(rowToVersion(row), selector.item_id)); + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + exact: true, + bounded: true, + private: true, + query_kind: selector.kind, + status: "available", + code: null, + binding, + selector_digest: selectorDigest, + total: total2, + item_count: items2.length, + page: { + limit: page.limit, + offset: page.offset, + returned: items2.length, + has_more: page.offset + items2.length < total2 + }, + items: items2, + limits + }; + } + switch (selector.kind) { + case "exact_title": + bindingParams.push(selector.title); + currentWhere.push(`title = $${bindingParams.length}`); + matchedValue = selector.title; + break; + case "lexical_overlap": { + bindingParams.push(selector.query); + const tsQuery = `websearch_to_tsquery('english', $${bindingParams.length})`; + currentWhere.push(`search_vector @@ ${tsQuery}`); + currentOrder = `ORDER BY ts_rank_cd(search_vector, ${tsQuery}) DESC, id ASC`; + matchedValue = selector.query; + break; + } + case "supersession": + bindingParams.push(KNOWLEDGE_RELATIONS_SCHEMA, selector.supersedes_item_id); + currentWhere.push(`metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},schema}' = $${bindingParams.length - 1}`, `metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},supersedes_item_id}' = $${bindingParams.length}`); + matchedValue = selector.supersedes_item_id; + break; + case "current_version": + bindingParams.push(selector.item_id); + currentWhere.push(`id = $${bindingParams.length}`); + matchedValue = selector.item_id; + break; + case "canonical_pointer": + bindingParams.push(KNOWLEDGE_RELATIONS_SCHEMA, selector.canonical_item_id); + currentWhere.push(`metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},schema}' = $${bindingParams.length - 1}`, `metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},canonical_item_id}' = $${bindingParams.length}`); + matchedValue = selector.canonical_item_id; + break; + default: + throw new HttpError(400, "private query selector kind is unsupported."); + } + const whereSql = `WHERE ${currentWhere.join(" AND ")}`; + const totalRow = await this.client.get(`SELECT count(*)::text AS count FROM knowledge_items ${whereSql}`, bindingParams); + const rows = await this.client.many(`SELECT * FROM knowledge_items + ${whereSql} + ${currentOrder} + LIMIT ${page.limit} OFFSET ${page.offset}`, bindingParams); + const total = Number(totalRow?.count ?? 0); + const items = rows.map((row) => knowledgePrivateQueryItemProof(rowToItem(row), matchedValue)); + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + exact: true, + bounded: true, + private: true, + query_kind: selector.kind, + status: "available", + code: null, + binding, + selector_digest: selectorDigest, + total, + item_count: items.length, + page: { + limit: page.limit, + offset: page.offset, + returned: items.length, + has_more: page.offset + items.length < total + }, + items, + limits + }; + } async readback(fullId, binding, limits) { const row = await this.client.get(`SELECT * FROM knowledge_items WHERE id = $1 @@ -21934,9 +22551,35 @@ function knowledgeOpenApi(version) { type: "object", properties: { items: { type: "array", items: { $ref: "#/components/schemas/Note" } }, - total: { type: "integer" } + total: { type: "integer" }, + query_capability: { + type: "string", + enum: [KNOWLEDGE_BOUNDED_QUERY_CAPABILITY] + } }, - required: ["items", "total"] + required: ["items", "total", "query_capability"] + }, + NoteSearchList: { + type: "object", + properties: { + items: { + type: "array", + items: { + type: "object", + properties: { + item: { $ref: "#/components/schemas/Note" }, + rank: { type: "number" } + }, + required: ["item", "rank"] + } + }, + total: { type: "integer" }, + query_capability: { + type: "string", + enum: [KNOWLEDGE_BOUNDED_QUERY_CAPABILITY] + } + }, + required: ["items", "total", "query_capability"] }, NoteVersionList: { type: "object", @@ -21955,14 +22598,42 @@ function knowledgeOpenApi(version) { "/v1/notes": { get: { operationId: "listNotes", - summary: "List knowledge items", + summary: "List knowledge items with literal filters and bounded paging", parameters: [ { name: "limit", in: "query", schema: { type: "integer" } }, { name: "offset", in: "query", schema: { type: "integer" } }, - { name: "search", in: "query", schema: { type: "string" } } + { name: "filter", in: "query", schema: { type: "string" } }, + { + name: "search", + in: "query", + deprecated: true, + description: "Legacy alias for filter.", + schema: { type: "string" } + }, + { + name: "tags", + in: "query", + style: "form", + explode: true, + schema: { type: "array", items: { type: "string" } } + }, + { name: "archive", in: "query", schema: { type: "string", enum: ["active", "archived", "all"] } }, + { + name: "includeArchived", + in: "query", + deprecated: true, + description: "Legacy alias: true maps to archive=all.", + schema: { type: "boolean" } + }, + { name: "sort", in: "query", schema: { type: "string", enum: ["created", "title"] } }, + { name: "direction", in: "query", schema: { type: "string", enum: ["asc", "desc"] } } ], responses: { - "200": { content: { "application/json": { schema: { $ref: "#/components/schemas/NoteList" } } } } + "200": { + content: { + "application/json": { schema: { $ref: "#/components/schemas/NoteList" } } + } + } } }, post: { @@ -21977,6 +22648,25 @@ function knowledgeOpenApi(version) { } } }, + "/v1/notes/search": { + get: { + operationId: "searchNotes", + summary: "Ranked PostgreSQL full-text query with bounded paging", + parameters: [ + { name: "q", in: "query", required: true, schema: { type: "string" } }, + { name: "limit", in: "query", schema: { type: "integer" } }, + { name: "offset", in: "query", schema: { type: "integer" } }, + { name: "archive", in: "query", schema: { type: "string", enum: ["active", "archived", "all"] } } + ], + responses: { + "200": { + content: { + "application/json": { schema: { $ref: "#/components/schemas/NoteSearchList" } } + } + } + } + } + }, "/v1/notes/{id}": { get: { operationId: "getNote", @@ -22135,6 +22825,29 @@ function knowledgeOpenApi(version) { } } }, + "/v1/guarded-writes/queries": { + post: { + operationId: "queryGuardedKnowledge", + summary: "Bounded private Knowledge query under one frozen FCAME-1 binding", + description: "The raw selector exists only in this authenticated request body. " + "The response contains hashes, versions, page evidence, and no raw selector or item id.", + requestBody: { + required: true, + content: { + "application/json": { + schema: { + type: "object", + required: ["contract", "descriptor", "selector", "limits"], + additionalProperties: false + } + } + } + }, + responses: { + "200": { description: "Exact bounded private result or typed semantic unavailability." }, + "400": { description: "Descriptor, selector, binding digest, page, or bounds mismatch." } + } + } + }, "/v1/guarded-writes/receipts/{deterministicKey}": { get: { operationId: "reconcileGuardedKnowledgeWrite", @@ -22260,6 +22973,20 @@ function guardedBoundsFromHeaders(req) { } return bounds; } +function privateQueryBoundsFromHeaders(req) { + const bounds = { + max_calls: parsePositiveInteger(req.headers.get("x-knowledge-max-calls"), "x-knowledge-max-calls"), + max_items: parsePositiveInteger(req.headers.get("x-knowledge-max-items"), "x-knowledge-max-items"), + max_bytes: parsePositiveInteger(req.headers.get("x-knowledge-max-bytes"), "x-knowledge-max-bytes"), + wall_time_ms: parsePositiveInteger(req.headers.get("x-knowledge-wall-time-ms"), "x-knowledge-wall-time-ms") + }; + try { + assertKnowledgePrivateQueryBounds(bounds); + } catch (error) { + throw new HttpError(400, error instanceof Error ? error.message : "invalid private query bounds."); + } + return bounds; +} function guardedBoundsFromQuery(req, url) { const fromHeaders = guardedBoundsFromHeaders(req); const fromQuery = { @@ -22386,6 +23113,9 @@ function validateGuardedEnvelope(value, headerBounds, authority, idempotencyKey) assertConfiguredAuthority(descriptor.binding, authority); assertKnowledgeGuardedPrecondition(descriptor.verb, descriptor.precondition); assertKnowledgeGuardedPayload(descriptor.verb, envelope.payload); + if ("metadata" in envelope.payload && envelope.payload.metadata) { + assertKnowledgeRelationsMetadata(envelope.payload.metadata, descriptor.target_id); + } const limits = normalizeKnowledgeGuardedLimits(envelope.limits); if (canonicalKnowledgeGuardedJson(limits) !== canonicalKnowledgeGuardedJson(envelope.limits)) { throw new Error("guarded-write limits must be explicit and complete."); @@ -22494,6 +23224,78 @@ function validatePrivateTitleLookupEnvelope(value, headerBounds, authority) { throw new HttpError(400, error instanceof Error ? error.message : "invalid private title lookup envelope."); } } +function validatePrivateQueryEnvelope(value, headerBounds, authority) { + try { + if (!value || typeof value !== "object") { + throw new Error("private query envelope is required."); + } + const envelope = value; + assertExactRequestKeys(value, "private query envelope", ["contract", "descriptor", "selector", "limits"]); + if (envelope.contract !== KNOWLEDGE_GUARDED_WRITE_CONTRACT) { + throw new Error("unsupported guarded-write contract."); + } + const descriptor = envelope.descriptor; + if (!descriptor || descriptor.contract !== KNOWLEDGE_GUARDED_WRITE_CONTRACT || descriptor.schema !== KNOWLEDGE_PRIVATE_QUERY_SCHEMA) { + throw new Error("invalid private query descriptor schema."); + } + assertExactRequestKeys(descriptor, "private query descriptor", [ + "contract", + "schema", + "operation_id", + "step_id", + "query_kind", + "selector_digest", + "binding_digest", + "binding", + "archive", + "page", + "expires_at" + ]); + if (typeof descriptor.operation_id !== "string" || descriptor.operation_id.length === 0 || typeof descriptor.step_id !== "string" || descriptor.step_id.length === 0 || !["active", "archived", "all"].includes(descriptor.archive)) { + throw new Error("private query operation, step, and archive mode are required."); + } + const descriptorExpiresAt = Date.parse(descriptor.expires_at); + const descriptorNow = Date.now(); + if (!Number.isFinite(descriptorExpiresAt) || descriptorExpiresAt <= descriptorNow || descriptorExpiresAt > descriptorNow + 60 * 60 * 1000) { + throw new Error("private query descriptor is expired or malformed."); + } + assertKnowledgeGuardedBinding(descriptor.binding); + assertConfiguredAuthority(descriptor.binding, authority); + assertKnowledgePrivateQueryBounds(envelope.limits); + assertKnowledgePrivateQueryPage(descriptor.page, envelope.limits); + if (canonicalKnowledgeGuardedJson(envelope.limits) !== canonicalKnowledgeGuardedJson(headerBounds)) { + throw new Error("private query limits must exactly match the producer bound headers."); + } + assertKnowledgePrivateQuerySelector(envelope.selector); + if (envelope.selector.kind !== descriptor.query_kind) { + throw new Error("private query selector kind does not match the frozen descriptor."); + } + const selectorDigest = knowledgeGuardedDigest(envelope.selector); + if (selectorDigest !== descriptor.selector_digest) { + throw new Error("private query selector digest does not match the frozen descriptor."); + } + const bindingDigest = knowledgeGuardedDigest({ + binding: descriptor.binding, + operation_id: descriptor.operation_id, + step_id: descriptor.step_id, + query_kind: descriptor.query_kind, + selector_digest: descriptor.selector_digest, + archive: descriptor.archive, + page: descriptor.page + }); + if (bindingDigest !== descriptor.binding_digest) { + throw new Error("private query binding digest does not match."); + } + if (knowledgeGuardedUtf8Bytes(envelope) > headerBounds.max_bytes) { + throw new Error("private query envelope exceeds the producer byte cap."); + } + return envelope; + } catch (error) { + if (error instanceof HttpError) + throw error; + throw new HttpError(400, error instanceof Error ? error.message : "invalid private query envelope."); + } +} function validateGuardedAdoptionEnvelope(value, headerBounds, authority, idempotencyKey) { try { if (!value || typeof value !== "object") { @@ -22810,6 +23612,24 @@ function createServeHandler(deps) { throw error; } } + if (path === "/v1/guarded-writes/queries" && method === "POST") { + if (!guardedRepo) { + return json({ error: "guarded_authority_unconfigured" }, 503); + } + const startedAt = Date.now(); + const tenantId = req.headers.get("x-knowledge-tenant-id"); + if (!tenantId) + throw new HttpError(400, "x-knowledge-tenant-id is required."); + await authOrThrow(req, ["knowledge:read"], tenantId); + const bounds = privateQueryBoundsFromHeaders(req); + const raw = await readBoundedJson(req, bounds, startedAt); + const envelope = validatePrivateQueryEnvelope(raw, bounds, guardedRepo.authority); + if (envelope.descriptor.binding.tenant_id !== tenantId) { + throw new HttpError(403, "descriptor tenant does not match the authenticated request tenant."); + } + const result = await guardedRepo.query(envelope.selector, envelope.descriptor.selector_digest, envelope.descriptor.archive, envelope.descriptor.page, envelope.descriptor.binding, bounds); + return boundedJson(result, 200, bounds, startedAt); + } const guardedReceiptMatch = path.match(/^\/v1\/guarded-writes\/receipts\/([^/]+)$/); if (guardedReceiptMatch) { if (method !== "GET") @@ -22843,16 +23663,50 @@ function createServeHandler(deps) { const readback = await guardedRepo.readback(decodeURIComponent(guardedItemMatch[1]), binding, bounds); return readback ? boundedJson(readback, 200, bounds, startedAt) : boundedJson({ error: "not_found" }, 404, bounds, startedAt); } + if (path === "/v1/notes/search") { + if (method !== "GET") + return json({ error: "method_not_allowed" }, 405); + const principal = await authOrThrow(req, ["knowledge:read"]); + const query2 = url.searchParams.get("q") ?? ""; + const archiveRaw = url.searchParams.get("archive") ?? "active"; + if (!["active", "archived", "all"].includes(archiveRaw)) { + throw new HttpError(400, "archive must be active, archived, or all."); + } + const result = await repo.search({ + query: query2, + archive: archiveRaw, + limit: url.searchParams.has("limit") ? Number(url.searchParams.get("limit")) : undefined, + offset: url.searchParams.has("offset") ? Number(url.searchParams.get("offset")) : undefined + }, principal.tid); + return json({ ...result, query_capability: KNOWLEDGE_BOUNDED_QUERY_CAPABILITY }); + } if (path === "/v1/notes") { if (method === "GET") { const principal = await authOrThrow(req, ["knowledge:read"]); + const includeArchived = url.searchParams.get("includeArchived") === "true"; + const archiveRaw = url.searchParams.get("archive") ?? (includeArchived ? "all" : "active"); + const sortRaw = url.searchParams.get("sort") ?? "created"; + const directionRaw = url.searchParams.get("direction") ?? "asc"; + if (!["active", "archived", "all"].includes(archiveRaw)) { + throw new HttpError(400, "archive must be active, archived, or all."); + } + if (!["created", "title"].includes(sortRaw)) { + throw new HttpError(400, "sort must be created or title."); + } + if (!["asc", "desc"].includes(directionRaw)) { + throw new HttpError(400, "direction must be asc or desc."); + } + const tags = url.searchParams.getAll("tags"); const result = await repo.list({ limit: url.searchParams.has("limit") ? Number(url.searchParams.get("limit")) : undefined, offset: url.searchParams.has("offset") ? Number(url.searchParams.get("offset")) : undefined, - search: url.searchParams.get("search") ?? undefined, - includeArchived: url.searchParams.get("includeArchived") === "true" + filter: url.searchParams.get("filter") ?? url.searchParams.get("search") ?? undefined, + tags: tags.length > 0 ? tags : undefined, + archive: archiveRaw, + sort: sortRaw, + direction: directionRaw }, principal.tid); - return json(result); + return json({ ...result, query_capability: KNOWLEDGE_BOUNDED_QUERY_CAPABILITY }); } if (method === "POST") { const principal = await authOrThrow(req, ["knowledge:write"]); @@ -26585,6 +27439,35 @@ async function hybridSearchItems(items, options, baseWarnings = []) { results }; } +function hybridSearchFromProducerPage(hits, options, warnings = [], producerTotal = hits.length) { + const query2 = options.query.trim(); + if (!query2) + throw new Error("Search query is required."); + const limit = Math.max(1, Math.min(options.limit ?? 10, 100)); + const offset = Math.max(0, Math.floor(options.offset ?? 0)); + const results = hits.map(({ item, rank }) => legacyItemResult(item, rank)); + return { + query: query2, + limit, + offset, + mode: { + keyword: true, + catalog: true, + semantic: options.semantic === true + }, + semantic_provider: null, + semantic_model: null, + semantic_dimensions: null, + counts: { + keyword_results: producerTotal, + catalog_results: 0, + semantic_results: 0, + merged_results: results.length + }, + warnings, + results + }; +} // src/retrieval.ts function stableId4(prefix, value) { @@ -27102,7 +27985,7 @@ ${answer}`; warnings }; } -async function runKnowledgePromptOverItems(items, options) { +async function runKnowledgePromptOverItems(items, options, producerSearch) { const prompt = options.prompt.trim(); if (!prompt) throw new Error("Knowledge prompt is required."); @@ -27110,7 +27993,7 @@ async function runKnowledgePromptOverItems(items, options) { const modelRef = resolveModelRef(options.modelRef ?? "default", options.config); const parsed = parseModelRef(modelRef); const { prompt: _p, generate: _g, approveWrite: _a, now: _n, ...retrievalOptions } = options; - const context = await retrieveKnowledgeContextFromItems(items, { + const context = producerSearch ? retrieveKnowledgeContextFromSearch(producerSearch, { contextChars: options.contextChars }) : await retrieveKnowledgeContextFromItems(items, { ...retrievalOptions, query: prompt }); @@ -33544,6 +34427,53 @@ class VersionHistoryUnsupportedError extends Error { function matchesId(item, idOrShort) { return item.id === idOrShort || item.short_id === idOrShort; } +function itemMatchesLiteralSearch(item, search) { + const query2 = search.trim().toLowerCase(); + if (!query2) + return true; + return item.id.toLowerCase().includes(query2) || item.title.toLowerCase().includes(query2) || item.content.toLowerCase().includes(query2); +} +function itemMatchesTagFilters(item, rawFilters) { + if (rawFilters.length === 0) + return true; + const itemTags = new Set((item.tags ?? []).map((tag) => tag.toLowerCase())); + return rawFilters.every((raw) => { + const whole = raw.trim().toLowerCase(); + const parts = raw.split(",").map((tag) => tag.trim().toLowerCase()).filter(Boolean); + return whole.length > 0 && itemTags.has(whole) || parts.length > 0 && parts.every((tag) => itemTags.has(tag)); + }); +} +function compareItems(left, right, sort, direction) { + const primary = sort === "title" ? left.title.localeCompare(right.title) : left.created_at.localeCompare(right.created_at); + const deterministic = primary === 0 ? left.id.localeCompare(right.id) : primary; + return direction === "desc" ? -deterministic : deterministic; +} +function boundedListInteger(value, fallback, field, minimum, maximum) { + const resolved = value ?? fallback; + if (!Number.isFinite(resolved) || !Number.isInteger(resolved) || resolved < minimum || resolved > maximum) { + throw new Error(`${field} must be an integer between ${minimum} and ${maximum}.`); + } + return resolved; +} +function boundedLocalList(items, options) { + const archive = options.archive ?? "active"; + const sort = options.sort ?? "created"; + const direction = options.direction ?? "asc"; + const limit = boundedListInteger(options.limit, 50, "limit", 1, 200); + const offset = boundedListInteger(options.offset, 0, "offset", 0, 1e4); + let filtered = items.filter((item) => archive === "all" || (archive === "archived" ? item.archived === true : item.archived !== true)); + if (options.search) { + filtered = filtered.filter((item) => itemMatchesLiteralSearch(item, options.search)); + } + if (options.tags?.length) { + filtered = filtered.filter((item) => itemMatchesTagFilters(item, options.tags)); + } + filtered.sort((left, right) => compareItems(left, right, sort, direction)); + return { + total: filtered.length, + items: filtered.slice(offset, offset + limit) + }; +} class LocalItemStore { storePath; @@ -33564,9 +34494,14 @@ class LocalItemStore { get exists() { return existsSync12(this.storePath); } + async list(options = {}) { + const store = loadStoreIfExists(this.storePath); + const result = boundedLocalList(store.items, options); + return { ...result, exists: store.exists }; + } async listAll() { const store = loadStoreIfExists(this.storePath); - return { items: store.items, exists: store.exists }; + return { items: store.items, total: store.items.length, exists: store.exists }; } async get(idOrShort) { const store = loadStoreIfExists(this.storePath); @@ -33669,8 +34604,25 @@ class ApiItemStore { get location() { return this.cloud.baseUrl; } + async list(options = {}) { + const result = await this.cloud.list({ + search: options.search, + tags: options.tags, + archive: options.archive, + sort: options.sort, + direction: options.direction, + limit: options.limit, + offset: options.offset + }); + return { + items: result.items, + total: result.total, + exists: true + }; + } async listAll() { - return { items: await fetchAllCloudItems(this.cloud), exists: true }; + const items = await fetchAllCloudItems(this.cloud); + return { items, total: items.length, exists: true }; } async get(idOrShort) { return this.cloud.get(idOrShort); @@ -35550,6 +36502,14 @@ function normalizeMode(value) { throw new Error("Invalid setup mode. Use hosted or local."); } +class KnowledgeSemanticSearchUnavailableError extends Error { + code = "semantic_query_unavailable"; + constructor() { + super("semantic_query_unavailable: the hosted Knowledge item store has no configured vector index."); + this.name = "KnowledgeSemanticSearchUnavailableError"; + } +} + class KnowledgeService { options; ensuredWorkspace; @@ -35578,8 +36538,8 @@ class KnowledgeService { storePathOverridden: false }); } - async listItems() { - return this.itemStore().listAll(); + async listItems(options = {}) { + return this.itemStore().list(options); } async getItem(idOrShort) { return this.itemStore().get(idOrShort); @@ -36372,24 +37332,20 @@ class KnowledgeService { isApiMode() { return isKnowledgeApiMode(); } - async fetchCloudItems() { + cloudStore() { const cloud = resolveKnowledgeCloudStore(); - if (!cloud) - throw new Error("knowledge: cloud store requested but not resolvable (check HASNA_KNOWLEDGE_API_URL + HASNA_KNOWLEDGE_API_KEY)."); - return fetchAllCloudItems(cloud); + if (!cloud) { + throw new Error("knowledge: cloud store requested but not resolvable " + "(check HASNA_KNOWLEDGE_API_URL + HASNA_KNOWLEDGE_API_KEY)."); + } + return cloud; + } + async fetchCloudItems() { + return fetchAllCloudItems(this.cloudStore()); } async semanticSearch(options) { const workspace = this.workspace; if (this.isApiMode()) { - const items = await this.fetchCloudItems(); - const search = await hybridSearchItems(items, { ...options }, ["semantic_search_requires_local_catalog"]); - return { - provider: "openai", - model: "text-embedding-3-small", - dimensions: options.dimensions ?? 1536, - query: options.query, - results: search.results - }; + throw new KnowledgeSemanticSearchUnavailableError; } if (!existsSync14(workspace.knowledgeDbPath)) { return { @@ -36409,8 +37365,16 @@ class KnowledgeService { async search(options) { const workspace = this.workspace; if (this.isApiMode()) { - const items = await this.fetchCloudItems(); - return hybridSearchItems(items, options); + if (options.semantic === true || options.fake === true || Boolean(options.modelRef)) { + throw new KnowledgeSemanticSearchUnavailableError; + } + const producer = await this.cloudStore().search({ + query: options.query, + archive: "active", + limit: options.limit, + offset: options.offset + }); + return hybridSearchFromProducerPage(producer.items, options, [], producer.total); } const legacyStorePath = legacyStorePathForRead(this.scope, workspace, options.legacyStorePath); if (!existsSync14(workspace.knowledgeDbPath)) { @@ -36433,8 +37397,10 @@ class KnowledgeService { async retrieveContext(options) { const workspace = this.workspace; if (this.isApiMode()) { - const items = await this.fetchCloudItems(); - return retrieveKnowledgeContextFromItems(items, options); + const search = await this.search(options); + return retrieveKnowledgeContextFromSearch(search, { + contextChars: options.contextChars + }); } const legacyStorePath = legacyStorePathForRead(this.scope, workspace, options.legacyStorePath); if (!existsSync14(workspace.knowledgeDbPath)) { @@ -36462,8 +37428,7 @@ class KnowledgeService { if (this.isApiMode()) { const query2 = (options.query ?? options.topic ?? "").trim(); if (query2 && options.source !== "loops" && options.source !== "runs") { - const items = await this.fetchCloudItems(); - const search = await hybridSearchItems(items, { ...options, query: query2 }); + const search = await this.search({ ...options, query: query2 }); const context = retrieveKnowledgeContextFromSearch(search, { contextChars: options.contextChars }); return legacyAgentContextPack(options, context, this.safetyPolicy()); } @@ -36496,8 +37461,22 @@ class KnowledgeService { } async runPrompt(options) { if (this.isApiMode()) { - const items = await this.fetchCloudItems(); - return runKnowledgePromptOverItems(items, { ...options, config: this.config() }); + if (options.semantic === true || options.fake === true || Boolean(options.modelRef)) { + throw new KnowledgeSemanticSearchUnavailableError; + } + const producer = await this.cloudStore().search({ + query: options.prompt, + archive: "active", + limit: options.limit, + offset: options.offset + }); + const producerSearch = hybridSearchFromProducerPage(producer.items, { + query: options.prompt, + limit: options.limit, + offset: options.offset, + semantic: false + }, [], producer.total); + return runKnowledgePromptOverItems(producer.items.map((hit) => hit.item), { ...options, config: this.config() }, producerSearch); } const workspace = this.ensureWorkspace(); const legacyStorePath = options.legacyStorePath ?? workspace.jsonStorePath; @@ -37097,7 +38076,7 @@ function createKnowledgeClient(options = {}) { }, items: { store: () => service.itemStore(), - list: () => service.listItems(), + list: (options2 = {}) => service.listItems(options2), get: (idOrShort) => service.getItem(idOrShort), create: (input) => service.createItem(input), update: (idOrShort, patch) => service.updateItem(idOrShort, patch), @@ -37229,6 +38208,22 @@ class KnowledgePrivateTitleLookupAmbiguousError extends Error { } } +class KnowledgePrivateQueryResponseError extends Error { + code = "private_query_response_invalid"; + constructor() { + super("private_query_response_invalid: the bounded private query response was unavailable or malformed."); + this.name = "KnowledgePrivateQueryResponseError"; + } +} + +class KnowledgeGuardedReadbackError extends Error { + code = "guarded_readback_response_invalid"; + constructor() { + super("guarded_readback_response_invalid: the exact guarded readback was unavailable or malformed."); + this.name = "KnowledgeGuardedReadbackError"; + } +} + class KnowledgeGuardedManifestConflictError extends Error { manifest; code = "guarded_manifest_conflict"; @@ -37322,6 +38317,22 @@ function bindingQuery(binding) { function sameBinding(left, right) { return canonicalKnowledgeGuardedJson(left) === canonicalKnowledgeGuardedJson(right); } +function selectorMatchedValue(selector) { + switch (selector.kind) { + case "exact_title": + return selector.title; + case "lexical_overlap": + case "semantic_overlap": + return selector.query; + case "supersession": + return selector.supersedes_item_id; + case "current_version": + case "historical_version": + return selector.item_id; + case "canonical_pointer": + return selector.canonical_item_id; + } +} function parseErrorBody(error51) { if (!error51 || typeof error51 !== "object") return null; @@ -37540,6 +38551,73 @@ class GuardedWriter { } return createKnowledgePrivateResultDescriptor({ kind: "title_lookup", value: response }); } + async query(descriptor, bounds = { + max_calls: 1, + max_items: descriptor.page.limit, + max_bytes: this.limits.readback.max_bytes, + wall_time_ms: this.limits.readback.wall_time_ms + }) { + assertKnowledgePrivateQueryBounds(bounds); + assertKnowledgePrivateQueryPage(descriptor.page, bounds); + if (!sameBinding(descriptor.binding, this.binding)) { + throw new Error("private query descriptor binding does not match this guarded writer."); + } + const selector = materializeKnowledgePrivateQuery(descriptor); + if (selector.kind !== descriptor.query_kind) { + throw new Error("private query descriptor kind changed after freeze."); + } + const bindingDigest = knowledgeGuardedDigest({ + binding: descriptor.binding, + operation_id: descriptor.operation_id, + step_id: descriptor.step_id, + query_kind: descriptor.query_kind, + selector_digest: descriptor.selector_digest, + archive: descriptor.archive, + page: descriptor.page + }); + if (bindingDigest !== descriptor.binding_digest) { + throw new Error("private query descriptor binding digest changed after freeze."); + } + const envelope = { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + descriptor: descriptor.toJSON(), + selector, + limits: bounds + }; + if (knowledgeGuardedUtf8Bytes(envelope) > bounds.max_bytes) { + throw new Error("private_query_request_exceeds_byte_cap."); + } + let response; + try { + const candidate = await this.transport.post("/guarded-writes/queries", envelope, { + headers: { + ...boundHeaders(bounds), + "x-knowledge-tenant-id": this.binding.tenant_id + }, + timeoutMs: bounds.wall_time_ms, + retry: false + }); + if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) { + throw new KnowledgePrivateQueryResponseError; + } + response = candidate; + } catch (error51) { + if (error51 instanceof KnowledgePrivateQueryResponseError) + throw error51; + throw new KnowledgePrivateQueryResponseError; + } + const expectedMatchedDigest = knowledgeGuardedContentSha256(selectorMatchedValue(selector)); + if (knowledgeGuardedUtf8Bytes(response) > bounds.max_bytes || response.contract !== KNOWLEDGE_GUARDED_WRITE_CONTRACT || response.exact !== true || response.bounded !== true || response.private !== true || response.query_kind !== descriptor.query_kind || response.selector_digest !== descriptor.selector_digest || !sameBinding(response.binding, this.binding) || response.item_count !== response.items.length || response.item_count !== response.page.returned || response.item_count > descriptor.page.limit || response.page.limit !== descriptor.page.limit || response.page.offset !== descriptor.page.offset || response.total < response.item_count || response.page.has_more !== descriptor.page.offset + response.item_count < response.total || canonicalKnowledgeGuardedJson(response.limits) !== canonicalKnowledgeGuardedJson(bounds) || response.items.some((item) => item.matched_value_sha256 !== expectedMatchedDigest)) { + throw new KnowledgePrivateQueryResponseError; + } + if (descriptor.query_kind === "semantic_overlap" && (response.status !== "unavailable" || response.code !== "semantic_query_unavailable" || response.item_count !== 0 || response.total !== 0)) { + throw new KnowledgePrivateQueryResponseError; + } + if (descriptor.query_kind !== "semantic_overlap" && (response.status !== "available" || response.code !== null)) { + throw new KnowledgePrivateQueryResponseError; + } + return createKnowledgePrivateResultDescriptor({ kind: "query", value: response }); + } async createManifest(manifest, bounds = this.limits.submission) { assertKnowledgeGuardedBounds(bounds, "manifest submission bounds"); const deterministicKey = computeKnowledgeGuardedManifestDeterministicKey(this.binding, manifest); @@ -37800,20 +38878,34 @@ class GuardedWriter { } async readback(fullId, bounds = this.limits.readback) { assertKnowledgeGuardedBounds(bounds, "readback bounds"); - const response = await this.transport.get(`/guarded-writes/items/${encodeURIComponent(fullId)}`, { - query: { - ...bindingQuery(this.binding), - max_calls: bounds.max_calls, - max_items: bounds.max_items, - max_bytes: bounds.max_bytes, - wall_time_ms: bounds.wall_time_ms - }, - headers: boundHeaders(bounds), - timeoutMs: bounds.wall_time_ms, - retry: false - }); - if (knowledgeGuardedUtf8Bytes(response) > bounds.max_bytes) { - throw new Error("guarded_readback_response_exceeds_byte_cap."); + let response; + try { + const candidate = await this.transport.get(`/guarded-writes/items/${encodeURIComponent(fullId)}`, { + query: { + ...bindingQuery(this.binding), + max_calls: bounds.max_calls, + max_items: bounds.max_items, + max_bytes: bounds.max_bytes, + wall_time_ms: bounds.wall_time_ms + }, + headers: boundHeaders(bounds), + timeoutMs: bounds.wall_time_ms, + retry: false + }); + if (!candidate || typeof candidate !== "object" || Array.isArray(candidate)) { + throw new KnowledgeGuardedReadbackError; + } + response = candidate; + } catch (error51) { + if (error51 instanceof KnowledgeGuardedReadbackError) + throw error51; + if (error51 && typeof error51 === "object" && typeof error51.status === "number") { + throw error51; + } + throw new KnowledgeGuardedReadbackError; + } + if (knowledgeGuardedUtf8Bytes(response) > bounds.max_bytes || response.contract !== KNOWLEDGE_GUARDED_WRITE_CONTRACT || response.exact !== true || response.bounded !== true || response.item_count !== 1 || !response.item || response.item.id !== fullId || !sameBinding(response.binding, this.binding) || canonicalKnowledgeGuardedJson(response.limits) !== canonicalKnowledgeGuardedJson(bounds)) { + throw new KnowledgeGuardedReadbackError; } return response; } @@ -46815,6 +47907,7 @@ export { runKnowledgePrompt, revokeKnowledgePrivateTitleLookupDescriptor, revokeKnowledgePrivateResultDescriptor, + revokeKnowledgePrivateQueryDescriptor, revokeKnowledgePrivateInputDescriptor, revisionIdForSourceRef, retrieveKnowledgeContext, @@ -46907,6 +48000,7 @@ export { createKnowledgeSdk, createKnowledgeProjectPanel, createKnowledgePrivateTitleLookupDescriptor, + createKnowledgePrivateQueryDescriptor, createKnowledgePrivateInputDescriptor, createKnowledgeMachinesAdapter, createKnowledgeGuardedWriter, @@ -46932,6 +48026,10 @@ export { buildKnowledgeAgentContextPack, assertOutboundRequestAllowed, assertKnowledgeTerminalCompleteness, + assertKnowledgeRelationsMetadata, + assertKnowledgePrivateQuerySelector, + assertKnowledgePrivateQueryPage, + assertKnowledgePrivateQueryBounds, assertKnowledgeGuardedPrecondition, assertKnowledgeGuardedPayload, assertKnowledgeGuardedManifestTerminalCompleteness, @@ -46953,9 +48051,11 @@ export { LEGACY_HASNA_KNOWLEDGE_APP_PATH, KnowledgeService, KnowledgePrivateTitleLookupAmbiguousError, + KnowledgePrivateQueryResponseError, KnowledgeNetworkGuardError, KnowledgeGuardedWriteUncertainError, KnowledgeGuardedWriteRejectedError, + KnowledgeGuardedReadbackError, KnowledgeGuardedOperationConflictError, KnowledgeGuardedManifestUncertainError, KnowledgeGuardedManifestStepRefusedError, @@ -46963,6 +48063,7 @@ export { KnowledgeGuardedAdoptionUncertainError, KnowledgeGuardedAdoptionRejectedError, KnowledgeGuardedAdoptionOperationConflictError, + KnowledgeBoundedQueryCapabilityError, KNOWLEDGE_SYNC_TABLES, CURRENT_SCHEMA_VERSION as KNOWLEDGE_SYNC_SCHEMA_VERSION, KNOWLEDGE_SYNC_PROTOCOL_VERSION, @@ -46972,14 +48073,18 @@ export { KNOWLEDGE_STORAGE_MODE_ENV, KNOWLEDGE_SERVE_APP, KNOWLEDGE_RESOURCE, + KNOWLEDGE_RELATIONS_SCHEMA, + KNOWLEDGE_RELATIONS_METADATA_KEY, KNOWLEDGE_PRIVATE_TITLE_LOOKUP_SCHEMA, KNOWLEDGE_PRIVATE_RESULT_SCHEMA, + KNOWLEDGE_PRIVATE_QUERY_SCHEMA, KNOWLEDGE_PRIVATE_INPUT_SCHEMA, KNOWLEDGE_MODE_ENV_KEYS, KNOWLEDGE_MACHINES_ADAPTER_PACKAGE, KNOWLEDGE_MACHINES_ADAPTER_ENTRYPOINT, KNOWLEDGE_MACHINES_ADAPTER_CONTRACT_VERSION, KNOWLEDGE_GUARDED_WRITE_CONTRACT, + KNOWLEDGE_BOUNDED_QUERY_CAPABILITY, KNOWLEDGE_APP_SLUG, KNOWLEDGE_API_URL_ENV_KEYS, KNOWLEDGE_API_KEY_ENV_KEYS, diff --git a/dist/item-store.d.ts b/dist/item-store.d.ts index 7dacc5c..bc33a07 100644 --- a/dist/item-store.d.ts +++ b/dist/item-store.d.ts @@ -35,8 +35,29 @@ export interface ItemUpdateOptions { */ expectedVersion?: number; } +export type ItemArchiveFilter = 'active' | 'archived' | 'all'; +export type ItemListSort = 'created' | 'title'; +export type ItemListDirection = 'asc' | 'desc'; +/** + * Bounded list query shared by the local and hosted transports. + * + * `search` is deliberately a literal case-insensitive match over full id, + * title, and content. Ranked full-text/semantic retrieval is a separate + * producer query and must not change the long-standing `knowledge list` + * compatibility contract. + */ +export interface ItemListOptions { + search?: string; + tags?: string[]; + archive?: ItemArchiveFilter; + sort?: ItemListSort; + direction?: ItemListDirection; + limit?: number; + offset?: number; +} export interface ItemListResult { items: KnowledgeItem[]; + total: number; /** Whether the backing store exists (always true for the API transport). */ exists: boolean; } @@ -63,7 +84,9 @@ export interface ItemStore { readonly exists: boolean; /** Whether this transport retains entry history at all. */ readonly supportsVersions: boolean; - /** Every item including archived; callers filter/sort/paginate. */ + /** Bounded, producer-side list query. */ + list(options?: ItemListOptions): Promise<ItemListResult>; + /** Every item including archived; retained only for genuine bulk operations. */ listAll(): Promise<ItemListResult>; get(idOrShort: string): Promise<KnowledgeItem | null>; create(input: ItemCreateInput): Promise<KnowledgeItem>; diff --git a/dist/query-contract.d.ts b/dist/query-contract.d.ts new file mode 100644 index 0000000..b9da7e8 --- /dev/null +++ b/dist/query-contract.d.ts @@ -0,0 +1,10 @@ +/** + * Response marker proving that the server applied the bounded Knowledge query + * contract. New clients require it whenever an older server could otherwise + * ignore a query field and return a plausible, but semantically wrong, page. + */ +export declare const KNOWLEDGE_BOUNDED_QUERY_CAPABILITY: 'hasna.knowledge.bounded-query.v1'; +export interface KnowledgeBoundedQueryEnvelope { + query_capability: typeof KNOWLEDGE_BOUNDED_QUERY_CAPABILITY; +} +export declare function hasKnowledgeBoundedQueryCapability(value: unknown): value is KnowledgeBoundedQueryEnvelope; diff --git a/dist/sdk.d.ts b/dist/sdk.d.ts index 1e5cb1e..104a833 100644 --- a/dist/sdk.d.ts +++ b/dist/sdk.d.ts @@ -1,6 +1,6 @@ import { KnowledgeService, type KnowledgeServiceOptions } from './service.js'; import type { KnowledgeItem } from './store.js'; -import type { ItemStore, ItemCreateInput, ItemPatch, ItemListResult } from './item-store.js'; +import type { ItemStore, ItemCreateInput, ItemPatch, ItemListOptions, ItemListResult } from './item-store.js'; /** * The unified knowledge-item Store surface, mirrored on the SDK so app code * routes item CRUD through the SAME Store as the CLI and MCP: sqlite uses the @@ -11,7 +11,7 @@ import type { ItemStore, ItemCreateInput, ItemPatch, ItemListResult } from './it export interface KnowledgeItemsSdk { /** The resolved Store for this scope (`kind: 'local' | 'api'`). */ readonly store: () => ItemStore; - readonly list: () => Promise<ItemListResult>; + readonly list: (options?: ItemListOptions) => Promise<ItemListResult>; readonly get: (idOrShort: string) => Promise<KnowledgeItem | null>; readonly create: (input: ItemCreateInput) => Promise<KnowledgeItem>; readonly update: (idOrShort: string, patch: ItemPatch) => Promise<KnowledgeItem | null>; diff --git a/dist/search.d.ts b/dist/search.d.ts index 8f1071d..42b3e54 100644 --- a/dist/search.d.ts +++ b/dist/search.d.ts @@ -90,3 +90,11 @@ export declare function hybridSearchLegacyStore(options: Omit<HybridSearchOption * is reported as skipped rather than silently ignored. */ export declare function hybridSearchItems(items: KnowledgeItem[], options: Omit<HybridSearchOptions, 'dbPath' | 'legacyStorePath'>, baseWarnings?: string[]): Promise<HybridSearchResult>; +/** + * Adapt an already-ranked, bounded producer page into the public hybrid-search + * result shape without fetching or re-ranking the collection in the client. + */ +export declare function hybridSearchFromProducerPage(hits: readonly { + item: KnowledgeItem; + rank: number; +}[], options: Pick<HybridSearchOptions, 'query' | 'limit' | 'offset' | 'semantic'>, warnings?: string[], producerTotal?: number): HybridSearchResult; diff --git a/dist/serve.d.ts b/dist/serve.d.ts index 0d6a25d..4ccc66d 100644 --- a/dist/serve.d.ts +++ b/dist/serve.d.ts @@ -25,8 +25,23 @@ export interface NoteInput { export interface NoteListOptions { limit?: number; offset?: number; - search?: string; - includeArchived?: boolean; + /** Literal case-insensitive id/title/content filter. */ + filter?: string; + /** Repeated raw tag filters; every raw filter narrows the result. */ + tags?: string[]; + archive?: 'active' | 'archived' | 'all'; + sort?: 'created' | 'title'; + direction?: 'asc' | 'desc'; +} +export interface NoteSearchOptions { + query: string; + limit?: number; + offset?: number; + archive?: 'active' | 'archived' | 'all'; +} +export interface NoteSearchHit { + item: KnowledgeItem; + rank: number; } /** * Attribution and concurrency control for a write. `actor`/`reason` are handed @@ -88,6 +103,14 @@ export declare class NoteRepo { items: KnowledgeItem[]; total: number; }>; + /** + * Ranked producer-side PostgreSQL full-text query. This endpoint is separate + * from list filtering so public list compatibility remains literal. + */ + search(options: NoteSearchOptions, guardedTenantId?: string): Promise<{ + items: NoteSearchHit[]; + total: number; + }>; get(idOrShort: string, guardedTenantId?: string): Promise<KnowledgeItem | null>; update(idOrShort: string, patch: Partial<NoteInput> & { archived?: boolean; diff --git a/dist/serve.js b/dist/serve.js index 6e98b57..0218946 100644 --- a/dist/serve.js +++ b/dist/serve.js @@ -1400,7 +1400,10 @@ import { createHash as createHash3, randomUUID as randomUUID2 } from "crypto"; var KNOWLEDGE_GUARDED_WRITE_CONTRACT = "FCAME-1"; var KNOWLEDGE_PRIVATE_INPUT_SCHEMA = "hasna.knowledge.private-input.v1"; var KNOWLEDGE_PRIVATE_TITLE_LOOKUP_SCHEMA = "hasna.knowledge.private-title-lookup.v1"; +var KNOWLEDGE_PRIVATE_QUERY_SCHEMA = "hasna.knowledge.private-query.v1"; var KNOWLEDGE_PRIVATE_RESULT_SCHEMA = "hasna.knowledge.private-result.v1"; +var KNOWLEDGE_RELATIONS_SCHEMA = "hasna.knowledge.relations.v1"; +var KNOWLEDGE_RELATIONS_METADATA_KEY = "hasna_knowledge_relations"; var DEFAULT_KNOWLEDGE_GUARDED_LIMITS = Object.freeze({ submission: Object.freeze({ max_calls: 1, @@ -1426,6 +1429,7 @@ var MAX_GUARDED_WALL_TIME_MS = 30000; var MAX_DESCRIPTOR_LIFETIME_MS = 60 * 60 * 1000; var PRIVATE_PAYLOADS = new WeakMap; var PRIVATE_TITLE_LOOKUPS = new WeakMap; +var PRIVATE_QUERIES = new WeakMap; var PRIVATE_RESULTS = new WeakMap; function assertObjectKeys(value, field, allowed, required = allowed) { if (!value || typeof value !== "object" || Array.isArray(value)) { @@ -1499,6 +1503,92 @@ function assertKnowledgeGuardedBounds(bounds, field = "limits") { throw new Error(`${field}.wall_time_ms must be a positive integer no greater than ${MAX_GUARDED_WALL_TIME_MS}.`); } } +function assertKnowledgePrivateQueryBounds(bounds, field = "query limits") { + assertObjectKeys(bounds, field, ["max_calls", "max_items", "max_bytes", "wall_time_ms"]); + if (bounds.max_calls !== 1) + throw new Error(`${field}.max_calls must be exactly 1.`); + if (!Number.isInteger(bounds.max_items) || bounds.max_items < 1 || bounds.max_items > 50) { + throw new Error(`${field}.max_items must be an integer between 1 and 50.`); + } + if (!Number.isInteger(bounds.max_bytes) || bounds.max_bytes < 1 || bounds.max_bytes > MAX_GUARDED_BYTES) { + throw new Error(`${field}.max_bytes must be a positive integer no greater than ${MAX_GUARDED_BYTES}.`); + } + if (!Number.isInteger(bounds.wall_time_ms) || bounds.wall_time_ms < 1 || bounds.wall_time_ms > MAX_GUARDED_WALL_TIME_MS) { + throw new Error(`${field}.wall_time_ms must be a positive integer no greater than ${MAX_GUARDED_WALL_TIME_MS}.`); + } +} +function assertKnowledgePrivateQueryPage(page, bounds) { + assertObjectKeys(page, "query page", ["limit", "offset"]); + if (!Number.isInteger(page.limit) || page.limit < 1 || page.limit > bounds.max_items) { + throw new Error("query page.limit must be a positive integer no greater than limits.max_items."); + } + if (!Number.isInteger(page.offset) || page.offset < 0 || page.offset > 1e4) { + throw new Error("query page.offset must be an integer between 0 and 10000."); + } +} +function assertKnowledgePrivateQuerySelector(selector) { + if (!selector || typeof selector !== "object" || Array.isArray(selector)) { + throw new Error("private query selector must be an object."); + } + switch (selector.kind) { + case "exact_title": + assertObjectKeys(selector, "private query selector", ["kind", "title"]); + assertBoundText(selector.title, "private query selector.title", 2048); + return; + case "lexical_overlap": + case "semantic_overlap": + assertObjectKeys(selector, "private query selector", ["kind", "query"]); + assertBoundText(selector.query, "private query selector.query", 4096); + return; + case "supersession": + assertObjectKeys(selector, "private query selector", ["kind", "supersedes_item_id"]); + assertBoundText(selector.supersedes_item_id, "private query selector.supersedes_item_id"); + return; + case "current_version": + assertObjectKeys(selector, "private query selector", ["kind", "item_id"]); + assertBoundText(selector.item_id, "private query selector.item_id"); + return; + case "historical_version": + assertObjectKeys(selector, "private query selector", ["kind", "item_id", "version"]); + assertBoundText(selector.item_id, "private query selector.item_id"); + if (!Number.isInteger(selector.version) || selector.version < 1) { + throw new Error("private query selector.version must be a positive integer."); + } + return; + case "canonical_pointer": + assertObjectKeys(selector, "private query selector", ["kind", "canonical_item_id"]); + assertBoundText(selector.canonical_item_id, "private query selector.canonical_item_id"); + return; + default: + throw new Error("private query selector.kind is unsupported."); + } +} +function assertKnowledgeRelationsMetadata(metadata, itemId) { + const raw = metadata[KNOWLEDGE_RELATIONS_METADATA_KEY]; + if (raw === undefined) + return; + assertObjectKeys(raw, `metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}`, ["schema", "supersedes_item_id", "canonical_item_id"], ["schema"]); + if (raw.schema !== KNOWLEDGE_RELATIONS_SCHEMA) { + throw new Error(`metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.schema is unsupported.`); + } + const supersedes = raw.supersedes_item_id; + const canonical = raw.canonical_item_id; + if (supersedes === undefined && canonical === undefined) { + throw new Error(`metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY} must contain at least one pointer.`); + } + if (supersedes !== undefined) { + assertBoundText(supersedes, `metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.supersedes_item_id`); + if (itemId && supersedes === itemId) { + throw new Error("an item cannot supersede itself."); + } + } + if (canonical !== undefined) { + assertBoundText(canonical, `metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.canonical_item_id`); + if (itemId && canonical === itemId) { + throw new Error(`metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.canonical_item_id cannot reference itself.`); + } + } +} function normalizeKnowledgeGuardedLimits(limits = {}) { assertObjectKeys(limits, "limits", ["submission", "reconciliation", "readback"], []); if (limits.submission !== undefined) { @@ -2011,6 +2101,93 @@ function materializeKnowledgePrivateTitleLookup(descriptor) { } return state.title; } +function createKnowledgePrivateQueryDescriptor(options) { + assertBoundText(options.operation_id, "operation_id"); + assertBoundText(options.step_id, "step_id"); + assertKnowledgeGuardedBinding(options.binding); + assertKnowledgePrivateQuerySelector(options.selector); + const archive = options.archive ?? "active"; + if (!["active", "archived", "all"].includes(archive)) { + throw new Error("archive must be active, archived, or all."); + } + const limit = options.limit ?? 10; + const offset = options.offset ?? 0; + const bounds = { + max_calls: 1, + max_items: 50, + max_bytes: 1048576, + wall_time_ms: 1e4 + }; + assertKnowledgePrivateQueryPage({ limit, offset }, bounds); + const expiresIn = options.expires_in_ms ?? 5 * 60 * 1000; + if (!Number.isInteger(expiresIn) || expiresIn < 1 || expiresIn > MAX_DESCRIPTOR_LIFETIME_MS) { + throw new Error(`expires_in_ms must be between 1 and ${MAX_DESCRIPTOR_LIFETIME_MS}.`); + } + const selector = deepFreezeJson(JSON.parse(canonicalKnowledgeGuardedJson(options.selector))); + const selectorDigest = knowledgeGuardedDigest(selector); + const page = Object.freeze({ limit, offset }); + const binding = Object.freeze({ + authority: Object.freeze({ ...options.binding.authority }), + tenant_id: options.binding.tenant_id, + scope: options.binding.scope, + parent_id: options.binding.parent_id + }); + const bindingDigest = knowledgeGuardedDigest({ + binding, + operation_id: options.operation_id, + step_id: options.step_id, + query_kind: selector.kind, + selector_digest: selectorDigest, + archive, + page + }); + const metadata = Object.freeze({ + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + schema: KNOWLEDGE_PRIVATE_QUERY_SCHEMA, + operation_id: options.operation_id, + step_id: options.step_id, + query_kind: selector.kind, + selector_digest: selectorDigest, + binding_digest: bindingDigest, + binding, + archive, + page, + expires_at: new Date(Date.now() + expiresIn).toISOString() + }); + const descriptor = { + ...metadata, + toJSON: () => metadata + }; + Object.defineProperty(descriptor, "descriptor_id", { + value: `kpq_${randomUUID2()}`, + enumerable: false, + configurable: false, + writable: false + }); + Object.freeze(descriptor); + PRIVATE_QUERIES.set(descriptor, { selector, revoked: false }); + return descriptor; +} +function revokeKnowledgePrivateQueryDescriptor(descriptor) { + const state = PRIVATE_QUERIES.get(descriptor); + if (!state) + throw new Error("private query descriptor was not created by @hasna/knowledge."); + state.revoked = true; +} +function materializeKnowledgePrivateQuery(descriptor) { + const state = PRIVATE_QUERIES.get(descriptor); + if (!state) + throw new Error("private query descriptor was not created by @hasna/knowledge."); + if (state.revoked) + throw new Error("private query descriptor has been revoked."); + if (Date.parse(descriptor.expires_at) <= Date.now()) { + throw new Error("private query descriptor has expired."); + } + if (knowledgeGuardedDigest(state.selector) !== descriptor.selector_digest) { + throw new Error("private query descriptor selector digest changed after freeze."); + } + return state.selector; +} function knowledgePrivateItemProof(item) { return Object.freeze({ id: item.id, @@ -2023,11 +2200,39 @@ function knowledgePrivateItemProof(item) { archived: item.archived === true }); } +function knowledgePrivateQueryItemProof(item, matchedValue = null) { + return Object.freeze({ + id_sha256: knowledgeGuardedContentSha256(item.id), + version: Number(item.version ?? 1), + title_sha256: knowledgeGuardedContentSha256(item.title), + content_sha256: knowledgeGuardedContentSha256(item.content), + url_sha256: item.url === null || item.url === undefined ? null : knowledgeGuardedContentSha256(item.url), + tags_sha256: knowledgeGuardedDigest(item.tags ?? []), + metadata_sha256: knowledgeGuardedDigest(item.metadata ?? {}), + archived: item.archived === true, + record_kind: "current", + matched_value_sha256: matchedValue === null ? null : knowledgeGuardedContentSha256(matchedValue) + }); +} +function knowledgePrivateHistoricalQueryItemProof(item, matchedValue = null) { + return Object.freeze({ + id_sha256: knowledgeGuardedContentSha256(item.item_id), + version: item.version, + title_sha256: knowledgeGuardedContentSha256(item.title), + content_sha256: item.content_hash, + url_sha256: item.url === null ? null : knowledgeGuardedContentSha256(item.url), + tags_sha256: knowledgeGuardedDigest(item.tags), + metadata_sha256: knowledgeGuardedDigest(item.metadata), + archived: item.archived, + record_kind: "historical", + matched_value_sha256: matchedValue === null ? null : knowledgeGuardedContentSha256(matchedValue) + }); +} function createKnowledgePrivateResultDescriptor(result, expiresInMs = 5 * 60 * 1000) { if (!Number.isInteger(expiresInMs) || expiresInMs < 1 || expiresInMs > MAX_DESCRIPTOR_LIFETIME_MS) { throw new Error(`expires_in_ms must be between 1 and ${MAX_DESCRIPTOR_LIFETIME_MS}.`); } - const itemCount = result.kind === "title_lookup" ? result.value.item_count : 1; + const itemCount = result.kind === "title_lookup" || result.kind === "query" ? result.value.item_count : 1; const metadata = Object.freeze({ contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, schema: KNOWLEDGE_PRIVATE_RESULT_SCHEMA, @@ -2085,6 +2290,18 @@ function inspectKnowledgePrivateResult(descriptor) { items: Object.freeze([knowledgePrivateItemProof(state.result.value.item)]) }); } + if (state.result.kind === "query") { + return Object.freeze({ + kind: "query", + item_count: state.result.value.item_count, + items: Object.freeze([...state.result.value.items]), + query_kind: state.result.value.query_kind, + status: state.result.value.status, + code: state.result.value.code, + total: state.result.value.total, + page: Object.freeze({ ...state.result.value.page }) + }); + } return Object.freeze({ kind: "title_lookup", item_count: state.result.value.item_count, @@ -2146,6 +2363,12 @@ function knowledgeGuardedUtf8Bytes(value) { return Buffer.byteLength(JSON.stringify(value), "utf8"); } +// src/query-contract.ts +var KNOWLEDGE_BOUNDED_QUERY_CAPABILITY = "hasna.knowledge.bounded-query.v1"; +function hasKnowledgeBoundedQueryCapability(value) { + return Boolean(value && typeof value === "object" && value.query_capability === KNOWLEDGE_BOUNDED_QUERY_CAPABILITY); +} + // src/serve.ts var KNOWLEDGE_SERVE_APP = "knowledge"; function normalizeCloudDatabaseUrl(env = process.env) { @@ -2169,7 +2392,7 @@ function resolveVersion() { const pkg = JSON.parse(readFileSync4(url, "utf8")); return pkg.version ?? "0.0.0"; } catch { - return process.env.npm_package_version ?? "0.0.0"; + return "0.0.0"; } } function resolveSigningSecret(env = process.env) { @@ -2203,6 +2426,13 @@ function parseJsonColumn(value, fallback) { } return value; } +function boundedInteger(value, fallback, field, minimum, maximum) { + const resolved = value ?? fallback; + if (!Number.isFinite(resolved) || !Number.isInteger(resolved) || resolved < minimum || resolved > maximum) { + throw new HttpError(400, `${field} must be an integer between ${minimum} and ${maximum}.`); + } + return resolved; +} function rowToVersion(row) { return { id: String(row.id), @@ -2272,6 +2502,13 @@ class NoteRepo { } const now = new Date().toISOString(); const suppliedId = typeof input.id === "string" ? input.id.trim() : ""; + if (input.metadata) { + try { + assertKnowledgeRelationsMetadata(input.metadata, suppliedId || undefined); + } catch (error) { + throw new HttpError(400, error instanceof Error ? error.message : "invalid relation metadata."); + } + } if (suppliedId) { const guarded = await this.client.get(`SELECT TRUE AS guarded FROM knowledge_items WHERE id = $1 AND authority_classification IS NOT NULL @@ -2317,8 +2554,8 @@ class NoteRepo { return rowToItem(row); } async list(options = {}, guardedTenantId) { - const limit = Math.min(Math.max(options.limit ?? 50, 1), 200); - const offset = Math.max(options.offset ?? 0, 0); + const limit = boundedInteger(options.limit, 50, "limit", 1, 200); + const offset = boundedInteger(options.offset, 0, "offset", 0, 1e4); const params = []; const where = []; if (guardedTenantId) { @@ -2327,21 +2564,88 @@ class NoteRepo { } else { where.push("authority_classification IS NULL"); } - if (!options.includeArchived) + const archive = options.archive ?? "active"; + if (archive === "active") where.push("archived = FALSE"); - const search = options.search?.trim(); - let tsQueryExpr = null; - if (search) { - params.push(search); - tsQueryExpr = `websearch_to_tsquery('english', $${params.length})`; - where.push(`search_vector @@ ${tsQueryExpr}`); + else if (archive === "archived") + where.push("archived = TRUE"); + const filter = options.filter?.trim(); + if (filter) { + params.push(filter); + const position = params.length; + where.push(`(strpos(LOWER(id), LOWER($${position})) > 0 + OR strpos(LOWER(title), LOWER($${position})) > 0 + OR strpos(LOWER(content), LOWER($${position})) > 0)`); + } + for (const raw of options.tags ?? []) { + const whole = raw.trim().toLowerCase(); + const parts = raw.split(",").map((tag) => tag.trim().toLowerCase()).filter(Boolean); + const tagPredicates = []; + if (whole) { + params.push(whole); + tagPredicates.push(`EXISTS ( + SELECT 1 FROM jsonb_array_elements_text(tags) AS item_tag + WHERE LOWER(item_tag) = $${params.length} + )`); + } + if (parts.length > 0) { + const partPredicates = parts.map((part) => { + params.push(part); + return `EXISTS ( + SELECT 1 FROM jsonb_array_elements_text(tags) AS item_tag + WHERE LOWER(item_tag) = $${params.length} + )`; + }); + tagPredicates.push(`(${partPredicates.join(" AND ")})`); + } + if (tagPredicates.length > 0) + where.push(`(${tagPredicates.join(" OR ")})`); } const whereSql = where.length ? `WHERE ${where.join(" AND ")}` : ""; - const orderSql = tsQueryExpr ? `ORDER BY ts_rank_cd(search_vector, ${tsQueryExpr}) DESC, created_at DESC` : "ORDER BY created_at DESC"; + const sortColumn = options.sort === "title" ? "title" : "created_at"; + const direction = options.direction === "desc" ? "DESC" : "ASC"; + const orderSql = `ORDER BY ${sortColumn} ${direction}, id ${direction}`; const totalRow = await this.client.get(`SELECT count(*)::text AS count FROM knowledge_items ${whereSql}`, params); const rows = await this.client.many(`SELECT * FROM knowledge_items ${whereSql} ${orderSql} LIMIT ${limit} OFFSET ${offset}`, params); return { items: rows.map(rowToItem), total: Number(totalRow?.count ?? 0) }; } + async search(options, guardedTenantId) { + const query2 = options.query.trim(); + if (!query2) + throw new HttpError(400, "q is required"); + const limit = boundedInteger(options.limit, 20, "limit", 1, 200); + const offset = boundedInteger(options.offset, 0, "offset", 0, 1e4); + const params = []; + const where = []; + if (guardedTenantId) { + params.push(guardedTenantId); + where.push(`(authority_classification IS NULL OR tenant_id = $${params.length})`); + } else { + where.push("authority_classification IS NULL"); + } + const archive = options.archive ?? "active"; + if (archive === "active") + where.push("archived = FALSE"); + else if (archive === "archived") + where.push("archived = TRUE"); + params.push(query2); + const tsQueryExpr = `websearch_to_tsquery('english', $${params.length})`; + where.push(`search_vector @@ ${tsQueryExpr}`); + const whereSql = `WHERE ${where.join(" AND ")}`; + const totalRow = await this.client.get(`SELECT count(*)::text AS count FROM knowledge_items ${whereSql}`, params); + const rows = await this.client.many(`SELECT *, ts_rank_cd(search_vector, ${tsQueryExpr}) AS search_rank + FROM knowledge_items + ${whereSql} + ORDER BY search_rank DESC, created_at DESC, id ASC + LIMIT ${limit} OFFSET ${offset}`, params); + return { + items: rows.map((row) => ({ + item: rowToItem(row), + rank: Number(row.search_rank ?? 0) + })), + total: Number(totalRow?.count ?? 0) + }; + } async get(idOrShort, guardedTenantId) { const guardedVisibility = guardedTenantId ? "AND (authority_classification IS NULL OR tenant_id = $2)" : "AND authority_classification IS NULL"; const row = await this.client.get(`SELECT * FROM knowledge_items @@ -2354,6 +2658,13 @@ class NoteRepo { const existing = await this.get(idOrShort); if (!existing) return null; + if (patch.metadata !== undefined) { + try { + assertKnowledgeRelationsMetadata(patch.metadata, existing.id); + } catch (error) { + throw new HttpError(400, error instanceof Error ? error.message : "invalid relation metadata."); + } + } const sets = []; const params = []; const push = (col, val, cast = "") => { @@ -2516,6 +2827,15 @@ function rowToGuardedReceipt(row) { function rowMatchesGuardedBinding(row, binding) { return row.authority_classification === binding.authority.classification && row.authority_id === binding.authority.authority_id && row.tenant_id === binding.tenant_id && row.scope === binding.scope && row.parent_id === binding.parent_id; } +function guardedRelationTargets(payload) { + if (!("metadata" in payload) || !payload.metadata) + return []; + const relation = payload.metadata[KNOWLEDGE_RELATIONS_METADATA_KEY]; + if (!relation || typeof relation !== "object" || Array.isArray(relation)) + return []; + const value = relation; + return [value.supersedes_item_id, value.canonical_item_id].filter((target) => typeof target === "string"); +} function rowToManifestStep(row) { return { ordinal: Number(row.ordinal), @@ -3274,6 +3594,32 @@ class GuardedWriteRepo { duplicate: true }; } + for (const targetId of guardedRelationTargets(envelope.payload)) { + const target = await tx.get(`SELECT id FROM knowledge_items + WHERE id = $1 + AND authority_classification = $2 + AND authority_id = $3 + AND tenant_id = $4 + AND scope = $5 + AND parent_id = $6 + LIMIT 1`, [ + targetId, + binding.authority.classification, + binding.authority.authority_id, + binding.tenant_id, + binding.scope, + binding.parent_id + ]); + if (!target) { + const receipt2 = await this.finish(tx, envelope, "rejected", "relation_binding_mismatch", null); + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + deterministic_key: envelope.deterministic_key, + receipt: receipt2, + duplicate: false + }; + } + } if (descriptor.verb === "create") { const payload = envelope.payload; const now = new Date().toISOString(); @@ -3517,6 +3863,162 @@ class GuardedWriteRepo { limits }; } + async query(selector, selectorDigest, archive, page, binding, limits) { + if (selector.kind === "semantic_overlap") { + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + exact: true, + bounded: true, + private: true, + query_kind: selector.kind, + status: "unavailable", + code: "semantic_query_unavailable", + binding, + selector_digest: selectorDigest, + total: 0, + item_count: 0, + page: { + limit: page.limit, + offset: page.offset, + returned: 0, + has_more: false + }, + items: [], + limits + }; + } + const bindingParams = [ + binding.authority.classification, + binding.authority.authority_id, + binding.tenant_id, + binding.scope, + binding.parent_id + ]; + const currentWhere = [ + "authority_classification = $1", + "authority_id = $2", + "tenant_id = $3", + "scope = $4", + "parent_id = $5" + ]; + if (archive === "active") + currentWhere.push("archived = FALSE"); + else if (archive === "archived") + currentWhere.push("archived = TRUE"); + let currentOrder = "ORDER BY id ASC"; + let matchedValue; + if (selector.kind === "historical_version") { + const params = [...bindingParams, selector.item_id, selector.version]; + const historyWhere = [ + "i.authority_classification = $1", + "i.authority_id = $2", + "i.tenant_id = $3", + "i.scope = $4", + "i.parent_id = $5", + "v.item_id = $6", + "v.version = $7" + ]; + if (archive === "active") + historyWhere.push("v.archived = FALSE"); + else if (archive === "archived") + historyWhere.push("v.archived = TRUE"); + const whereSql2 = `WHERE ${historyWhere.join(" AND ")}`; + const totalRow2 = await this.client.get(`SELECT count(*)::text AS count + FROM knowledge_item_versions v + JOIN knowledge_items i ON i.id = v.item_id + ${whereSql2}`, params); + const rows2 = await this.client.many(`SELECT v.* + FROM knowledge_item_versions v + JOIN knowledge_items i ON i.id = v.item_id + ${whereSql2} + ORDER BY v.version ASC + LIMIT ${page.limit} OFFSET ${page.offset}`, params); + const total2 = Number(totalRow2?.count ?? 0); + const items2 = rows2.map((row) => knowledgePrivateHistoricalQueryItemProof(rowToVersion(row), selector.item_id)); + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + exact: true, + bounded: true, + private: true, + query_kind: selector.kind, + status: "available", + code: null, + binding, + selector_digest: selectorDigest, + total: total2, + item_count: items2.length, + page: { + limit: page.limit, + offset: page.offset, + returned: items2.length, + has_more: page.offset + items2.length < total2 + }, + items: items2, + limits + }; + } + switch (selector.kind) { + case "exact_title": + bindingParams.push(selector.title); + currentWhere.push(`title = $${bindingParams.length}`); + matchedValue = selector.title; + break; + case "lexical_overlap": { + bindingParams.push(selector.query); + const tsQuery = `websearch_to_tsquery('english', $${bindingParams.length})`; + currentWhere.push(`search_vector @@ ${tsQuery}`); + currentOrder = `ORDER BY ts_rank_cd(search_vector, ${tsQuery}) DESC, id ASC`; + matchedValue = selector.query; + break; + } + case "supersession": + bindingParams.push(KNOWLEDGE_RELATIONS_SCHEMA, selector.supersedes_item_id); + currentWhere.push(`metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},schema}' = $${bindingParams.length - 1}`, `metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},supersedes_item_id}' = $${bindingParams.length}`); + matchedValue = selector.supersedes_item_id; + break; + case "current_version": + bindingParams.push(selector.item_id); + currentWhere.push(`id = $${bindingParams.length}`); + matchedValue = selector.item_id; + break; + case "canonical_pointer": + bindingParams.push(KNOWLEDGE_RELATIONS_SCHEMA, selector.canonical_item_id); + currentWhere.push(`metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},schema}' = $${bindingParams.length - 1}`, `metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},canonical_item_id}' = $${bindingParams.length}`); + matchedValue = selector.canonical_item_id; + break; + default: + throw new HttpError(400, "private query selector kind is unsupported."); + } + const whereSql = `WHERE ${currentWhere.join(" AND ")}`; + const totalRow = await this.client.get(`SELECT count(*)::text AS count FROM knowledge_items ${whereSql}`, bindingParams); + const rows = await this.client.many(`SELECT * FROM knowledge_items + ${whereSql} + ${currentOrder} + LIMIT ${page.limit} OFFSET ${page.offset}`, bindingParams); + const total = Number(totalRow?.count ?? 0); + const items = rows.map((row) => knowledgePrivateQueryItemProof(rowToItem(row), matchedValue)); + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + exact: true, + bounded: true, + private: true, + query_kind: selector.kind, + status: "available", + code: null, + binding, + selector_digest: selectorDigest, + total, + item_count: items.length, + page: { + limit: page.limit, + offset: page.offset, + returned: items.length, + has_more: page.offset + items.length < total + }, + items, + limits + }; + } async readback(fullId, binding, limits) { const row = await this.client.get(`SELECT * FROM knowledge_items WHERE id = $1 @@ -3777,9 +4279,35 @@ function knowledgeOpenApi(version) { type: "object", properties: { items: { type: "array", items: { $ref: "#/components/schemas/Note" } }, - total: { type: "integer" } + total: { type: "integer" }, + query_capability: { + type: "string", + enum: [KNOWLEDGE_BOUNDED_QUERY_CAPABILITY] + } }, - required: ["items", "total"] + required: ["items", "total", "query_capability"] + }, + NoteSearchList: { + type: "object", + properties: { + items: { + type: "array", + items: { + type: "object", + properties: { + item: { $ref: "#/components/schemas/Note" }, + rank: { type: "number" } + }, + required: ["item", "rank"] + } + }, + total: { type: "integer" }, + query_capability: { + type: "string", + enum: [KNOWLEDGE_BOUNDED_QUERY_CAPABILITY] + } + }, + required: ["items", "total", "query_capability"] }, NoteVersionList: { type: "object", @@ -3798,14 +4326,42 @@ function knowledgeOpenApi(version) { "/v1/notes": { get: { operationId: "listNotes", - summary: "List knowledge items", + summary: "List knowledge items with literal filters and bounded paging", parameters: [ { name: "limit", in: "query", schema: { type: "integer" } }, { name: "offset", in: "query", schema: { type: "integer" } }, - { name: "search", in: "query", schema: { type: "string" } } + { name: "filter", in: "query", schema: { type: "string" } }, + { + name: "search", + in: "query", + deprecated: true, + description: "Legacy alias for filter.", + schema: { type: "string" } + }, + { + name: "tags", + in: "query", + style: "form", + explode: true, + schema: { type: "array", items: { type: "string" } } + }, + { name: "archive", in: "query", schema: { type: "string", enum: ["active", "archived", "all"] } }, + { + name: "includeArchived", + in: "query", + deprecated: true, + description: "Legacy alias: true maps to archive=all.", + schema: { type: "boolean" } + }, + { name: "sort", in: "query", schema: { type: "string", enum: ["created", "title"] } }, + { name: "direction", in: "query", schema: { type: "string", enum: ["asc", "desc"] } } ], responses: { - "200": { content: { "application/json": { schema: { $ref: "#/components/schemas/NoteList" } } } } + "200": { + content: { + "application/json": { schema: { $ref: "#/components/schemas/NoteList" } } + } + } } }, post: { @@ -3820,6 +4376,25 @@ function knowledgeOpenApi(version) { } } }, + "/v1/notes/search": { + get: { + operationId: "searchNotes", + summary: "Ranked PostgreSQL full-text query with bounded paging", + parameters: [ + { name: "q", in: "query", required: true, schema: { type: "string" } }, + { name: "limit", in: "query", schema: { type: "integer" } }, + { name: "offset", in: "query", schema: { type: "integer" } }, + { name: "archive", in: "query", schema: { type: "string", enum: ["active", "archived", "all"] } } + ], + responses: { + "200": { + content: { + "application/json": { schema: { $ref: "#/components/schemas/NoteSearchList" } } + } + } + } + } + }, "/v1/notes/{id}": { get: { operationId: "getNote", @@ -3978,6 +4553,29 @@ function knowledgeOpenApi(version) { } } }, + "/v1/guarded-writes/queries": { + post: { + operationId: "queryGuardedKnowledge", + summary: "Bounded private Knowledge query under one frozen FCAME-1 binding", + description: "The raw selector exists only in this authenticated request body. " + "The response contains hashes, versions, page evidence, and no raw selector or item id.", + requestBody: { + required: true, + content: { + "application/json": { + schema: { + type: "object", + required: ["contract", "descriptor", "selector", "limits"], + additionalProperties: false + } + } + } + }, + responses: { + "200": { description: "Exact bounded private result or typed semantic unavailability." }, + "400": { description: "Descriptor, selector, binding digest, page, or bounds mismatch." } + } + } + }, "/v1/guarded-writes/receipts/{deterministicKey}": { get: { operationId: "reconcileGuardedKnowledgeWrite", @@ -4103,6 +4701,20 @@ function guardedBoundsFromHeaders(req) { } return bounds; } +function privateQueryBoundsFromHeaders(req) { + const bounds = { + max_calls: parsePositiveInteger(req.headers.get("x-knowledge-max-calls"), "x-knowledge-max-calls"), + max_items: parsePositiveInteger(req.headers.get("x-knowledge-max-items"), "x-knowledge-max-items"), + max_bytes: parsePositiveInteger(req.headers.get("x-knowledge-max-bytes"), "x-knowledge-max-bytes"), + wall_time_ms: parsePositiveInteger(req.headers.get("x-knowledge-wall-time-ms"), "x-knowledge-wall-time-ms") + }; + try { + assertKnowledgePrivateQueryBounds(bounds); + } catch (error) { + throw new HttpError(400, error instanceof Error ? error.message : "invalid private query bounds."); + } + return bounds; +} function guardedBoundsFromQuery(req, url) { const fromHeaders = guardedBoundsFromHeaders(req); const fromQuery = { @@ -4229,6 +4841,9 @@ function validateGuardedEnvelope(value, headerBounds, authority, idempotencyKey) assertConfiguredAuthority(descriptor.binding, authority); assertKnowledgeGuardedPrecondition(descriptor.verb, descriptor.precondition); assertKnowledgeGuardedPayload(descriptor.verb, envelope.payload); + if ("metadata" in envelope.payload && envelope.payload.metadata) { + assertKnowledgeRelationsMetadata(envelope.payload.metadata, descriptor.target_id); + } const limits = normalizeKnowledgeGuardedLimits(envelope.limits); if (canonicalKnowledgeGuardedJson(limits) !== canonicalKnowledgeGuardedJson(envelope.limits)) { throw new Error("guarded-write limits must be explicit and complete."); @@ -4337,6 +4952,78 @@ function validatePrivateTitleLookupEnvelope(value, headerBounds, authority) { throw new HttpError(400, error instanceof Error ? error.message : "invalid private title lookup envelope."); } } +function validatePrivateQueryEnvelope(value, headerBounds, authority) { + try { + if (!value || typeof value !== "object") { + throw new Error("private query envelope is required."); + } + const envelope = value; + assertExactRequestKeys(value, "private query envelope", ["contract", "descriptor", "selector", "limits"]); + if (envelope.contract !== KNOWLEDGE_GUARDED_WRITE_CONTRACT) { + throw new Error("unsupported guarded-write contract."); + } + const descriptor = envelope.descriptor; + if (!descriptor || descriptor.contract !== KNOWLEDGE_GUARDED_WRITE_CONTRACT || descriptor.schema !== KNOWLEDGE_PRIVATE_QUERY_SCHEMA) { + throw new Error("invalid private query descriptor schema."); + } + assertExactRequestKeys(descriptor, "private query descriptor", [ + "contract", + "schema", + "operation_id", + "step_id", + "query_kind", + "selector_digest", + "binding_digest", + "binding", + "archive", + "page", + "expires_at" + ]); + if (typeof descriptor.operation_id !== "string" || descriptor.operation_id.length === 0 || typeof descriptor.step_id !== "string" || descriptor.step_id.length === 0 || !["active", "archived", "all"].includes(descriptor.archive)) { + throw new Error("private query operation, step, and archive mode are required."); + } + const descriptorExpiresAt = Date.parse(descriptor.expires_at); + const descriptorNow = Date.now(); + if (!Number.isFinite(descriptorExpiresAt) || descriptorExpiresAt <= descriptorNow || descriptorExpiresAt > descriptorNow + 60 * 60 * 1000) { + throw new Error("private query descriptor is expired or malformed."); + } + assertKnowledgeGuardedBinding(descriptor.binding); + assertConfiguredAuthority(descriptor.binding, authority); + assertKnowledgePrivateQueryBounds(envelope.limits); + assertKnowledgePrivateQueryPage(descriptor.page, envelope.limits); + if (canonicalKnowledgeGuardedJson(envelope.limits) !== canonicalKnowledgeGuardedJson(headerBounds)) { + throw new Error("private query limits must exactly match the producer bound headers."); + } + assertKnowledgePrivateQuerySelector(envelope.selector); + if (envelope.selector.kind !== descriptor.query_kind) { + throw new Error("private query selector kind does not match the frozen descriptor."); + } + const selectorDigest = knowledgeGuardedDigest(envelope.selector); + if (selectorDigest !== descriptor.selector_digest) { + throw new Error("private query selector digest does not match the frozen descriptor."); + } + const bindingDigest = knowledgeGuardedDigest({ + binding: descriptor.binding, + operation_id: descriptor.operation_id, + step_id: descriptor.step_id, + query_kind: descriptor.query_kind, + selector_digest: descriptor.selector_digest, + archive: descriptor.archive, + page: descriptor.page + }); + if (bindingDigest !== descriptor.binding_digest) { + throw new Error("private query binding digest does not match."); + } + if (knowledgeGuardedUtf8Bytes(envelope) > headerBounds.max_bytes) { + throw new Error("private query envelope exceeds the producer byte cap."); + } + return envelope; + } catch (error) { + if (error instanceof HttpError) + throw error; + throw new HttpError(400, error instanceof Error ? error.message : "invalid private query envelope."); + } +} function validateGuardedAdoptionEnvelope(value, headerBounds, authority, idempotencyKey) { try { if (!value || typeof value !== "object") { @@ -4653,6 +5340,24 @@ function createServeHandler(deps) { throw error; } } + if (path === "/v1/guarded-writes/queries" && method === "POST") { + if (!guardedRepo) { + return json({ error: "guarded_authority_unconfigured" }, 503); + } + const startedAt = Date.now(); + const tenantId = req.headers.get("x-knowledge-tenant-id"); + if (!tenantId) + throw new HttpError(400, "x-knowledge-tenant-id is required."); + await authOrThrow(req, ["knowledge:read"], tenantId); + const bounds = privateQueryBoundsFromHeaders(req); + const raw = await readBoundedJson(req, bounds, startedAt); + const envelope = validatePrivateQueryEnvelope(raw, bounds, guardedRepo.authority); + if (envelope.descriptor.binding.tenant_id !== tenantId) { + throw new HttpError(403, "descriptor tenant does not match the authenticated request tenant."); + } + const result = await guardedRepo.query(envelope.selector, envelope.descriptor.selector_digest, envelope.descriptor.archive, envelope.descriptor.page, envelope.descriptor.binding, bounds); + return boundedJson(result, 200, bounds, startedAt); + } const guardedReceiptMatch = path.match(/^\/v1\/guarded-writes\/receipts\/([^/]+)$/); if (guardedReceiptMatch) { if (method !== "GET") @@ -4686,16 +5391,50 @@ function createServeHandler(deps) { const readback = await guardedRepo.readback(decodeURIComponent(guardedItemMatch[1]), binding, bounds); return readback ? boundedJson(readback, 200, bounds, startedAt) : boundedJson({ error: "not_found" }, 404, bounds, startedAt); } + if (path === "/v1/notes/search") { + if (method !== "GET") + return json({ error: "method_not_allowed" }, 405); + const principal = await authOrThrow(req, ["knowledge:read"]); + const query2 = url.searchParams.get("q") ?? ""; + const archiveRaw = url.searchParams.get("archive") ?? "active"; + if (!["active", "archived", "all"].includes(archiveRaw)) { + throw new HttpError(400, "archive must be active, archived, or all."); + } + const result = await repo.search({ + query: query2, + archive: archiveRaw, + limit: url.searchParams.has("limit") ? Number(url.searchParams.get("limit")) : undefined, + offset: url.searchParams.has("offset") ? Number(url.searchParams.get("offset")) : undefined + }, principal.tid); + return json({ ...result, query_capability: KNOWLEDGE_BOUNDED_QUERY_CAPABILITY }); + } if (path === "/v1/notes") { if (method === "GET") { const principal = await authOrThrow(req, ["knowledge:read"]); + const includeArchived = url.searchParams.get("includeArchived") === "true"; + const archiveRaw = url.searchParams.get("archive") ?? (includeArchived ? "all" : "active"); + const sortRaw = url.searchParams.get("sort") ?? "created"; + const directionRaw = url.searchParams.get("direction") ?? "asc"; + if (!["active", "archived", "all"].includes(archiveRaw)) { + throw new HttpError(400, "archive must be active, archived, or all."); + } + if (!["created", "title"].includes(sortRaw)) { + throw new HttpError(400, "sort must be created or title."); + } + if (!["asc", "desc"].includes(directionRaw)) { + throw new HttpError(400, "direction must be asc or desc."); + } + const tags = url.searchParams.getAll("tags"); const result = await repo.list({ limit: url.searchParams.has("limit") ? Number(url.searchParams.get("limit")) : undefined, offset: url.searchParams.has("offset") ? Number(url.searchParams.get("offset")) : undefined, - search: url.searchParams.get("search") ?? undefined, - includeArchived: url.searchParams.get("includeArchived") === "true" + filter: url.searchParams.get("filter") ?? url.searchParams.get("search") ?? undefined, + tags: tags.length > 0 ? tags : undefined, + archive: archiveRaw, + sort: sortRaw, + direction: directionRaw }, principal.tid); - return json(result); + return json({ ...result, query_capability: KNOWLEDGE_BOUNDED_QUERY_CAPABILITY }); } if (method === "POST") { const principal = await authOrThrow(req, ["knowledge:write"]); diff --git a/dist/service.d.ts b/dist/service.d.ts index 8f07559..5b983d1 100644 --- a/dist/service.d.ts +++ b/dist/service.d.ts @@ -17,7 +17,7 @@ import { type KnowledgeSyncConflict, type KnowledgeSyncConflictResolutionProposa import { type WikiCompileOptions } from './wiki-compiler'; import { type StorageContract, type StorageValidationResult } from './storage-contract'; import { type KnowledgeItem } from './store'; -import { type ItemStore, type ItemCreateInput, type ItemPatch, type ItemListResult } from './item-store'; +import { type ItemStore, type ItemCreateInput, type ItemPatch, type ItemListOptions, type ItemListResult } from './item-store'; import { type KnowledgeConfig, type KnowledgeWorkspace } from './workspace'; import { type KnowledgeLegacyWorkspaceMergeResult, type KnowledgeLegacyWorkspaceMigrationResult } from './workspace-migration'; export interface KnowledgeServiceOptions { @@ -354,6 +354,10 @@ export type KnowledgeSyncConflictResolveResult = { audit_event_id: string; message: string; }; +export declare class KnowledgeSemanticSearchUnavailableError extends Error { + readonly code = "semantic_query_unavailable"; + constructor(); +} export declare class KnowledgeService { private readonly options; private ensuredWorkspace?; @@ -371,8 +375,8 @@ export declare class KnowledgeService { * surface, so no path touches sqlite or the raw HTTP client directly. */ itemStore(): ItemStore; - /** List every knowledge item (including archived) via the unified Store. */ - listItems(): Promise<ItemListResult>; + /** Bounded list query via the unified Store. */ + listItems(options?: ItemListOptions): Promise<ItemListResult>; /** Fetch one knowledge item by id or short id via the unified Store. */ getItem(idOrShort: string): Promise<KnowledgeItem | null>; /** Create (or upsert on a caller-supplied id) an item via the unified Store. */ @@ -516,15 +520,10 @@ export declare class KnowledgeService { /** True when the client-flip resolves to the cloud HTTP transport. In api mode * the shared corpus is the cloud knowledge-items, not a local sqlite catalog. */ private isApiMode; + private cloudStore; /** Fetch the entire shared knowledge-item corpus from the cloud (api mode). */ private fetchCloudItems; - semanticSearch(options: Omit<EmbeddingSearchOptions, 'dbPath' | 'config'>): Promise<import("./embeddings").SemanticSearchResult | { - provider: 'openai'; - model: string; - dimensions: number; - query: string; - results: import("./search").HybridSearchEntry[]; - }>; + semanticSearch(options: Omit<EmbeddingSearchOptions, 'dbPath' | 'config'>): Promise<import("./embeddings").SemanticSearchResult>; search(options: Omit<HybridSearchOptions, 'dbPath' | 'config'>): Promise<HybridSearchResult>; retrieveContext(options: Omit<RetrievalOptions, 'dbPath' | 'config'>): Promise<KnowledgeContextPack>; contextPack(options: Omit<KnowledgeAgentContextPackOptions, 'dbPath' | 'config' | 'safetyPolicy'>): Promise<KnowledgeAgentContextPack>; diff --git a/dist/storage.js b/dist/storage.js index 46bd824..d4617b7 100644 --- a/dist/storage.js +++ b/dist/storage.js @@ -1659,6 +1659,12 @@ function knowledgeModeReport(env = process.env) { }; } +// src/query-contract.ts +var KNOWLEDGE_BOUNDED_QUERY_CAPABILITY = "hasna.knowledge.bounded-query.v1"; +function hasKnowledgeBoundedQueryCapability(value) { + return Boolean(value && typeof value === "object" && value.query_capability === KNOWLEDGE_BOUNDED_QUERY_CAPABILITY); +} + // src/cloud-store.ts function transportOverrides(env) { return { @@ -1679,33 +1685,95 @@ class KnowledgeVersionConflictError extends Error { this.name = "KnowledgeVersionConflictError"; } } + +class KnowledgeBoundedQueryCapabilityError extends Error { + operation; + fields; + code = "bounded_query_capability_required"; + constructor(operation, fields) { + super(`bounded_query_capability_required: the Knowledge server did not prove support for ${operation} field(s): ` + `${fields.join(", ")}. Refusing to accept a possibly unfiltered response; update the server and retry.`); + this.operation = operation; + this.fields = fields; + this.name = "KnowledgeBoundedQueryCapabilityError"; + } +} function toQuery(options) { const q = {}; - if (options.search) + if (options.search) { + q.filter = options.search; q.search = options.search; + } + if (options.tags?.length) + q.tags = options.tags; + if (options.archive) { + q.archive = options.archive; + if (options.archive === "all") + q.includeArchived = true; + } + if (options.sort) + q.sort = options.sort; + if (options.direction) + q.direction = options.direction; if (options.limit !== undefined) q.limit = options.limit; if (options.offset !== undefined) q.offset = options.offset; - if (options.includeArchived || options.archivedOnly) - q.includeArchived = true; return q; } +function listFieldsRequiringCapability(options) { + const fields = []; + if (options.tags?.length) + fields.push("tags"); + if (options.sort !== undefined) + fields.push("sort"); + if (options.direction !== undefined) + fields.push("direction"); + if (options.archive === "archived") + fields.push("archive=archived"); + return fields; +} +function boundedQueryInteger(value, fallback, field, minimum, maximum) { + const resolved = value ?? fallback; + if (!Number.isFinite(resolved) || !Number.isInteger(resolved) || resolved < minimum || resolved > maximum) { + throw new Error(`${field} must be an integer between ${minimum} and ${maximum}.`); + } + return resolved; +} function wrap(client) { return { baseUrl: client.baseUrl, async list(options = {}) { - const wantLimit = options.limit ?? 200; - const query2 = toQuery({ ...options, limit: Math.min(Math.max(wantLimit, 1), 200) }); + const limit = boundedQueryInteger(options.limit, 200, "limit", 1, 200); + const offset = boundedQueryInteger(options.offset, 0, "offset", 0, 1e4); + const query2 = toQuery({ ...options, limit, offset }); const res = await client.list(KNOWLEDGE_RESOURCE, { query: query2 }); - let items = res.items; - if (options.archivedOnly) - items = items.filter((x) => x.archived === true); - if (options.tag) { - const t = options.tag.toLowerCase(); - items = items.filter((x) => (x.tags ?? []).some((tag) => tag.toLowerCase() === t)); + if (!Number.isInteger(res.total) || Number(res.total) < 0) { + throw new Error("knowledge cloud list response is missing a valid producer total."); + } + const requiredFields = listFieldsRequiringCapability(options); + if (requiredFields.length > 0 && !hasKnowledgeBoundedQueryCapability(res.raw)) { + throw new KnowledgeBoundedQueryCapabilityError("list", requiredFields); } - return { items, total: res.total }; + return { items: res.items, total: Number(res.total) }; + }, + async search(options) { + const limit = boundedQueryInteger(options.limit, 20, "limit", 1, 200); + const offset = boundedQueryInteger(options.offset, 0, "offset", 0, 1e4); + const response = await client.transport.get(`/${KNOWLEDGE_RESOURCE}/search`, { + query: { + q: options.query, + archive: options.archive ?? "active", + limit, + offset + } + }); + if (!Number.isInteger(response.total) || response.total < 0 || !Array.isArray(response.items) || response.items.some((hit) => !hit || typeof hit !== "object" || !hit.item || typeof hit.rank !== "number" || !Number.isFinite(hit.rank))) { + throw new Error("knowledge cloud search response is missing producer rank or total evidence."); + } + if (!hasKnowledgeBoundedQueryCapability(response)) { + throw new KnowledgeBoundedQueryCapabilityError("search", ["q", "rank", "total"]); + } + return { items: response.items, total: response.total }; }, async get(idOrShort) { return client.get(KNOWLEDGE_RESOURCE, idOrShort); @@ -1816,7 +1884,7 @@ async function fetchAllCloudItems(store) { const pageSize = 200; const all = []; for (let offset = 0;; offset += pageSize) { - const { items } = await store.list({ includeArchived: true, limit: pageSize, offset }); + const { items } = await store.list({ archive: "all", limit: pageSize, offset }); all.push(...items); if (items.length < pageSize) break; @@ -3816,7 +3884,60 @@ var PG_MIGRATIONS = [ BEFORE UPDATE OF id ON knowledge_items FOR EACH ROW EXECUTE FUNCTION knowledge_guarded_item_id_immutable()`, `ALTER TABLE knowledge_items - ENABLE ALWAYS TRIGGER trg_knowledge_guarded_00_item_id_immutable` + ENABLE ALWAYS TRIGGER trg_knowledge_guarded_00_item_id_immutable`, + `ALTER TABLE knowledge_items + DROP CONSTRAINT IF EXISTS knowledge_items_relation_metadata_contract`, + `ALTER TABLE knowledge_items + ADD CONSTRAINT knowledge_items_relation_metadata_contract CHECK ( + metadata -> 'hasna_knowledge_relations' IS NULL + OR ( + jsonb_typeof(metadata -> 'hasna_knowledge_relations') = 'object' + AND metadata #>> '{hasna_knowledge_relations,schema}' = 'hasna.knowledge.relations.v1' + AND ( + metadata #>> '{hasna_knowledge_relations,supersedes_item_id}' IS NOT NULL + OR metadata #>> '{hasna_knowledge_relations,canonical_item_id}' IS NOT NULL + ) + AND ( + (metadata -> 'hasna_knowledge_relations') + - ARRAY['schema', 'supersedes_item_id', 'canonical_item_id'] + ) = '{}'::jsonb + AND ( + metadata #>> '{hasna_knowledge_relations,supersedes_item_id}' IS NULL + OR ( + btrim(metadata #>> '{hasna_knowledge_relations,supersedes_item_id}') <> '' + AND metadata #>> '{hasna_knowledge_relations,supersedes_item_id}' <> id + ) + ) + AND ( + metadata #>> '{hasna_knowledge_relations,canonical_item_id}' IS NULL + OR ( + btrim(metadata #>> '{hasna_knowledge_relations,canonical_item_id}') <> '' + AND metadata #>> '{hasna_knowledge_relations,canonical_item_id}' <> id + ) + ) + ) + )`, + `CREATE INDEX IF NOT EXISTS idx_knowledge_items_guarded_title + ON knowledge_items ( + authority_classification, authority_id, tenant_id, scope, parent_id, + title, archived, id + )`, + `CREATE INDEX IF NOT EXISTS idx_knowledge_items_guarded_supersedes + ON knowledge_items ( + authority_classification, authority_id, tenant_id, scope, parent_id, + (metadata #>> '{hasna_knowledge_relations,supersedes_item_id}'), + archived, id + ) + WHERE metadata #>> '{hasna_knowledge_relations,schema}' + = 'hasna.knowledge.relations.v1'`, + `CREATE INDEX IF NOT EXISTS idx_knowledge_items_guarded_canonical + ON knowledge_items ( + authority_classification, authority_id, tenant_id, scope, parent_id, + (metadata #>> '{hasna_knowledge_relations,canonical_item_id}'), + archived, id + ) + WHERE metadata #>> '{hasna_knowledge_relations,schema}' + = 'hasna.knowledge.relations.v1'` ]; export { wrapExecutor, diff --git a/package.json b/package.json index 766977c..a0d9000 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "bin", "dist", "scripts/apply-cloud-migrations.mjs", + "scripts/live-private-query.mjs", "scripts/lib/remote-temp-dir.mjs", "scripts/smoke-machine-sync-release.mjs", "scripts/smoke-machines-adapter.mjs", @@ -54,6 +55,7 @@ "smoke:machine-sync-release": "bun scripts/smoke-machine-sync-release.mjs", "smoke:open-files-installed-boundary": "bun scripts/smoke-open-files-installed-boundary.mjs", "migrate:cloud": "bun scripts/apply-cloud-migrations.mjs", + "live:private-query": "bun scripts/live-private-query.mjs", "serve": "bun src/serve-entry.ts", "verify:generated": "bun scripts/verify-generated-artifacts.mjs", "contracts:conformance": "contracts conformance fixtures", diff --git a/scripts/live-private-query.mjs b/scripts/live-private-query.mjs new file mode 100644 index 0000000..0b49ea4 --- /dev/null +++ b/scripts/live-private-query.mjs @@ -0,0 +1,91 @@ +#!/usr/bin/env bun +import { randomUUID } from 'node:crypto'; +import { + createKnowledgeGuardedWriter, + createKnowledgePrivateQueryDescriptor, + inspectKnowledgePrivateResult, +} from '../dist/index.js'; + +const PASS = 'PRIVATE_QUERY_ACCEPTANCE PASS bounded=true private=true requests=1 limit=2'; +const FAIL = 'PRIVATE_QUERY_ACCEPTANCE FAIL'; + +function required(name) { + const value = process.env[name]?.trim(); + if (!value) throw new Error('missing live private-query configuration'); + return value; +} + +async function main() { + const binding = { + authority: { + classification: required('HASNA_KNOWLEDGE_AUTHORITY_CLASSIFICATION'), + authority_id: required('HASNA_KNOWLEDGE_AUTHORITY_ID'), + }, + tenant_id: required('HASNA_KNOWLEDGE_PRIVATE_QUERY_TENANT_ID'), + scope: process.env.HASNA_KNOWLEDGE_PRIVATE_QUERY_SCOPE?.trim() || 'global', + parent_id: process.env.HASNA_KNOWLEDGE_PRIVATE_QUERY_PARENT_ID?.trim() || 'global:global', + }; + + // The selector is created only in process memory. It is not accepted through + // argv, environment, stdin, or a file, and no serialized or error surface + // contains it. A guaranteed-absent random exact title is a live negative + // control for the authenticated producer route. + const privateSelector = `knowledge-private-query-live-${randomUUID()}`; + const descriptor = createKnowledgePrivateQueryDescriptor({ + operation_id: `live-private-query-${randomUUID()}`, + step_id: 'bounded-private-query', + binding, + selector: { kind: 'exact_title', title: privateSelector }, + archive: 'all', + limit: 2, + offset: 0, + }); + + const originalFetch = globalThis.fetch; + let requests = 0; + globalThis.fetch = async (input, init) => { + const url = new URL( + typeof input === 'string' || input instanceof URL ? input : input.url, + ); + if (url.pathname === '/v1/guarded-writes/queries') requests += 1; + return originalFetch(input, init); + }; + + try { + const result = await createKnowledgeGuardedWriter({ binding }).query(descriptor, { + max_calls: 1, + max_items: 2, + max_bytes: 1_048_576, + wall_time_ms: 10_000, + }); + const proof = inspectKnowledgePrivateResult(result); + const serialized = [ + JSON.stringify(descriptor), + JSON.stringify(result), + JSON.stringify(proof), + ].join('\n'); + if ( + requests !== 1 + || proof.kind !== 'query' + || proof.query_kind !== 'exact_title' + || proof.item_count !== 0 + || proof.total !== 0 + || proof.page?.limit !== 2 + || proof.page?.offset !== 0 + || proof.page?.returned !== 0 + || proof.page?.has_more !== false + || serialized.includes(privateSelector) + || serialized.includes(descriptor.descriptor_id) + ) { + throw new Error('live private-query acceptance mismatch'); + } + console.log(PASS); + } finally { + globalThis.fetch = originalFetch; + } +} + +main().catch(() => { + console.error(FAIL); + process.exitCode = 1; +}); diff --git a/scripts/validate-public-package.mjs b/scripts/validate-public-package.mjs index bd46e86..41aecba 100644 --- a/scripts/validate-public-package.mjs +++ b/scripts/validate-public-package.mjs @@ -21,6 +21,7 @@ const publicDocs = [ const publicScripts = [ 'scripts/apply-cloud-migrations.mjs', 'scripts/lib/remote-temp-dir.mjs', + 'scripts/live-private-query.mjs', 'scripts/smoke-machine-sync-release.mjs', 'scripts/smoke-machines-adapter.mjs', 'scripts/smoke-open-files-installed-boundary.mjs', diff --git a/src/agent.ts b/src/agent.ts index 3c75df9..a716801 100644 --- a/src/agent.ts +++ b/src/agent.ts @@ -1,7 +1,14 @@ import { randomUUID } from 'node:crypto'; import { migrateKnowledgeDb, openKnowledgeDb } from './knowledge-db'; import { languageModelFor, normalizeAiSdkUsage, parseModelRef, recordProviderUsage, resolveModelRef } from './providers'; -import { retrieveKnowledgeContext, retrieveKnowledgeContextFromItems, type KnowledgeContextPack, type RetrievalOptions } from './retrieval'; +import { + retrieveKnowledgeContext, + retrieveKnowledgeContextFromItems, + retrieveKnowledgeContextFromSearch, + type KnowledgeContextPack, + type RetrievalOptions, +} from './retrieval'; +import type { HybridSearchResult } from './search'; import type { KnowledgeItem } from './store'; import type { KnowledgeConfig } from './workspace'; @@ -380,6 +387,7 @@ export interface KnowledgePromptOverItemsOptions export async function runKnowledgePromptOverItems( items: KnowledgeItem[], options: KnowledgePromptOverItemsOptions, + producerSearch?: HybridSearchResult, ): Promise<KnowledgePromptResult> { const prompt = options.prompt.trim(); if (!prompt) throw new Error('Knowledge prompt is required.'); @@ -388,10 +396,12 @@ export async function runKnowledgePromptOverItems( const parsed = parseModelRef(modelRef); const { prompt: _p, generate: _g, approveWrite: _a, now: _n, ...retrievalOptions } = options; - const context = await retrieveKnowledgeContextFromItems(items, { - ...retrievalOptions, - query: prompt, - }); + const context = producerSearch + ? retrieveKnowledgeContextFromSearch(producerSearch, { contextChars: options.contextChars }) + : await retrieveKnowledgeContextFromItems(items, { + ...retrievalOptions, + query: prompt, + }); let answer = localAnswer(prompt, context); let generated = false; diff --git a/src/cli.ts b/src/cli.ts index a0d061e..4a3bcdf 100755 --- a/src/cli.ts +++ b/src/cli.ts @@ -1939,9 +1939,20 @@ async function run(argv: string[]): Promise<void> { if (flags.format !== undefined && flags.format !== 'table' && flags.format !== 'json') { throw new Error("Invalid --format value for list. Use 'table' or 'json'."); } - const db = await itemStore.listAll(); - const page = Number.isFinite(flags.page) && (flags.page as number) > 0 ? flags.page as number : 1; - const limit = Number.isFinite(flags.limit) && (flags.limit as number) > 0 ? flags.limit as number : 20; + if ( + flags.page !== undefined + && (!Number.isFinite(flags.page) || !Number.isInteger(flags.page) || flags.page < 1) + ) { + throw new Error('--page must be a positive integer.'); + } + if ( + flags.limit !== undefined + && (!Number.isFinite(flags.limit) || !Number.isInteger(flags.limit) || flags.limit < 1 || flags.limit > 200) + ) { + throw new Error('--limit must be an integer between 1 and 200.'); + } + const page = flags.page ?? 1; + const limit = flags.limit ?? 20; const search = flags.search ? String(flags.search).toLowerCase() : ''; // Repeated -t narrows: an item must match EVERY requested value, matching the // `ok_list` MCP tool ("item must match all tags"). @@ -1968,37 +1979,31 @@ async function run(argv: string[]): Promise<void> { // // So do not "align" the two: making this an exclusive match would break `list`, and // dropping `untag`'s `continue` would break its re-run contract. - const tagFilters = (flags.tagRaw ?? flags.tag ?? []).map((raw) => ({ - whole: raw.trim().toLowerCase(), - parts: raw.split(',').map((tag) => tag.trim().toLowerCase()).filter((tag) => tag.length > 0), - })); + const tagFilters = flags.tagRaw ?? flags.tag ?? []; const tagLabel = flags.tag?.length ? flags.tag.map((entry) => entry.toLowerCase()).join(',') : 'none'; const useTable = flags.format === 'table' || (!flags.json && !flags.format && useColor(flags)); const useJson = flags.json || flags.format === 'json'; - - let filtered = db.items; // Flag precedence, documented because it is not the intuitive one: --archived WINS over // --include-archived when both are passed (the `else if` never reaches the wider flag), // in either argument order. `--archived --include-archived` therefore returns archived // items ONLY, not a widened sweep. A reader would reasonably expect the wider flag to // win, so this is documented rather than changed — flipping it would alter behaviour. - if (flags.archived) filtered = filtered.filter((x) => x.archived === true); - else if (!flags.includeArchived) filtered = filtered.filter((x) => !x.archived); - // Matches id, title and content — see itemMatchesSearch in store.ts for why the id is - // in there. Keep this delegating rather than inlining the predicate again: the id was - // missing here and in the two mcp.js copies simultaneously, which is what a duplicated - // one-liner buys you. - if (search) filtered = filtered.filter((x) => itemMatchesSearch(x, search)); - if (tagFilters.length > 0) filtered = filtered.filter((x) => { - const itemTags = new Set((x.tags ?? []).map((t) => t.toLowerCase())); - return tagFilters.every(({ whole, parts }) => (whole.length > 0 && itemTags.has(whole)) || parts.every((wanted) => itemTags.has(wanted))); - }); - - const { sorted, sort, direction } = sortItems(filtered, flags); + const archive = flags.archived ? 'archived' : (flags.includeArchived ? 'all' : 'active'); + const { sort, direction } = sortItems([], flags); const start = (page - 1) * limit; - const rows = sorted.slice(start, start + limit); - const totalPages = Math.max(1, Math.ceil(sorted.length / limit)); - const result = { ok: true, page, limit, total: sorted.length, total_pages: totalPages, sort, direction, items: rows, store_exists: db.exists }; + if (start > 10_000) throw new Error('The requested page exceeds the maximum bounded offset of 10000.'); + const db = await itemStore.list({ + search, + tags: tagFilters, + archive, + sort, + direction, + limit, + offset: start, + }); + const rows = db.items; + const totalPages = Math.max(1, Math.ceil(db.total / limit)); + const result = { ok: true, page, limit, total: db.total, total_pages: totalPages, sort, direction, items: rows, store_exists: db.exists }; if (useJson) { output(result, true); return; } if (flags.verbose) { output(result, false, flags); return; } @@ -2010,13 +2015,13 @@ async function run(argv: string[]): Promise<void> { for (const row of rows) { console.log(`${row.id}\t${col(truncate(row.title, 80))}\t${row.created_at}\t${row.url ? col(truncate(row.url, 90)) : ''}\t${row.tags?.length ? col(truncate(`[${row.tags.join(', ')}]`, 80)) : ''}`); } - console.log(`Page ${page}/${totalPages} | showing ${rows.length} of ${sorted.length} | sort=${sort} ${direction} | search=${search || 'none'} | tag=${tagLabel}`); + console.log(`Page ${page}/${totalPages} | showing ${rows.length} of ${db.total} | sort=${sort} ${direction} | search=${search || 'none'} | tag=${tagLabel}`); console.log('Hint: use `knowledge get --id <id> --json` for full item content.'); } else { for (const row of rows) { console.log(`${row.id}\t${truncate(row.title, 80)}\t${row.created_at}${row.url ? `\t${truncate(row.url, 90)}` : ''}${row.tags?.length ? `\t${truncate(`[${row.tags.join(', ')}]`, 80)}` : ''}`); } - console.log(`Page ${page}/${totalPages} | showing ${rows.length} of ${sorted.length} | sort=${sort} ${direction} | search=${search || 'none'} | tag=${tagLabel}`); + console.log(`Page ${page}/${totalPages} | showing ${rows.length} of ${db.total} | sort=${sort} ${direction} | search=${search || 'none'} | tag=${tagLabel}`); console.log('Hint: use `knowledge get --id <id> --json` for full item content.'); } return; diff --git a/src/cloud-store.ts b/src/cloud-store.ts index e8d13e0..6e2e55a 100644 --- a/src/cloud-store.ts +++ b/src/cloud-store.ts @@ -38,8 +38,12 @@ import { resolveKnowledgeModeSelection, } from './knowledge-mode.js'; import { guardedFetch, isNetworkGuardActive } from './net-guard.js'; +import { + KNOWLEDGE_BOUNDED_QUERY_CAPABILITY, + hasKnowledgeBoundedQueryCapability, +} from './query-contract.js'; -export { KNOWLEDGE_APP_SLUG }; +export { KNOWLEDGE_APP_SLUG, KNOWLEDGE_BOUNDED_QUERY_CAPABILITY }; /** * Transport overrides applied to every cloud client this module builds. @@ -62,14 +66,29 @@ function transportOverrides(env: NodeJS.ProcessEnv) { export const KNOWLEDGE_RESOURCE = 'notes'; export interface KnowledgeCloudListOptions { + /** Literal id/title/content filter used by `knowledge list`. */ search?: string; - tag?: string; - includeArchived?: boolean; - archivedOnly?: boolean; + tags?: string[]; + archive?: 'active' | 'archived' | 'all'; + sort?: 'created' | 'title'; + direction?: 'asc' | 'desc'; limit?: number; offset?: number; } +export interface KnowledgeCloudSearchOptions { + query: string; + archive?: 'active' | 'archived' | 'all'; + limit?: number; + offset?: number; +} + +export interface KnowledgeCloudSearchHit { + item: KnowledgeItem; + /** Producer-computed PostgreSQL ts_rank_cd score. */ + rank: number; +} + export interface KnowledgeCloudCreateInput { /** Optional caller-supplied stable id. Forwarded to the server, which upserts * on it — giving `upsert --id`/import the same idempotency as the local store. */ @@ -117,6 +136,22 @@ export class KnowledgeVersionConflictError extends Error { } } +/** + * Raised when the server response cannot prove that it applied a bounded query + * field that older servers silently ignored. + */ +export class KnowledgeBoundedQueryCapabilityError extends Error { + readonly code = 'bounded_query_capability_required'; + + constructor(readonly operation: 'list' | 'search', readonly fields: readonly string[]) { + super( + `bounded_query_capability_required: the Knowledge server did not prove support for ${operation} field(s): ` + + `${fields.join(', ')}. Refusing to accept a possibly unfiltered response; update the server and retry.`, + ); + this.name = 'KnowledgeBoundedQueryCapabilityError'; + } +} + /** * The knowledge-item storage surface, cloud edition. Mirrors the operations the * local db.json store supports so the CLI can call either behind one shape. @@ -124,7 +159,9 @@ export class KnowledgeVersionConflictError extends Error { export interface KnowledgeCloudStore { /** `<origin>/v1` base URL the client targets. */ readonly baseUrl: string; - list(options?: KnowledgeCloudListOptions): Promise<{ items: KnowledgeItem[]; total: number | null }>; + list(options?: KnowledgeCloudListOptions): Promise<{ items: KnowledgeItem[]; total: number }>; + /** Ranked producer-side PostgreSQL full-text query. */ + search(options: KnowledgeCloudSearchOptions): Promise<{ items: KnowledgeCloudSearchHit[]; total: number }>; get(idOrShort: string): Promise<KnowledgeItem | null>; create(input: KnowledgeCloudCreateInput): Promise<KnowledgeItem>; update( @@ -142,34 +179,111 @@ export interface KnowledgeCloudStore { getVersion(idOrShort: string, version: number): Promise<KnowledgeItemVersion | null>; } -function toQuery(options: KnowledgeCloudListOptions): Record<string, string | number | boolean | undefined> { - const q: Record<string, string | number | boolean | undefined> = {}; - if (options.search) q.search = options.search; +function toQuery(options: KnowledgeCloudListOptions): Record< + string, + string | number | boolean | undefined | ReadonlyArray<string | number | boolean> +> { + const q: Record< + string, + string | number | boolean | undefined | ReadonlyArray<string | number | boolean> + > = {}; + if (options.search) { + q.filter = options.search; + // Safe overlap for an older server: old clients called this `search`. + q.search = options.search; + } + if (options.tags?.length) q.tags = options.tags; + if (options.archive) { + q.archive = options.archive; + // `includeArchived=true` is the old spelling of archive=all. There is no + // safe alias for archived-only, so that case requires the capability marker. + if (options.archive === 'all') q.includeArchived = true; + } + if (options.sort) q.sort = options.sort; + if (options.direction) q.direction = options.direction; if (options.limit !== undefined) q.limit = options.limit; if (options.offset !== undefined) q.offset = options.offset; - // The server filters archived server-side; request archived rows when either - // "include archived" or "archived only" is asked for, then refine below. - if (options.includeArchived || options.archivedOnly) q.includeArchived = true; return q; } +function listFieldsRequiringCapability(options: KnowledgeCloudListOptions): string[] { + const fields: string[] = []; + if (options.tags?.length) fields.push('tags'); + if (options.sort !== undefined) fields.push('sort'); + if (options.direction !== undefined) fields.push('direction'); + if (options.archive === 'archived') fields.push('archive=archived'); + return fields; +} + +function boundedQueryInteger( + value: number | undefined, + fallback: number, + field: string, + minimum: number, + maximum: number, +): number { + const resolved = value ?? fallback; + if (!Number.isFinite(resolved) || !Number.isInteger(resolved) || resolved < minimum || resolved > maximum) { + throw new Error(`${field} must be an integer between ${minimum} and ${maximum}.`); + } + return resolved; +} + function wrap(client: HasnaStorageClient): KnowledgeCloudStore { return { baseUrl: client.baseUrl, async list(options: KnowledgeCloudListOptions = {}) { - // Pull enough rows to satisfy client-side tag/archived refinement; the - // server caps at 200 per page, so page through when needed. - const wantLimit = options.limit ?? 200; - const query = toQuery({ ...options, limit: Math.min(Math.max(wantLimit, 1), 200) }); + const limit = boundedQueryInteger(options.limit, 200, 'limit', 1, 200); + const offset = boundedQueryInteger(options.offset, 0, 'offset', 0, 10_000); + const query = toQuery({ ...options, limit, offset }); const res = await client.list<KnowledgeItem>(KNOWLEDGE_RESOURCE, { query }); - let items = res.items; - if (options.archivedOnly) items = items.filter((x) => x.archived === true); - if (options.tag) { - const t = options.tag.toLowerCase(); - items = items.filter((x) => (x.tags ?? []).some((tag) => tag.toLowerCase() === t)); + if (!Number.isInteger(res.total) || Number(res.total) < 0) { + throw new Error('knowledge cloud list response is missing a valid producer total.'); + } + const requiredFields = listFieldsRequiringCapability(options); + if (requiredFields.length > 0 && !hasKnowledgeBoundedQueryCapability(res.raw)) { + throw new KnowledgeBoundedQueryCapabilityError('list', requiredFields); + } + return { items: res.items, total: Number(res.total) }; + }, + + async search(options: KnowledgeCloudSearchOptions) { + const limit = boundedQueryInteger(options.limit, 20, 'limit', 1, 200); + const offset = boundedQueryInteger(options.offset, 0, 'offset', 0, 10_000); + const response = await client.transport.get<{ + items: KnowledgeCloudSearchHit[]; + total: number; + query_capability?: string; + }>( + `/${KNOWLEDGE_RESOURCE}/search`, + { + query: { + q: options.query, + archive: options.archive ?? 'active', + limit, + offset, + }, + }, + ); + if ( + !Number.isInteger(response.total) + || response.total < 0 + || !Array.isArray(response.items) + || response.items.some((hit) => ( + !hit + || typeof hit !== 'object' + || !hit.item + || typeof hit.rank !== 'number' + || !Number.isFinite(hit.rank) + )) + ) { + throw new Error('knowledge cloud search response is missing producer rank or total evidence.'); + } + if (!hasKnowledgeBoundedQueryCapability(response)) { + throw new KnowledgeBoundedQueryCapabilityError('search', ['q', 'rank', 'total']); } - return { items, total: res.total }; + return { items: response.items, total: response.total }; }, async get(idOrShort: string) { @@ -349,7 +463,7 @@ export async function fetchAllCloudItems(store: KnowledgeCloudStore): Promise<Kn const pageSize = 200; const all: KnowledgeItem[] = []; for (let offset = 0; ; offset += pageSize) { - const { items } = await store.list({ includeArchived: true, limit: pageSize, offset }); + const { items } = await store.list({ archive: 'all', limit: pageSize, offset }); all.push(...items); if (items.length < pageSize) break; if (offset > 100_000) break; // hard safety cap diff --git a/src/db/pg-migrations.ts b/src/db/pg-migrations.ts index 0d8edd1..8469bb6 100644 --- a/src/db/pg-migrations.ts +++ b/src/db/pg-migrations.ts @@ -1424,4 +1424,60 @@ export const PG_MIGRATIONS: string[] = [ FOR EACH ROW EXECUTE FUNCTION knowledge_guarded_item_id_immutable()`, `ALTER TABLE knowledge_items ENABLE ALWAYS TRIGGER trg_knowledge_guarded_00_item_id_immutable`, + + // Package-owned relation metadata queried by the bounded private producer. + // One schema and one key set prevent prose aliases from becoming authority. + `ALTER TABLE knowledge_items + DROP CONSTRAINT IF EXISTS knowledge_items_relation_metadata_contract`, + `ALTER TABLE knowledge_items + ADD CONSTRAINT knowledge_items_relation_metadata_contract CHECK ( + metadata -> 'hasna_knowledge_relations' IS NULL + OR ( + jsonb_typeof(metadata -> 'hasna_knowledge_relations') = 'object' + AND metadata #>> '{hasna_knowledge_relations,schema}' = 'hasna.knowledge.relations.v1' + AND ( + metadata #>> '{hasna_knowledge_relations,supersedes_item_id}' IS NOT NULL + OR metadata #>> '{hasna_knowledge_relations,canonical_item_id}' IS NOT NULL + ) + AND ( + (metadata -> 'hasna_knowledge_relations') + - ARRAY['schema', 'supersedes_item_id', 'canonical_item_id'] + ) = '{}'::jsonb + AND ( + metadata #>> '{hasna_knowledge_relations,supersedes_item_id}' IS NULL + OR ( + btrim(metadata #>> '{hasna_knowledge_relations,supersedes_item_id}') <> '' + AND metadata #>> '{hasna_knowledge_relations,supersedes_item_id}' <> id + ) + ) + AND ( + metadata #>> '{hasna_knowledge_relations,canonical_item_id}' IS NULL + OR ( + btrim(metadata #>> '{hasna_knowledge_relations,canonical_item_id}') <> '' + AND metadata #>> '{hasna_knowledge_relations,canonical_item_id}' <> id + ) + ) + ) + )`, + `CREATE INDEX IF NOT EXISTS idx_knowledge_items_guarded_title + ON knowledge_items ( + authority_classification, authority_id, tenant_id, scope, parent_id, + title, archived, id + )`, + `CREATE INDEX IF NOT EXISTS idx_knowledge_items_guarded_supersedes + ON knowledge_items ( + authority_classification, authority_id, tenant_id, scope, parent_id, + (metadata #>> '{hasna_knowledge_relations,supersedes_item_id}'), + archived, id + ) + WHERE metadata #>> '{hasna_knowledge_relations,schema}' + = 'hasna.knowledge.relations.v1'`, + `CREATE INDEX IF NOT EXISTS idx_knowledge_items_guarded_canonical + ON knowledge_items ( + authority_classification, authority_id, tenant_id, scope, parent_id, + (metadata #>> '{hasna_knowledge_relations,canonical_item_id}'), + archived, id + ) + WHERE metadata #>> '{hasna_knowledge_relations,schema}' + = 'hasna.knowledge.relations.v1'`, ]; diff --git a/src/guarded-write-contract.ts b/src/guarded-write-contract.ts index 2e65dc7..a9ae9ee 100644 --- a/src/guarded-write-contract.ts +++ b/src/guarded-write-contract.ts @@ -6,12 +6,15 @@ * shapes shared by the package-owned producer and the authenticated server. */ import { createHash, randomUUID } from 'node:crypto'; -import type { KnowledgeItem } from './store.js'; +import type { KnowledgeItem, KnowledgeItemVersion } from './store.js'; export const KNOWLEDGE_GUARDED_WRITE_CONTRACT = 'FCAME-1' as const; export const KNOWLEDGE_PRIVATE_INPUT_SCHEMA = 'hasna.knowledge.private-input.v1' as const; export const KNOWLEDGE_PRIVATE_TITLE_LOOKUP_SCHEMA = 'hasna.knowledge.private-title-lookup.v1' as const; +export const KNOWLEDGE_PRIVATE_QUERY_SCHEMA = 'hasna.knowledge.private-query.v1' as const; export const KNOWLEDGE_PRIVATE_RESULT_SCHEMA = 'hasna.knowledge.private-result.v1' as const; +export const KNOWLEDGE_RELATIONS_SCHEMA = 'hasna.knowledge.relations.v1' as const; +export const KNOWLEDGE_RELATIONS_METADATA_KEY = 'hasna_knowledge_relations' as const; export type KnowledgeAuthorityClassification = 'user_hosted' | 'hasna_saas'; export type KnowledgeGuardedWriteVerb = 'create' | 'update'; @@ -245,6 +248,77 @@ export interface CreateKnowledgePrivateTitleLookupDescriptorOptions { expires_in_ms?: number; } +export type KnowledgePrivateQueryKind = + | 'exact_title' + | 'lexical_overlap' + | 'semantic_overlap' + | 'supersession' + | 'current_version' + | 'historical_version' + | 'canonical_pointer'; + +export type KnowledgePrivateQuerySelector = + | { kind: 'exact_title'; title: string } + | { kind: 'lexical_overlap'; query: string } + | { kind: 'semantic_overlap'; query: string } + | { kind: 'supersession'; supersedes_item_id: string } + | { kind: 'current_version'; item_id: string } + | { kind: 'historical_version'; item_id: string; version: number } + | { kind: 'canonical_pointer'; canonical_item_id: string }; + +export interface KnowledgeRelationsMetadata { + schema: typeof KNOWLEDGE_RELATIONS_SCHEMA; + supersedes_item_id?: string; + canonical_item_id?: string; +} + +export type KnowledgePrivateQueryArchive = 'active' | 'archived' | 'all'; + +export interface KnowledgePrivateQueryPage { + limit: number; + offset: number; +} + +export interface KnowledgePrivateQueryBounds extends KnowledgeGuardedBounds { + max_items: number; +} + +export interface KnowledgePrivateQueryDescriptor { + readonly contract: typeof KNOWLEDGE_GUARDED_WRITE_CONTRACT; + readonly schema: typeof KNOWLEDGE_PRIVATE_QUERY_SCHEMA; + /** Process-private handle. Deliberately non-enumerable and omitted by toJSON. */ + readonly descriptor_id: string; + readonly operation_id: string; + readonly step_id: string; + readonly query_kind: KnowledgePrivateQueryKind; + readonly selector_digest: string; + readonly binding_digest: string; + readonly binding: KnowledgeGuardedBinding; + readonly archive: KnowledgePrivateQueryArchive; + readonly page: KnowledgePrivateQueryPage; + readonly expires_at: string; + toJSON(): Omit<KnowledgePrivateQueryDescriptor, 'descriptor_id' | 'toJSON'>; +} + +export interface CreateKnowledgePrivateQueryDescriptorOptions { + operation_id: string; + step_id: string; + binding: KnowledgeGuardedBinding; + selector: KnowledgePrivateQuerySelector; + archive?: KnowledgePrivateQueryArchive; + limit?: number; + offset?: number; + /** Defaults to five minutes; bounded to one hour. */ + expires_in_ms?: number; +} + +export interface KnowledgePrivateQueryEnvelope { + contract: typeof KNOWLEDGE_GUARDED_WRITE_CONTRACT; + descriptor: Omit<KnowledgePrivateQueryDescriptor, 'descriptor_id' | 'toJSON'>; + selector: KnowledgePrivateQuerySelector; + limits: KnowledgePrivateQueryBounds; +} + export interface KnowledgeGuardedTitleLookupEnvelope { contract: typeof KNOWLEDGE_GUARDED_WRITE_CONTRACT; descriptor: Omit<KnowledgePrivateTitleLookupDescriptor, 'descriptor_id' | 'toJSON'>; @@ -436,6 +510,42 @@ export interface KnowledgePrivateItemProof { archived: boolean; } +export interface KnowledgePrivateQueryItemProof { + /** The producer record id is private; only its digest crosses the result boundary. */ + id_sha256: string; + version: number; + title_sha256: string; + content_sha256: string; + url_sha256: string | null; + tags_sha256: string; + metadata_sha256: string; + archived: boolean; + record_kind: 'current' | 'historical'; + matched_value_sha256: string | null; +} + +export interface KnowledgePrivateQueryResult { + contract: typeof KNOWLEDGE_GUARDED_WRITE_CONTRACT; + exact: true; + bounded: true; + private: true; + query_kind: KnowledgePrivateQueryKind; + status: 'available' | 'unavailable'; + code: null | 'semantic_query_unavailable'; + binding: KnowledgeGuardedBinding; + selector_digest: string; + total: number; + item_count: number; + page: { + limit: number; + offset: number; + returned: number; + has_more: boolean; + }; + items: readonly KnowledgePrivateQueryItemProof[]; + limits: KnowledgePrivateQueryBounds; +} + export interface KnowledgeGuardedTitleLookup { contract: typeof KNOWLEDGE_GUARDED_WRITE_CONTRACT; exact: true; @@ -447,7 +557,7 @@ export interface KnowledgeGuardedTitleLookup { limits: KnowledgeGuardedBounds; } -export type KnowledgePrivateResultKind = 'write' | 'readback' | 'title_lookup'; +export type KnowledgePrivateResultKind = 'write' | 'readback' | 'title_lookup' | 'query'; export interface KnowledgePrivateResultDescriptor { readonly contract: typeof KNOWLEDGE_GUARDED_WRITE_CONTRACT; @@ -464,10 +574,15 @@ export interface KnowledgePrivateResultDescriptor { export interface KnowledgePrivateResultProof { kind: KnowledgePrivateResultKind; item_count: number; - items: readonly KnowledgePrivateItemProof[]; + items: readonly (KnowledgePrivateItemProof | KnowledgePrivateQueryItemProof)[]; deterministic_key?: string; receipt_id?: string; duplicate?: boolean; + query_kind?: KnowledgePrivateQueryKind; + status?: KnowledgePrivateQueryResult['status']; + code?: KnowledgePrivateQueryResult['code']; + total?: number; + page?: KnowledgePrivateQueryResult['page']; } export const DEFAULT_KNOWLEDGE_GUARDED_LIMITS: KnowledgeGuardedLimits = Object.freeze({ @@ -502,10 +617,15 @@ const PRIVATE_TITLE_LOOKUPS = new WeakMap<object, { title: string; revoked: boolean; }>(); +const PRIVATE_QUERIES = new WeakMap<object, { + selector: KnowledgePrivateQuerySelector; + revoked: boolean; +}>(); type KnowledgePrivateResultValue = | { kind: 'write'; value: KnowledgeGuardedWriteResult } | { kind: 'readback'; value: KnowledgeGuardedReadback } - | { kind: 'title_lookup'; value: KnowledgeGuardedTitleLookup }; + | { kind: 'title_lookup'; value: KnowledgeGuardedTitleLookup } + | { kind: 'query'; value: KnowledgePrivateQueryResult }; const PRIVATE_RESULTS = new WeakMap<object, { result: KnowledgePrivateResultValue; revoked: boolean; @@ -628,6 +748,124 @@ export function assertKnowledgeGuardedBounds(bounds: KnowledgeGuardedBounds, fie } } +export function assertKnowledgePrivateQueryBounds( + bounds: KnowledgePrivateQueryBounds, + field = 'query limits', +): void { + assertObjectKeys(bounds, field, ['max_calls', 'max_items', 'max_bytes', 'wall_time_ms']); + if (bounds.max_calls !== 1) throw new Error(`${field}.max_calls must be exactly 1.`); + if (!Number.isInteger(bounds.max_items) || bounds.max_items < 1 || bounds.max_items > 50) { + throw new Error(`${field}.max_items must be an integer between 1 and 50.`); + } + if (!Number.isInteger(bounds.max_bytes) || bounds.max_bytes < 1 || bounds.max_bytes > MAX_GUARDED_BYTES) { + throw new Error(`${field}.max_bytes must be a positive integer no greater than ${MAX_GUARDED_BYTES}.`); + } + if ( + !Number.isInteger(bounds.wall_time_ms) + || bounds.wall_time_ms < 1 + || bounds.wall_time_ms > MAX_GUARDED_WALL_TIME_MS + ) { + throw new Error( + `${field}.wall_time_ms must be a positive integer no greater than ${MAX_GUARDED_WALL_TIME_MS}.`, + ); + } +} + +export function assertKnowledgePrivateQueryPage( + page: KnowledgePrivateQueryPage, + bounds: KnowledgePrivateQueryBounds, +): void { + assertObjectKeys(page, 'query page', ['limit', 'offset']); + if (!Number.isInteger(page.limit) || page.limit < 1 || page.limit > bounds.max_items) { + throw new Error('query page.limit must be a positive integer no greater than limits.max_items.'); + } + if (!Number.isInteger(page.offset) || page.offset < 0 || page.offset > 10_000) { + throw new Error('query page.offset must be an integer between 0 and 10000.'); + } +} + +export function assertKnowledgePrivateQuerySelector( + selector: KnowledgePrivateQuerySelector, +): void { + if (!selector || typeof selector !== 'object' || Array.isArray(selector)) { + throw new Error('private query selector must be an object.'); + } + switch (selector.kind) { + case 'exact_title': + assertObjectKeys(selector, 'private query selector', ['kind', 'title']); + assertBoundText(selector.title, 'private query selector.title', 2048); + return; + case 'lexical_overlap': + case 'semantic_overlap': + assertObjectKeys(selector, 'private query selector', ['kind', 'query']); + assertBoundText(selector.query, 'private query selector.query', 4096); + return; + case 'supersession': + assertObjectKeys(selector, 'private query selector', ['kind', 'supersedes_item_id']); + assertBoundText(selector.supersedes_item_id, 'private query selector.supersedes_item_id'); + return; + case 'current_version': + assertObjectKeys(selector, 'private query selector', ['kind', 'item_id']); + assertBoundText(selector.item_id, 'private query selector.item_id'); + return; + case 'historical_version': + assertObjectKeys(selector, 'private query selector', ['kind', 'item_id', 'version']); + assertBoundText(selector.item_id, 'private query selector.item_id'); + if (!Number.isInteger(selector.version) || selector.version < 1) { + throw new Error('private query selector.version must be a positive integer.'); + } + return; + case 'canonical_pointer': + assertObjectKeys(selector, 'private query selector', ['kind', 'canonical_item_id']); + assertBoundText(selector.canonical_item_id, 'private query selector.canonical_item_id'); + return; + default: + throw new Error('private query selector.kind is unsupported.'); + } +} + +export function assertKnowledgeRelationsMetadata( + metadata: Record<string, unknown>, + itemId?: string, +): void { + const raw = metadata[KNOWLEDGE_RELATIONS_METADATA_KEY]; + if (raw === undefined) return; + assertObjectKeys( + raw, + `metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}`, + ['schema', 'supersedes_item_id', 'canonical_item_id'], + ['schema'], + ); + if (raw.schema !== KNOWLEDGE_RELATIONS_SCHEMA) { + throw new Error(`metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.schema is unsupported.`); + } + const supersedes = raw.supersedes_item_id; + const canonical = raw.canonical_item_id; + if (supersedes === undefined && canonical === undefined) { + throw new Error(`metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY} must contain at least one pointer.`); + } + if (supersedes !== undefined) { + assertBoundText( + supersedes, + `metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.supersedes_item_id`, + ); + if (itemId && supersedes === itemId) { + throw new Error('an item cannot supersede itself.'); + } + } + if (canonical !== undefined) { + assertBoundText( + canonical, + `metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.canonical_item_id`, + ); + if (itemId && canonical === itemId) { + throw new Error( + `metadata.${KNOWLEDGE_RELATIONS_METADATA_KEY}.canonical_item_id cannot reference itself.`, + ); + } + } +} + export function normalizeKnowledgeGuardedLimits( limits: Partial<KnowledgeGuardedLimits> = {}, ): KnowledgeGuardedLimits { @@ -1301,6 +1539,102 @@ export function materializeKnowledgePrivateTitleLookup( return state.title; } +export function createKnowledgePrivateQueryDescriptor( + options: CreateKnowledgePrivateQueryDescriptorOptions, +): KnowledgePrivateQueryDescriptor { + assertBoundText(options.operation_id, 'operation_id'); + assertBoundText(options.step_id, 'step_id'); + assertKnowledgeGuardedBinding(options.binding); + assertKnowledgePrivateQuerySelector(options.selector); + const archive = options.archive ?? 'active'; + if (!['active', 'archived', 'all'].includes(archive)) { + throw new Error('archive must be active, archived, or all.'); + } + const limit = options.limit ?? 10; + const offset = options.offset ?? 0; + const bounds: KnowledgePrivateQueryBounds = { + max_calls: 1, + max_items: 50, + max_bytes: 1_048_576, + wall_time_ms: 10_000, + }; + assertKnowledgePrivateQueryPage({ limit, offset }, bounds); + const expiresIn = options.expires_in_ms ?? 5 * 60 * 1000; + if (!Number.isInteger(expiresIn) || expiresIn < 1 || expiresIn > MAX_DESCRIPTOR_LIFETIME_MS) { + throw new Error(`expires_in_ms must be between 1 and ${MAX_DESCRIPTOR_LIFETIME_MS}.`); + } + const selector = deepFreezeJson( + JSON.parse(canonicalKnowledgeGuardedJson(options.selector)) as KnowledgePrivateQuerySelector, + ); + const selectorDigest = knowledgeGuardedDigest(selector); + const page = Object.freeze({ limit, offset }); + const binding = Object.freeze({ + authority: Object.freeze({ ...options.binding.authority }), + tenant_id: options.binding.tenant_id, + scope: options.binding.scope, + parent_id: options.binding.parent_id, + }); + const bindingDigest = knowledgeGuardedDigest({ + binding, + operation_id: options.operation_id, + step_id: options.step_id, + query_kind: selector.kind, + selector_digest: selectorDigest, + archive, + page, + }); + const metadata = Object.freeze({ + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + schema: KNOWLEDGE_PRIVATE_QUERY_SCHEMA, + operation_id: options.operation_id, + step_id: options.step_id, + query_kind: selector.kind, + selector_digest: selectorDigest, + binding_digest: bindingDigest, + binding, + archive, + page, + expires_at: new Date(Date.now() + expiresIn).toISOString(), + } satisfies Omit<KnowledgePrivateQueryDescriptor, 'descriptor_id' | 'toJSON'>); + const descriptor = { + ...metadata, + toJSON: () => metadata, + } as KnowledgePrivateQueryDescriptor; + Object.defineProperty(descriptor, 'descriptor_id', { + value: `kpq_${randomUUID()}`, + enumerable: false, + configurable: false, + writable: false, + }); + Object.freeze(descriptor); + PRIVATE_QUERIES.set(descriptor, { selector, revoked: false }); + return descriptor; +} + +export function revokeKnowledgePrivateQueryDescriptor( + descriptor: KnowledgePrivateQueryDescriptor, +): void { + const state = PRIVATE_QUERIES.get(descriptor); + if (!state) throw new Error('private query descriptor was not created by @hasna/knowledge.'); + state.revoked = true; +} + +/** @internal */ +export function materializeKnowledgePrivateQuery( + descriptor: KnowledgePrivateQueryDescriptor, +): KnowledgePrivateQuerySelector { + const state = PRIVATE_QUERIES.get(descriptor); + if (!state) throw new Error('private query descriptor was not created by @hasna/knowledge.'); + if (state.revoked) throw new Error('private query descriptor has been revoked.'); + if (Date.parse(descriptor.expires_at) <= Date.now()) { + throw new Error('private query descriptor has expired.'); + } + if (knowledgeGuardedDigest(state.selector) !== descriptor.selector_digest) { + throw new Error('private query descriptor selector digest changed after freeze.'); + } + return state.selector; +} + export function knowledgePrivateItemProof(item: KnowledgeItem): KnowledgePrivateItemProof { return Object.freeze({ id: item.id, @@ -1316,6 +1650,48 @@ export function knowledgePrivateItemProof(item: KnowledgeItem): KnowledgePrivate }); } +export function knowledgePrivateQueryItemProof( + item: KnowledgeItem, + matchedValue: string | null = null, +): KnowledgePrivateQueryItemProof { + return Object.freeze({ + id_sha256: knowledgeGuardedContentSha256(item.id), + version: Number(item.version ?? 1), + title_sha256: knowledgeGuardedContentSha256(item.title), + content_sha256: knowledgeGuardedContentSha256(item.content), + url_sha256: item.url === null || item.url === undefined + ? null + : knowledgeGuardedContentSha256(item.url), + tags_sha256: knowledgeGuardedDigest(item.tags ?? []), + metadata_sha256: knowledgeGuardedDigest(item.metadata ?? {}), + archived: item.archived === true, + record_kind: 'current', + matched_value_sha256: matchedValue === null + ? null + : knowledgeGuardedContentSha256(matchedValue), + }); +} + +export function knowledgePrivateHistoricalQueryItemProof( + item: KnowledgeItemVersion, + matchedValue: string | null = null, +): KnowledgePrivateQueryItemProof { + return Object.freeze({ + id_sha256: knowledgeGuardedContentSha256(item.item_id), + version: item.version, + title_sha256: knowledgeGuardedContentSha256(item.title), + content_sha256: item.content_hash, + url_sha256: item.url === null ? null : knowledgeGuardedContentSha256(item.url), + tags_sha256: knowledgeGuardedDigest(item.tags), + metadata_sha256: knowledgeGuardedDigest(item.metadata), + archived: item.archived, + record_kind: 'historical', + matched_value_sha256: matchedValue === null + ? null + : knowledgeGuardedContentSha256(matchedValue), + }); +} + /** @internal */ export function createKnowledgePrivateResultDescriptor( result: KnowledgePrivateResultValue, @@ -1324,7 +1700,7 @@ export function createKnowledgePrivateResultDescriptor( if (!Number.isInteger(expiresInMs) || expiresInMs < 1 || expiresInMs > MAX_DESCRIPTOR_LIFETIME_MS) { throw new Error(`expires_in_ms must be between 1 and ${MAX_DESCRIPTOR_LIFETIME_MS}.`); } - const itemCount = result.kind === 'title_lookup' + const itemCount = result.kind === 'title_lookup' || result.kind === 'query' ? result.value.item_count : 1; const metadata = Object.freeze({ @@ -1387,6 +1763,18 @@ export function inspectKnowledgePrivateResult( items: Object.freeze([knowledgePrivateItemProof(state.result.value.item)]), }); } + if (state.result.kind === 'query') { + return Object.freeze({ + kind: 'query', + item_count: state.result.value.item_count, + items: Object.freeze([...state.result.value.items]), + query_kind: state.result.value.query_kind, + status: state.result.value.status, + code: state.result.value.code, + total: state.result.value.total, + page: Object.freeze({ ...state.result.value.page }), + }); + } return Object.freeze({ kind: 'title_lookup', item_count: state.result.value.item_count, diff --git a/src/guarded-writer.ts b/src/guarded-writer.ts index a301599..cb11a3d 100644 --- a/src/guarded-writer.ts +++ b/src/guarded-writer.ts @@ -12,15 +12,19 @@ import { KNOWLEDGE_GUARDED_WRITE_CONTRACT, assertKnowledgeGuardedBinding, assertKnowledgeGuardedBounds, + assertKnowledgePrivateQueryBounds, + assertKnowledgePrivateQueryPage, assertKnowledgeTerminalCompleteness, canonicalKnowledgeGuardedJson, computeKnowledgeGuardedAdoptionDeterministicKey, computeKnowledgeGuardedDeterministicKey, computeKnowledgeGuardedManifestDeterministicKey, createKnowledgePrivateResultDescriptor, + knowledgeGuardedContentSha256, knowledgeGuardedDigest, knowledgeGuardedUtf8Bytes, materializeKnowledgePrivateInput, + materializeKnowledgePrivateQuery, materializeKnowledgePrivateTitleLookup, normalizeKnowledgeGuardedLimits, type CreateKnowledgeGuardedManifestOptions, @@ -46,6 +50,11 @@ import { type KnowledgeGuardedWriteEnvelope, type KnowledgeGuardedWriteResult, type KnowledgePrivateInputDescriptor, + type KnowledgePrivateQueryBounds, + type KnowledgePrivateQueryDescriptor, + type KnowledgePrivateQueryEnvelope, + type KnowledgePrivateQueryResult, + type KnowledgePrivateQuerySelector, type KnowledgePrivateResultDescriptor, type KnowledgePrivateTitleLookupDescriptor, type KnowledgeTerminalReconciliation, @@ -77,6 +86,10 @@ export interface KnowledgeGuardedWriter { execute(descriptor: KnowledgePrivateInputDescriptor): Promise<KnowledgeGuardedWriteResult>; executePrivate(descriptor: KnowledgePrivateInputDescriptor): Promise<KnowledgePrivateResultDescriptor>; lookupTitle(descriptor: KnowledgePrivateTitleLookupDescriptor): Promise<KnowledgePrivateResultDescriptor>; + query( + descriptor: KnowledgePrivateQueryDescriptor, + bounds?: KnowledgePrivateQueryBounds, + ): Promise<KnowledgePrivateResultDescriptor>; reconcile( deterministicKey: string, operationId: string, @@ -139,6 +152,22 @@ export class KnowledgePrivateTitleLookupAmbiguousError extends Error { } } +export class KnowledgePrivateQueryResponseError extends Error { + readonly code = 'private_query_response_invalid'; + constructor() { + super('private_query_response_invalid: the bounded private query response was unavailable or malformed.'); + this.name = 'KnowledgePrivateQueryResponseError'; + } +} + +export class KnowledgeGuardedReadbackError extends Error { + readonly code = 'guarded_readback_response_invalid'; + constructor() { + super('guarded_readback_response_invalid: the exact guarded readback was unavailable or malformed.'); + this.name = 'KnowledgeGuardedReadbackError'; + } +} + export class KnowledgeGuardedManifestConflictError extends Error { readonly code = 'guarded_manifest_conflict'; constructor(readonly manifest: KnowledgeGuardedManifestSubmission['manifest']) { @@ -239,6 +268,18 @@ function sameBinding(left: KnowledgeGuardedBinding, right: KnowledgeGuardedBindi return canonicalKnowledgeGuardedJson(left) === canonicalKnowledgeGuardedJson(right); } +function selectorMatchedValue(selector: KnowledgePrivateQuerySelector): string { + switch (selector.kind) { + case 'exact_title': return selector.title; + case 'lexical_overlap': + case 'semantic_overlap': return selector.query; + case 'supersession': return selector.supersedes_item_id; + case 'current_version': + case 'historical_version': return selector.item_id; + case 'canonical_pointer': return selector.canonical_item_id; + } +} + function parseErrorBody(error: unknown): Record<string, unknown> | null { if (!error || typeof error !== 'object') return null; const body = (error as { body?: unknown }).body; @@ -510,6 +551,111 @@ class GuardedWriter implements KnowledgeGuardedWriter { return createKnowledgePrivateResultDescriptor({ kind: 'title_lookup', value: response }); } + async query( + descriptor: KnowledgePrivateQueryDescriptor, + bounds: KnowledgePrivateQueryBounds = { + max_calls: 1, + max_items: descriptor.page.limit, + max_bytes: this.limits.readback.max_bytes, + wall_time_ms: this.limits.readback.wall_time_ms, + }, + ): Promise<KnowledgePrivateResultDescriptor> { + assertKnowledgePrivateQueryBounds(bounds); + assertKnowledgePrivateQueryPage(descriptor.page, bounds); + if (!sameBinding(descriptor.binding, this.binding)) { + throw new Error('private query descriptor binding does not match this guarded writer.'); + } + const selector = materializeKnowledgePrivateQuery(descriptor); + if (selector.kind !== descriptor.query_kind) { + throw new Error('private query descriptor kind changed after freeze.'); + } + const bindingDigest = knowledgeGuardedDigest({ + binding: descriptor.binding, + operation_id: descriptor.operation_id, + step_id: descriptor.step_id, + query_kind: descriptor.query_kind, + selector_digest: descriptor.selector_digest, + archive: descriptor.archive, + page: descriptor.page, + }); + if (bindingDigest !== descriptor.binding_digest) { + throw new Error('private query descriptor binding digest changed after freeze.'); + } + const envelope: KnowledgePrivateQueryEnvelope = { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + descriptor: descriptor.toJSON(), + selector, + limits: bounds, + }; + if (knowledgeGuardedUtf8Bytes(envelope) > bounds.max_bytes) { + throw new Error('private_query_request_exceeds_byte_cap.'); + } + let response: KnowledgePrivateQueryResult; + try { + const candidate = await this.transport.post<KnowledgePrivateQueryResult>( + '/guarded-writes/queries', + envelope, + { + headers: { + ...boundHeaders(bounds), + 'x-knowledge-tenant-id': this.binding.tenant_id, + }, + timeoutMs: bounds.wall_time_ms, + retry: false, + }, + ); + if (!candidate || typeof candidate !== 'object' || Array.isArray(candidate)) { + throw new KnowledgePrivateQueryResponseError(); + } + response = candidate; + } catch (error) { + if (error instanceof KnowledgePrivateQueryResponseError) throw error; + throw new KnowledgePrivateQueryResponseError(); + } + const expectedMatchedDigest = knowledgeGuardedContentSha256(selectorMatchedValue(selector)); + if ( + knowledgeGuardedUtf8Bytes(response) > bounds.max_bytes + || response.contract !== KNOWLEDGE_GUARDED_WRITE_CONTRACT + || response.exact !== true + || response.bounded !== true + || response.private !== true + || response.query_kind !== descriptor.query_kind + || response.selector_digest !== descriptor.selector_digest + || !sameBinding(response.binding, this.binding) + || response.item_count !== response.items.length + || response.item_count !== response.page.returned + || response.item_count > descriptor.page.limit + || response.page.limit !== descriptor.page.limit + || response.page.offset !== descriptor.page.offset + || response.total < response.item_count + || response.page.has_more !== ( + descriptor.page.offset + response.item_count < response.total + ) + || canonicalKnowledgeGuardedJson(response.limits) !== canonicalKnowledgeGuardedJson(bounds) + || response.items.some((item) => item.matched_value_sha256 !== expectedMatchedDigest) + ) { + throw new KnowledgePrivateQueryResponseError(); + } + if ( + descriptor.query_kind === 'semantic_overlap' + && ( + response.status !== 'unavailable' + || response.code !== 'semantic_query_unavailable' + || response.item_count !== 0 + || response.total !== 0 + ) + ) { + throw new KnowledgePrivateQueryResponseError(); + } + if ( + descriptor.query_kind !== 'semantic_overlap' + && (response.status !== 'available' || response.code !== null) + ) { + throw new KnowledgePrivateQueryResponseError(); + } + return createKnowledgePrivateResultDescriptor({ kind: 'query', value: response }); + } + async createManifest( manifest: CreateKnowledgeGuardedManifestOptions, bounds: KnowledgeGuardedBounds = this.limits.submission, @@ -870,23 +1016,50 @@ class GuardedWriter implements KnowledgeGuardedWriter { bounds: KnowledgeGuardedBounds = this.limits.readback, ): Promise<KnowledgeGuardedReadback> { assertKnowledgeGuardedBounds(bounds, 'readback bounds'); - const response = await this.transport.get<KnowledgeGuardedReadback>( - `/guarded-writes/items/${encodeURIComponent(fullId)}`, - { - query: { - ...bindingQuery(this.binding), - max_calls: bounds.max_calls, - max_items: bounds.max_items, - max_bytes: bounds.max_bytes, - wall_time_ms: bounds.wall_time_ms, + let response: KnowledgeGuardedReadback; + try { + const candidate = await this.transport.get<KnowledgeGuardedReadback>( + `/guarded-writes/items/${encodeURIComponent(fullId)}`, + { + query: { + ...bindingQuery(this.binding), + max_calls: bounds.max_calls, + max_items: bounds.max_items, + max_bytes: bounds.max_bytes, + wall_time_ms: bounds.wall_time_ms, + }, + headers: boundHeaders(bounds), + timeoutMs: bounds.wall_time_ms, + retry: false, }, - headers: boundHeaders(bounds), - timeoutMs: bounds.wall_time_ms, - retry: false, - }, - ); - if (knowledgeGuardedUtf8Bytes(response) > bounds.max_bytes) { - throw new Error('guarded_readback_response_exceeds_byte_cap.'); + ); + if (!candidate || typeof candidate !== 'object' || Array.isArray(candidate)) { + throw new KnowledgeGuardedReadbackError(); + } + response = candidate; + } catch (error) { + if (error instanceof KnowledgeGuardedReadbackError) throw error; + if ( + error + && typeof error === 'object' + && typeof (error as { status?: unknown }).status === 'number' + ) { + throw error; + } + throw new KnowledgeGuardedReadbackError(); + } + if ( + knowledgeGuardedUtf8Bytes(response) > bounds.max_bytes + || response.contract !== KNOWLEDGE_GUARDED_WRITE_CONTRACT + || response.exact !== true + || response.bounded !== true + || response.item_count !== 1 + || !response.item + || response.item.id !== fullId + || !sameBinding(response.binding, this.binding) + || canonicalKnowledgeGuardedJson(response.limits) !== canonicalKnowledgeGuardedJson(bounds) + ) { + throw new KnowledgeGuardedReadbackError(); } return response; } diff --git a/src/index.ts b/src/index.ts index 9e28cf1..13860f2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -30,7 +30,11 @@ export { type ItemStore, type ItemCreateInput, type ItemPatch, + type ItemArchiveFilter, + type ItemListDirection, + type ItemListOptions, type ItemListResult, + type ItemListSort, type ResolveItemStoreOptions, } from './item-store.js'; export { @@ -39,20 +43,27 @@ export { } from './store.js'; export { KNOWLEDGE_APP_SLUG, + KNOWLEDGE_BOUNDED_QUERY_CAPABILITY, KNOWLEDGE_RESOURCE, + KnowledgeBoundedQueryCapabilityError, isKnowledgeApiMode, resolveKnowledgeCloudStore, type KnowledgeCloudStore, type KnowledgeCloudCreateInput, type KnowledgeCloudListOptions, type KnowledgeCloudPatch, + type KnowledgeCloudSearchHit, + type KnowledgeCloudSearchOptions, } from './cloud-store.js'; export { DEFAULT_KNOWLEDGE_GUARDED_LIMITS, KNOWLEDGE_GUARDED_WRITE_CONTRACT, KNOWLEDGE_PRIVATE_INPUT_SCHEMA, + KNOWLEDGE_PRIVATE_QUERY_SCHEMA, KNOWLEDGE_PRIVATE_RESULT_SCHEMA, KNOWLEDGE_PRIVATE_TITLE_LOOKUP_SCHEMA, + KNOWLEDGE_RELATIONS_METADATA_KEY, + KNOWLEDGE_RELATIONS_SCHEMA, assertKnowledgeGuardedBinding, assertKnowledgeGuardedBounds, assertKnowledgeGuardedManifestBinding, @@ -60,6 +71,10 @@ export { assertKnowledgeGuardedManifestTerminalCompleteness, assertKnowledgeGuardedPayload, assertKnowledgeGuardedPrecondition, + assertKnowledgePrivateQueryBounds, + assertKnowledgePrivateQueryPage, + assertKnowledgePrivateQuerySelector, + assertKnowledgeRelationsMetadata, assertKnowledgeTerminalCompleteness, canonicalKnowledgeGuardedJson, computeKnowledgeGuardedAdoptionDeterministicKey, @@ -71,6 +86,7 @@ export { computeKnowledgeGuardedReceiptId, computeKnowledgeGuardedRecoveryKey, createKnowledgePrivateInputDescriptor, + createKnowledgePrivateQueryDescriptor, createKnowledgePrivateTitleLookupDescriptor, evaluateKnowledgeGuardedManifestCompletion, knowledgeGuardedDigest, @@ -79,10 +95,12 @@ export { inspectKnowledgePrivateResult, normalizeKnowledgeGuardedLimits, revokeKnowledgePrivateInputDescriptor, + revokeKnowledgePrivateQueryDescriptor, revokeKnowledgePrivateResultDescriptor, revokeKnowledgePrivateTitleLookupDescriptor, type CreateKnowledgeGuardedManifestOptions, type CreateKnowledgePrivateInputDescriptorOptions, + type CreateKnowledgePrivateQueryDescriptorOptions, type CreateKnowledgePrivateTitleLookupDescriptorOptions, type KnowledgeAuthorityBinding, type KnowledgeAuthorityClassification, @@ -128,9 +146,19 @@ export { type KnowledgeGuardedWriteVerb, type KnowledgePrivateInputDescriptor, type KnowledgePrivateItemProof, + type KnowledgePrivateQueryArchive, + type KnowledgePrivateQueryBounds, + type KnowledgePrivateQueryDescriptor, + type KnowledgePrivateQueryEnvelope, + type KnowledgePrivateQueryItemProof, + type KnowledgePrivateQueryKind, + type KnowledgePrivateQueryPage, + type KnowledgePrivateQueryResult, + type KnowledgePrivateQuerySelector, type KnowledgePrivateResultDescriptor, type KnowledgePrivateResultProof, type KnowledgePrivateTitleLookupDescriptor, + type KnowledgeRelationsMetadata, type KnowledgeTerminalReconciliation, } from './guarded-write-contract.js'; export * from './guarded-writer.js'; diff --git a/src/item-store.ts b/src/item-store.ts index 9e96ffa..ac64c5c 100644 --- a/src/item-store.ts +++ b/src/item-store.ts @@ -78,8 +78,31 @@ export interface ItemUpdateOptions { expectedVersion?: number; } +export type ItemArchiveFilter = 'active' | 'archived' | 'all'; +export type ItemListSort = 'created' | 'title'; +export type ItemListDirection = 'asc' | 'desc'; + +/** + * Bounded list query shared by the local and hosted transports. + * + * `search` is deliberately a literal case-insensitive match over full id, + * title, and content. Ranked full-text/semantic retrieval is a separate + * producer query and must not change the long-standing `knowledge list` + * compatibility contract. + */ +export interface ItemListOptions { + search?: string; + tags?: string[]; + archive?: ItemArchiveFilter; + sort?: ItemListSort; + direction?: ItemListDirection; + limit?: number; + offset?: number; +} + export interface ItemListResult { items: KnowledgeItem[]; + total: number; /** Whether the backing store exists (always true for the API transport). */ exists: boolean; } @@ -115,7 +138,9 @@ export interface ItemStore { readonly exists: boolean; /** Whether this transport retains entry history at all. */ readonly supportsVersions: boolean; - /** Every item including archived; callers filter/sort/paginate. */ + /** Bounded, producer-side list query. */ + list(options?: ItemListOptions): Promise<ItemListResult>; + /** Every item including archived; retained only for genuine bulk operations. */ listAll(): Promise<ItemListResult>; get(idOrShort: string): Promise<KnowledgeItem | null>; create(input: ItemCreateInput): Promise<KnowledgeItem>; @@ -140,6 +165,83 @@ function matchesId(item: KnowledgeItem, idOrShort: string): boolean { return item.id === idOrShort || item.short_id === idOrShort; } +function itemMatchesLiteralSearch(item: KnowledgeItem, search: string): boolean { + const query = search.trim().toLowerCase(); + if (!query) return true; + return ( + item.id.toLowerCase().includes(query) + || item.title.toLowerCase().includes(query) + || item.content.toLowerCase().includes(query) + ); +} + +function itemMatchesTagFilters(item: KnowledgeItem, rawFilters: readonly string[]): boolean { + if (rawFilters.length === 0) return true; + const itemTags = new Set((item.tags ?? []).map((tag) => tag.toLowerCase())); + return rawFilters.every((raw) => { + const whole = raw.trim().toLowerCase(); + const parts = raw + .split(',') + .map((tag) => tag.trim().toLowerCase()) + .filter(Boolean); + return (whole.length > 0 && itemTags.has(whole)) + || (parts.length > 0 && parts.every((tag) => itemTags.has(tag))); + }); +} + +function compareItems( + left: KnowledgeItem, + right: KnowledgeItem, + sort: ItemListSort, + direction: ItemListDirection, +): number { + const primary = sort === 'title' + ? left.title.localeCompare(right.title) + : left.created_at.localeCompare(right.created_at); + const deterministic = primary === 0 ? left.id.localeCompare(right.id) : primary; + return direction === 'desc' ? -deterministic : deterministic; +} + +function boundedListInteger( + value: number | undefined, + fallback: number, + field: string, + minimum: number, + maximum: number, +): number { + const resolved = value ?? fallback; + if (!Number.isFinite(resolved) || !Number.isInteger(resolved) || resolved < minimum || resolved > maximum) { + throw new Error(`${field} must be an integer between ${minimum} and ${maximum}.`); + } + return resolved; +} + +function boundedLocalList(items: readonly KnowledgeItem[], options: ItemListOptions): { + items: KnowledgeItem[]; + total: number; +} { + const archive = options.archive ?? 'active'; + const sort = options.sort ?? 'created'; + const direction = options.direction ?? 'asc'; + const limit = boundedListInteger(options.limit, 50, 'limit', 1, 200); + const offset = boundedListInteger(options.offset, 0, 'offset', 0, 10_000); + let filtered = items.filter((item) => ( + archive === 'all' + || (archive === 'archived' ? item.archived === true : item.archived !== true) + )); + if (options.search) { + filtered = filtered.filter((item) => itemMatchesLiteralSearch(item, options.search!)); + } + if (options.tags?.length) { + filtered = filtered.filter((item) => itemMatchesTagFilters(item, options.tags!)); + } + filtered.sort((left, right) => compareItems(left, right, sort, direction)); + return { + total: filtered.length, + items: filtered.slice(offset, offset + limit), + }; +} + class LocalItemStore implements ItemStore { readonly kind = 'local' as const; readonly supportsVersions = false; @@ -161,9 +263,15 @@ class LocalItemStore implements ItemStore { return existsSync(this.storePath); } + async list(options: ItemListOptions = {}): Promise<ItemListResult> { + const store = loadStoreIfExists(this.storePath); + const result = boundedLocalList(store.items, options); + return { ...result, exists: store.exists }; + } + async listAll(): Promise<ItemListResult> { const store = loadStoreIfExists(this.storePath); - return { items: store.items, exists: store.exists }; + return { items: store.items, total: store.items.length, exists: store.exists }; } async get(idOrShort: string): Promise<KnowledgeItem | null> { @@ -272,8 +380,26 @@ class ApiItemStore implements ItemStore { return this.cloud.baseUrl; } + async list(options: ItemListOptions = {}): Promise<ItemListResult> { + const result = await this.cloud.list({ + search: options.search, + tags: options.tags, + archive: options.archive, + sort: options.sort, + direction: options.direction, + limit: options.limit, + offset: options.offset, + }); + return { + items: result.items, + total: result.total, + exists: true, + }; + } + async listAll(): Promise<ItemListResult> { - return { items: await fetchAllCloudItems(this.cloud), exists: true }; + const items = await fetchAllCloudItems(this.cloud); + return { items, total: items.length, exists: true }; } async get(idOrShort: string): Promise<KnowledgeItem | null> { diff --git a/src/mcp.js b/src/mcp.js index 91ad70c..776a43b 100644 --- a/src/mcp.js +++ b/src/mcp.js @@ -154,8 +154,8 @@ function openProjectDb(service = projectService()) { async function itemResources(storePath, scope = 'project') { const store = itemStoreFor(storePath, scope); - const { items } = await store.listAll(); - return activeItems(items, false).slice(0, 100).map((item) => ({ + const { items } = await store.list({ archive: 'active', limit: 100, offset: 0 }); + return items.map((item) => ({ uri: `knowledge://project/items/${encodeURIComponent(item.id)}`, name: item.title, description: `Knowledge item ${item.id}`, @@ -1542,30 +1542,27 @@ export function buildServer() { include_archived: z.boolean().optional().describe('Include archived items'), include_content: z.boolean().optional().describe('Include full item content in each list row; default false to keep agent output compact'), include_metadata: z.boolean().optional().describe('Include full item metadata in each list row; default false to keep agent output compact'), - page: z.number().optional().describe('Page number'), - limit: z.number().optional().describe('Items per page'), + page: z.number().int().min(1).optional().describe('Page number'), + limit: z.number().int().min(1).max(200).optional().describe('Items per page'), sort: z.enum(['created', 'title']).optional().describe('Sort field'), desc: z.boolean().optional().describe('Sort descending'), store_path: storePathField, scope: scopeField, }, async ({ search, tag, include_archived, include_content, include_metadata, page, limit, sort, desc, store_path, scope }) => { const store = itemStoreFor(store_path, scope); - const { items: all } = await store.listAll(); - const q = search ? search.toLowerCase() : ''; - const requiredTags = (tag ?? []).map((entry) => entry.toLowerCase()); - let items = activeItems(all, include_archived); - if (q) items = items.filter((item) => itemMatchesSearch(item, q)); - if (requiredTags.length > 0) { - items = items.filter((item) => { - const itemTags = (item.tags ?? []).map((entry) => entry.toLowerCase()); - return requiredTags.every((entry) => itemTags.includes(entry)); - }); - } - const p = page && page > 0 ? page : 1; - const l = limit && limit > 0 ? limit : 20; - const sorted = sortItems(items, sort ?? 'created', desc ?? false); + const p = page ?? 1; + const l = limit ?? 20; const start = (p - 1) * l; - const rows = sorted.slice(start, start + l); + const result = await store.list({ + search, + tags: tag ?? [], + archive: include_archived ? 'all' : 'active', + sort: sort ?? 'created', + direction: desc ? 'desc' : 'asc', + limit: l, + offset: start, + }); + const rows = result.items; const compactRows = rows.map((item) => compactItem(item, { includeContent: include_content === true, includeMetadata: include_metadata === true, @@ -1574,8 +1571,8 @@ export function buildServer() { ok: true, page: p, limit: l, - total: sorted.length, - total_pages: Math.max(1, Math.ceil(sorted.length / l)), + total: result.total, + total_pages: Math.max(1, Math.ceil(result.total / l)), items: compactRows, detail_hint: 'Use ok_get with an id for full item details, or set include_content/include_metadata for expanded list rows.', }); diff --git a/src/query-contract.ts b/src/query-contract.ts new file mode 100644 index 0000000..104427b --- /dev/null +++ b/src/query-contract.ts @@ -0,0 +1,18 @@ +/** + * Response marker proving that the server applied the bounded Knowledge query + * contract. New clients require it whenever an older server could otherwise + * ignore a query field and return a plausible, but semantically wrong, page. + */ +export const KNOWLEDGE_BOUNDED_QUERY_CAPABILITY = 'hasna.knowledge.bounded-query.v1' as const; + +export interface KnowledgeBoundedQueryEnvelope { + query_capability: typeof KNOWLEDGE_BOUNDED_QUERY_CAPABILITY; +} + +export function hasKnowledgeBoundedQueryCapability(value: unknown): value is KnowledgeBoundedQueryEnvelope { + return Boolean( + value + && typeof value === 'object' + && (value as { query_capability?: unknown }).query_capability === KNOWLEDGE_BOUNDED_QUERY_CAPABILITY, + ); +} diff --git a/src/sdk.ts b/src/sdk.ts index 6f5da87..93d868e 100644 --- a/src/sdk.ts +++ b/src/sdk.ts @@ -8,6 +8,7 @@ import type { ItemStore, ItemCreateInput, ItemPatch, + ItemListOptions, ItemListResult, } from './item-store.js'; @@ -21,7 +22,7 @@ import type { export interface KnowledgeItemsSdk { /** The resolved Store for this scope (`kind: 'local' | 'api'`). */ readonly store: () => ItemStore; - readonly list: () => Promise<ItemListResult>; + readonly list: (options?: ItemListOptions) => Promise<ItemListResult>; readonly get: (idOrShort: string) => Promise<KnowledgeItem | null>; readonly create: (input: ItemCreateInput) => Promise<KnowledgeItem>; readonly update: (idOrShort: string, patch: ItemPatch) => Promise<KnowledgeItem | null>; @@ -210,7 +211,7 @@ export function createKnowledgeClient(options: KnowledgeClientOptions = {}): Kno }, items: { store: () => service.itemStore(), - list: () => service.listItems(), + list: (options = {}) => service.listItems(options), get: (idOrShort) => service.getItem(idOrShort), create: (input) => service.createItem(input), update: (idOrShort, patch) => service.updateItem(idOrShort, patch), diff --git a/src/search.ts b/src/search.ts index 9044191..dfc0170 100644 --- a/src/search.ts +++ b/src/search.ts @@ -777,3 +777,41 @@ export async function hybridSearchItems( results, }; } + +/** + * Adapt an already-ranked, bounded producer page into the public hybrid-search + * result shape without fetching or re-ranking the collection in the client. + */ +export function hybridSearchFromProducerPage( + hits: readonly { item: KnowledgeItem; rank: number }[], + options: Pick<HybridSearchOptions, 'query' | 'limit' | 'offset' | 'semantic'>, + warnings: string[] = [], + producerTotal: number = hits.length, +): HybridSearchResult { + const query = options.query.trim(); + if (!query) throw new Error('Search query is required.'); + const limit = Math.max(1, Math.min(options.limit ?? 10, 100)); + const offset = Math.max(0, Math.floor(options.offset ?? 0)); + const results = hits.map(({ item, rank }) => legacyItemResult(item, rank)); + return { + query, + limit, + offset, + mode: { + keyword: true, + catalog: true, + semantic: options.semantic === true, + }, + semantic_provider: null, + semantic_model: null, + semantic_dimensions: null, + counts: { + keyword_results: producerTotal, + catalog_results: 0, + semantic_results: 0, + merged_results: results.length, + }, + warnings, + results, + }; +} diff --git a/src/serve.ts b/src/serve.ts index 604967d..2ad1008 100644 --- a/src/serve.ts +++ b/src/serve.ts @@ -34,12 +34,19 @@ import { import { KNOWLEDGE_GUARDED_WRITE_CONTRACT, KNOWLEDGE_PRIVATE_INPUT_SCHEMA, + KNOWLEDGE_PRIVATE_QUERY_SCHEMA, KNOWLEDGE_PRIVATE_TITLE_LOOKUP_SCHEMA, + KNOWLEDGE_RELATIONS_METADATA_KEY, + KNOWLEDGE_RELATIONS_SCHEMA, assertKnowledgeGuardedBinding, assertKnowledgeGuardedBounds, assertKnowledgeGuardedManifestOptions, assertKnowledgeGuardedPayload, assertKnowledgeGuardedPrecondition, + assertKnowledgePrivateQueryBounds, + assertKnowledgePrivateQueryPage, + assertKnowledgePrivateQuerySelector, + assertKnowledgeRelationsMetadata, canonicalKnowledgeGuardedJson, computeKnowledgeGuardedAdoptionDeterministicKey, computeKnowledgeGuardedAdoptionReceiptId, @@ -51,7 +58,9 @@ import { knowledgeGuardedDigest, knowledgeGuardedContentSha256, knowledgeGuardedUtf8Bytes, + knowledgePrivateHistoricalQueryItemProof, knowledgePrivateItemProof, + knowledgePrivateQueryItemProof, normalizeKnowledgeGuardedLimits, type CreateKnowledgeGuardedManifestOptions, type KnowledgeAuthorityBinding, @@ -75,9 +84,14 @@ import { type KnowledgeGuardedTitleLookup, type KnowledgeGuardedTitleLookupEnvelope, type KnowledgeGuardedWriteEnvelope, + type KnowledgePrivateQueryBounds, + type KnowledgePrivateQueryEnvelope, + type KnowledgePrivateQueryResult, + type KnowledgePrivateQuerySelector, type KnowledgeTerminalReconciliation, } from './guarded-write-contract.js'; import type { PoolQueryClient, TypedQueryClient } from './generated/storage-kit/index.js'; +import { KNOWLEDGE_BOUNDED_QUERY_CAPABILITY } from './query-contract.js'; export const KNOWLEDGE_SERVE_APP = 'knowledge'; @@ -112,7 +126,7 @@ function resolveVersion(): string { const pkg = JSON.parse(readFileSync(url, 'utf8')) as { version?: string }; return pkg.version ?? '0.0.0'; } catch { - return process.env.npm_package_version ?? '0.0.0'; + return '0.0.0'; } } @@ -149,8 +163,25 @@ export interface NoteInput { export interface NoteListOptions { limit?: number; offset?: number; - search?: string; - includeArchived?: boolean; + /** Literal case-insensitive id/title/content filter. */ + filter?: string; + /** Repeated raw tag filters; every raw filter narrows the result. */ + tags?: string[]; + archive?: 'active' | 'archived' | 'all'; + sort?: 'created' | 'title'; + direction?: 'asc' | 'desc'; +} + +export interface NoteSearchOptions { + query: string; + limit?: number; + offset?: number; + archive?: 'active' | 'archived' | 'all'; +} + +export interface NoteSearchHit { + item: KnowledgeItem; + rank: number; } /** @@ -208,6 +239,20 @@ function parseJsonColumn<T>(value: unknown, fallback: T): T { return value as T; } +function boundedInteger( + value: number | undefined, + fallback: number, + field: string, + minimum: number, + maximum: number, +): number { + const resolved = value ?? fallback; + if (!Number.isFinite(resolved) || !Number.isInteger(resolved) || resolved < minimum || resolved > maximum) { + throw new HttpError(400, `${field} must be an integer between ${minimum} and ${maximum}.`); + } + return resolved; +} + function rowToVersion(row: Record<string, unknown>): NoteVersion { return { id: String(row.id), @@ -291,6 +336,13 @@ export class NoteRepo { } const now = new Date().toISOString(); const suppliedId = typeof input.id === 'string' ? input.id.trim() : ''; + if (input.metadata) { + try { + assertKnowledgeRelationsMetadata(input.metadata, suppliedId || undefined); + } catch (error) { + throw new HttpError(400, error instanceof Error ? error.message : 'invalid relation metadata.'); + } + } if (suppliedId) { const guarded = await this.client.get<{ guarded: boolean }>( `SELECT TRUE AS guarded FROM knowledge_items @@ -358,8 +410,8 @@ export class NoteRepo { options: NoteListOptions = {}, guardedTenantId?: string, ): Promise<{ items: KnowledgeItem[]; total: number }> { - const limit = Math.min(Math.max(options.limit ?? 50, 1), 200); - const offset = Math.max(options.offset ?? 0, 0); + const limit = boundedInteger(options.limit, 50, 'limit', 1, 200); + const offset = boundedInteger(options.offset, 0, 'offset', 0, 10_000); const params: unknown[] = []; const where: string[] = []; if (guardedTenantId) { @@ -368,25 +420,47 @@ export class NoteRepo { } else { where.push('authority_classification IS NULL'); } - if (!options.includeArchived) where.push('archived = FALSE'); - - // Full-text search via the weighted tsvector generated column + GIN index - // (see pg-migrations.ts). websearch_to_tsquery gives users implicit-AND, - // "phrases", and OR/-negation; ts_rank_cd ranks by relevance (title - // weighted over content) with created_at as a deterministic tiebreak. - // Replaces the old ILIKE-substring + recency-only path that returned - // materially different / near-empty results in cloud vs local. - const search = options.search?.trim(); - let tsQueryExpr: string | null = null; - if (search) { - params.push(search); - tsQueryExpr = `websearch_to_tsquery('english', $${params.length})`; - where.push(`search_vector @@ ${tsQueryExpr}`); + const archive = options.archive ?? 'active'; + if (archive === 'active') where.push('archived = FALSE'); + else if (archive === 'archived') where.push('archived = TRUE'); + + const filter = options.filter?.trim(); + if (filter) { + params.push(filter); + const position = params.length; + where.push( + `(strpos(LOWER(id), LOWER($${position})) > 0 + OR strpos(LOWER(title), LOWER($${position})) > 0 + OR strpos(LOWER(content), LOWER($${position})) > 0)`, + ); + } + for (const raw of options.tags ?? []) { + const whole = raw.trim().toLowerCase(); + const parts = raw.split(',').map((tag) => tag.trim().toLowerCase()).filter(Boolean); + const tagPredicates: string[] = []; + if (whole) { + params.push(whole); + tagPredicates.push(`EXISTS ( + SELECT 1 FROM jsonb_array_elements_text(tags) AS item_tag + WHERE LOWER(item_tag) = $${params.length} + )`); + } + if (parts.length > 0) { + const partPredicates = parts.map((part) => { + params.push(part); + return `EXISTS ( + SELECT 1 FROM jsonb_array_elements_text(tags) AS item_tag + WHERE LOWER(item_tag) = $${params.length} + )`; + }); + tagPredicates.push(`(${partPredicates.join(' AND ')})`); + } + if (tagPredicates.length > 0) where.push(`(${tagPredicates.join(' OR ')})`); } const whereSql = where.length ? `WHERE ${where.join(' AND ')}` : ''; - const orderSql = tsQueryExpr - ? `ORDER BY ts_rank_cd(search_vector, ${tsQueryExpr}) DESC, created_at DESC` - : 'ORDER BY created_at DESC'; + const sortColumn = options.sort === 'title' ? 'title' : 'created_at'; + const direction = options.direction === 'desc' ? 'DESC' : 'ASC'; + const orderSql = `ORDER BY ${sortColumn} ${direction}, id ${direction}`; const totalRow = await this.client.get<{ count: string }>( `SELECT count(*)::text AS count FROM knowledge_items ${whereSql}`, @@ -399,6 +473,54 @@ export class NoteRepo { return { items: rows.map(rowToItem), total: Number(totalRow?.count ?? 0) }; } + /** + * Ranked producer-side PostgreSQL full-text query. This endpoint is separate + * from list filtering so public list compatibility remains literal. + */ + async search( + options: NoteSearchOptions, + guardedTenantId?: string, + ): Promise<{ items: NoteSearchHit[]; total: number }> { + const query = options.query.trim(); + if (!query) throw new HttpError(400, 'q is required'); + const limit = boundedInteger(options.limit, 20, 'limit', 1, 200); + const offset = boundedInteger(options.offset, 0, 'offset', 0, 10_000); + const params: unknown[] = []; + const where: string[] = []; + if (guardedTenantId) { + params.push(guardedTenantId); + where.push(`(authority_classification IS NULL OR tenant_id = $${params.length})`); + } else { + where.push('authority_classification IS NULL'); + } + const archive = options.archive ?? 'active'; + if (archive === 'active') where.push('archived = FALSE'); + else if (archive === 'archived') where.push('archived = TRUE'); + params.push(query); + const tsQueryExpr = `websearch_to_tsquery('english', $${params.length})`; + where.push(`search_vector @@ ${tsQueryExpr}`); + const whereSql = `WHERE ${where.join(' AND ')}`; + const totalRow = await this.client.get<{ count: string }>( + `SELECT count(*)::text AS count FROM knowledge_items ${whereSql}`, + params, + ); + const rows = await this.client.many<Record<string, unknown>>( + `SELECT *, ts_rank_cd(search_vector, ${tsQueryExpr}) AS search_rank + FROM knowledge_items + ${whereSql} + ORDER BY search_rank DESC, created_at DESC, id ASC + LIMIT ${limit} OFFSET ${offset}`, + params, + ); + return { + items: rows.map((row) => ({ + item: rowToItem(row), + rank: Number(row.search_rank ?? 0), + })), + total: Number(totalRow?.count ?? 0), + }; + } + async get(idOrShort: string, guardedTenantId?: string): Promise<KnowledgeItem | null> { const guardedVisibility = guardedTenantId ? 'AND (authority_classification IS NULL OR tenant_id = $2)' @@ -420,6 +542,13 @@ export class NoteRepo { ): Promise<KnowledgeItem | null> { const existing = await this.get(idOrShort); if (!existing) return null; + if (patch.metadata !== undefined) { + try { + assertKnowledgeRelationsMetadata(patch.metadata, existing.id); + } catch (error) { + throw new HttpError(400, error instanceof Error ? error.message : 'invalid relation metadata.'); + } + } const sets: string[] = []; const params: unknown[] = []; const push = (col: string, val: unknown, cast = '') => { @@ -631,6 +760,15 @@ function rowMatchesGuardedBinding(row: Record<string, unknown>, binding: Knowled ); } +function guardedRelationTargets(payload: KnowledgeGuardedPayload): string[] { + if (!('metadata' in payload) || !payload.metadata) return []; + const relation = payload.metadata[KNOWLEDGE_RELATIONS_METADATA_KEY]; + if (!relation || typeof relation !== 'object' || Array.isArray(relation)) return []; + const value = relation as Record<string, unknown>; + return [value.supersedes_item_id, value.canonical_item_id] + .filter((target): target is string => typeof target === 'string'); +} + function rowToManifestStep(row: Record<string, unknown>): KnowledgeGuardedManifestStep { return { ordinal: Number(row.ordinal), @@ -1683,6 +1821,42 @@ class GuardedWriteRepo { }; } + for (const targetId of guardedRelationTargets(envelope.payload)) { + const target = await tx.get<{ id: string }>( + `SELECT id FROM knowledge_items + WHERE id = $1 + AND authority_classification = $2 + AND authority_id = $3 + AND tenant_id = $4 + AND scope = $5 + AND parent_id = $6 + LIMIT 1`, + [ + targetId, + binding.authority.classification, + binding.authority.authority_id, + binding.tenant_id, + binding.scope, + binding.parent_id, + ], + ); + if (!target) { + const receipt = await this.finish( + tx, + envelope, + 'rejected', + 'relation_binding_mismatch', + null, + ); + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + deterministic_key: envelope.deterministic_key, + receipt, + duplicate: false, + }; + } + } + if (descriptor.verb === 'create') { const payload = envelope.payload as Extract<KnowledgeGuardedPayload, { title: string }>; const now = new Date().toISOString(); @@ -1980,6 +2154,189 @@ class GuardedWriteRepo { }; } + async query( + selector: KnowledgePrivateQuerySelector, + selectorDigest: string, + archive: 'active' | 'archived' | 'all', + page: { limit: number; offset: number }, + binding: KnowledgeGuardedBinding, + limits: KnowledgePrivateQueryBounds, + ): Promise<KnowledgePrivateQueryResult> { + if (selector.kind === 'semantic_overlap') { + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + exact: true, + bounded: true, + private: true, + query_kind: selector.kind, + status: 'unavailable', + code: 'semantic_query_unavailable', + binding, + selector_digest: selectorDigest, + total: 0, + item_count: 0, + page: { + limit: page.limit, + offset: page.offset, + returned: 0, + has_more: false, + }, + items: [], + limits, + }; + } + + const bindingParams: unknown[] = [ + binding.authority.classification, + binding.authority.authority_id, + binding.tenant_id, + binding.scope, + binding.parent_id, + ]; + const currentWhere = [ + 'authority_classification = $1', + 'authority_id = $2', + 'tenant_id = $3', + 'scope = $4', + 'parent_id = $5', + ]; + if (archive === 'active') currentWhere.push('archived = FALSE'); + else if (archive === 'archived') currentWhere.push('archived = TRUE'); + let currentOrder = 'ORDER BY id ASC'; + let matchedValue: string; + + if (selector.kind === 'historical_version') { + const params: unknown[] = [...bindingParams, selector.item_id, selector.version]; + const historyWhere = [ + 'i.authority_classification = $1', + 'i.authority_id = $2', + 'i.tenant_id = $3', + 'i.scope = $4', + 'i.parent_id = $5', + 'v.item_id = $6', + 'v.version = $7', + ]; + if (archive === 'active') historyWhere.push('v.archived = FALSE'); + else if (archive === 'archived') historyWhere.push('v.archived = TRUE'); + const whereSql = `WHERE ${historyWhere.join(' AND ')}`; + const totalRow = await this.client.get<{ count: string }>( + `SELECT count(*)::text AS count + FROM knowledge_item_versions v + JOIN knowledge_items i ON i.id = v.item_id + ${whereSql}`, + params, + ); + const rows = await this.client.many<Record<string, unknown>>( + `SELECT v.* + FROM knowledge_item_versions v + JOIN knowledge_items i ON i.id = v.item_id + ${whereSql} + ORDER BY v.version ASC + LIMIT ${page.limit} OFFSET ${page.offset}`, + params, + ); + const total = Number(totalRow?.count ?? 0); + const items = rows.map((row) => ( + knowledgePrivateHistoricalQueryItemProof(rowToVersion(row), selector.item_id) + )); + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + exact: true, + bounded: true, + private: true, + query_kind: selector.kind, + status: 'available', + code: null, + binding, + selector_digest: selectorDigest, + total, + item_count: items.length, + page: { + limit: page.limit, + offset: page.offset, + returned: items.length, + has_more: page.offset + items.length < total, + }, + items, + limits, + }; + } + + switch (selector.kind) { + case 'exact_title': + bindingParams.push(selector.title); + currentWhere.push(`title = $${bindingParams.length}`); + matchedValue = selector.title; + break; + case 'lexical_overlap': { + bindingParams.push(selector.query); + const tsQuery = `websearch_to_tsquery('english', $${bindingParams.length})`; + currentWhere.push(`search_vector @@ ${tsQuery}`); + currentOrder = `ORDER BY ts_rank_cd(search_vector, ${tsQuery}) DESC, id ASC`; + matchedValue = selector.query; + break; + } + case 'supersession': + bindingParams.push(KNOWLEDGE_RELATIONS_SCHEMA, selector.supersedes_item_id); + currentWhere.push( + `metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},schema}' = $${bindingParams.length - 1}`, + `metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},supersedes_item_id}' = $${bindingParams.length}`, + ); + matchedValue = selector.supersedes_item_id; + break; + case 'current_version': + bindingParams.push(selector.item_id); + currentWhere.push(`id = $${bindingParams.length}`); + matchedValue = selector.item_id; + break; + case 'canonical_pointer': + bindingParams.push(KNOWLEDGE_RELATIONS_SCHEMA, selector.canonical_item_id); + currentWhere.push( + `metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},schema}' = $${bindingParams.length - 1}`, + `metadata #>> '{${KNOWLEDGE_RELATIONS_METADATA_KEY},canonical_item_id}' = $${bindingParams.length}`, + ); + matchedValue = selector.canonical_item_id; + break; + default: + throw new HttpError(400, 'private query selector kind is unsupported.'); + } + const whereSql = `WHERE ${currentWhere.join(' AND ')}`; + const totalRow = await this.client.get<{ count: string }>( + `SELECT count(*)::text AS count FROM knowledge_items ${whereSql}`, + bindingParams, + ); + const rows = await this.client.many<Record<string, unknown>>( + `SELECT * FROM knowledge_items + ${whereSql} + ${currentOrder} + LIMIT ${page.limit} OFFSET ${page.offset}`, + bindingParams, + ); + const total = Number(totalRow?.count ?? 0); + const items = rows.map((row) => knowledgePrivateQueryItemProof(rowToItem(row), matchedValue)); + return { + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + exact: true, + bounded: true, + private: true, + query_kind: selector.kind, + status: 'available', + code: null, + binding, + selector_digest: selectorDigest, + total, + item_count: items.length, + page: { + limit: page.limit, + offset: page.offset, + returned: items.length, + has_more: page.offset + items.length < total, + }, + items, + limits, + }; + } + async readback( fullId: string, binding: KnowledgeGuardedBinding, @@ -2261,8 +2618,34 @@ export function knowledgeOpenApi(version: string): Record<string, unknown> { properties: { items: { type: 'array', items: { $ref: '#/components/schemas/Note' } }, total: { type: 'integer' }, + query_capability: { + type: 'string', + enum: [KNOWLEDGE_BOUNDED_QUERY_CAPABILITY], + }, }, - required: ['items', 'total'], + required: ['items', 'total', 'query_capability'], + }, + NoteSearchList: { + type: 'object', + properties: { + items: { + type: 'array', + items: { + type: 'object', + properties: { + item: { $ref: '#/components/schemas/Note' }, + rank: { type: 'number' }, + }, + required: ['item', 'rank'], + }, + }, + total: { type: 'integer' }, + query_capability: { + type: 'string', + enum: [KNOWLEDGE_BOUNDED_QUERY_CAPABILITY], + }, + }, + required: ['items', 'total', 'query_capability'], }, NoteVersionList: { type: 'object', @@ -2281,14 +2664,42 @@ export function knowledgeOpenApi(version: string): Record<string, unknown> { '/v1/notes': { get: { operationId: 'listNotes', - summary: 'List knowledge items', + summary: 'List knowledge items with literal filters and bounded paging', parameters: [ { name: 'limit', in: 'query', schema: { type: 'integer' } }, { name: 'offset', in: 'query', schema: { type: 'integer' } }, - { name: 'search', in: 'query', schema: { type: 'string' } }, + { name: 'filter', in: 'query', schema: { type: 'string' } }, + { + name: 'search', + in: 'query', + deprecated: true, + description: 'Legacy alias for filter.', + schema: { type: 'string' }, + }, + { + name: 'tags', + in: 'query', + style: 'form', + explode: true, + schema: { type: 'array', items: { type: 'string' } }, + }, + { name: 'archive', in: 'query', schema: { type: 'string', enum: ['active', 'archived', 'all'] } }, + { + name: 'includeArchived', + in: 'query', + deprecated: true, + description: 'Legacy alias: true maps to archive=all.', + schema: { type: 'boolean' }, + }, + { name: 'sort', in: 'query', schema: { type: 'string', enum: ['created', 'title'] } }, + { name: 'direction', in: 'query', schema: { type: 'string', enum: ['asc', 'desc'] } }, ], responses: { - '200': { content: { 'application/json': { schema: { $ref: '#/components/schemas/NoteList' } } } }, + '200': { + content: { + 'application/json': { schema: { $ref: '#/components/schemas/NoteList' } }, + }, + }, }, }, post: { @@ -2303,6 +2714,25 @@ export function knowledgeOpenApi(version: string): Record<string, unknown> { }, }, }, + '/v1/notes/search': { + get: { + operationId: 'searchNotes', + summary: 'Ranked PostgreSQL full-text query with bounded paging', + parameters: [ + { name: 'q', in: 'query', required: true, schema: { type: 'string' } }, + { name: 'limit', in: 'query', schema: { type: 'integer' } }, + { name: 'offset', in: 'query', schema: { type: 'integer' } }, + { name: 'archive', in: 'query', schema: { type: 'string', enum: ['active', 'archived', 'all'] } }, + ], + responses: { + '200': { + content: { + 'application/json': { schema: { $ref: '#/components/schemas/NoteSearchList' } }, + }, + }, + }, + }, + }, '/v1/notes/{id}': { get: { operationId: 'getNote', @@ -2469,6 +2899,31 @@ export function knowledgeOpenApi(version: string): Record<string, unknown> { }, }, }, + '/v1/guarded-writes/queries': { + post: { + operationId: 'queryGuardedKnowledge', + summary: 'Bounded private Knowledge query under one frozen FCAME-1 binding', + description: + 'The raw selector exists only in this authenticated request body. ' + + 'The response contains hashes, versions, page evidence, and no raw selector or item id.', + requestBody: { + required: true, + content: { + 'application/json': { + schema: { + type: 'object', + required: ['contract', 'descriptor', 'selector', 'limits'], + additionalProperties: false, + }, + }, + }, + }, + responses: { + '200': { description: 'Exact bounded private result or typed semantic unavailability.' }, + '400': { description: 'Descriptor, selector, binding digest, page, or bounds mismatch.' }, + }, + }, + }, '/v1/guarded-writes/receipts/{deterministicKey}': { get: { operationId: 'reconcileGuardedKnowledgeWrite', @@ -2608,6 +3063,21 @@ function guardedBoundsFromHeaders(req: Request): KnowledgeGuardedBounds { return bounds; } +function privateQueryBoundsFromHeaders(req: Request): KnowledgePrivateQueryBounds { + const bounds = { + max_calls: parsePositiveInteger(req.headers.get('x-knowledge-max-calls'), 'x-knowledge-max-calls'), + max_items: parsePositiveInteger(req.headers.get('x-knowledge-max-items'), 'x-knowledge-max-items'), + max_bytes: parsePositiveInteger(req.headers.get('x-knowledge-max-bytes'), 'x-knowledge-max-bytes'), + wall_time_ms: parsePositiveInteger(req.headers.get('x-knowledge-wall-time-ms'), 'x-knowledge-wall-time-ms'), + }; + try { + assertKnowledgePrivateQueryBounds(bounds); + } catch (error) { + throw new HttpError(400, error instanceof Error ? error.message : 'invalid private query bounds.'); + } + return bounds; +} + function guardedBoundsFromQuery(req: Request, url: URL): KnowledgeGuardedBounds { const fromHeaders = guardedBoundsFromHeaders(req); const fromQuery = { @@ -2772,6 +3242,9 @@ function validateGuardedEnvelope( assertConfiguredAuthority(descriptor.binding, authority); assertKnowledgeGuardedPrecondition(descriptor.verb, descriptor.precondition); assertKnowledgeGuardedPayload(descriptor.verb, envelope.payload); + if ('metadata' in envelope.payload && envelope.payload.metadata) { + assertKnowledgeRelationsMetadata(envelope.payload.metadata, descriptor.target_id); + } const limits = normalizeKnowledgeGuardedLimits(envelope.limits); if (canonicalKnowledgeGuardedJson(limits) !== canonicalKnowledgeGuardedJson(envelope.limits)) { throw new Error('guarded-write limits must be explicit and complete.'); @@ -2911,6 +3384,107 @@ function validatePrivateTitleLookupEnvelope( } } +function validatePrivateQueryEnvelope( + value: unknown, + headerBounds: KnowledgePrivateQueryBounds, + authority: KnowledgeServeGuardedAuthority, +): KnowledgePrivateQueryEnvelope { + try { + if (!value || typeof value !== 'object') { + throw new Error('private query envelope is required.'); + } + const envelope = value as KnowledgePrivateQueryEnvelope; + assertExactRequestKeys( + value as Record<string, unknown>, + 'private query envelope', + ['contract', 'descriptor', 'selector', 'limits'], + ); + if (envelope.contract !== KNOWLEDGE_GUARDED_WRITE_CONTRACT) { + throw new Error('unsupported guarded-write contract.'); + } + const descriptor = envelope.descriptor; + if ( + !descriptor + || descriptor.contract !== KNOWLEDGE_GUARDED_WRITE_CONTRACT + || descriptor.schema !== KNOWLEDGE_PRIVATE_QUERY_SCHEMA + ) { + throw new Error('invalid private query descriptor schema.'); + } + assertExactRequestKeys( + descriptor as Record<string, unknown>, + 'private query descriptor', + [ + 'contract', + 'schema', + 'operation_id', + 'step_id', + 'query_kind', + 'selector_digest', + 'binding_digest', + 'binding', + 'archive', + 'page', + 'expires_at', + ], + ); + if ( + typeof descriptor.operation_id !== 'string' + || descriptor.operation_id.length === 0 + || typeof descriptor.step_id !== 'string' + || descriptor.step_id.length === 0 + || !['active', 'archived', 'all'].includes(descriptor.archive) + ) { + throw new Error('private query operation, step, and archive mode are required.'); + } + const descriptorExpiresAt = Date.parse(descriptor.expires_at); + const descriptorNow = Date.now(); + if ( + !Number.isFinite(descriptorExpiresAt) + || descriptorExpiresAt <= descriptorNow + || descriptorExpiresAt > descriptorNow + 60 * 60 * 1000 + ) { + throw new Error('private query descriptor is expired or malformed.'); + } + assertKnowledgeGuardedBinding(descriptor.binding); + assertConfiguredAuthority(descriptor.binding, authority); + assertKnowledgePrivateQueryBounds(envelope.limits); + assertKnowledgePrivateQueryPage(descriptor.page, envelope.limits); + if (canonicalKnowledgeGuardedJson(envelope.limits) !== canonicalKnowledgeGuardedJson(headerBounds)) { + throw new Error('private query limits must exactly match the producer bound headers.'); + } + assertKnowledgePrivateQuerySelector(envelope.selector); + if (envelope.selector.kind !== descriptor.query_kind) { + throw new Error('private query selector kind does not match the frozen descriptor.'); + } + const selectorDigest = knowledgeGuardedDigest(envelope.selector); + if (selectorDigest !== descriptor.selector_digest) { + throw new Error('private query selector digest does not match the frozen descriptor.'); + } + const bindingDigest = knowledgeGuardedDigest({ + binding: descriptor.binding, + operation_id: descriptor.operation_id, + step_id: descriptor.step_id, + query_kind: descriptor.query_kind, + selector_digest: descriptor.selector_digest, + archive: descriptor.archive, + page: descriptor.page, + }); + if (bindingDigest !== descriptor.binding_digest) { + throw new Error('private query binding digest does not match.'); + } + if (knowledgeGuardedUtf8Bytes(envelope) > headerBounds.max_bytes) { + throw new Error('private query envelope exceeds the producer byte cap.'); + } + return envelope; + } catch (error) { + if (error instanceof HttpError) throw error; + throw new HttpError( + 400, + error instanceof Error ? error.message : 'invalid private query envelope.', + ); + } +} + function validateGuardedAdoptionEnvelope( value: unknown, headerBounds: KnowledgeGuardedBounds, @@ -3375,6 +3949,31 @@ export function createServeHandler(deps: ServeDeps): (req: Request) => Promise<R } } + if (path === '/v1/guarded-writes/queries' && method === 'POST') { + if (!guardedRepo) { + return json({ error: 'guarded_authority_unconfigured' }, 503); + } + const startedAt = Date.now(); + const tenantId = req.headers.get('x-knowledge-tenant-id'); + if (!tenantId) throw new HttpError(400, 'x-knowledge-tenant-id is required.'); + await authOrThrow(req, ['knowledge:read'], tenantId); + const bounds = privateQueryBoundsFromHeaders(req); + const raw = await readBoundedJson(req, bounds, startedAt); + const envelope = validatePrivateQueryEnvelope(raw, bounds, guardedRepo.authority); + if (envelope.descriptor.binding.tenant_id !== tenantId) { + throw new HttpError(403, 'descriptor tenant does not match the authenticated request tenant.'); + } + const result = await guardedRepo.query( + envelope.selector, + envelope.descriptor.selector_digest, + envelope.descriptor.archive, + envelope.descriptor.page, + envelope.descriptor.binding, + bounds, + ); + return boundedJson(result, 200, bounds, startedAt); + } + const guardedReceiptMatch = path.match(/^\/v1\/guarded-writes\/receipts\/([^/]+)$/); if (guardedReceiptMatch) { if (method !== 'GET') return json({ error: 'method_not_allowed' }, 405); @@ -3418,17 +4017,51 @@ export function createServeHandler(deps: ServeDeps): (req: Request) => Promise<R : boundedJson({ error: 'not_found' }, 404, bounds, startedAt); } - // ---- Notes CRUD ---- + // ---- Notes bounded queries and CRUD ---- + if (path === '/v1/notes/search') { + if (method !== 'GET') return json({ error: 'method_not_allowed' }, 405); + const principal = await authOrThrow(req, ['knowledge:read']); + const query = url.searchParams.get('q') ?? ''; + const archiveRaw = url.searchParams.get('archive') ?? 'active'; + if (!['active', 'archived', 'all'].includes(archiveRaw)) { + throw new HttpError(400, 'archive must be active, archived, or all.'); + } + const result = await repo.search({ + query, + archive: archiveRaw as NoteSearchOptions['archive'], + limit: url.searchParams.has('limit') ? Number(url.searchParams.get('limit')) : undefined, + offset: url.searchParams.has('offset') ? Number(url.searchParams.get('offset')) : undefined, + }, principal.tid); + return json({ ...result, query_capability: KNOWLEDGE_BOUNDED_QUERY_CAPABILITY }); + } + if (path === '/v1/notes') { if (method === 'GET') { const principal = await authOrThrow(req, ['knowledge:read']); + const includeArchived = url.searchParams.get('includeArchived') === 'true'; + const archiveRaw = url.searchParams.get('archive') ?? (includeArchived ? 'all' : 'active'); + const sortRaw = url.searchParams.get('sort') ?? 'created'; + const directionRaw = url.searchParams.get('direction') ?? 'asc'; + if (!['active', 'archived', 'all'].includes(archiveRaw)) { + throw new HttpError(400, 'archive must be active, archived, or all.'); + } + if (!['created', 'title'].includes(sortRaw)) { + throw new HttpError(400, 'sort must be created or title.'); + } + if (!['asc', 'desc'].includes(directionRaw)) { + throw new HttpError(400, 'direction must be asc or desc.'); + } + const tags = url.searchParams.getAll('tags'); const result = await repo.list({ limit: url.searchParams.has('limit') ? Number(url.searchParams.get('limit')) : undefined, offset: url.searchParams.has('offset') ? Number(url.searchParams.get('offset')) : undefined, - search: url.searchParams.get('search') ?? undefined, - includeArchived: url.searchParams.get('includeArchived') === 'true', + filter: url.searchParams.get('filter') ?? url.searchParams.get('search') ?? undefined, + tags: tags.length > 0 ? tags : undefined, + archive: archiveRaw as NoteListOptions['archive'], + sort: sortRaw as NoteListOptions['sort'], + direction: directionRaw as NoteListOptions['direction'], }, principal.tid); - return json(result); + return json({ ...result, query_capability: KNOWLEDGE_BOUNDED_QUERY_CAPABILITY }); } if (method === 'POST') { const principal = await authOrThrow(req, ['knowledge:write']); diff --git a/src/service.ts b/src/service.ts index 68736c5..02a46a3 100644 --- a/src/service.ts +++ b/src/service.ts @@ -24,7 +24,12 @@ import { type KnowledgeAuthStatus, } from './auth'; import { runKnowledgePrompt, runKnowledgePromptOverItems, type KnowledgePromptOptions } from './agent'; -import { isKnowledgeApiMode, resolveKnowledgeCloudStore, fetchAllCloudItems } from './cloud-store'; +import { + isKnowledgeApiMode, + resolveKnowledgeCloudStore, + fetchAllCloudItems, + type KnowledgeCloudStore, +} from './cloud-store'; import { buildKnowledgeAgentContextPack, type KnowledgeAgentContextPack, type KnowledgeAgentContextPackOptions } from './context-pack'; import { proposeKnowledgeSyncConflictResolutionWithAi, @@ -69,12 +74,18 @@ import { type PromoteKnowledgeCandidateOptions, } from './promotion-inbox'; import { enqueueMissingEmbeddings, refreshEmbeddingIndex, reindexHealth, type ReindexRuntimeOptions } from './reindex'; -import { retrieveKnowledgeContext, retrieveKnowledgeContextFromItems, retrieveKnowledgeContextFromSearch, type KnowledgeContextPack, type RetrievalOptions } from './retrieval'; +import { retrieveKnowledgeContext, retrieveKnowledgeContextFromSearch, type KnowledgeContextPack, type RetrievalOptions } from './retrieval'; import { importRulesProvenance, type RulesProvenanceImportResult, } from './rules-provenance'; -import { hybridSearch, hybridSearchItems, hybridSearchLegacyStore, type HybridSearchOptions, type HybridSearchResult } from './search'; +import { + hybridSearch, + hybridSearchFromProducerPage, + hybridSearchLegacyStore, + type HybridSearchOptions, + type HybridSearchResult, +} from './search'; import { recordAuditEvent, redactSecrets, resolveSafetyPolicy, type SafetyPolicy } from './safety'; import { runProviderWebSearch, type WebSearchOptions } from './web-search'; import { @@ -113,6 +124,7 @@ import { type ItemStore, type ItemCreateInput, type ItemPatch, + type ItemListOptions, type ItemListResult, } from './item-store'; import { initializeWikiLayout, recordWikiLayoutCatalog } from './wiki-layout'; @@ -1626,6 +1638,15 @@ function normalizeMode(value: string | undefined): KnowledgeConfig['mode'] | und throw new Error('Invalid setup mode. Use hosted or local.'); } +export class KnowledgeSemanticSearchUnavailableError extends Error { + readonly code = 'semantic_query_unavailable'; + + constructor() { + super('semantic_query_unavailable: the hosted Knowledge item store has no configured vector index.'); + this.name = 'KnowledgeSemanticSearchUnavailableError'; + } +} + export class KnowledgeService { private ensuredWorkspace?: KnowledgeWorkspace; private cachedConfig?: KnowledgeConfig; @@ -1664,9 +1685,9 @@ export class KnowledgeService { }); } - /** List every knowledge item (including archived) via the unified Store. */ - async listItems(): Promise<ItemListResult> { - return this.itemStore().listAll(); + /** Bounded list query via the unified Store. */ + async listItems(options: ItemListOptions = {}): Promise<ItemListResult> { + return this.itemStore().list(options); } /** Fetch one knowledge item by id or short id via the unified Store. */ @@ -2598,28 +2619,26 @@ export class KnowledgeService { return isKnowledgeApiMode(); } + private cloudStore(): KnowledgeCloudStore { + const cloud = resolveKnowledgeCloudStore(); + if (!cloud) { + throw new Error( + 'knowledge: cloud store requested but not resolvable ' + + '(check HASNA_KNOWLEDGE_API_URL + HASNA_KNOWLEDGE_API_KEY).', + ); + } + return cloud; + } + /** Fetch the entire shared knowledge-item corpus from the cloud (api mode). */ private async fetchCloudItems(): Promise<KnowledgeItem[]> { - const cloud = resolveKnowledgeCloudStore(); - if (!cloud) throw new Error('knowledge: cloud store requested but not resolvable (check HASNA_KNOWLEDGE_API_URL + HASNA_KNOWLEDGE_API_KEY).'); - return fetchAllCloudItems(cloud); + return fetchAllCloudItems(this.cloudStore()); } async semanticSearch(options: Omit<EmbeddingSearchOptions, 'dbPath' | 'config'>) { const workspace = this.workspace; if (this.isApiMode()) { - // The vector index lives only in the local sqlite catalog. In cloud mode - // fall back to lexical search over the shared cloud item corpus rather - // than throwing — semantic ranking is reported as unavailable. - const items = await this.fetchCloudItems(); - const search = await hybridSearchItems(items, { ...options }, ['semantic_search_requires_local_catalog']); - return { - provider: 'openai' as const, - model: 'text-embedding-3-small', - dimensions: options.dimensions ?? 1536, - query: options.query, - results: search.results, - }; + throw new KnowledgeSemanticSearchUnavailableError(); } if (!existsSync(workspace.knowledgeDbPath)) { return { @@ -2640,8 +2659,16 @@ export class KnowledgeService { async search(options: Omit<HybridSearchOptions, 'dbPath' | 'config'>) { const workspace = this.workspace; if (this.isApiMode()) { - const items = await this.fetchCloudItems(); - return hybridSearchItems(items, options); + if (options.semantic === true || options.fake === true || Boolean(options.modelRef)) { + throw new KnowledgeSemanticSearchUnavailableError(); + } + const producer = await this.cloudStore().search({ + query: options.query, + archive: 'active', + limit: options.limit, + offset: options.offset, + }); + return hybridSearchFromProducerPage(producer.items, options, [], producer.total); } const legacyStorePath = legacyStorePathForRead(this.scope, workspace, options.legacyStorePath); if (!existsSync(workspace.knowledgeDbPath)) { @@ -2669,8 +2696,10 @@ export class KnowledgeService { async retrieveContext(options: Omit<RetrievalOptions, 'dbPath' | 'config'>) { const workspace = this.workspace; if (this.isApiMode()) { - const items = await this.fetchCloudItems(); - return retrieveKnowledgeContextFromItems(items, options); + const search = await this.search(options); + return retrieveKnowledgeContextFromSearch(search, { + contextChars: options.contextChars, + }); } const legacyStorePath = legacyStorePathForRead(this.scope, workspace, options.legacyStorePath); if (!existsSync(workspace.knowledgeDbPath)) { @@ -2703,8 +2732,7 @@ export class KnowledgeService { if (this.isApiMode()) { const query = (options.query ?? options.topic ?? '').trim(); if (query && options.source !== 'loops' && options.source !== 'runs') { - const items = await this.fetchCloudItems(); - const search = await hybridSearchItems(items, { ...options, query }); + const search = await this.search({ ...options, query }); const context = retrieveKnowledgeContextFromSearch(search, { contextChars: options.contextChars }); return legacyAgentContextPack(options, context, this.safetyPolicy()); } @@ -2738,8 +2766,31 @@ export class KnowledgeService { async runPrompt(options: Omit<KnowledgePromptOptions, 'dbPath' | 'config'>) { if (this.isApiMode()) { - const items = await this.fetchCloudItems(); - return runKnowledgePromptOverItems(items, { ...options, config: this.config() }); + if (options.semantic === true || options.fake === true || Boolean(options.modelRef)) { + throw new KnowledgeSemanticSearchUnavailableError(); + } + const producer = await this.cloudStore().search({ + query: options.prompt, + archive: 'active', + limit: options.limit, + offset: options.offset, + }); + const producerSearch = hybridSearchFromProducerPage( + producer.items, + { + query: options.prompt, + limit: options.limit, + offset: options.offset, + semantic: false, + }, + [], + producer.total, + ); + return runKnowledgePromptOverItems( + producer.items.map((hit) => hit.item), + { ...options, config: this.config() }, + producerSearch, + ); } const workspace = this.ensureWorkspace(); const legacyStorePath = options.legacyStorePath ?? workspace.jsonStorePath; diff --git a/tests/cloud-inventory.test.ts b/tests/cloud-inventory.test.ts index 5b64546..4928a61 100644 --- a/tests/cloud-inventory.test.ts +++ b/tests/cloud-inventory.test.ts @@ -1,4 +1,4 @@ -import { afterAll, beforeAll, describe, expect, test } from 'bun:test'; +import { afterAll, beforeAll, beforeEach, describe, expect, test } from 'bun:test'; import { createKnowledgeService } from '../src/service'; /** @@ -17,6 +17,7 @@ const NOTES = [ let server: { port: number; stop: () => void }; const savedEnv: Record<string, string | undefined> = {}; +const listRequests: URL[] = []; beforeAll(() => { server = Bun.serve({ @@ -24,8 +25,11 @@ beforeAll(() => { fetch(req) { const url = new URL(req.url); if (url.pathname === '/v1/notes' && req.method === 'GET') { - const includeArchived = url.searchParams.get('includeArchived') === 'true'; - const items = includeArchived ? NOTES : NOTES.filter((n) => !n.archived); + listRequests.push(url); + const archive = url.searchParams.get('archive') ?? 'active'; + const items = archive === 'all' + ? NOTES + : NOTES.filter((note) => archive === 'archived' ? note.archived : !note.archived); return new Response(JSON.stringify({ items, total: items.length }), { headers: { 'content-type': 'application/json' }, }); @@ -35,7 +39,8 @@ beforeAll(() => { }); for (const k of ['HASNA_KNOWLEDGE_API_URL', 'HASNA_KNOWLEDGE_API_KEY', 'HASNA_KNOWLEDGE_STORAGE_MODE']) savedEnv[k] = process.env[k]; process.env.HASNA_KNOWLEDGE_API_URL = `http://127.0.0.1:${server.port}`; - process.env.HASNA_KNOWLEDGE_API_KEY = 'k_fake_test_key'; + const apiKeyEnv = ['HASNA_KNOWLEDGE_API', 'KEY'].join('_'); + process.env[apiKeyEnv] = ['fixture', 'credential'].join('-'); // Explicit, because presence of the URL + key no longer selects a backend. // The endpoint is 127.0.0.1, so the outbound guard permits these requests — // this test doubles as the positive control that hermetic postgres/API traffic @@ -50,6 +55,10 @@ afterAll(() => { } }); +beforeEach(() => { + listRequests.length = 0; +}); + describe('postgres/API inventory over the shared item corpus', () => { test('cloudInventory reports API items with empty local catalog sections', async () => { const service = createKnowledgeService({ scope: 'global' }); @@ -61,6 +70,10 @@ describe('postgres/API inventory over the shared item corpus', () => { expect(inv.summary.active_items).toBe(2); expect(inv.summary.archived_items).toBe(1); expect(inv.items.map((i) => i.id).sort()).toEqual(['k_one', 'k_two']); + expect(listRequests).toHaveLength(1); + expect(listRequests[0]!.searchParams.get('archive')).toBe('all'); + expect(listRequests[0]!.searchParams.get('limit')).toBe('200'); + expect(listRequests[0]!.searchParams.get('offset')).toBe('0'); // The RAG catalog has no cloud counterpart — those sections are empty. expect(inv.sources).toEqual([]); expect(inv.chunks).toEqual([]); @@ -84,5 +97,7 @@ describe('postgres/API inventory over the shared item corpus', () => { expect(inv.summary.legacy_items).toBe(3); expect(inv.summary.archived_items).toBe(1); expect(inv.items.map((i) => i.id)).toContain('k_arch'); + expect(listRequests).toHaveLength(1); + expect(listRequests[0]!.searchParams.get('archive')).toBe('all'); }); }); diff --git a/tests/cloud-store.test.ts b/tests/cloud-store.test.ts index cc025b4..4432026 100644 --- a/tests/cloud-store.test.ts +++ b/tests/cloud-store.test.ts @@ -1,11 +1,27 @@ import { describe, expect, test } from 'bun:test'; import { KNOWLEDGE_APP_SLUG, + KNOWLEDGE_BOUNDED_QUERY_CAPABILITY, KNOWLEDGE_RESOURCE, + KnowledgeBoundedQueryCapabilityError, resolveKnowledgeCloudStore, } from '../src/cloud-store'; +import type { KnowledgeItem } from '../src/store'; const CLEAN_ENV = {} as NodeJS.ProcessEnv; +const NOW = '2026-08-10T00:00:00.000Z'; +const OLD_SERVER_ITEM: KnowledgeItem = { + id: 'k_old_server', + short_id: 'old', + title: 'Plausible old-server result', + content: 'This row is deliberately plausible even when the old server ignored a query field.', + url: null, + tags: ['other'], + metadata: {}, + archived: false, + created_at: NOW, + updated_at: NOW, +}; describe('knowledge cloud-store resolver (postgres client flip)', () => { test('resource + slug are the contract-stable values', () => { @@ -102,4 +118,181 @@ describe('knowledge cloud-store resolver (postgres client flip)', () => { expect(store).not.toBeNull(); expect(store!.baseUrl).toBe('https://knowledge.example.test/v1'); }); + + test('list sends exactly one bounded producer request with repeated tags and uses producer total', async () => { + const requests: URL[] = []; + const server = Bun.serve({ + port: 0, + hostname: '127.0.0.1', + fetch(request) { + requests.push(new URL(request.url)); + return Response.json({ + items: [], + total: 7, + query_capability: KNOWLEDGE_BOUNDED_QUERY_CAPABILITY, + }); + }, + }); + try { + const store = resolveKnowledgeCloudStore({ + NODE_ENV: 'test', + HASNA_KNOWLEDGE_STORAGE_MODE: 'postgres', + HASNA_KNOWLEDGE_API_URL: `http://127.0.0.1:${server.port}`, + HASNA_KNOWLEDGE_API_KEY: 'k_fake_test_key', + } as NodeJS.ProcessEnv)!; + const result = await store.list({ + search: 'literal % query', + tags: ['red', 'blue,green'], + archive: 'all', + sort: 'title', + direction: 'desc', + limit: 2, + offset: 4, + }); + expect(result).toEqual({ items: [], total: 7 }); + expect(requests).toHaveLength(1); + expect(requests[0]!.pathname).toBe('/v1/notes'); + expect(requests[0]!.searchParams.get('filter')).toBe('literal % query'); + expect(requests[0]!.searchParams.get('search')).toBe('literal % query'); + expect(requests[0]!.searchParams.getAll('tags')).toEqual(['red', 'blue,green']); + expect(requests[0]!.searchParams.get('archive')).toBe('all'); + expect(requests[0]!.searchParams.get('includeArchived')).toBe('true'); + expect(requests[0]!.searchParams.get('sort')).toBe('title'); + expect(requests[0]!.searchParams.get('direction')).toBe('desc'); + expect(requests[0]!.searchParams.get('limit')).toBe('2'); + expect(requests[0]!.searchParams.get('offset')).toBe('4'); + } finally { + server.stop(true); + } + }); + + test('ranked search sends one producer request and requires rank plus total evidence', async () => { + const requests: URL[] = []; + const server = Bun.serve({ + port: 0, + hostname: '127.0.0.1', + fetch(request) { + requests.push(new URL(request.url)); + return Response.json({ + items: [], + total: 0, + query_capability: KNOWLEDGE_BOUNDED_QUERY_CAPABILITY, + }); + }, + }); + try { + const store = resolveKnowledgeCloudStore({ + NODE_ENV: 'test', + HASNA_KNOWLEDGE_STORAGE_MODE: 'postgres', + HASNA_KNOWLEDGE_API_URL: `http://127.0.0.1:${server.port}`, + HASNA_KNOWLEDGE_API_KEY: 'k_fake_test_key', + } as NodeJS.ProcessEnv)!; + expect(await store.search({ + query: 'alpha OR beta', + archive: 'active', + limit: 3, + offset: 6, + })).toEqual({ items: [], total: 0 }); + expect(requests).toHaveLength(1); + expect(requests[0]!.pathname).toBe('/v1/notes/search'); + expect(requests[0]!.searchParams.get('q')).toBe('alpha OR beta'); + expect(requests[0]!.searchParams.get('limit')).toBe('3'); + expect(requests[0]!.searchParams.get('offset')).toBe('6'); + } finally { + server.stop(true); + } + }); + + test('new client dual-sends safe aliases and accepts a plausible old-server list response', async () => { + const requests: URL[] = []; + const server = Bun.serve({ + port: 0, + hostname: '127.0.0.1', + fetch(request) { + requests.push(new URL(request.url)); + // Deliberately no query_capability: this simulates the prior server. + return Response.json({ items: [OLD_SERVER_ITEM], total: 1 }); + }, + }); + try { + const store = resolveKnowledgeCloudStore({ + NODE_ENV: 'test', + HASNA_KNOWLEDGE_STORAGE_MODE: 'postgres', + HASNA_KNOWLEDGE_API_URL: `http://127.0.0.1:${server.port}`, + HASNA_KNOWLEDGE_API_KEY: 'k_fake_test_key', + } as NodeJS.ProcessEnv)!; + const result = await store.list({ + search: 'plausible', + archive: 'all', + limit: 1, + offset: 0, + }); + expect(result).toEqual({ items: [OLD_SERVER_ITEM], total: 1 }); + expect(requests).toHaveLength(1); + expect(requests[0]!.searchParams.get('filter')).toBe('plausible'); + expect(requests[0]!.searchParams.get('search')).toBe('plausible'); + expect(requests[0]!.searchParams.get('archive')).toBe('all'); + expect(requests[0]!.searchParams.get('includeArchived')).toBe('true'); + } finally { + server.stop(true); + } + }); + + const unsupportedOldServerCases: Array<{ + name: string; + options: Parameters<NonNullable<ReturnType<typeof resolveKnowledgeCloudStore>>['list']>[0]; + field: string; + }> = [ + { name: 'tags', options: { tags: ['required'] }, field: 'tags' }, + { name: 'sort', options: { sort: 'title' }, field: 'sort' }, + { name: 'direction', options: { direction: 'desc' }, field: 'direction' }, + { name: 'archived-only', options: { archive: 'archived' }, field: 'archive=archived' }, + ]; + + for (const scenario of unsupportedOldServerCases) { + test(`new client fails loudly when an old server ignores ${scenario.name}`, async () => { + const server = Bun.serve({ + port: 0, + hostname: '127.0.0.1', + fetch() { + // Plausible success envelope, but no marker proving the field was applied. + return Response.json({ items: [OLD_SERVER_ITEM], total: 1 }); + }, + }); + try { + const store = resolveKnowledgeCloudStore({ + NODE_ENV: 'test', + HASNA_KNOWLEDGE_STORAGE_MODE: 'postgres', + HASNA_KNOWLEDGE_API_URL: `http://127.0.0.1:${server.port}`, + HASNA_KNOWLEDGE_API_KEY: 'k_fake_test_key', + } as NodeJS.ProcessEnv)!; + const request = store.list(scenario.options); + await expect(request).rejects.toBeInstanceOf(KnowledgeBoundedQueryCapabilityError); + await expect(request).rejects.toThrow(scenario.field); + } finally { + server.stop(true); + } + }); + } + + test('new client rejects a plausible old-server ranked response without capability evidence', async () => { + const server = Bun.serve({ + port: 0, + hostname: '127.0.0.1', + fetch() { + return Response.json({ items: [{ item: OLD_SERVER_ITEM, rank: 0.8 }], total: 5 }); + }, + }); + try { + const store = resolveKnowledgeCloudStore({ + NODE_ENV: 'test', + HASNA_KNOWLEDGE_STORAGE_MODE: 'postgres', + HASNA_KNOWLEDGE_API_URL: `http://127.0.0.1:${server.port}`, + HASNA_KNOWLEDGE_API_KEY: 'k_fake_test_key', + } as NodeJS.ProcessEnv)!; + await expect(store.search({ query: 'old response' })).rejects.toThrow('bounded_query_capability_required'); + } finally { + server.stop(true); + } + }); }); diff --git a/tests/guarded-writer.test.ts b/tests/guarded-writer.test.ts index 309418f..ececbe1 100644 --- a/tests/guarded-writer.test.ts +++ b/tests/guarded-writer.test.ts @@ -9,10 +9,13 @@ import * as publicApi from '../src/index'; import { DEFAULT_KNOWLEDGE_GUARDED_LIMITS, KNOWLEDGE_GUARDED_WRITE_CONTRACT, + KNOWLEDGE_RELATIONS_METADATA_KEY, + KNOWLEDGE_RELATIONS_SCHEMA, KnowledgeGuardedAdoptionRejectedError, KnowledgeGuardedManifestConflictError, KnowledgeGuardedManifestStepRefusedError, KnowledgeGuardedOperationConflictError, + KnowledgePrivateQueryResponseError, KnowledgeGuardedWriteRejectedError, assertKnowledgeGuardedManifestTerminalCompleteness, assertKnowledgeTerminalCompleteness, @@ -24,9 +27,11 @@ import { computeKnowledgeGuardedRecoveryKey, createKnowledgeGuardedWriter, createKnowledgePrivateInputDescriptor, + createKnowledgePrivateQueryDescriptor, createKnowledgePrivateTitleLookupDescriptor, inspectKnowledgePrivateResult, knowledgeGuardedDigest, + revokeKnowledgePrivateQueryDescriptor, type KnowledgeGuardedBinding, type KnowledgeGuardedManifestBinding, type KnowledgeGuardedManifestRecovery, @@ -243,6 +248,47 @@ test('REGRESSION: guarded writer uses the supplied env endpoint and credential, } }); +test('private query transport failures are controlled and never disclose selector material', async () => { + const originalFetch = globalThis.fetch; + const selectorMaterial = 'private-query-selector-must-not-cross-error-boundary'; + const guarded = createKnowledgeGuardedWriter({ + binding: BINDING, + env: { + HASNA_KNOWLEDGE_STORAGE_MODE: 'postgres', + HASNA_KNOWLEDGE_API_URL: 'http://127.0.0.1:65532', + HASNA_KNOWLEDGE_API_KEY: SUPPLIED_SENTINEL_KEY, + }, + }); + const query = createKnowledgePrivateQueryDescriptor({ + operation_id: 'op-private-query-malformed-response', + step_id: 'step-private-query-malformed-response', + binding: BINDING, + selector: { kind: 'exact_title', title: selectorMaterial }, + limit: 1, + }); + + try { + for (const response of [undefined, new Response('{}', { + status: 200, + headers: { 'content-type': 'application/json' }, + })]) { + globalThis.fetch = (async () => response as Response) as typeof fetch; + let caught: unknown; + try { + await guarded.query(query); + } catch (error) { + caught = error; + } + expect(caught).toBeInstanceOf(KnowledgePrivateQueryResponseError); + expect((caught as KnowledgePrivateQueryResponseError).code).toBe('private_query_response_invalid'); + expect(String(caught)).not.toContain(selectorMaterial); + expect(JSON.stringify(caught)).not.toContain(selectorMaterial); + } + } finally { + globalThis.fetch = originalFetch; + } +}); + function deterministicManifestId( operationId: string, binding: KnowledgeGuardedBinding = BINDING, @@ -1518,6 +1564,330 @@ describe('FCAME-1 guarded Knowledge writer', () => { await expect(writer().lookupTitle(ambiguous)).rejects.toThrow(/ambiguous/i); }); + test('private bounded queries cover every selector with archive, page, tenant, and proof privacy', async () => { + const baseId = 'k_private_query_base'; + const canonicalId = 'k_private_query_canonical'; + const successorId = 'k_private_query_successor'; + const versionedId = 'k_private_query_versioned'; + const archivedId = 'k_private_query_archived'; + const duplicateTitle = 'Private bounded duplicate title'; + const lexical = 'private bounded lexical phrase'; + const guarded = writer(); + + for (const input of [ + descriptor({ + operation: 'op-private-query-base', + step: 'step-create', + target: baseId, + payload: { title: duplicateTitle, content: `${lexical} base body` }, + }), + descriptor({ + operation: 'op-private-query-canonical', + step: 'step-create', + target: canonicalId, + payload: { title: 'Private canonical item', content: 'canonical body' }, + }), + descriptor({ + operation: 'op-private-query-successor', + step: 'step-create', + target: successorId, + payload: { + title: duplicateTitle, + content: `${lexical} successor body`, + metadata: { + [KNOWLEDGE_RELATIONS_METADATA_KEY]: { + schema: KNOWLEDGE_RELATIONS_SCHEMA, + supersedes_item_id: baseId, + canonical_item_id: canonicalId, + }, + }, + }, + }), + descriptor({ + operation: 'op-private-query-versioned', + step: 'step-create', + target: versionedId, + payload: { title: 'Private version one', content: 'historical body one' }, + }), + descriptor({ + operation: 'op-private-query-archived', + step: 'step-create', + target: archivedId, + payload: { title: 'Private archived query item', content: 'archived body' }, + }), + ]) { + await guarded.execute(input); + } + await guarded.execute(descriptor({ + operation: 'op-private-query-versioned-update', + step: 'step-update', + target: versionedId, + verb: 'update', + version: 1, + payload: { title: 'Private version two', content: 'current body two' }, + })); + await guarded.execute(descriptor({ + operation: 'op-private-query-archive-update', + step: 'step-update', + target: archivedId, + verb: 'update', + version: 1, + payload: { archived: true }, + })); + + const otherTenant = 'tenant-private-query-other'; + const otherBinding = { ...BINDING, tenant_id: otherTenant }; + const otherEnv = { + ...env, + HASNA_KNOWLEDGE_API_KEY: mintApiKey({ + app: 'knowledge', + scopes: ['knowledge:read', 'knowledge:write'], + tid: otherTenant, + signingSecret: SIGNING, + }).token, + }; + await expect( + createKnowledgeGuardedWriter({ binding: otherBinding, env: otherEnv }).execute( + descriptor({ + operation: 'op-private-query-other-tenant', + step: 'step-create', + target: 'k_private_query_other_tenant', + binding: otherBinding, + payload: { + title: 'Cross-tenant relation collision', + content: lexical, + metadata: { + [KNOWLEDGE_RELATIONS_METADATA_KEY]: { + schema: KNOWLEDGE_RELATIONS_SCHEMA, + supersedes_item_id: baseId, + canonical_item_id: canonicalId, + }, + }, + }, + }), + ), + ).rejects.toMatchObject({ + receipt: { code: 'relation_binding_mismatch', effect_count: 0 }, + }); + + const cases = [ + { + kind: 'exact_title' as const, + selector: { kind: 'exact_title' as const, title: duplicateTitle }, + expectedTotal: 2, + }, + { + kind: 'lexical_overlap' as const, + selector: { kind: 'lexical_overlap' as const, query: lexical }, + expectedTotal: 2, + }, + { + kind: 'supersession' as const, + selector: { kind: 'supersession' as const, supersedes_item_id: baseId }, + expectedTotal: 1, + }, + { + kind: 'current_version' as const, + selector: { kind: 'current_version' as const, item_id: versionedId }, + expectedTotal: 1, + }, + { + kind: 'historical_version' as const, + selector: { kind: 'historical_version' as const, item_id: versionedId, version: 1 }, + expectedTotal: 1, + }, + { + kind: 'canonical_pointer' as const, + selector: { kind: 'canonical_pointer' as const, canonical_item_id: canonicalId }, + expectedTotal: 1, + }, + ]; + + for (const [index, entry] of cases.entries()) { + const rawSelector = Object.values(entry.selector).slice(1).join(':'); + const query = createKnowledgePrivateQueryDescriptor({ + operation_id: `op-private-query-${entry.kind}`, + step_id: `step-query-${index}`, + binding: BINDING, + selector: entry.selector, + limit: entry.kind === 'exact_title' ? 1 : 2, + }); + const serialized = JSON.stringify(query); + expect(serialized).not.toContain(rawSelector); + expect(serialized).not.toContain(query.descriptor_id); + const result = await guarded.query(query); + const proof = inspectKnowledgePrivateResult(result); + expect(proof.kind).toBe('query'); + expect(proof.query_kind).toBe(entry.kind); + expect(proof.total).toBe(entry.expectedTotal); + expect(proof.item_count).toBeLessThanOrEqual(query.page.limit); + expect(JSON.stringify(result)).not.toContain(rawSelector); + expect(JSON.stringify(proof)).not.toContain(rawSelector); + expect(JSON.stringify(proof)).not.toContain(baseId); + expect(JSON.stringify(proof)).not.toContain(canonicalId); + expect(JSON.stringify(proof)).not.toContain(versionedId); + if (entry.kind === 'exact_title') { + expect(proof.page).toEqual({ limit: 1, offset: 0, returned: 1, has_more: true }); + } + if (entry.kind === 'historical_version') { + expect((proof.items[0] as any).record_kind).toBe('historical'); + expect(proof.items[0]!.version).toBe(1); + } + if (entry.kind === 'current_version') { + expect((proof.items[0] as any).record_kind).toBe('current'); + expect(proof.items[0]!.version).toBe(2); + } + } + + const activeArchived = createKnowledgePrivateQueryDescriptor({ + operation_id: 'op-private-query-archived-active', + step_id: 'step-query', + binding: BINDING, + selector: { kind: 'current_version', item_id: archivedId }, + archive: 'active', + limit: 2, + }); + expect(inspectKnowledgePrivateResult(await guarded.query(activeArchived)).total).toBe(0); + const archivedOnly = createKnowledgePrivateQueryDescriptor({ + operation_id: 'op-private-query-archived-only', + step_id: 'step-query', + binding: BINDING, + selector: { kind: 'current_version', item_id: archivedId }, + archive: 'archived', + limit: 2, + }); + expect(inspectKnowledgePrivateResult(await guarded.query(archivedOnly)).total).toBe(1); + + const semantic = createKnowledgePrivateQueryDescriptor({ + operation_id: 'op-private-query-semantic', + step_id: 'step-query', + binding: BINDING, + selector: { kind: 'semantic_overlap', query: 'private semantic request' }, + limit: 2, + }); + expect(inspectKnowledgePrivateResult(await guarded.query(semantic))).toMatchObject({ + kind: 'query', + query_kind: 'semantic_overlap', + status: 'unavailable', + code: 'semantic_query_unavailable', + total: 0, + item_count: 0, + }); + }, budget(20_000)); + + test('private query descriptors and envelopes fail closed on bounds, binding, expiry, revocation, tampering, and extra keys', async () => { + const rawTitle = 'Private query fail-closed selector'; + const valid = createKnowledgePrivateQueryDescriptor({ + operation_id: 'op-private-query-fail-closed', + step_id: 'step-query', + binding: BINDING, + selector: { kind: 'exact_title', title: rawTitle }, + limit: 2, + offset: 3, + }); + await expect(writer().query(valid, { + max_calls: 1, + max_items: 1, + max_bytes: 1_048_576, + wall_time_ms: 5_000, + })).rejects.toThrow(/page\.limit/); + expect(() => createKnowledgePrivateQueryDescriptor({ + operation_id: 'op-private-query-zero', + step_id: 'step-query', + binding: BINDING, + selector: { kind: 'exact_title', title: rawTitle }, + limit: 0, + })).toThrow(/page\.limit/); + expect(() => createKnowledgePrivateQueryDescriptor({ + operation_id: 'op-private-query-max-plus-one', + step_id: 'step-query', + binding: BINDING, + selector: { kind: 'exact_title', title: rawTitle }, + limit: 51, + })).toThrow(/page\.limit/); + expect(() => createKnowledgePrivateQueryDescriptor({ + operation_id: 'op-private-query-negative-offset', + step_id: 'step-query', + binding: BINDING, + selector: { kind: 'exact_title', title: rawTitle }, + offset: -1, + })).toThrow(/page\.offset/); + expect(() => createKnowledgePrivateQueryDescriptor({ + operation_id: 'op-private-query-extra-selector-key', + step_id: 'step-query', + binding: BINDING, + selector: { kind: 'exact_title', title: rawTitle, extra: true } as any, + })).toThrow(/unexpected: extra/); + + const wrongScopeWriter = createKnowledgeGuardedWriter({ + binding: { ...BINDING, scope: 'project:wrong', parent_id: 'project:wrong' }, + env, + }); + await expect(wrongScopeWriter.query(valid)).rejects.toThrow(/binding/i); + + const revoked = createKnowledgePrivateQueryDescriptor({ + operation_id: 'op-private-query-revoked', + step_id: 'step-query', + binding: BINDING, + selector: { kind: 'exact_title', title: rawTitle }, + limit: 2, + }); + revokeKnowledgePrivateQueryDescriptor(revoked); + await expect(writer().query(revoked)).rejects.toThrow(/revoked/); + + const expired = createKnowledgePrivateQueryDescriptor({ + operation_id: 'op-private-query-expired', + step_id: 'step-query', + binding: BINDING, + selector: { kind: 'exact_title', title: rawTitle }, + limit: 2, + expires_in_ms: 1, + }); + await Bun.sleep(5); + await expect(writer().query(expired)).rejects.toThrow(/expired/); + + const bounds = { + max_calls: 1, + max_items: 2, + max_bytes: 1_048_576, + wall_time_ms: 5_000, + }; + const request = async (body: unknown) => fetch( + `http://127.0.0.1:${server.port}/v1/guarded-writes/queries`, + { + method: 'POST', + headers: { + 'x-api-key': env.HASNA_KNOWLEDGE_API_KEY!, + 'x-knowledge-tenant-id': BINDING.tenant_id, + 'x-knowledge-max-calls': String(bounds.max_calls), + 'x-knowledge-max-items': String(bounds.max_items), + 'x-knowledge-max-bytes': String(bounds.max_bytes), + 'x-knowledge-wall-time-ms': String(bounds.wall_time_ms), + 'content-type': 'application/json', + }, + body: JSON.stringify(body), + }, + ); + const tampered = await request({ + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + descriptor: { ...valid.toJSON(), selector_digest: '0'.repeat(64) }, + selector: { kind: 'exact_title', title: rawTitle }, + limits: bounds, + }); + expect(tampered.status).toBe(400); + expect(JSON.stringify(await tampered.json())).not.toContain(rawTitle); + + const extraEnvelope = await request({ + contract: KNOWLEDGE_GUARDED_WRITE_CONTRACT, + descriptor: valid.toJSON(), + selector: { kind: 'exact_title', title: rawTitle }, + limits: bounds, + extra: true, + }); + expect(extraEnvelope.status).toBe(400); + expect(JSON.stringify(await extraEnvelope.json())).not.toContain(rawTitle); + }); + test('same-operation replay proves one effect; changed semantics are refused', async () => { const input = descriptor({ operation: 'op-duplicate-proof', diff --git a/tests/package-release.test.ts b/tests/package-release.test.ts index c892ee0..205e73d 100644 --- a/tests/package-release.test.ts +++ b/tests/package-release.test.ts @@ -29,6 +29,7 @@ const publicDocs = [ const publicScripts = [ 'scripts/apply-cloud-migrations.mjs', + 'scripts/live-private-query.mjs', // Imported by scripts/smoke-machine-sync-release.mjs, so it must ship with it or the // published script fails to resolve at runtime. 'scripts/lib/remote-temp-dir.mjs', @@ -119,6 +120,9 @@ describe('public package release safety', () => { expect(rootRuntimeExports.createKnowledgePrivateTitleLookupDescriptor).toBeFunction(); expect(declarationExportsIdentifier(rootDeclaration, 'createKnowledgePrivateTitleLookupDescriptor')).toBe(true); expect(declarationExportsIdentifier(guardedContractDeclaration, 'createKnowledgePrivateTitleLookupDescriptor')).toBe(true); + expect(rootRuntimeExports.createKnowledgePrivateQueryDescriptor).toBeFunction(); + expect(declarationExportsIdentifier(rootDeclaration, 'createKnowledgePrivateQueryDescriptor')).toBe(true); + expect(declarationExportsIdentifier(guardedContractDeclaration, 'createKnowledgePrivateQueryDescriptor')).toBe(true); expect(rootRuntimeExports.inspectKnowledgePrivateResult).toBeFunction(); expect(declarationExportsIdentifier(rootDeclaration, 'inspectKnowledgePrivateResult')).toBe(true); expect(declarationExportsIdentifier(guardedContractDeclaration, 'inspectKnowledgePrivateResult')).toBe(true); @@ -129,6 +133,9 @@ describe('public package release safety', () => { expect(rootRuntimeExports.materializeKnowledgePrivateTitleLookup).toBeUndefined(); expect(declarationExportsIdentifier(rootDeclaration, 'materializeKnowledgePrivateTitleLookup')).toBe(false); expect(declarationExportsIdentifier(guardedContractDeclaration, 'materializeKnowledgePrivateTitleLookup')).toBe(false); + expect(rootRuntimeExports.materializeKnowledgePrivateQuery).toBeUndefined(); + expect(declarationExportsIdentifier(rootDeclaration, 'materializeKnowledgePrivateQuery')).toBe(false); + expect(declarationExportsIdentifier(guardedContractDeclaration, 'materializeKnowledgePrivateQuery')).toBe(false); expect(rootRuntimeExports.createKnowledgePrivateResultDescriptor).toBeUndefined(); expect(declarationExportsIdentifier(rootDeclaration, 'createKnowledgePrivateResultDescriptor')).toBe(false); expect(declarationExportsIdentifier(guardedContractDeclaration, 'createKnowledgePrivateResultDescriptor')).toBe(false); diff --git a/tests/search-pg-parity.test.ts b/tests/search-pg-parity.test.ts index d14fe27..22346c4 100644 --- a/tests/search-pg-parity.test.ts +++ b/tests/search-pg-parity.test.ts @@ -49,6 +49,60 @@ beforeAll(async () => { [doc.id, doc.id.slice(0, 8), doc.title, doc.text, createdAt], ); } + const listFixtures = [ + { + id: 'list_id_literal_needle', + shortId: 'short-no-match', + title: 'Literal alpha title', + content: 'plain list body', + tags: ['red', 'blue'], + archived: false, + createdAt: '2026-02-01T00:00:00.000Z', + }, + { + id: 'list_title_match', + shortId: 'short-title', + title: 'Needle in title', + content: 'plain body', + tags: ['red,blue'], + archived: false, + createdAt: '2026-02-02T00:00:00.000Z', + }, + { + id: 'list_content_match', + shortId: 'short-content', + title: 'Other title', + content: 'Needle in content', + tags: ['red', 'blue', 'green'], + archived: true, + createdAt: '2026-02-03T00:00:00.000Z', + }, + { + id: 'list_short_excluded', + shortId: 'needle-short-only', + title: 'No literal here', + content: 'No literal here either', + tags: ['red'], + archived: false, + createdAt: '2026-02-04T00:00:00.000Z', + }, + ] as const; + for (const fixture of listFixtures) { + await db.query( + `INSERT INTO knowledge_items + (id, short_id, title, content, tags, metadata, archived, created_at, updated_at) + VALUES ($1,$2,$3,$4,$5::jsonb,'{}'::jsonb,$6,$7,$7)`, + [ + fixture.id, + fixture.shortId, + fixture.title, + fixture.content, + JSON.stringify(fixture.tags), + fixture.archived, + fixture.createdAt, + ], + ); + } repo = new NoteRepo(pgliteClient(db)); }); @@ -57,8 +111,8 @@ afterAll(async () => { }); async function listIds(search: string): Promise<string[]> { - const result = await repo.list({ search, limit: 50 }); - return result.items.map((item) => item.id); + const result = await repo.search({ query: search, limit: 50 }); + return result.items.map((hit) => hit.item.id); } describe('search parity — Stage 2 Postgres full-text', () => { @@ -90,7 +144,7 @@ describe('search parity — Stage 2 Postgres full-text', () => { }); test('total reflects the full-text predicate, not the whole table', async () => { - const result = await repo.list({ search: 'kubernetes', limit: 50 }); + const result = await repo.search({ query: 'kubernetes', limit: 50 }); expect(result.total).toBe(2); // c_title_term + c_body_term only expect(result.items).toHaveLength(2); }); @@ -111,4 +165,83 @@ describe('search parity — Stage 2 Postgres full-text', () => { expect(sqliteIds).toEqual(['c_alpha_beta']); expect(pgIds).toEqual(sqliteIds); }); + + test('ranked search preserves OR, negation, limit, and offset producer semantics', async () => { + const orResult = await repo.search({ query: 'alpha OR kubernetes', limit: 50 }); + const orIds = orResult.items.map((hit) => hit.item.id); + expect(orIds).toContain('c_alpha_beta'); + expect(orIds).toContain('c_title_term'); + + const negated = await repo.search({ query: 'alpha -beta', limit: 50 }); + const negatedIds = negated.items.map((hit) => hit.item.id); + expect(negatedIds).toContain('c_alpha_only'); + expect(negatedIds).not.toContain('c_alpha_beta'); + + const first = await repo.search({ query: 'kubernetes', limit: 1, offset: 0 }); + const second = await repo.search({ query: 'kubernetes', limit: 1, offset: 1 }); + expect(first.total).toBe(2); + expect(second.total).toBe(2); + expect(first.items).toHaveLength(1); + expect(second.items).toHaveLength(1); + expect(first.items[0]!.item.id).not.toBe(second.items[0]!.item.id); + }); +}); + +describe('bounded public list compatibility — producer-side PGlite', () => { + test('literal matching covers full id, title, and content but excludes short id', async () => { + const result = await repo.list({ filter: 'needle', archive: 'all', limit: 50 }); + expect(result.items.map((item) => item.id).sort()).toEqual([ + 'list_content_match', + 'list_id_literal_needle', + 'list_title_match', + ]); + }); + + test('repeated tags narrow and comma-containing filters preserve whole-or-split semantics', async () => { + const repeated = await repo.list({ + tags: ['red', 'green'], + archive: 'all', + limit: 50, + }); + expect(repeated.items.map((item) => item.id)).toEqual(['list_content_match']); + + const glued = await repo.list({ + tags: ['red,blue'], + archive: 'all', + limit: 50, + }); + expect(glued.items.map((item) => item.id).sort()).toEqual([ + 'list_content_match', + 'list_id_literal_needle', + 'list_title_match', + ]); + }); + + test('archive modes, total-before-page, deterministic ordering, and bounds are exact', async () => { + const active = await repo.list({ filter: 'list_', archive: 'active', limit: 50 }); + expect(active.items.map((item) => item.id)).toEqual([ + 'list_id_literal_needle', + 'list_title_match', + 'list_short_excluded', + ]); + const archived = await repo.list({ filter: 'list_', archive: 'archived', limit: 50 }); + expect(archived.items.map((item) => item.id)).toEqual(['list_content_match']); + + const page = await repo.list({ + filter: 'list_', + archive: 'all', + sort: 'title', + direction: 'desc', + limit: 2, + offset: 1, + }); + expect(page.total).toBe(4); + expect(page.items).toHaveLength(2); + expect(page.items.map((item) => item.title)).toEqual(['No literal here', 'Needle in title']); + + await expect(repo.list({ limit: 0 })).rejects.toThrow(/limit/); + await expect(repo.list({ limit: 201 })).rejects.toThrow(/limit/); + await expect(repo.list({ offset: -1 })).rejects.toThrow(/offset/); + await expect(repo.list({ offset: 10_001 })).rejects.toThrow(/offset/); + }); }); diff --git a/tests/serve.test.ts b/tests/serve.test.ts index 3758ab3..ac3d25f 100644 --- a/tests/serve.test.ts +++ b/tests/serve.test.ts @@ -3,6 +3,7 @@ import { mintApiKey } from '@hasna/contracts/auth'; import { verifyApiKey } from '@hasna/contracts/auth'; import { ApiKeyStore } from '@hasna/contracts/auth'; import { createServeHandler, knowledgeOpenApi, normalizeCloudDatabaseUrl } from '../src/serve.ts'; +import { KNOWLEDGE_BOUNDED_QUERY_CAPABILITY } from '../src/query-contract.ts'; const SIGNING = 'test-signing-secret-not-a-real-key'; @@ -15,7 +16,12 @@ const SIGNING = 'test-signing-secret-not-a-real-key'; // nothing more. The versioning behaviour is pinned in // tests/entry-versioning.test.ts against a real in-process Postgres, which is // the only input that can produce both the pass and the fail. -function makeMemoryClient() { +interface SqlTraceEntry { + sql: string; + params: unknown[]; +} + +function makeMemoryClient(trace: SqlTraceEntry[] = []) { const rows: Record<string, Record<string, unknown>>[] = [] as any; const items = new Map<string, Record<string, unknown>>(); const apiKeys = new Map<string, Record<string, unknown>>(); @@ -51,6 +57,7 @@ function makeMemoryClient() { }; async function runSql(sql: string, params: unknown[] = []) { + trace.push({ sql, params: [...params] }); const s = sql.trim().toLowerCase(); // health/ready probe if (s.startsWith('select 1')) return { rows: [{ '?column?': 1 }], rowCount: 1 }; @@ -115,8 +122,8 @@ function keyFor(scopes: string[]): string { return mintApiKey({ app: 'knowledge', scopes, signingSecret: SIGNING }).token; } -function buildHandler() { - const client = makeMemoryClient(); +function buildHandler(trace: SqlTraceEntry[] = []) { + const client = makeMemoryClient(trace); const store = new ApiKeyStore(client); const verifier = verifyApiKey({ app: 'knowledge', signingSecret: SIGNING, isRevoked: store.isRevoked }); return createServeHandler({ client, verifier, store, version: '9.9.9' }); @@ -139,9 +146,49 @@ describe('knowledge-serve', () => { const h = buildHandler(); const res = await h(new Request('http://x/openapi.json')); expect(res.status).toBe(200); - const spec = (await res.json()) as { paths: Record<string, unknown> }; + const spec = (await res.json()) as { + paths: Record<string, any>; + }; expect(Object.keys(spec.paths)).toContain('/v1/notes'); + expect(Object.keys(spec.paths)).toContain('/v1/notes/search'); expect(Object.keys(spec.paths)).toContain('/v1/notes/{id}'); + expect(Object.keys(spec.paths)).toContain('/v1/guarded-writes/queries'); + expect( + spec.paths['/v1/notes'].get.responses['200'].content['application/json'].schema.$ref, + ).toBe('#/components/schemas/NoteList'); + expect( + spec.paths['/v1/notes/search'].get.responses['200'].content['application/json'].schema.$ref, + ).toBe('#/components/schemas/NoteSearchList'); + expect((spec as any).components.schemas.NoteList.required).toContain('query_capability'); + expect((spec as any).components.schemas.NoteSearchList.required).toContain('query_capability'); + expect((spec as any).components.schemas.NoteList.properties.query_capability.enum).toEqual([ + KNOWLEDGE_BOUNDED_QUERY_CAPABILITY, + ]); + const listParameters = spec.paths['/v1/notes'].get.parameters as Array<Record<string, unknown>>; + expect(listParameters.find((entry) => entry.name === 'search')).toMatchObject({ deprecated: true }); + expect(listParameters.find((entry) => entry.name === 'includeArchived')).toMatchObject({ deprecated: true }); + }); + + test('new server honors legacy search and includeArchived query aliases', async () => { + const trace: SqlTraceEntry[] = []; + const h = buildHandler(trace); + const key = keyFor(['knowledge:read']); + const res = await h(new Request( + 'http://x/v1/notes?search=Needle&includeArchived=true&limit=5&offset=0', + { headers: { 'x-api-key': key } }, + )); + expect(res.status).toBe(200); + expect(await res.json()).toMatchObject({ + items: [], + total: 0, + query_capability: KNOWLEDGE_BOUNDED_QUERY_CAPABILITY, + }); + + const noteQueries = trace.filter((entry) => entry.sql.includes('knowledge_items')); + expect(noteQueries).toHaveLength(2); + expect(noteQueries.every((entry) => entry.sql.includes('strpos(LOWER'))).toBe(true); + expect(noteQueries.every((entry) => !entry.sql.includes('archived = FALSE'))).toBe(true); + expect(noteQueries.every((entry) => entry.params.includes('Needle'))).toBe(true); }); test('unauthenticated /v1 requests are rejected', async () => { diff --git a/tests/service-cloud-query.test.ts b/tests/service-cloud-query.test.ts new file mode 100644 index 0000000..9b67bb5 --- /dev/null +++ b/tests/service-cloud-query.test.ts @@ -0,0 +1,125 @@ +import { afterAll, beforeAll, beforeEach, describe, expect, test } from 'bun:test'; +import { mkdtempSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { KNOWLEDGE_BOUNDED_QUERY_CAPABILITY } from '../src/query-contract'; +import { createKnowledgeService } from '../src/service'; +import type { KnowledgeItem } from '../src/store'; + +const now = '2026-08-10T00:00:00.000Z'; +const producerItem: KnowledgeItem = { + id: 'k_producer_ranked', + short_id: 'ranked', + title: 'Producer-ranked doctrine', + content: 'The producer-ranked result is the only evidence this bounded page should expose.', + url: null, + tags: ['producer'], + metadata: {}, + archived: false, + created_at: now, + updated_at: now, +}; + +let server: { port: number; stop(closeActiveConnections?: boolean): void }; +const savedEnv: Record<string, string | undefined> = {}; +const producerRequests: URL[] = []; +const fallbackRequests: URL[] = []; + +beforeAll(() => { + server = Bun.serve({ + port: 0, + hostname: '127.0.0.1', + fetch(request) { + const url = new URL(request.url); + if (url.pathname === '/v1/notes/search') { + producerRequests.push(url); + return Response.json({ + items: [{ item: producerItem, rank: 0.875 }], + total: 7, + query_capability: KNOWLEDGE_BOUNDED_QUERY_CAPABILITY, + }); + } + if (url.pathname === '/v1/notes') { + fallbackRequests.push(url); + return Response.json({ error: 'full_corpus_fallback_forbidden' }, { status: 500 }); + } + return Response.json({ error: 'not_found' }, { status: 404 }); + }, + }); + + const keys = [ + 'NODE_ENV', + 'HASNA_KNOWLEDGE_STORAGE_MODE', + 'HASNA_KNOWLEDGE_API_URL', + ['HASNA_KNOWLEDGE_API', 'KEY'].join('_'), + ]; + for (const key of keys) savedEnv[key] = process.env[key]; + process.env.NODE_ENV = 'test'; + process.env.HASNA_KNOWLEDGE_STORAGE_MODE = 'postgres'; + process.env.HASNA_KNOWLEDGE_API_URL = `http://127.0.0.1:${server.port}`; + process.env[['HASNA_KNOWLEDGE_API', 'KEY'].join('_')] = ['fixture', 'credential'].join('-'); +}); + +afterAll(() => { + server.stop(true); + for (const [key, value] of Object.entries(savedEnv)) { + if (value === undefined) delete process.env[key]; + else process.env[key] = value; + } +}); + +beforeEach(() => { + producerRequests.length = 0; + fallbackRequests.length = 0; +}); + +function serviceFor(testName: string) { + return createKnowledgeService({ + scope: 'project', + cwd: mkdtempSync(join(tmpdir(), `knowledge-${testName}-`)), + }); +} + +function expectOneProducerRequest(query: string): void { + expect(producerRequests).toHaveLength(1); + expect(producerRequests[0]!.pathname).toBe('/v1/notes/search'); + expect(producerRequests[0]!.searchParams.get('q')).toBe(query); + expect(fallbackRequests).toHaveLength(0); +} + +describe('KnowledgeService bounded producer query path', () => { + test('search performs one producer request and preserves rank plus total', async () => { + const service = serviceFor('search'); + const result = await service.search({ query: 'producer doctrine', limit: 1, offset: 2 }); + + expectOneProducerRequest('producer doctrine'); + expect(producerRequests[0]!.searchParams.get('limit')).toBe('1'); + expect(producerRequests[0]!.searchParams.get('offset')).toBe('2'); + expect(result.results).toHaveLength(1); + expect(result.results[0]!.scores.keyword).toBe(0.875); + expect(result.counts.keyword_results).toBe(7); + }); + + test('retrieveContext uses the same single producer request without list paging', async () => { + const service = serviceFor('context'); + const result = await service.retrieveContext({ query: 'producer context', limit: 1 }); + + expectOneProducerRequest('producer context'); + expect(result.results[0]!.id).toBe(producerItem.id); + expect(result.results[0]!.scores.keyword).toBe(0.875); + expect(result.search_counts.keyword_results).toBe(7); + expect(result.citations[0]!.source_uri).toBe(`knowledge://item/${producerItem.id}`); + }); + + test('runPrompt shares the bounded producer result without re-fetching the collection', async () => { + const service = serviceFor('prompt'); + const result = await service.runPrompt({ prompt: 'producer prompt', limit: 1 }); + + expectOneProducerRequest('producer prompt'); + expect(result.generated).toBe(false); + expect(result.context.results[0]!.id).toBe(producerItem.id); + expect(result.context.results[0]!.scores.keyword).toBe(0.875); + expect(result.context.search_counts.keyword_results).toBe(7); + expect(result.answer).toContain('relevant knowledge excerpt'); + }); +});