{"version":3,"file":"index.mjs","names":["_a","nullish","F","initializer","util.jsonStringifyReplacer","core.$ZodAsyncError","util.finalizeIssue","core.config","parse","errors.$ZodRealError","parseAsync","errors.$ZodError","safeParse","safeParseAsync","cuid","cuid2","ulid","xid","ksuid","nanoid","duration","guid","uuid","email","_emoji","emoji","ipv4","ipv6","mac","util.escapeRegex","cidrv4","cidrv6","base64","base64url","hostname","e164","date","time","datetime","string","bigint","number","boolean","_null","_undefined","hex","util.floatSafeRemainder","util.NUMBER_FORMAT_RANGES","regexes.integer","util.BIGINT_FORMAT_RANGES","util.nullish","util.getSizableOrigin","util.getLengthableOrigin","regexes.lowercase","regexes.uppercase","util.escapeRegex","util.prefixIssues","content","util.aborted","util.explicitlyAborted","core.$ZodAsyncError","safeParse","safeParseAsync","regexes.string","regexes.guid","regexes.uuid","regexes.email","regexes.emoji","regexes.nanoid","regexes.cuid","regexes.cuid2","regexes.ulid","regexes.xid","regexes.ksuid","regexes.datetime","regexes.date","regexes.time","regexes.duration","regexes.ipv4","regexes.ipv6","regexes.mac","regexes.cidrv4","regexes.cidrv6","regexes.base64","regexes.base64url","regexes.e164","regexes.number","regexes.boolean","regexes.bigint","regexes.undefined","regexes.null","util.prefixIssues","util.optionalKeys","util.cached","isObject","util.isObject","util.esc","allowsEval","util.allowsEval","util.finalizeIssue","core.config","util.cleanRegex","util.isPlainObject","util.getEnumValues","util.escapeRegex","core.$ZodEncodeError","parse","parseAsync","util.issue","util.parsedType","util.stringifyPrimitive","util.joinValues","util.normalizeParams","_undefined","_null","_void","checks.$ZodCheckLessThan","checks.$ZodCheckGreaterThan","checks.$ZodCheckMultipleOf","checks.$ZodCheckMaxSize","checks.$ZodCheckMinSize","checks.$ZodCheckSizeEquals","checks.$ZodCheckMaxLength","checks.$ZodCheckMinLength","checks.$ZodCheckLengthEquals","checks.$ZodCheckRegex","checks.$ZodCheckLowerCase","checks.$ZodCheckUpperCase","checks.$ZodCheckIncludes","checks.$ZodCheckStartsWith","checks.$ZodCheckEndsWith","checks.$ZodCheckProperty","checks.$ZodCheckMimeType","checks.$ZodCheckOverwrite","util.slugify","issue","util.issue","checks.$ZodCheck","describe","meta","schemas.$ZodCodec","schemas.$ZodBoolean","schemas.$ZodString","process","process","core._isoDateTime","date","core._isoDate","core._isoTime","core._isoDuration","core.formatError","core.flattenError","util.jsonStringifyReplacer","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","util.mergeDefs","core.clone","checks.overwrite","processors.stringProcessor","checks.regex","checks.includes","checks.startsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","checks.lowercase","checks.uppercase","checks.trim","checks.normalize","checks.toLowerCase","checks.toUpperCase","checks.slugify","core._email","core._url","core._jwt","core._emoji","core._guid","core._uuid","core._uuidv4","core._uuidv6","core._uuidv7","core._nanoid","core._cuid","core._cuid2","core._ulid","core._base64","core._base64url","core._xid","core._ksuid","core._ipv4","core._ipv6","core._cidrv4","core._cidrv6","core._e164","iso.datetime","iso.date","iso.time","iso.duration","core._string","core.regexes.httpProtocol","core.regexes.domain","util.normalizeParams","core._mac","core._stringFormat","core.regexes.hostname","core.regexes.hex","core.regexes","processors.numberProcessor","checks.gt","checks.gte","checks.lt","checks.lte","checks.multipleOf","core._number","core._int","core._float32","core._float64","core._int32","core._uint32","processors.booleanProcessor","core._boolean","processors.bigintProcessor","core._bigint","core._int64","core._uint64","processors.symbolProcessor","core._symbol","processors.undefinedProcessor","core._undefined","processors.nullProcessor","core._null","processors.anyProcessor","core._any","processors.unknownProcessor","core._unknown","processors.neverProcessor","core._never","processors.voidProcessor","core._void","processors.dateProcessor","core._date","processors.arrayProcessor","core._array","processors.objectProcessor","util.extend","util.safeExtend","util.merge","util.pick","util.omit","util.partial","util.required","processors.unionProcessor","processors.intersectionProcessor","processors.tupleProcessor","core.$ZodType","processors.recordProcessor","processors.mapProcessor","core._minSize","core._maxSize","core._size","processors.setProcessor","processors.enumProcessor","processors.literalProcessor","processors.fileProcessor","core._mime","core._file","processors.transformProcessor","core.$ZodEncodeError","issue","util.issue","processors.optionalProcessor","processors.nullableProcessor","processors.defaultProcessor","util.shallowClone","processors.prefaultProcessor","processors.nonoptionalProcessor","processors.successProcessor","processors.catchProcessor","processors.nanProcessor","core._nan","processors.pipeProcessor","processors.readonlyProcessor","processors.templateLiteralProcessor","processors.lazyProcessor","processors.promiseProcessor","processors.functionProcessor","processors.customProcessor","core.$ZodCheck","core._custom","core._refine","core._superRefine","core.describe","core.meta","core._stringbool","_schemas","_checks","_iso","en","sanitize","markdownToMarkup","sanitize","z.optional","z.string","z.number","z.enum","tools","z.object","z.optional","z.string","z.number","tools","z.object","z.optional","z.boolean","z.string","z.union","z.null","tools","z.object","z.string","z.optional","z.number","z.union","z.literal","z.null","tools","z.object","z.string","z.optional","z.enum","tools","z.object","tools","z.object","z.string","z.optional","z.union","z.null","tools","z.object","z.optional","z.boolean","z.string","z.union","z.null","tools","z.object","z.string","z.optional","z.number","tools","z.object","z.string","z.optional","tools","z.object","z.optional","z.string","tools","z.object","z.string","z.optional","tools","z.object","z.string","tools","z.object","z.string","tools","z.object","z.optional","z.string","tools","z.object","z.number","z.optional","z.string","tools","z.object","z.string","z.optional","z.boolean","z\n          .string","tools","z.object","z.optional","z.string","z.number","z.union","z.null","z\n          .string","tools","z.object","z.string","z.enum","tools","z.object","z.string","z.optional","z.number","tools","z.object","z.string","z.optional","z.optional","z.enum","z.object","z.string","z.number","z.union","z.null","workspaceTools","projectTools","milestoneTools","taskMgmtTools","componentTools","spaceTools","snapshotTools","labelTools","tagTools","tagCategoryTools","commentTools","searchTools","deletionTools","timeTools","contactTools","documentTools","issueCoreTools","issueRelationTools","issueTemplateTools","attachmentTools","todoTools","sanitize"],"sources":["../src/version.ts","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/core.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/util.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/errors.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/parse.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/regexes.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/checks.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/doc.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/versions.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/schemas.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/en.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/registries.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/api.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/to-json-schema.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-processors.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/checks.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/iso.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/errors.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/parse.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/compat.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/from-json-schema.js","../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js","../src/config/credentials.ts","../src/config/config.ts","../src/client/huly-ids.ts","../src/client/errors.ts","../src/client/console-filter.ts","../src/client/client.ts","../src/client/pool.ts","../src/config/resolver.ts","../src/tools/confirm.ts","../src/tools/builder.ts","../src/tools/domains/_class-refs.ts","../src/tools/domains/_common.ts","../src/tools/domains/workspace.ts","../src/tools/domains/projects.ts","../src/tools/domains/milestones.ts","../src/tools/domains/task-management.ts","../src/tools/domains/contacts.ts","../src/tools/domains/components.ts","../src/tools/domains/spaces.ts","../src/tools/domains/document-snapshots.ts","../src/tools/domains/labels.ts","../src/tools/domains/tags.ts","../src/tools/domains/tag-categories.ts","../src/markup/markup.ts","../src/tools/domains/comments.ts","../src/tools/domains/search.ts","../src/tools/domains/deletion.ts","../src/tools/domains/time.ts","../src/tools/domains/documents.ts","../src/tools/domains/issues-hierarchy.ts","../src/tools/domains/issues-core.ts","../src/tools/domains/issues-relations.ts","../src/tools/domains/issues-templates.ts","../src/tools/domains/attachments.ts","../src/tools/domains/todos.ts","../src/tools/register.ts","../src/commands/huly.ts","../src/render/util.ts","../src/render/issue.ts","../src/render/document.ts","../src/index.ts"],"sourcesContent":["// version.ts — pi-huly version constant (single source).\n// Tách riêng khỏi index.ts để tránh circular import:\n//   index.ts (factory) ↔ commands/huly.ts (import HULY_VERSION cho /huly status).\n// Cả 2 import từ đây → KHÔNG cycle. Bump version tại đây duy nhất.\n\nexport const HULY_VERSION = \"1.0.0-beta.5\";\n","var _a;\n/** A special constant with type `never` */\nexport const NEVER = /*@__PURE__*/ Object.freeze({\n    status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n    function init(inst, def) {\n        if (!inst._zod) {\n            Object.defineProperty(inst, \"_zod\", {\n                value: {\n                    def,\n                    constr: _,\n                    traits: new Set(),\n                },\n                enumerable: false,\n            });\n        }\n        if (inst._zod.traits.has(name)) {\n            return;\n        }\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        // support prototype modifications\n        const proto = _.prototype;\n        const keys = Object.keys(proto);\n        for (let i = 0; i < keys.length; i++) {\n            const k = keys[i];\n            if (!(k in inst)) {\n                inst[k] = proto[k].bind(inst);\n            }\n        }\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        var _a;\n        const inst = params?.Parent ? new Definition() : this;\n        init(inst, def);\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        for (const fn of inst._zod.deferred) {\n            fn();\n        }\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport class $ZodEncodeError extends Error {\n    constructor(name) {\n        super(`Encountered unidirectional transform during encode: ${name}`);\n        this.name = \"ZodEncodeError\";\n    }\n}\n(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {});\nexport const globalConfig = globalThis.__zod_globalConfig;\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n","import { globalConfig } from \"./core.js\";\n// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\nexport function cached(getter) {\n    const set = false;\n    return {\n        get value() {\n            if (!set) {\n                const value = getter();\n                Object.defineProperty(this, \"value\", { value });\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n    };\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const ratio = val / step;\n    const roundedRatio = Math.round(ratio);\n    // Use a relative epsilon scaled to the magnitude of the result\n    const tolerance = Number.EPSILON * Math.max(Math.abs(ratio), 1);\n    if (Math.abs(ratio - roundedRatio) < tolerance)\n        return 0;\n    return ratio - roundedRatio;\n}\nconst EVALUATING = /* @__PURE__*/ Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n    let value = undefined;\n    Object.defineProperty(object, key, {\n        get() {\n            if (value === EVALUATING) {\n                // Circular reference detected, return undefined to break the cycle\n                return undefined;\n            }\n            if (value === undefined) {\n                value = EVALUATING;\n                value = getter();\n            }\n            return value;\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function objectClone(obj) {\n    return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\nexport function mergeDefs(...defs) {\n    const mergedDescriptors = {};\n    for (const def of defs) {\n        const descriptors = Object.getOwnPropertyDescriptors(def);\n        Object.assign(mergedDescriptors, descriptors);\n    }\n    return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n    return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport function slugify(input) {\n    return input\n        .toLowerCase()\n        .trim()\n        .replace(/[^\\w\\s-]/g, \"\")\n        .replace(/[\\s_-]+/g, \"-\")\n        .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = /* @__PURE__*/ cached(() => {\n    // Skip the probe under `jitless`: strict CSPs report the caught `new Function`\n    // as a `securitypolicyviolation` even though the throw is swallowed.\n    if (globalConfig.jitless) {\n        return false;\n    }\n    // @ts-ignore\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    if (typeof ctor !== \"function\")\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function shallowClone(o) {\n    if (isPlainObject(o))\n        return { ...o };\n    if (Array.isArray(o))\n        return [...o];\n    if (o instanceof Map)\n        return new Map(o);\n    if (o instanceof Set)\n        return new Set(o);\n    return o;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            // @ts-ignore\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = /* @__PURE__*/ new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = /* @__PURE__*/ new Set([\n    \"string\",\n    \"number\",\n    \"bigint\",\n    \"boolean\",\n    \"symbol\",\n    \"undefined\",\n]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n    });\n}\nexport const NUMBER_FORMAT_RANGES = {\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = {};\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                newShape[key] = currDef.shape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function omit(schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = { ...schema._zod.def.shape };\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                delete newShape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const checks = schema._zod.def.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        // Only throw if new shape overlaps with existing shape\n        // Use getOwnPropertyDescriptor to check key existence without accessing values\n        const existingShape = schema._zod.def.shape;\n        for (const key in shape) {\n            if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n                throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n            }\n        }\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n    });\n    return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n    });\n    return clone(schema, def);\n}\nexport function merge(a, b) {\n    if (a._zod.def.checks?.length) {\n        throw new Error(\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\");\n    }\n    const def = mergeDefs(a._zod.def, {\n        get shape() {\n            const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        get catchall() {\n            return b._zod.def.catchall;\n        },\n        checks: b._zod.def.checks ?? [],\n    });\n    return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n    const currDef = schema._zod.def;\n    const checks = currDef.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in oldShape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in shape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n    });\n    return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true) {\n            return true;\n        }\n    }\n    return false;\n}\n// Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined).\n// Used to respect `abort: true` in .refine() even for checks that have a `when` function.\nexport function explicitlyAborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue === false) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n    const message = iss.message\n        ? iss.message\n        : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\");\n    const { inst: _inst, continue: _continue, input: _input, ...rest } = iss;\n    rest.path ?? (rest.path = []);\n    rest.message = message;\n    if (ctx?.reportInput) {\n        rest.input = _input;\n    }\n    return rest;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    // @ts-ignore\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function parsedType(data) {\n    const t = typeof data;\n    switch (t) {\n        case \"number\": {\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        }\n        case \"object\": {\n            if (data === null) {\n                return \"null\";\n            }\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            const obj = data;\n            if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n                return obj.constructor.name;\n            }\n        }\n    }\n    return t;\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n    const binaryString = atob(base64);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n        bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n    let binaryString = \"\";\n    for (let i = 0; i < bytes.length; i++) {\n        binaryString += String.fromCharCode(bytes[i]);\n    }\n    return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n    const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n    return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n    return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n    const cleanHex = hex.replace(/^0x/, \"\");\n    if (cleanHex.length % 2 !== 0) {\n        throw new Error(\"Invalid hex string length\");\n    }\n    const bytes = new Uint8Array(cleanHex.length / 2);\n    for (let i = 0; i < cleanHex.length; i += 2) {\n        bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n    }\n    return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n    return Array.from(bytes)\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    Object.defineProperty(inst, \"_zod\", {\n        value: inst._zod,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"issues\", {\n        value: def,\n        enumerable: false,\n    });\n    inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n    Object.defineProperty(inst, \"toString\", {\n        value: () => inst.message,\n        enumerable: false,\n    });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n            fieldErrors[sub.path[0]].push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = { _errors: [] };\n    const processError = (error, path = []) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < fullpath.length) {\n                        const el = fullpath[i];\n                        const terminal = i === fullpath.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a, _b;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, [...path, ...issue.path]);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n *   ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n    const segs = [];\n    const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`✖ ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  → at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    if (result.issues.length) {\n        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, _params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n    const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    if (result.issues.length) {\n        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length\n        ? {\n            success: false,\n            error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length\n        ? {\n            success: false,\n            error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n    return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n    return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n    return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const cuid = /^[cC][0-9a-z]{6,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n    const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n    return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\nexport const httpProtocol = /^https?$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const time = timeSource({ precision: args.precision });\n    const opts = [\"Z\"];\n    if (args.local)\n        opts.push(\"\");\n    // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    if (args.offset)\n        opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n    const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n    return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n    return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n        if (def.value < curr) {\n            if (def.inclusive)\n                bag.maximum = def.value;\n            else\n                bag.exclusiveMaximum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n        if (def.value > curr) {\n            if (def.inclusive)\n                bag.minimum = def.value;\n            else\n                bag.exclusiveMinimum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        var _a;\n        (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n    });\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n        if (isInt)\n            bag.pattern = regexes.integer;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    continue: false,\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        inclusive: true,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.size;\n        bag.maximum = def.size;\n        bag.size = def.size;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.length;\n        bag.maximum = def.length;\n        bag.length = def.length;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        if (def.pattern) {\n            bag.patterns ?? (bag.patterns = new Set());\n            bag.patterns.add(def.pattern);\n        }\n    });\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.mime = def.mime;\n    });\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n","export class Doc {\n    constructor(args = []) {\n        this.content = [];\n        this.indent = 0;\n        if (this)\n            this.args = args;\n    }\n    indented(fn) {\n        this.indent += 1;\n        fn(this);\n        this.indent -= 1;\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const args = this?.args;\n        const content = this?.content ?? [``];\n        const lines = [...content.map((x) => `  ${x}`)];\n        // console.log(lines.join(\"\\n\"));\n        return new F(...args, lines.join(\"\\n\"));\n    }\n}\n","export const version = {\n    major: 4,\n    minor: 4,\n    patch: 3,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const checks = [...(inst._zod.def.checks ?? [])];\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    if (inst._zod.traits.has(\"$ZodCheck\")) {\n        checks.unshift(inst);\n    }\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer\n        // inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    if (util.explicitlyAborted(payload))\n                        continue;\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        const handleCanaryResult = (canary, payload, ctx) => {\n            // abort if the canary is aborted\n            if (util.aborted(canary)) {\n                canary.aborted = true;\n                return canary;\n            }\n            // run checks first, then\n            const checkResult = runChecks(payload, checks, ctx);\n            if (checkResult instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n            }\n            return inst._zod.parse(checkResult, ctx);\n        };\n        inst._zod.run = (payload, ctx) => {\n            if (ctx.skipChecks) {\n                return inst._zod.parse(payload, ctx);\n            }\n            if (ctx.direction === \"backward\") {\n                // run canary\n                // initial pass (no checks)\n                const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n                if (canary instanceof Promise) {\n                    return canary.then((canary) => {\n                        return handleCanaryResult(canary, payload, ctx);\n                    });\n                }\n                return handleCanaryResult(canary, payload, ctx);\n            }\n            // forward\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n    // Lazy initialize ~standard to avoid creating objects for every schema\n    util.defineLazy(inst, \"~standard\", () => ({\n        validate: (value) => {\n            try {\n                const r = safeParse(inst, value);\n                return r.success ? { value: r.data } : { issues: r.error?.issues };\n            }\n            catch (_) {\n                return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n            }\n        },\n        vendor: \"zod\",\n        version: 1,\n    }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            // Trim whitespace from input\n            const trimmed = payload.value.trim();\n            // When normalize is off, require :// for http/https URLs\n            // This prevents strings like \"http:example.com\" or \"https:/path\" from being silently accepted\n            if (!def.normalize && def.protocol?.source === regexes.httpProtocol.source) {\n                if (!/^https?:\\/\\//i.test(trimmed)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid URL format\",\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                    return;\n                }\n            }\n            // @ts-ignore\n            const url = new URL(trimmed);\n            if (def.hostname) {\n                def.hostname.lastIndex = 0;\n                if (!def.hostname.test(url.hostname)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid hostname\",\n                        pattern: def.hostname.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            if (def.protocol) {\n                def.protocol.lastIndex = 0;\n                if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid protocol\",\n                        pattern: def.protocol.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            // Set the output value based on normalize flag\n            if (def.normalize) {\n                // Use normalized URL\n                payload.value = url.href;\n            }\n            else {\n                // Preserve the original input (trimmed)\n                payload.value = trimmed;\n            }\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.nanoid);\n    $ZodStringFormat.init(inst, def);\n});\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link $ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `ipv6`;\n    inst._zod.check = (payload) => {\n        try {\n            // @ts-ignore\n            new URL(`http://[${payload.value}]`);\n            // return;\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        const parts = payload.value.split(\"/\");\n        try {\n            if (parts.length !== 2)\n                throw new Error();\n            const [address, prefix] = parts;\n            if (!prefix)\n                throw new Error();\n            const prefixNum = Number(prefix);\n            if (`${prefixNum}` !== prefix)\n                throw new Error();\n            if (prefixNum < 0 || prefixNum > 128)\n                throw new Error();\n            // @ts-ignore\n            new URL(`http://[${address}]`);\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    // atob ignores whitespace, so reject it up front.\n    if (/\\s/.test(data))\n        return false;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        // @ts-ignore\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.contentEncoding = \"base64\";\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64URL(data) {\n    if (!regexes.base64url.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64url);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.bag.contentEncoding = \"base64url\";\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        // @ts-ignore\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? \"Infinity\"\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = Array(input.length);\n        const proms = [];\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalIn, isOptionalOut) {\n    const isPresent = key in input;\n    if (result.issues.length) {\n        // For optional-in/out schemas, ignore errors on absent keys.\n        if (isOptionalIn && isOptionalOut && !isPresent) {\n            return;\n        }\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    if (!isPresent && !isOptionalIn) {\n        if (!result.issues.length) {\n            final.issues.push({\n                code: \"invalid_type\",\n                expected: \"nonoptional\",\n                input: undefined,\n                path: [key],\n            });\n        }\n        return;\n    }\n    if (result.value === undefined) {\n        if (isPresent) {\n            final.value[key] = undefined;\n        }\n    }\n    else {\n        final.value[key] = result.value;\n    }\n}\nfunction normalizeDef(def) {\n    const keys = Object.keys(def.shape);\n    for (const k of keys) {\n        if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n            throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n        }\n    }\n    const okeys = util.optionalKeys(def.shape);\n    return {\n        ...def,\n        keys,\n        keySet: new Set(keys),\n        numKeys: keys.length,\n        optionalKeys: new Set(okeys),\n    };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n    const unrecognized = [];\n    const keySet = def.keySet;\n    const _catchall = def.catchall._zod;\n    const t = _catchall.def.type;\n    const isOptionalIn = _catchall.optin === \"optional\";\n    const isOptionalOut = _catchall.optout === \"optional\";\n    for (const key in input) {\n        // skip __proto__ so it can't replace the result prototype via the\n        // assignment setter on the plain {} we build into\n        if (key === \"__proto__\")\n            continue;\n        if (keySet.has(key))\n            continue;\n        if (t === \"never\") {\n            unrecognized.push(key);\n            continue;\n        }\n        const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n        if (r instanceof Promise) {\n            proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));\n        }\n        else {\n            handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\n        }\n    }\n    if (unrecognized.length) {\n        payload.issues.push({\n            code: \"unrecognized_keys\",\n            keys: unrecognized,\n            input,\n            inst,\n        });\n    }\n    if (!proms.length)\n        return payload;\n    return Promise.all(proms).then(() => {\n        return payload;\n    });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    // const sh = def.shape;\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    if (!desc?.get) {\n        const sh = def.shape;\n        Object.defineProperty(def, \"shape\", {\n            get: () => {\n                const newSh = { ...sh };\n                Object.defineProperty(def, \"shape\", {\n                    value: newSh,\n                });\n                return newSh;\n            },\n        });\n    }\n    const _normalized = util.cached(() => normalizeDef(def));\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const shape = def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                propValues[key] ?? (propValues[key] = new Set());\n                for (const v of field.values)\n                    propValues[key].add(v);\n            }\n        }\n        return propValues;\n    });\n    const isObject = util.isObject;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = {};\n        const proms = [];\n        const shape = value.shape;\n        for (const key of value.keys) {\n            const el = shape[key];\n            const isOptionalIn = el._zod.optin === \"optional\";\n            const isOptionalOut = el._zod.optout === \"optional\";\n            const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));\n            }\n            else {\n                handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\n            }\n        }\n        if (!catchall) {\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n    };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodObject.init(inst, def);\n    const superParse = inst._zod.parse;\n    const _normalized = util.cached(() => normalizeDef(def));\n    const generateFastpass = (shape) => {\n        const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n        const normalized = _normalized.value;\n        const parseStr = (key) => {\n            const k = util.esc(key);\n            return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        };\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.keys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(`const newResult = {};`);\n        for (const key of normalized.keys) {\n            const id = ids[key];\n            const k = util.esc(key);\n            const schema = shape[key];\n            const isOptionalIn = schema?._zod?.optin === \"optional\";\n            const isOptionalOut = schema?._zod?.optout === \"optional\";\n            doc.write(`const ${id} = ${parseStr(key)};`);\n            if (isOptionalIn && isOptionalOut) {\n                // For optional-in/out schemas, ignore errors on absent keys\n                doc.write(`\n        if (${id}.issues.length) {\n          if (${k} in input) {\n            payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n              ...iss,\n              path: iss.path ? [${k}, ...iss.path] : [${k}]\n            })));\n          }\n        }\n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n            }\n            else if (!isOptionalIn) {\n                doc.write(`\n        const ${id}_present = ${k} in input;\n        if (${id}.issues.length) {\n          payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${k}, ...iss.path] : [${k}]\n          })));\n        }\n        if (!${id}_present && !${id}.issues.length) {\n          payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: undefined,\n            path: [${k}]\n          });\n        }\n\n        if (${id}_present) {\n          if (${id}.value === undefined) {\n            newResult[${k}] = undefined;\n          } else {\n            newResult[${k}] = ${id}.value;\n          }\n        }\n\n      `);\n            }\n            else {\n                doc.write(`\n        if (${id}.issues.length) {\n          payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${k}, ...iss.path] : [${k}]\n          })));\n        }\n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n            }\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        const fn = doc.compile();\n        return (payload, ctx) => fn(shape, payload, ctx);\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n            if (!catchall)\n                return payload;\n            return handleCatchall([], input, payload, ctx, value, inst);\n        }\n        return superParse(payload, ctx);\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    const nonaborted = results.filter((r) => !util.aborted(r));\n    if (nonaborted.length === 1) {\n        final.value = nonaborted[0].value;\n        return nonaborted[0];\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"values\", () => {\n        if (def.options.every((o) => o._zod.values)) {\n            return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        if (def.options.every((o) => o._zod.pattern)) {\n            const patterns = def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n    inst._zod.parse = (payload, ctx) => {\n        if (first) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n    const successes = results.filter((r) => r.issues.length === 0);\n    if (successes.length === 1) {\n        final.value = successes[0].value;\n        return final;\n    }\n    if (successes.length === 0) {\n        // No matches - same as regular union\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        });\n    }\n    else {\n        // Multiple matches - exclusive union failure\n        final.issues.push({\n            code: \"invalid_union\",\n            input: final.value,\n            inst,\n            errors: [],\n            inclusive: false,\n        });\n    }\n    return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    def.inclusive = false;\n    const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n    inst._zod.parse = (payload, ctx) => {\n        if (first) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleExclusiveUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    def.inclusive = false;\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const propValues = {};\n        for (const option of def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n            for (const [k, v] of Object.entries(pv)) {\n                if (!propValues[k])\n                    propValues[k] = new Set();\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        return propValues;\n    });\n    const disc = util.cached(() => {\n        const opts = def.options;\n        const map = new Map();\n        for (const o of opts) {\n            const values = o._zod.propValues?.[def.discriminator];\n            if (!values || values.size === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n            for (const v of values) {\n                if (map.has(v)) {\n                    throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n                }\n                map.set(v, o);\n            }\n        }\n        return map;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const opt = disc.value.get(input?.[def.discriminator]);\n        if (opt) {\n            return opt._zod.run(payload, ctx);\n        }\n        // Fall back to union matching when the fast discriminator path fails:\n        // - explicitly enabled via unionFallback, or\n        // - during backward direction (encode), since codec-based discriminators\n        //   have different values in forward vs backward directions\n        if (def.unionFallback || ctx.direction === \"backward\") {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            discriminator: def.discriminator,\n            options: Array.from(disc.value.keys()),\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nfunction mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    // Track which side(s) report each key as unrecognized\n    const unrecKeys = new Map();\n    let unrecIssue;\n    for (const iss of left.issues) {\n        if (iss.code === \"unrecognized_keys\") {\n            unrecIssue ?? (unrecIssue = iss);\n            for (const k of iss.keys) {\n                if (!unrecKeys.has(k))\n                    unrecKeys.set(k, {});\n                unrecKeys.get(k).l = true;\n            }\n        }\n        else {\n            result.issues.push(iss);\n        }\n    }\n    for (const iss of right.issues) {\n        if (iss.code === \"unrecognized_keys\") {\n            for (const k of iss.keys) {\n                if (!unrecKeys.has(k))\n                    unrecKeys.set(k, {});\n                unrecKeys.get(k).r = true;\n            }\n        }\n        else {\n            result.issues.push(iss);\n        }\n    }\n    // Report only keys unrecognized by BOTH sides\n    const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n    if (bothKeys.length && unrecIssue) {\n        result.issues.push({ ...unrecIssue, keys: bothKeys });\n    }\n    if (util.aborted(result))\n        return result;\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = [];\n        const proms = [];\n        const optinStart = getTupleOptStart(items, \"optin\");\n        const optoutStart = getTupleOptStart(items, \"optout\");\n        if (!def.rest) {\n            if (input.length < optinStart) {\n                payload.issues.push({\n                    code: \"too_small\",\n                    minimum: optinStart,\n                    inclusive: true,\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n                return payload;\n            }\n            if (input.length > items.length) {\n                payload.issues.push({\n                    code: \"too_big\",\n                    maximum: items.length,\n                    inclusive: true,\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n            }\n        }\n        // Run every item in parallel, collecting results into an indexed\n        // array. The post-processing in `handleTupleResults` walks them in\n        // order so it can decide whether an absent optional-output error can\n        // truncate the tail or must be reported to preserve required output.\n        const itemResults = new Array(items.length);\n        for (let i = 0; i < items.length; i++) {\n            const r = items[i]._zod.run({ value: input[i], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((rr) => {\n                    itemResults[i] = rr;\n                }));\n            }\n            else {\n                itemResults[i] = r;\n            }\n        }\n        if (def.rest) {\n            let i = items.length - 1;\n            const rest = input.slice(items.length);\n            for (const el of rest) {\n                i++;\n                const result = def.rest._zod.run({ value: el, issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((r) => handleTupleResult(r, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => handleTupleResults(itemResults, payload, items, input, optoutStart));\n        }\n        return handleTupleResults(itemResults, payload, items, input, optoutStart);\n    };\n});\nfunction getTupleOptStart(items, key) {\n    for (let i = items.length - 1; i >= 0; i--) {\n        if (items[i]._zod[key] !== \"optional\")\n            return i + 1;\n    }\n    return 0;\n}\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nfunction handleTupleResults(itemResults, final, items, input, optoutStart) {\n    // Walk results in order. Mirror $ZodObject's swallow-on-absent-optional\n    // rule, but only after `optoutStart`: the first index where the output\n    // tuple tail can be absent.\n    for (let i = 0; i < items.length; i++) {\n        const r = itemResults[i];\n        const isPresent = i < input.length;\n        if (r.issues.length) {\n            if (!isPresent && i >= optoutStart) {\n                final.value.length = i;\n                break;\n            }\n            final.issues.push(...util.prefixIssues(i, r.issues));\n        }\n        final.value[i] = r.value;\n    }\n    // Drop trailing slots that produced `undefined` for absent input\n    // (the array analog of an absent optional key on an object). The\n    // `i >= input.length` floor is critical: an explicit `undefined`\n    // *inside* the input must be preserved even when the schema is\n    // optional-out (e.g. `z.string().or(z.undefined())` accepting an\n    // explicit undefined value).\n    for (let i = final.value.length - 1; i >= input.length; i--) {\n        if (items[i]._zod.optout === \"optional\" && final.value[i] === undefined) {\n            final.value.length = i;\n        }\n        else {\n            break;\n        }\n    }\n    return final;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        const values = def.keyType._zod.values;\n        if (values) {\n            payload.value = {};\n            const recordKeys = new Set();\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n                    const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                    if (keyResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (keyResult.issues.length) {\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                        continue;\n                    }\n                    const outKey = keyResult.value;\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[outKey] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[outKey] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!recordKeys.has(key)) {\n                    unrecognized = unrecognized ?? [];\n                    unrecognized.push(key);\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                });\n            }\n        }\n        else {\n            payload.value = {};\n            // Reflect.ownKeys for Symbol-key support; filter non-enumerable to match z.object()\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                if (!Object.prototype.propertyIsEnumerable.call(input, key))\n                    continue;\n                let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n                // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n                const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n                if (checkNumericKey) {\n                    const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n                    if (retryResult instanceof Promise) {\n                        throw new Error(\"Async schemas not supported in object keys currently\");\n                    }\n                    if (retryResult.issues.length === 0) {\n                        keyResult = retryResult;\n                    }\n                }\n                if (keyResult.issues.length) {\n                    if (def.mode === \"loose\") {\n                        // Pass through unchanged\n                        payload.value[key] = input[key];\n                    }\n                    else {\n                        // Default \"strict\" behavior: error on invalid key\n                        payload.issues.push({\n                            code: \"invalid_key\",\n                            origin: \"record\",\n                            issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                            input: key,\n                            path: [key],\n                            inst,\n                        });\n                    }\n                    continue;\n                }\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[keyResult.value] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[keyResult.value] = result.value;\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Map();\n        for (const [key, value] of input) {\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                code: \"invalid_key\",\n                origin: \"map\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Set();\n        for (const item of input) {\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    const valuesSet = new Set(values);\n    inst._zod.values = valuesSet;\n    inst._zod.pattern = new RegExp(`^(${values\n        .filter((k) => util.propertyKeyTypes.has(typeof k))\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (valuesSet.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    if (def.values.length === 0) {\n        throw new Error(\"Cannot create literal schema with no valid values\");\n    }\n    const values = new Set(def.values);\n    inst._zod.values = values;\n    inst._zod.pattern = new RegExp(`^(${def.values\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        // @ts-ignore\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        const _out = def.transform(payload.value, payload);\n        if (ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                payload.fallback = true;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        payload.fallback = true;\n        return payload;\n    };\n});\nfunction handleOptionalResult(result, input) {\n    if (input === undefined && (result.issues.length || result.fallback)) {\n        return { issues: [], value: undefined };\n    }\n    return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (def.innerType._zod.optin === \"optional\") {\n            const input = payload.value;\n            const result = def.innerType._zod.run(payload, ctx);\n            if (result instanceof Promise)\n                return result.then((r) => handleOptionalResult(r, input));\n            return handleOptionalResult(result, input);\n        }\n        if (payload.value === undefined) {\n            return payload;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n    // Call parent init - inherits optin/optout = \"optional\"\n    $ZodOptional.init(inst, def);\n    // Override values/pattern to NOT add undefined\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n    // Override parse to just delegate (no undefined handling)\n    inst._zod.parse = (payload, ctx) => {\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        // Forward direction (decode): allow null to pass through\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply defaults for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault returns the default value immediately in forward direction.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        // Forward direction: continue with default handling\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply prefault for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => {\n        const v = def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(\"ZodSuccess\");\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply catch logic\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.value;\n                if (result.issues.length) {\n                    payload.value = def.catchValue({\n                        ...payload,\n                        error: {\n                            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        },\n                        input: payload.value,\n                    });\n                    payload.issues = [];\n                    payload.fallback = true;\n                }\n                return payload;\n            });\n        }\n        payload.value = result.value;\n        if (result.issues.length) {\n            payload.value = def.catchValue({\n                ...payload,\n                error: {\n                    issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                },\n                input: payload.value,\n            });\n            payload.issues = [];\n            payload.fallback = true;\n        }\n        return payload;\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handlePipeResult(right, def.in, ctx));\n            }\n            return handlePipeResult(right, def.in, ctx);\n        }\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def.out, ctx));\n        }\n        return handlePipeResult(left, def.out, ctx);\n    };\n});\nfunction handlePipeResult(left, next, ctx) {\n    if (left.issues.length) {\n        // prevent further checks\n        left.aborted = true;\n        return left;\n    }\n    return next._zod.run({ value: left.value, issues: left.issues, fallback: left.fallback }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        const direction = ctx.direction || \"forward\";\n        if (direction === \"forward\") {\n            const left = def.in._zod.run(payload, ctx);\n            if (left instanceof Promise) {\n                return left.then((left) => handleCodecAResult(left, def, ctx));\n            }\n            return handleCodecAResult(left, def, ctx);\n        }\n        else {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handleCodecAResult(right, def, ctx));\n            }\n            return handleCodecAResult(right, def, ctx);\n        }\n    };\n});\nfunction handleCodecAResult(result, def, ctx) {\n    if (result.issues.length) {\n        // prevent further checks\n        result.aborted = true;\n        return result;\n    }\n    const direction = ctx.direction || \"forward\";\n    if (direction === \"forward\") {\n        const transformed = def.transform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.out, ctx);\n    }\n    else {\n        const transformed = def.reverseTransform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.in, ctx);\n    }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n    // Check if transform added any issues\n    if (left.issues.length) {\n        left.aborted = true;\n        return left;\n    }\n    return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodPreprocess = /*@__PURE__*/ core.$constructor(\"$ZodPreprocess\", (inst, def) => {\n    $ZodPipe.init(inst, def);\n});\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    payload.value = Object.freeze(payload.value);\n    return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (typeof part === \"object\" && part !== null) {\n            // is Zod schema\n            if (!part._zod.pattern) {\n                // if (!source)\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n            if (!source)\n                throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n            const start = source.startsWith(\"^\") ? 1 : 0;\n            const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n            regexParts.push(source.slice(start, end));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"string\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: def.format ?? \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._def = def;\n    inst._zod.def = def;\n    inst.implement = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        return function (...args) {\n            const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n            const result = Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return parse(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst.implementAsync = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implementAsync() must be called with a function\");\n        }\n        return async function (...args) {\n            const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n            const result = await Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return await parseAsync(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"function\") {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"function\",\n                input: payload.value,\n                inst,\n            });\n            return payload;\n        }\n        // Check if output is a promise type to determine if we should use async implementation\n        const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n        if (hasPromiseOutput) {\n            payload.value = inst.implementAsync(payload.value);\n        }\n        else {\n            payload.value = inst.implement(payload.value);\n        }\n        return payload;\n    };\n    inst.input = (...args) => {\n        const F = inst.constructor;\n        if (Array.isArray(args[0])) {\n            return new F({\n                type: \"function\",\n                input: new $ZodTuple({\n                    type: \"tuple\",\n                    items: args[0],\n                    rest: args[1],\n                }),\n                output: inst._def.output,\n            });\n        }\n        return new F({\n            type: \"function\",\n            input: args[0],\n            output: inst._def.output,\n        });\n    };\n    inst.output = (output) => {\n        const F = inst.constructor;\n        return new F({\n            type: \"function\",\n            input: inst._def.input,\n            output,\n        });\n    };\n    return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // Cache the resolved inner type on the shared `def` so all clones of this\n    // lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance,\n    // preserving identity for cycle detection on recursive schemas.\n    util.defineLazy(inst._zod, \"innerType\", () => {\n        const d = def;\n        if (!d._cachedInner)\n            d._cachedInner = def.getter();\n        return d._cachedInner;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n    util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n    util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n    util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n    const Sizable = {\n        string: { unit: \"characters\", verb: \"to have\" },\n        file: { unit: \"bytes\", verb: \"to have\" },\n        array: { unit: \"items\", verb: \"to have\" },\n        set: { unit: \"items\", verb: \"to have\" },\n        map: { unit: \"entries\", verb: \"to have\" },\n    };\n    function getSizing(origin) {\n        return Sizable[origin] ?? null;\n    }\n    const FormatDictionary = {\n        regex: \"input\",\n        email: \"email address\",\n        url: \"URL\",\n        emoji: \"emoji\",\n        uuid: \"UUID\",\n        uuidv4: \"UUIDv4\",\n        uuidv6: \"UUIDv6\",\n        nanoid: \"nanoid\",\n        guid: \"GUID\",\n        cuid: \"cuid\",\n        cuid2: \"cuid2\",\n        ulid: \"ULID\",\n        xid: \"XID\",\n        ksuid: \"KSUID\",\n        datetime: \"ISO datetime\",\n        date: \"ISO date\",\n        time: \"ISO time\",\n        duration: \"ISO duration\",\n        ipv4: \"IPv4 address\",\n        ipv6: \"IPv6 address\",\n        mac: \"MAC address\",\n        cidrv4: \"IPv4 range\",\n        cidrv6: \"IPv6 range\",\n        base64: \"base64-encoded string\",\n        base64url: \"base64url-encoded string\",\n        json_string: \"JSON string\",\n        e164: \"E.164 number\",\n        jwt: \"JWT\",\n        template_literal: \"input\",\n    };\n    // type names: missing keys = do not translate (use raw value via ?? fallback)\n    const TypeDictionary = {\n        // Compatibility: \"nan\" -> \"NaN\" for display\n        nan: \"NaN\",\n        // All other type names omitted - they fall back to raw values via ?? operator\n    };\n    return (issue) => {\n        switch (issue.code) {\n            case \"invalid_type\": {\n                const expected = TypeDictionary[issue.expected] ?? issue.expected;\n                const receivedType = util.parsedType(issue.input);\n                const received = TypeDictionary[receivedType] ?? receivedType;\n                return `Invalid input: expected ${expected}, received ${received}`;\n            }\n            case \"invalid_value\":\n                if (issue.values.length === 1)\n                    return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n                return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n            case \"too_big\": {\n                const adj = issue.inclusive ? \"<=\" : \"<\";\n                const sizing = getSizing(issue.origin);\n                if (sizing)\n                    return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n                return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n            }\n            case \"too_small\": {\n                const adj = issue.inclusive ? \">=\" : \">\";\n                const sizing = getSizing(issue.origin);\n                if (sizing) {\n                    return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n                }\n                return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n            }\n            case \"invalid_format\": {\n                const _issue = issue;\n                if (_issue.format === \"starts_with\") {\n                    return `Invalid string: must start with \"${_issue.prefix}\"`;\n                }\n                if (_issue.format === \"ends_with\")\n                    return `Invalid string: must end with \"${_issue.suffix}\"`;\n                if (_issue.format === \"includes\")\n                    return `Invalid string: must include \"${_issue.includes}\"`;\n                if (_issue.format === \"regex\")\n                    return `Invalid string: must match pattern ${_issue.pattern}`;\n                return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n            }\n            case \"not_multiple_of\":\n                return `Invalid number: must be a multiple of ${issue.divisor}`;\n            case \"unrecognized_keys\":\n                return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n            case \"invalid_key\":\n                return `Invalid key in ${issue.origin}`;\n            case \"invalid_union\":\n                if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n                    const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n                    return `Invalid discriminator value. Expected ${opts}`;\n                }\n                return \"Invalid input\";\n            case \"invalid_element\":\n                return `Invalid value in ${issue.origin}`;\n            default:\n                return `Invalid input`;\n        }\n    };\n};\nexport default function () {\n    return {\n        localeError: error(),\n    };\n}\n","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            const f = { ...pm, ...this._map.get(schema) };\n            return Object.keys(f).length ? f : undefined;\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n    return new Class({\n        type: \"string\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n    return new Class({\n        type: \"string\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link _cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"mac\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n    return new Class({\n        type: \"number\",\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n    return new Class({\n        type: \"number\",\n        coerce: true,\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n    return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xor(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn, params) {\n    const ch = _check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    }, params);\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n    const ch = new checks.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n    const ch = new checks.$ZodCheck({ check: \"describe\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, description });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n    const ch = new checks.$ZodCheck({ check: \"meta\" });\n    ch._zod.onattach = [\n        (inst) => {\n            const existing = registries.globalRegistry.get(inst) ?? {};\n            registries.globalRegistry.add(inst, { ...existing, ...metadata });\n        },\n    ];\n    ch._zod.check = () => { }; // no-op check\n    return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const stringSchema = new _String({ type: \"string\", error: params.error });\n    const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n    const codec = new _Codec({\n        type: \"pipe\",\n        in: stringSchema,\n        out: booleanSchema,\n        transform: ((input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: codec,\n                    continue: false,\n                });\n                return {};\n            }\n        }),\n        reverseTransform: ((input, _payload) => {\n            if (input === true) {\n                return truthyArray[0] || \"true\";\n            }\n            else {\n                return falsyArray[0] || \"false\";\n            }\n        }),\n        error: params.error,\n    });\n    return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        ...util.normalizeParams(_params),\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n","import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n//   return {\n//     processor: inputs.processor,\n//     metadataRegistry: inputs.metadata ?? globalRegistry,\n//     target: inputs.target ?? \"draft-2020-12\",\n//     unrepresentable: inputs.unrepresentable ?? \"throw\",\n//   };\n// }\nexport function initializeContext(params) {\n    // Normalize target: convert old non-hyphenated versions to hyphenated versions\n    let target = params?.target ?? \"draft-2020-12\";\n    if (target === \"draft-4\")\n        target = \"draft-04\";\n    if (target === \"draft-7\")\n        target = \"draft-07\";\n    return {\n        processors: params.processors ?? {},\n        metadataRegistry: params?.metadata ?? globalRegistry,\n        target,\n        unrepresentable: params?.unrepresentable ?? \"throw\",\n        override: params?.override ?? (() => { }),\n        io: params?.io ?? \"output\",\n        counter: 0,\n        seen: new Map(),\n        cycles: params?.cycles ?? \"ref\",\n        reused: params?.reused ?? \"inline\",\n        external: params?.external ?? undefined,\n    };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n    var _a;\n    const def = schema._zod.def;\n    // check for schema in seens\n    const seen = ctx.seen.get(schema);\n    if (seen) {\n        seen.count++;\n        // check if cycle\n        const isCycle = _params.schemaPath.includes(schema);\n        if (isCycle) {\n            seen.cycle = _params.path;\n        }\n        return seen.schema;\n    }\n    // initialize\n    const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n    ctx.seen.set(schema, result);\n    // custom method overrides default behavior\n    const overrideSchema = schema._zod.toJSONSchema?.();\n    if (overrideSchema) {\n        result.schema = overrideSchema;\n    }\n    else {\n        const params = {\n            ..._params,\n            schemaPath: [..._params.schemaPath, schema],\n            path: _params.path,\n        };\n        if (schema._zod.processJSONSchema) {\n            schema._zod.processJSONSchema(ctx, result.schema, params);\n        }\n        else {\n            const _json = result.schema;\n            const processor = ctx.processors[def.type];\n            if (!processor) {\n                throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n            }\n            processor(schema, ctx, _json, params);\n        }\n        const parent = schema._zod.parent;\n        if (parent) {\n            // Also set ref if processor didn't (for inheritance)\n            if (!result.ref)\n                result.ref = parent;\n            process(parent, ctx, params);\n            ctx.seen.get(parent).isParent = true;\n        }\n    }\n    // metadata\n    const meta = ctx.metadataRegistry.get(schema);\n    if (meta)\n        Object.assign(result.schema, meta);\n    if (ctx.io === \"input\" && isTransforming(schema)) {\n        // examples/defaults only apply to output type of pipe\n        delete result.schema.examples;\n        delete result.schema.default;\n    }\n    // set prefault as default\n    if (ctx.io === \"input\" && \"_prefault\" in result.schema)\n        (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n    delete result.schema._prefault;\n    // pulling fresh from ctx.seen in case it was overwritten\n    const _result = ctx.seen.get(schema);\n    return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n    // iterate over seen map;\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // Track ids to detect duplicates across different schemas\n    const idToSchema = new Map();\n    for (const entry of ctx.seen.entries()) {\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            const existing = idToSchema.get(id);\n            if (existing && existing !== entry[0]) {\n                throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n            }\n            idToSchema.set(id, entry[0]);\n        }\n    }\n    // returns a ref to the schema\n    // defId will be empty if the ref points to an external schema (or #)\n    const makeURI = (entry) => {\n        // comparing the seen objects because sometimes\n        // multiple schemas map to the same seen object.\n        // e.g. lazy\n        // external is configured\n        const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n        if (ctx.external) {\n            const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n            // check if schema is in the external registry\n            const uriGenerator = ctx.external.uri ?? ((id) => id);\n            if (externalId) {\n                return { ref: uriGenerator(externalId) };\n            }\n            // otherwise, add to __shared\n            const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n            entry[1].defId = id; // set defId so it will be reused if needed\n            return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n        }\n        if (entry[1] === root) {\n            return { ref: \"#\" };\n        }\n        // self-contained schema\n        const uriPrefix = `#`;\n        const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n        const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n        return { defId, ref: defUriPrefix + defId };\n    };\n    // stored cached version in `def` property\n    // remove all properties, set $ref\n    const extractToDef = (entry) => {\n        // if the schema is already a reference, do not extract it\n        if (entry[1].schema.$ref) {\n            return;\n        }\n        const seen = entry[1];\n        const { ref, defId } = makeURI(entry);\n        seen.def = { ...seen.schema };\n        // defId won't be set if the schema is a reference to an external schema\n        // or if the schema is the root schema\n        if (defId)\n            seen.defId = defId;\n        // wipe away all properties except $ref\n        const schema = seen.schema;\n        for (const key in schema) {\n            delete schema[key];\n        }\n        schema.$ref = ref;\n    };\n    // throw on cycles\n    // break cycles\n    if (ctx.cycles === \"throw\") {\n        for (const entry of ctx.seen.entries()) {\n            const seen = entry[1];\n            if (seen.cycle) {\n                throw new Error(\"Cycle detected: \" +\n                    `#/${seen.cycle?.join(\"/\")}/<root>` +\n                    '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n            }\n        }\n    }\n    // extract schemas into $defs\n    for (const entry of ctx.seen.entries()) {\n        const seen = entry[1];\n        // convert root schema to # $ref\n        if (schema === entry[0]) {\n            extractToDef(entry); // this has special handling for the root schema\n            continue;\n        }\n        // extract schemas that are in the external registry\n        if (ctx.external) {\n            const ext = ctx.external.registry.get(entry[0])?.id;\n            if (schema !== entry[0] && ext) {\n                extractToDef(entry);\n                continue;\n            }\n        }\n        // extract schemas with `id` meta\n        const id = ctx.metadataRegistry.get(entry[0])?.id;\n        if (id) {\n            extractToDef(entry);\n            continue;\n        }\n        // break cycles\n        if (seen.cycle) {\n            // any\n            extractToDef(entry);\n            continue;\n        }\n        // extract reused schemas\n        if (seen.count > 1) {\n            if (ctx.reused === \"ref\") {\n                extractToDef(entry);\n                // biome-ignore lint:\n                continue;\n            }\n        }\n    }\n}\nexport function finalize(ctx, schema) {\n    const root = ctx.seen.get(schema);\n    if (!root)\n        throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n    // flatten refs - inherit properties from parent schemas\n    const flattenRef = (zodSchema) => {\n        const seen = ctx.seen.get(zodSchema);\n        // already processed\n        if (seen.ref === null)\n            return;\n        const schema = seen.def ?? seen.schema;\n        const _cached = { ...schema };\n        const ref = seen.ref;\n        seen.ref = null; // prevent infinite recursion\n        if (ref) {\n            flattenRef(ref);\n            const refSeen = ctx.seen.get(ref);\n            const refSchema = refSeen.schema;\n            // merge referenced schema into current\n            if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n                // older drafts can't combine $ref with other properties\n                schema.allOf = schema.allOf ?? [];\n                schema.allOf.push(refSchema);\n            }\n            else {\n                Object.assign(schema, refSchema);\n            }\n            // restore child's own properties (child wins)\n            Object.assign(schema, _cached);\n            const isParentRef = zodSchema._zod.parent === ref;\n            // For parent chain, child is a refinement - remove parent-only properties\n            if (isParentRef) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (!(key in _cached)) {\n                        delete schema[key];\n                    }\n                }\n            }\n            // When ref was extracted to $defs, remove properties that match the definition\n            if (refSchema.$ref && refSeen.def) {\n                for (const key in schema) {\n                    if (key === \"$ref\" || key === \"allOf\")\n                        continue;\n                    if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n                        delete schema[key];\n                    }\n                }\n            }\n        }\n        // If parent was extracted (has $ref), propagate $ref to this schema\n        // This handles cases like: readonly().meta({id}).describe()\n        // where processor sets ref to innerType but parent should be referenced\n        const parent = zodSchema._zod.parent;\n        if (parent && parent !== ref) {\n            // Ensure parent is processed first so its def has inherited properties\n            flattenRef(parent);\n            const parentSeen = ctx.seen.get(parent);\n            if (parentSeen?.schema.$ref) {\n                schema.$ref = parentSeen.schema.$ref;\n                // De-duplicate with parent's definition\n                if (parentSeen.def) {\n                    for (const key in schema) {\n                        if (key === \"$ref\" || key === \"allOf\")\n                            continue;\n                        if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n                            delete schema[key];\n                        }\n                    }\n                }\n            }\n        }\n        // execute overrides\n        ctx.override({\n            zodSchema: zodSchema,\n            jsonSchema: schema,\n            path: seen.path ?? [],\n        });\n    };\n    for (const entry of [...ctx.seen.entries()].reverse()) {\n        flattenRef(entry[0]);\n    }\n    const result = {};\n    if (ctx.target === \"draft-2020-12\") {\n        result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n    }\n    else if (ctx.target === \"draft-07\") {\n        result.$schema = \"http://json-schema.org/draft-07/schema#\";\n    }\n    else if (ctx.target === \"draft-04\") {\n        result.$schema = \"http://json-schema.org/draft-04/schema#\";\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        // OpenAPI 3.0 schema objects should not include a $schema property\n    }\n    else {\n        // Arbitrary string values are allowed but won't have a $schema property set\n    }\n    if (ctx.external?.uri) {\n        const id = ctx.external.registry.get(schema)?.id;\n        if (!id)\n            throw new Error(\"Schema is missing an `id` property\");\n        result.$id = ctx.external.uri(id);\n    }\n    Object.assign(result, root.def ?? root.schema);\n    // The `id` in `.meta()` is a Zod-specific registration tag used to extract\n    // schemas into $defs — it is not user-facing JSON Schema metadata. Strip it\n    // from the output body where it would otherwise leak. The id is preserved\n    // implicitly via the $defs key (and via $ref paths).\n    const rootMetaId = ctx.metadataRegistry.get(schema)?.id;\n    if (rootMetaId !== undefined && result.id === rootMetaId)\n        delete result.id;\n    // build defs object\n    const defs = ctx.external?.defs ?? {};\n    for (const entry of ctx.seen.entries()) {\n        const seen = entry[1];\n        if (seen.def && seen.defId) {\n            if (seen.def.id === seen.defId)\n                delete seen.def.id;\n            defs[seen.defId] = seen.def;\n        }\n    }\n    // set definitions in result\n    if (ctx.external) {\n    }\n    else {\n        if (Object.keys(defs).length > 0) {\n            if (ctx.target === \"draft-2020-12\") {\n                result.$defs = defs;\n            }\n            else {\n                result.definitions = defs;\n            }\n        }\n    }\n    try {\n        // this \"finalizes\" this schema and ensures all cycles are removed\n        // each call to finalize() is functionally independent\n        // though the seen map is shared\n        const finalized = JSON.parse(JSON.stringify(result));\n        Object.defineProperty(finalized, \"~standard\", {\n            value: {\n                ...schema[\"~standard\"],\n                jsonSchema: {\n                    input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n                    output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n                },\n            },\n            enumerable: false,\n            writable: false,\n        });\n        return finalized;\n    }\n    catch (_err) {\n        throw new Error(\"Error converting schema to JSON.\");\n    }\n}\nfunction isTransforming(_schema, _ctx) {\n    const ctx = _ctx ?? { seen: new Set() };\n    if (ctx.seen.has(_schema))\n        return false;\n    ctx.seen.add(_schema);\n    const def = _schema._zod.def;\n    if (def.type === \"transform\")\n        return true;\n    if (def.type === \"array\")\n        return isTransforming(def.element, ctx);\n    if (def.type === \"set\")\n        return isTransforming(def.valueType, ctx);\n    if (def.type === \"lazy\")\n        return isTransforming(def.getter(), ctx);\n    if (def.type === \"promise\" ||\n        def.type === \"optional\" ||\n        def.type === \"nonoptional\" ||\n        def.type === \"nullable\" ||\n        def.type === \"readonly\" ||\n        def.type === \"default\" ||\n        def.type === \"prefault\") {\n        return isTransforming(def.innerType, ctx);\n    }\n    if (def.type === \"intersection\") {\n        return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n    }\n    if (def.type === \"record\" || def.type === \"map\") {\n        return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n    }\n    if (def.type === \"pipe\") {\n        if (_schema._zod.traits.has(\"$ZodCodec\"))\n            return true;\n        return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n    }\n    if (def.type === \"object\") {\n        for (const key in def.shape) {\n            if (isTransforming(def.shape[key], ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"union\") {\n        for (const option of def.options) {\n            if (isTransforming(option, ctx))\n                return true;\n        }\n        return false;\n    }\n    if (def.type === \"tuple\") {\n        for (const item of def.items) {\n            if (isTransforming(item, ctx))\n                return true;\n        }\n        if (def.rest && isTransforming(def.rest, ctx))\n            return true;\n        return false;\n    }\n    return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n    const ctx = initializeContext({ ...params, processors });\n    process(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n    const { libraryOptions, target } = params ?? {};\n    const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n    process(schema, ctx);\n    extractDefs(ctx, schema);\n    return finalize(ctx, schema);\n};\n","import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n    guid: \"uuid\",\n    url: \"uri\",\n    datetime: \"date-time\",\n    json_string: \"json-string\",\n    regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n    const json = _json;\n    json.type = \"string\";\n    const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n        .bag;\n    if (typeof minimum === \"number\")\n        json.minLength = minimum;\n    if (typeof maximum === \"number\")\n        json.maxLength = maximum;\n    // custom pattern overrides format\n    if (format) {\n        json.format = formatMap[format] ?? format;\n        if (json.format === \"\")\n            delete json.format; // empty format is not valid\n        // JSON Schema format: \"time\" requires a full time with offset or Z\n        // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n        if (format === \"time\") {\n            delete json.format;\n        }\n    }\n    if (contentEncoding)\n        json.contentEncoding = contentEncoding;\n    if (patterns && patterns.size > 0) {\n        const regexes = [...patterns];\n        if (regexes.length === 1)\n            json.pattern = regexes[0].source;\n        else if (regexes.length > 1) {\n            json.allOf = [\n                ...regexes.map((regex) => ({\n                    ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n                        ? { type: \"string\" }\n                        : {}),\n                    pattern: regex.source,\n                })),\n            ];\n        }\n    }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n    const json = _json;\n    const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n    if (typeof format === \"string\" && format.includes(\"int\"))\n        json.type = \"integer\";\n    else\n        json.type = \"number\";\n    // when both minimum and exclusiveMinimum exist, pick the more restrictive one\n    const exMin = typeof exclusiveMinimum === \"number\" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY);\n    const exMax = typeof exclusiveMaximum === \"number\" && exclusiveMaximum <= (maximum ?? Number.POSITIVE_INFINITY);\n    const legacy = ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\";\n    if (exMin) {\n        if (legacy) {\n            json.minimum = exclusiveMinimum;\n            json.exclusiveMinimum = true;\n        }\n        else {\n            json.exclusiveMinimum = exclusiveMinimum;\n        }\n    }\n    else if (typeof minimum === \"number\") {\n        json.minimum = minimum;\n    }\n    if (exMax) {\n        if (legacy) {\n            json.maximum = exclusiveMaximum;\n            json.exclusiveMaximum = true;\n        }\n        else {\n            json.exclusiveMaximum = exclusiveMaximum;\n        }\n    }\n    else if (typeof maximum === \"number\") {\n        json.maximum = maximum;\n    }\n    if (typeof multipleOf === \"number\")\n        json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"BigInt cannot be represented in JSON Schema\");\n    }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Symbols cannot be represented in JSON Schema\");\n    }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n    if (ctx.target === \"openapi-3.0\") {\n        json.type = \"string\";\n        json.nullable = true;\n        json.enum = [null];\n    }\n    else {\n        json.type = \"null\";\n    }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Undefined cannot be represented in JSON Schema\");\n    }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Void cannot be represented in JSON Schema\");\n    }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n    json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n    // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Date cannot be represented in JSON Schema\");\n    }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n    const def = schema._zod.def;\n    const values = getEnumValues(def.entries);\n    // Number enums can have both string and number values\n    if (values.every((v) => typeof v === \"number\"))\n        json.type = \"number\";\n    if (values.every((v) => typeof v === \"string\"))\n        json.type = \"string\";\n    json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n    const def = schema._zod.def;\n    const vals = [];\n    for (const val of def.values) {\n        if (val === undefined) {\n            if (ctx.unrepresentable === \"throw\") {\n                throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n            }\n            else {\n                // do not add to vals\n            }\n        }\n        else if (typeof val === \"bigint\") {\n            if (ctx.unrepresentable === \"throw\") {\n                throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n            }\n            else {\n                vals.push(Number(val));\n            }\n        }\n        else {\n            vals.push(val);\n        }\n    }\n    if (vals.length === 0) {\n        // do nothing (an undefined literal was stripped)\n    }\n    else if (vals.length === 1) {\n        const val = vals[0];\n        json.type = val === null ? \"null\" : typeof val;\n        if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n            json.enum = [val];\n        }\n        else {\n            json.const = val;\n        }\n    }\n    else {\n        if (vals.every((v) => typeof v === \"number\"))\n            json.type = \"number\";\n        if (vals.every((v) => typeof v === \"string\"))\n            json.type = \"string\";\n        if (vals.every((v) => typeof v === \"boolean\"))\n            json.type = \"boolean\";\n        if (vals.every((v) => v === null))\n            json.type = \"null\";\n        json.enum = vals;\n    }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"NaN cannot be represented in JSON Schema\");\n    }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    const pattern = schema._zod.pattern;\n    if (!pattern)\n        throw new Error(\"Pattern not found in template literal\");\n    _json.type = \"string\";\n    _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n    const _json = json;\n    const file = {\n        type: \"string\",\n        format: \"binary\",\n        contentEncoding: \"binary\",\n    };\n    const { minimum, maximum, mime } = schema._zod.bag;\n    if (minimum !== undefined)\n        file.minLength = minimum;\n    if (maximum !== undefined)\n        file.maxLength = maximum;\n    if (mime) {\n        if (mime.length === 1) {\n            file.contentMediaType = mime[0];\n            Object.assign(_json, file);\n        }\n        else {\n            Object.assign(_json, file); // shared props at root\n            _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n        }\n    }\n    else {\n        Object.assign(_json, file);\n    }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n    json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Custom types cannot be represented in JSON Schema\");\n    }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Function types cannot be represented in JSON Schema\");\n    }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Transforms cannot be represented in JSON Schema\");\n    }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Map cannot be represented in JSON Schema\");\n    }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n    if (ctx.unrepresentable === \"throw\") {\n        throw new Error(\"Set cannot be represented in JSON Schema\");\n    }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    const { minimum, maximum } = schema._zod.bag;\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n    json.type = \"array\";\n    json.items = process(def.element, ctx, {\n        ...params,\n        path: [...params.path, \"items\"],\n    });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"object\";\n    json.properties = {};\n    const shape = def.shape;\n    for (const key in shape) {\n        json.properties[key] = process(shape[key], ctx, {\n            ...params,\n            path: [...params.path, \"properties\", key],\n        });\n    }\n    // required keys\n    const allKeys = new Set(Object.keys(shape));\n    const requiredKeys = new Set([...allKeys].filter((key) => {\n        const v = def.shape[key]._zod;\n        if (ctx.io === \"input\") {\n            return v.optin === undefined;\n        }\n        else {\n            return v.optout === undefined;\n        }\n    }));\n    if (requiredKeys.size > 0) {\n        json.required = Array.from(requiredKeys);\n    }\n    // catchall\n    if (def.catchall?._zod.def.type === \"never\") {\n        // strict\n        json.additionalProperties = false;\n    }\n    else if (!def.catchall) {\n        // regular\n        if (ctx.io === \"output\")\n            json.additionalProperties = false;\n    }\n    else if (def.catchall) {\n        json.additionalProperties = process(def.catchall, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n    // This includes both z.xor() and discriminated unions\n    const isExclusive = def.inclusive === false;\n    const options = def.options.map((x, i) => process(x, ctx, {\n        ...params,\n        path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n    }));\n    if (isExclusive) {\n        json.oneOf = options;\n    }\n    else {\n        json.anyOf = options;\n    }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const a = process(def.left, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 0],\n    });\n    const b = process(def.right, ctx, {\n        ...params,\n        path: [...params.path, \"allOf\", 1],\n    });\n    const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n    const allOf = [\n        ...(isSimpleIntersection(a) ? a.allOf : [a]),\n        ...(isSimpleIntersection(b) ? b.allOf : [b]),\n    ];\n    json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"array\";\n    const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n    const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n    const prefixItems = def.items.map((x, i) => process(x, ctx, {\n        ...params,\n        path: [...params.path, prefixPath, i],\n    }));\n    const rest = def.rest\n        ? process(def.rest, ctx, {\n            ...params,\n            path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n        })\n        : null;\n    if (ctx.target === \"draft-2020-12\") {\n        json.prefixItems = prefixItems;\n        if (rest) {\n            json.items = rest;\n        }\n    }\n    else if (ctx.target === \"openapi-3.0\") {\n        json.items = {\n            anyOf: prefixItems,\n        };\n        if (rest) {\n            json.items.anyOf.push(rest);\n        }\n        json.minItems = prefixItems.length;\n        if (!rest) {\n            json.maxItems = prefixItems.length;\n        }\n    }\n    else {\n        json.items = prefixItems;\n        if (rest) {\n            json.additionalItems = rest;\n        }\n    }\n    // length\n    const { minimum, maximum } = schema._zod.bag;\n    if (typeof minimum === \"number\")\n        json.minItems = minimum;\n    if (typeof maximum === \"number\")\n        json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n    const json = _json;\n    const def = schema._zod.def;\n    json.type = \"object\";\n    // For looseRecord with regex patterns, use patternProperties\n    // This correctly represents \"only validate keys matching the pattern\" semantics\n    // and composes well with allOf (intersections)\n    const keyType = def.keyType;\n    const keyBag = keyType._zod.bag;\n    const patterns = keyBag?.patterns;\n    if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n        // Use patternProperties for looseRecord with regex patterns\n        const valueSchema = process(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"patternProperties\", \"*\"],\n        });\n        json.patternProperties = {};\n        for (const pattern of patterns) {\n            json.patternProperties[pattern.source] = valueSchema;\n        }\n    }\n    else {\n        // Default behavior: use propertyNames + additionalProperties\n        if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n            json.propertyNames = process(def.keyType, ctx, {\n                ...params,\n                path: [...params.path, \"propertyNames\"],\n            });\n        }\n        json.additionalProperties = process(def.valueType, ctx, {\n            ...params,\n            path: [...params.path, \"additionalProperties\"],\n        });\n    }\n    // Add required for keys with discrete values (enum, literal, etc.)\n    const keyValues = keyType._zod.values;\n    if (keyValues) {\n        const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n        if (validKeyValues.length > 0) {\n            json.required = validKeyValues;\n        }\n    }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    const inner = process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    if (ctx.target === \"openapi-3.0\") {\n        seen.ref = def.innerType;\n        json.nullable = true;\n    }\n    else {\n        json.anyOf = [inner, { type: \"null\" }];\n    }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    if (ctx.io === \"input\")\n        json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    let catchValue;\n    try {\n        catchValue = def.catchValue(undefined);\n    }\n    catch {\n        throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n    }\n    json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    const inIsTransform = def.in._zod.traits.has(\"$ZodTransform\");\n    const innerType = ctx.io === \"input\" ? (inIsTransform ? def.out : def.in) : def.out;\n    process(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n    json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n    const def = schema._zod.def;\n    process(def.innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n    const innerType = schema._zod.innerType;\n    process(innerType, ctx, params);\n    const seen = ctx.seen.get(schema);\n    seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n    string: stringProcessor,\n    number: numberProcessor,\n    boolean: booleanProcessor,\n    bigint: bigintProcessor,\n    symbol: symbolProcessor,\n    null: nullProcessor,\n    undefined: undefinedProcessor,\n    void: voidProcessor,\n    never: neverProcessor,\n    any: anyProcessor,\n    unknown: unknownProcessor,\n    date: dateProcessor,\n    enum: enumProcessor,\n    literal: literalProcessor,\n    nan: nanProcessor,\n    template_literal: templateLiteralProcessor,\n    file: fileProcessor,\n    success: successProcessor,\n    custom: customProcessor,\n    function: functionProcessor,\n    transform: transformProcessor,\n    map: mapProcessor,\n    set: setProcessor,\n    array: arrayProcessor,\n    object: objectProcessor,\n    union: unionProcessor,\n    intersection: intersectionProcessor,\n    tuple: tupleProcessor,\n    record: recordProcessor,\n    nullable: nullableProcessor,\n    nonoptional: nonoptionalProcessor,\n    default: defaultProcessor,\n    prefault: prefaultProcessor,\n    catch: catchProcessor,\n    pipe: pipeProcessor,\n    readonly: readonlyProcessor,\n    promise: promiseProcessor,\n    optional: optionalProcessor,\n    lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n    if (\"_idmap\" in input) {\n        // Registry case\n        const registry = input;\n        const ctx = initializeContext({ ...params, processors: allProcessors });\n        const defs = {};\n        // First pass: process all schemas to build the seen map\n        for (const entry of registry._idmap.entries()) {\n            const [_, schema] = entry;\n            process(schema, ctx);\n        }\n        const schemas = {};\n        const external = {\n            registry,\n            uri: params?.uri,\n            defs,\n        };\n        // Update the context with external configuration\n        ctx.external = external;\n        // Second pass: emit each schema\n        for (const entry of registry._idmap.entries()) {\n            const [key, schema] = entry;\n            extractDefs(ctx, schema);\n            schemas[key] = finalize(ctx, schema);\n        }\n        if (Object.keys(defs).length > 0) {\n            const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n            schemas.__shared = {\n                [defsSegment]: defs,\n            };\n        }\n        return { schemas };\n    }\n    // Single schema case\n    const ctx = initializeContext({ ...params, processors: allProcessors });\n    process(input, ctx);\n    extractDefs(ctx, input);\n    return finalize(ctx, input);\n}\n","export { _lt as lt, _lte as lte, _gt as gt, _gte as gte, _positive as positive, _negative as negative, _nonpositive as nonpositive, _nonnegative as nonnegative, _multipleOf as multipleOf, _maxSize as maxSize, _minSize as minSize, _size as size, _maxLength as maxLength, _minLength as minLength, _length as length, _regex as regex, _lowercase as lowercase, _uppercase as uppercase, _includes as includes, _startsWith as startsWith, _endsWith as endsWith, _property as property, _mime as mime, _overwrite as overwrite, _normalize as normalize, _trim as trim, _toLowerCase as toLowerCase, _toUpperCase as toUpperCase, _slugify as slugify, } from \"../core/index.js\";\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    Object.defineProperties(inst, {\n        format: {\n            value: (mapper) => core.formatError(inst, mapper),\n            // enumerable: false,\n        },\n        flatten: {\n            value: (mapper) => core.flattenError(inst, mapper),\n            // enumerable: false,\n        },\n        addIssue: {\n            value: (issue) => {\n                inst.issues.push(issue);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        addIssues: {\n            value: (issues) => {\n                inst.issues.push(...issues);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        isEmpty: {\n            get() {\n                return inst.issues.length === 0;\n            },\n            // enumerable: false,\n        },\n    });\n    // Object.defineProperty(inst, \"isEmpty\", {\n    //   get() {\n    //     return inst.issues.length === 0;\n    //   },\n    // });\n};\nexport const ZodError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\n// Lazy-bind builder methods.\n//\n// Builder methods (`.optional`, `.array`, `.refine`, ...) live as\n// non-enumerable getters on each concrete schema constructor's\n// prototype. On first access from an instance the getter allocates\n// `fn.bind(this)` and caches it as an own property on that instance,\n// so detached usage (`const m = schema.optional; m()`) still works\n// and the per-instance allocation only happens for methods actually\n// touched.\n//\n// One install per (prototype, group), memoized by `_installedGroups`.\nconst _installedGroups = /* @__PURE__ */ new WeakMap();\nfunction _installLazyMethods(inst, group, methods) {\n    const proto = Object.getPrototypeOf(inst);\n    let installed = _installedGroups.get(proto);\n    if (!installed) {\n        installed = new Set();\n        _installedGroups.set(proto, installed);\n    }\n    if (installed.has(group))\n        return;\n    installed.add(group);\n    for (const key in methods) {\n        const fn = methods[key];\n        Object.defineProperty(proto, key, {\n            configurable: true,\n            enumerable: false,\n            get() {\n                const bound = fn.bind(this);\n                Object.defineProperty(this, key, {\n                    configurable: true,\n                    writable: true,\n                    enumerable: true,\n                    value: bound,\n                });\n                return bound;\n            },\n            set(v) {\n                Object.defineProperty(this, key, {\n                    configurable: true,\n                    writable: true,\n                    enumerable: true,\n                    value: v,\n                });\n            },\n        });\n    }\n}\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    core.$ZodType.init(inst, def);\n    Object.assign(inst[\"~standard\"], {\n        jsonSchema: {\n            input: createStandardJSONSchemaMethod(inst, \"input\"),\n            output: createStandardJSONSchemaMethod(inst, \"output\"),\n        },\n    });\n    inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n    inst.def = def;\n    inst.type = def.type;\n    Object.defineProperty(inst, \"_def\", { value: def });\n    // Parse-family is intentionally kept as per-instance closures: these are\n    // the hot path AND the most-detached methods (`arr.map(schema.parse)`,\n    // `const { parse } = schema`, etc.). Eager closures here mean callers pay\n    // ~12 closure allocations per schema but get monomorphic call sites and\n    // detached usage that \"just works\".\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.spa = inst.safeParseAsync;\n    inst.encode = (data, params) => parse.encode(inst, data, params);\n    inst.decode = (data, params) => parse.decode(inst, data, params);\n    inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n    inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n    inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n    inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n    inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n    inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n    // All builder methods are placed on the internal prototype as lazy-bind\n    // getters. On first access per-instance, a bound thunk is allocated and\n    // cached as an own property; subsequent accesses skip the getter. This\n    // means: no per-instance allocation for unused methods, full\n    // detachability preserved (`const m = schema.optional; m()` works), and\n    // shared underlying function references across all instances.\n    _installLazyMethods(inst, \"ZodType\", {\n        check(...chks) {\n            const def = this.def;\n            return this.clone(util.mergeDefs(def, {\n                checks: [\n                    ...(def.checks ?? []),\n                    ...chks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n                ],\n            }), { parent: true });\n        },\n        with(...chks) {\n            return this.check(...chks);\n        },\n        clone(def, params) {\n            return core.clone(this, def, params);\n        },\n        brand() {\n            return this;\n        },\n        register(reg, meta) {\n            reg.add(this, meta);\n            return this;\n        },\n        refine(check, params) {\n            return this.check(refine(check, params));\n        },\n        superRefine(refinement, params) {\n            return this.check(superRefine(refinement, params));\n        },\n        overwrite(fn) {\n            return this.check(checks.overwrite(fn));\n        },\n        optional() {\n            return optional(this);\n        },\n        exactOptional() {\n            return exactOptional(this);\n        },\n        nullable() {\n            return nullable(this);\n        },\n        nullish() {\n            return optional(nullable(this));\n        },\n        nonoptional(params) {\n            return nonoptional(this, params);\n        },\n        array() {\n            return array(this);\n        },\n        or(arg) {\n            return union([this, arg]);\n        },\n        and(arg) {\n            return intersection(this, arg);\n        },\n        transform(tx) {\n            return pipe(this, transform(tx));\n        },\n        default(d) {\n            return _default(this, d);\n        },\n        prefault(d) {\n            return prefault(this, d);\n        },\n        catch(params) {\n            return _catch(this, params);\n        },\n        pipe(target) {\n            return pipe(this, target);\n        },\n        readonly() {\n            return readonly(this);\n        },\n        describe(description) {\n            const cl = this.clone();\n            core.globalRegistry.add(cl, { description });\n            return cl;\n        },\n        meta(...args) {\n            // overloaded: meta() returns the registered metadata, meta(data)\n            // returns a clone with `data` registered. The mapped type picks\n            // up the second overload, so we accept variadic any-args and\n            // return `any` to satisfy both at runtime.\n            if (args.length === 0)\n                return core.globalRegistry.get(this);\n            const cl = this.clone();\n            core.globalRegistry.add(cl, args[0]);\n            return cl;\n        },\n        isOptional() {\n            return this.safeParse(undefined).success;\n        },\n        isNullable() {\n            return this.safeParse(null).success;\n        },\n        apply(fn) {\n            return fn(this);\n        },\n    });\n    Object.defineProperty(inst, \"description\", {\n        get() {\n            return core.globalRegistry.get(inst)?.description;\n        },\n        configurable: true,\n    });\n    return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n    const bag = inst._zod.bag;\n    inst.format = bag.format ?? null;\n    inst.minLength = bag.minimum ?? null;\n    inst.maxLength = bag.maximum ?? null;\n    _installLazyMethods(inst, \"_ZodString\", {\n        regex(...args) {\n            return this.check(checks.regex(...args));\n        },\n        includes(...args) {\n            return this.check(checks.includes(...args));\n        },\n        startsWith(...args) {\n            return this.check(checks.startsWith(...args));\n        },\n        endsWith(...args) {\n            return this.check(checks.endsWith(...args));\n        },\n        min(...args) {\n            return this.check(checks.minLength(...args));\n        },\n        max(...args) {\n            return this.check(checks.maxLength(...args));\n        },\n        length(...args) {\n            return this.check(checks.length(...args));\n        },\n        nonempty(...args) {\n            return this.check(checks.minLength(1, ...args));\n        },\n        lowercase(params) {\n            return this.check(checks.lowercase(params));\n        },\n        uppercase(params) {\n            return this.check(checks.uppercase(params));\n        },\n        trim() {\n            return this.check(checks.trim());\n        },\n        normalize(...args) {\n            return this.check(checks.normalize(...args));\n        },\n        toLowerCase() {\n            return this.check(checks.toLowerCase());\n        },\n        toUpperCase() {\n            return this.check(checks.toUpperCase());\n        },\n        slugify() {\n            return this.check(checks.slugify());\n        },\n    });\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n    inst.email = (params) => inst.check(core._email(ZodEmail, params));\n    inst.url = (params) => inst.check(core._url(ZodURL, params));\n    inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n    inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n    inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n    inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n    inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n    inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n    inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n    inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n    inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n    inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n    inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n    inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n    inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n    inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n    inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n    inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n    inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n    // iso\n    inst.datetime = (params) => inst.check(iso.datetime(params));\n    inst.date = (params) => inst.check(iso.date(params));\n    inst.time = (params) => inst.check(iso.time(params));\n    inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n    return core._url(ZodURL, {\n        protocol: core.regexes.httpProtocol,\n        hostname: core.regexes.domain,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\n/**\n * Validates a CUID v1 string.\n *\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2 | `z.cuid2()`} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodMAC.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n    return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n    const enc = params?.enc ?? \"hex\";\n    const format = `${alg}_${enc}`;\n    const regex = core.regexes[format];\n    if (!regex)\n        throw new Error(`Unrecognized hash format: ${format}`);\n    return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n    _installLazyMethods(inst, \"ZodNumber\", {\n        gt(value, params) {\n            return this.check(checks.gt(value, params));\n        },\n        gte(value, params) {\n            return this.check(checks.gte(value, params));\n        },\n        min(value, params) {\n            return this.check(checks.gte(value, params));\n        },\n        lt(value, params) {\n            return this.check(checks.lt(value, params));\n        },\n        lte(value, params) {\n            return this.check(checks.lte(value, params));\n        },\n        max(value, params) {\n            return this.check(checks.lte(value, params));\n        },\n        int(params) {\n            return this.check(int(params));\n        },\n        safe(params) {\n            return this.check(int(params));\n        },\n        positive(params) {\n            return this.check(checks.gt(0, params));\n        },\n        nonnegative(params) {\n            return this.check(checks.gte(0, params));\n        },\n        negative(params) {\n            return this.check(checks.lt(0, params));\n        },\n        nonpositive(params) {\n            return this.check(checks.lte(0, params));\n        },\n        multipleOf(value, params) {\n            return this.check(checks.multipleOf(value, params));\n        },\n        step(value, params) {\n            return this.check(checks.multipleOf(value, params));\n        },\n        finite() {\n            return this;\n        },\n    });\n    const bag = inst._zod.bag;\n    inst.minValue =\n        Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n    inst.maxValue =\n        Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n    inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n    inst.isFinite = true;\n    inst.format = bag.format ?? null;\n});\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n    inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n    inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n    inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    const bag = inst._zod.bag;\n    inst.minValue = bag.minimum ?? null;\n    inst.maxValue = bag.maximum ?? null;\n    inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    const c = inst._zod.bag;\n    inst.minDate = c.minimum ? new Date(c.minimum) : null;\n    inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n    inst.element = def.element;\n    _installLazyMethods(inst, \"ZodArray\", {\n        min(n, params) {\n            return this.check(checks.minLength(n, params));\n        },\n        nonempty(params) {\n            return this.check(checks.minLength(1, params));\n        },\n        max(n, params) {\n            return this.check(checks.maxLength(n, params));\n        },\n        length(n, params) {\n            return this.check(checks.length(n, params));\n        },\n        unwrap() {\n            return this.element;\n        },\n    });\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    core.$ZodObjectJIT.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n    util.defineLazy(inst, \"shape\", () => {\n        return def.shape;\n    });\n    _installLazyMethods(inst, \"ZodObject\", {\n        keyof() {\n            return _enum(Object.keys(this._zod.def.shape));\n        },\n        catchall(catchall) {\n            return this.clone({ ...this._zod.def, catchall: catchall });\n        },\n        passthrough() {\n            return this.clone({ ...this._zod.def, catchall: unknown() });\n        },\n        loose() {\n            return this.clone({ ...this._zod.def, catchall: unknown() });\n        },\n        strict() {\n            return this.clone({ ...this._zod.def, catchall: never() });\n        },\n        strip() {\n            return this.clone({ ...this._zod.def, catchall: undefined });\n        },\n        extend(incoming) {\n            return util.extend(this, incoming);\n        },\n        safeExtend(incoming) {\n            return util.safeExtend(this, incoming);\n        },\n        merge(other) {\n            return util.merge(this, other);\n        },\n        pick(mask) {\n            return util.pick(this, mask);\n        },\n        omit(mask) {\n            return util.omit(this, mask);\n        },\n        partial(...args) {\n            return util.partial(ZodOptional, this, args[0]);\n        },\n        required(...args) {\n            return util.required(ZodNonOptional, this, args[0]);\n        },\n    });\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        shape: shape ?? {},\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodXor.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n    inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n    return new ZodXor({\n        type: \"union\",\n        options: options,\n        inclusive: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n    inst.rest = (rest) => inst.clone({\n        ...inst._zod.def,\n        rest: rest,\n    });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    // v3-compat: z.record(valueType, params?) — defaults keyType to z.string()\n    if (!valueType || !valueType._zod) {\n        return new ZodRecord({\n            type: \"record\",\n            keyType: string(),\n            valueType: keyType,\n            ...util.normalizeParams(valueType),\n        });\n    }\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    const k = core.clone(keyType);\n    k._zod.values = undefined;\n    return new ZodRecord({\n        type: \"record\",\n        keyType: k,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function looseRecord(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        mode: \"loose\",\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n    inst.enum = def.entries;\n    inst.options = Object.values(def.entries);\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n    inst._zod.parse = (payload, _ctx) => {\n        if (_ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = inst);\n                // _issue.continue ??= true;\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                payload.fallback = true;\n                return payload;\n            });\n        }\n        payload.value = output;\n        payload.fallback = true;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n    core.$ZodExactOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n    return new ZodExactOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n    return new ZodCodec({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        transform: params.decode,\n        reverseTransform: params.encode,\n    });\n}\nexport function invertCodec(codec) {\n    const def = codec._zod.def;\n    return new ZodCodec({\n        type: \"pipe\",\n        in: def.out,\n        out: def.in,\n        transform: def.reverseTransform,\n        reverseTransform: def.transform,\n    });\n}\nexport const ZodPreprocess = /*@__PURE__*/ core.$constructor(\"ZodPreprocess\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodPreprocess.init(inst, def);\n});\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n    core.$ZodFunction.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n    return new ZodFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n        output: params?.output ?? unknown(),\n    });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn, params) {\n    return core._superRefine(fn, params);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n    const inst = new ZodCustom({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    // Override check to emit invalid_type instead of custom\n    inst._zod.check = (payload) => {\n        if (!(payload.value instanceof cls)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: cls.name,\n                input: payload.value,\n                inst,\n                path: [...(inst._zod.def.path ?? [])],\n            });\n        }\n    };\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Codec: ZodCodec,\n    Boolean: ZodBoolean,\n    String: ZodString,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\nexport function preprocess(fn, schema) {\n    return new ZodPreprocess({\n        type: \"pipe\",\n        in: transform(fn),\n        out: schema,\n    });\n}\n","// Zod 3 compat layer\nimport * as core from \"../core/index.js\";\n/** @deprecated Use the raw string literal codes instead, e.g. \"invalid_type\". */\nexport const ZodIssueCode = {\n    invalid_type: \"invalid_type\",\n    too_big: \"too_big\",\n    too_small: \"too_small\",\n    invalid_format: \"invalid_format\",\n    not_multiple_of: \"not_multiple_of\",\n    unrecognized_keys: \"unrecognized_keys\",\n    invalid_union: \"invalid_union\",\n    invalid_key: \"invalid_key\",\n    invalid_element: \"invalid_element\",\n    invalid_value: \"invalid_value\",\n    custom: \"custom\",\n};\nexport { $brand, config } from \"../core/index.js\";\n/** @deprecated Use `z.config(params)` instead. */\nexport function setErrorMap(map) {\n    core.config({\n        customError: map,\n    });\n}\n/** @deprecated Use `z.config()` instead. */\nexport function getErrorMap() {\n    return core.config().customError;\n}\n/** @deprecated Do not use. Stub definition, only included for zod-to-json-schema compatibility. */\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n","import { globalRegistry } from \"../core/registries.js\";\nimport * as _checks from \"./checks.js\";\nimport * as _iso from \"./iso.js\";\nimport * as _schemas from \"./schemas.js\";\n// Local z object to avoid circular dependency with ../index.js\nconst z = {\n    ..._schemas,\n    ..._checks,\n    iso: _iso,\n};\n// Keys that are recognized and handled by the conversion logic\nconst RECOGNIZED_KEYS = /*@__PURE__*/ new Set([\n    // Schema identification\n    \"$schema\",\n    \"$ref\",\n    \"$defs\",\n    \"definitions\",\n    // Core schema keywords\n    \"$id\",\n    \"id\",\n    \"$comment\",\n    \"$anchor\",\n    \"$vocabulary\",\n    \"$dynamicRef\",\n    \"$dynamicAnchor\",\n    // Type\n    \"type\",\n    \"enum\",\n    \"const\",\n    // Composition\n    \"anyOf\",\n    \"oneOf\",\n    \"allOf\",\n    \"not\",\n    // Object\n    \"properties\",\n    \"required\",\n    \"additionalProperties\",\n    \"patternProperties\",\n    \"propertyNames\",\n    \"minProperties\",\n    \"maxProperties\",\n    // Array\n    \"items\",\n    \"prefixItems\",\n    \"additionalItems\",\n    \"minItems\",\n    \"maxItems\",\n    \"uniqueItems\",\n    \"contains\",\n    \"minContains\",\n    \"maxContains\",\n    // String\n    \"minLength\",\n    \"maxLength\",\n    \"pattern\",\n    \"format\",\n    // Number\n    \"minimum\",\n    \"maximum\",\n    \"exclusiveMinimum\",\n    \"exclusiveMaximum\",\n    \"multipleOf\",\n    // Already handled metadata\n    \"description\",\n    \"default\",\n    // Content\n    \"contentEncoding\",\n    \"contentMediaType\",\n    \"contentSchema\",\n    // Unsupported (error-throwing)\n    \"unevaluatedItems\",\n    \"unevaluatedProperties\",\n    \"if\",\n    \"then\",\n    \"else\",\n    \"dependentSchemas\",\n    \"dependentRequired\",\n    // OpenAPI\n    \"nullable\",\n    \"readOnly\",\n]);\nfunction detectVersion(schema, defaultTarget) {\n    const $schema = schema.$schema;\n    if ($schema === \"https://json-schema.org/draft/2020-12/schema\") {\n        return \"draft-2020-12\";\n    }\n    if ($schema === \"http://json-schema.org/draft-07/schema#\") {\n        return \"draft-7\";\n    }\n    if ($schema === \"http://json-schema.org/draft-04/schema#\") {\n        return \"draft-4\";\n    }\n    // Use defaultTarget if provided, otherwise default to draft-2020-12\n    return defaultTarget ?? \"draft-2020-12\";\n}\nfunction resolveRef(ref, ctx) {\n    if (!ref.startsWith(\"#\")) {\n        throw new Error(\"External $ref is not supported, only local refs (#/...) are allowed\");\n    }\n    const path = ref.slice(1).split(\"/\").filter(Boolean);\n    // Handle root reference \"#\"\n    if (path.length === 0) {\n        return ctx.rootSchema;\n    }\n    const defsKey = ctx.version === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n    if (path[0] === defsKey) {\n        const key = path[1];\n        if (!key || !ctx.defs[key]) {\n            throw new Error(`Reference not found: ${ref}`);\n        }\n        return ctx.defs[key];\n    }\n    throw new Error(`Reference not found: ${ref}`);\n}\nfunction convertBaseSchema(schema, ctx) {\n    // Handle unsupported features\n    if (schema.not !== undefined) {\n        // Special case: { not: {} } represents never\n        if (typeof schema.not === \"object\" && Object.keys(schema.not).length === 0) {\n            return z.never();\n        }\n        throw new Error(\"not is not supported in Zod (except { not: {} } for never)\");\n    }\n    if (schema.unevaluatedItems !== undefined) {\n        throw new Error(\"unevaluatedItems is not supported\");\n    }\n    if (schema.unevaluatedProperties !== undefined) {\n        throw new Error(\"unevaluatedProperties is not supported\");\n    }\n    if (schema.if !== undefined || schema.then !== undefined || schema.else !== undefined) {\n        throw new Error(\"Conditional schemas (if/then/else) are not supported\");\n    }\n    if (schema.dependentSchemas !== undefined || schema.dependentRequired !== undefined) {\n        throw new Error(\"dependentSchemas and dependentRequired are not supported\");\n    }\n    // Handle $ref\n    if (schema.$ref) {\n        const refPath = schema.$ref;\n        if (ctx.refs.has(refPath)) {\n            return ctx.refs.get(refPath);\n        }\n        if (ctx.processing.has(refPath)) {\n            // Circular reference - use lazy\n            return z.lazy(() => {\n                if (!ctx.refs.has(refPath)) {\n                    throw new Error(`Circular reference not resolved: ${refPath}`);\n                }\n                return ctx.refs.get(refPath);\n            });\n        }\n        ctx.processing.add(refPath);\n        const resolved = resolveRef(refPath, ctx);\n        const zodSchema = convertSchema(resolved, ctx);\n        ctx.refs.set(refPath, zodSchema);\n        ctx.processing.delete(refPath);\n        return zodSchema;\n    }\n    // Handle enum\n    if (schema.enum !== undefined) {\n        const enumValues = schema.enum;\n        // Special case: OpenAPI 3.0 null representation { type: \"string\", nullable: true, enum: [null] }\n        if (ctx.version === \"openapi-3.0\" &&\n            schema.nullable === true &&\n            enumValues.length === 1 &&\n            enumValues[0] === null) {\n            return z.null();\n        }\n        if (enumValues.length === 0) {\n            return z.never();\n        }\n        if (enumValues.length === 1) {\n            return z.literal(enumValues[0]);\n        }\n        // Check if all values are strings\n        if (enumValues.every((v) => typeof v === \"string\")) {\n            return z.enum(enumValues);\n        }\n        // Mixed types - use union of literals\n        const literalSchemas = enumValues.map((v) => z.literal(v));\n        if (literalSchemas.length < 2) {\n            return literalSchemas[0];\n        }\n        return z.union([literalSchemas[0], literalSchemas[1], ...literalSchemas.slice(2)]);\n    }\n    // Handle const\n    if (schema.const !== undefined) {\n        return z.literal(schema.const);\n    }\n    // Handle type\n    const type = schema.type;\n    if (Array.isArray(type)) {\n        // Expand type array into anyOf union\n        const typeSchemas = type.map((t) => {\n            const typeSchema = { ...schema, type: t };\n            return convertBaseSchema(typeSchema, ctx);\n        });\n        if (typeSchemas.length === 0) {\n            return z.never();\n        }\n        if (typeSchemas.length === 1) {\n            return typeSchemas[0];\n        }\n        return z.union(typeSchemas);\n    }\n    if (!type) {\n        // No type specified - empty schema (any)\n        return z.any();\n    }\n    let zodSchema;\n    switch (type) {\n        case \"string\": {\n            let stringSchema = z.string();\n            // Apply format using .check() with Zod format functions\n            if (schema.format) {\n                const format = schema.format;\n                // Map common formats to Zod check functions\n                if (format === \"email\") {\n                    stringSchema = stringSchema.check(z.email());\n                }\n                else if (format === \"uri\" || format === \"uri-reference\") {\n                    stringSchema = stringSchema.check(z.url());\n                }\n                else if (format === \"uuid\" || format === \"guid\") {\n                    stringSchema = stringSchema.check(z.uuid());\n                }\n                else if (format === \"date-time\") {\n                    stringSchema = stringSchema.check(z.iso.datetime());\n                }\n                else if (format === \"date\") {\n                    stringSchema = stringSchema.check(z.iso.date());\n                }\n                else if (format === \"time\") {\n                    stringSchema = stringSchema.check(z.iso.time());\n                }\n                else if (format === \"duration\") {\n                    stringSchema = stringSchema.check(z.iso.duration());\n                }\n                else if (format === \"ipv4\") {\n                    stringSchema = stringSchema.check(z.ipv4());\n                }\n                else if (format === \"ipv6\") {\n                    stringSchema = stringSchema.check(z.ipv6());\n                }\n                else if (format === \"mac\") {\n                    stringSchema = stringSchema.check(z.mac());\n                }\n                else if (format === \"cidr\") {\n                    stringSchema = stringSchema.check(z.cidrv4());\n                }\n                else if (format === \"cidr-v6\") {\n                    stringSchema = stringSchema.check(z.cidrv6());\n                }\n                else if (format === \"base64\") {\n                    stringSchema = stringSchema.check(z.base64());\n                }\n                else if (format === \"base64url\") {\n                    stringSchema = stringSchema.check(z.base64url());\n                }\n                else if (format === \"e164\") {\n                    stringSchema = stringSchema.check(z.e164());\n                }\n                else if (format === \"jwt\") {\n                    stringSchema = stringSchema.check(z.jwt());\n                }\n                else if (format === \"emoji\") {\n                    stringSchema = stringSchema.check(z.emoji());\n                }\n                else if (format === \"nanoid\") {\n                    stringSchema = stringSchema.check(z.nanoid());\n                }\n                else if (format === \"cuid\") {\n                    stringSchema = stringSchema.check(z.cuid());\n                }\n                else if (format === \"cuid2\") {\n                    stringSchema = stringSchema.check(z.cuid2());\n                }\n                else if (format === \"ulid\") {\n                    stringSchema = stringSchema.check(z.ulid());\n                }\n                else if (format === \"xid\") {\n                    stringSchema = stringSchema.check(z.xid());\n                }\n                else if (format === \"ksuid\") {\n                    stringSchema = stringSchema.check(z.ksuid());\n                }\n                // Note: json-string format is not currently supported by Zod\n                // Custom formats are ignored - keep as plain string\n            }\n            // Apply constraints\n            if (typeof schema.minLength === \"number\") {\n                stringSchema = stringSchema.min(schema.minLength);\n            }\n            if (typeof schema.maxLength === \"number\") {\n                stringSchema = stringSchema.max(schema.maxLength);\n            }\n            if (schema.pattern) {\n                // JSON Schema patterns are not implicitly anchored (match anywhere in string)\n                stringSchema = stringSchema.regex(new RegExp(schema.pattern));\n            }\n            zodSchema = stringSchema;\n            break;\n        }\n        case \"number\":\n        case \"integer\": {\n            let numberSchema = type === \"integer\" ? z.number().int() : z.number();\n            // Apply constraints\n            if (typeof schema.minimum === \"number\") {\n                numberSchema = numberSchema.min(schema.minimum);\n            }\n            if (typeof schema.maximum === \"number\") {\n                numberSchema = numberSchema.max(schema.maximum);\n            }\n            if (typeof schema.exclusiveMinimum === \"number\") {\n                numberSchema = numberSchema.gt(schema.exclusiveMinimum);\n            }\n            else if (schema.exclusiveMinimum === true && typeof schema.minimum === \"number\") {\n                numberSchema = numberSchema.gt(schema.minimum);\n            }\n            if (typeof schema.exclusiveMaximum === \"number\") {\n                numberSchema = numberSchema.lt(schema.exclusiveMaximum);\n            }\n            else if (schema.exclusiveMaximum === true && typeof schema.maximum === \"number\") {\n                numberSchema = numberSchema.lt(schema.maximum);\n            }\n            if (typeof schema.multipleOf === \"number\") {\n                numberSchema = numberSchema.multipleOf(schema.multipleOf);\n            }\n            zodSchema = numberSchema;\n            break;\n        }\n        case \"boolean\": {\n            zodSchema = z.boolean();\n            break;\n        }\n        case \"null\": {\n            zodSchema = z.null();\n            break;\n        }\n        case \"object\": {\n            const shape = {};\n            const properties = schema.properties || {};\n            const requiredSet = new Set(schema.required || []);\n            // Convert properties - mark optional ones\n            for (const [key, propSchema] of Object.entries(properties)) {\n                const propZodSchema = convertSchema(propSchema, ctx);\n                // If not in required array, make it optional\n                shape[key] = requiredSet.has(key) ? propZodSchema : propZodSchema.optional();\n            }\n            // Handle propertyNames\n            if (schema.propertyNames) {\n                const keySchema = convertSchema(schema.propertyNames, ctx);\n                const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === \"object\"\n                    ? convertSchema(schema.additionalProperties, ctx)\n                    : z.any();\n                // Case A: No properties (pure record)\n                if (Object.keys(shape).length === 0) {\n                    zodSchema = z.record(keySchema, valueSchema);\n                    break;\n                }\n                // Case B: With properties (intersection of object and looseRecord)\n                const objectSchema = z.object(shape).passthrough();\n                const recordSchema = z.looseRecord(keySchema, valueSchema);\n                zodSchema = z.intersection(objectSchema, recordSchema);\n                break;\n            }\n            // Handle patternProperties\n            if (schema.patternProperties) {\n                // patternProperties: keys matching pattern must satisfy corresponding schema\n                // Use loose records so non-matching keys pass through\n                const patternProps = schema.patternProperties;\n                const patternKeys = Object.keys(patternProps);\n                const looseRecords = [];\n                for (const pattern of patternKeys) {\n                    const patternValue = convertSchema(patternProps[pattern], ctx);\n                    const keySchema = z.string().regex(new RegExp(pattern));\n                    looseRecords.push(z.looseRecord(keySchema, patternValue));\n                }\n                // Build intersection: object schema + all pattern property records\n                const schemasToIntersect = [];\n                if (Object.keys(shape).length > 0) {\n                    // Use passthrough so patternProperties can validate additional keys\n                    schemasToIntersect.push(z.object(shape).passthrough());\n                }\n                schemasToIntersect.push(...looseRecords);\n                if (schemasToIntersect.length === 0) {\n                    zodSchema = z.object({}).passthrough();\n                }\n                else if (schemasToIntersect.length === 1) {\n                    zodSchema = schemasToIntersect[0];\n                }\n                else {\n                    // Chain intersections: (A & B) & C & D ...\n                    let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]);\n                    for (let i = 2; i < schemasToIntersect.length; i++) {\n                        result = z.intersection(result, schemasToIntersect[i]);\n                    }\n                    zodSchema = result;\n                }\n                break;\n            }\n            // Handle additionalProperties\n            // In JSON Schema, additionalProperties defaults to true (allow any extra properties)\n            // In Zod, objects strip unknown keys by default, so we need to handle this explicitly\n            const objectSchema = z.object(shape);\n            if (schema.additionalProperties === false) {\n                // Strict mode - no extra properties allowed\n                zodSchema = objectSchema.strict();\n            }\n            else if (typeof schema.additionalProperties === \"object\") {\n                // Extra properties must match the specified schema\n                zodSchema = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx));\n            }\n            else {\n                // additionalProperties is true or undefined - allow any extra properties (passthrough)\n                zodSchema = objectSchema.passthrough();\n            }\n            break;\n        }\n        case \"array\": {\n            // TODO: uniqueItems is not supported\n            // TODO: contains/minContains/maxContains are not supported\n            // Check if this is a tuple (prefixItems or items as array)\n            const prefixItems = schema.prefixItems;\n            const items = schema.items;\n            if (prefixItems && Array.isArray(prefixItems)) {\n                // Tuple with prefixItems (draft-2020-12)\n                const tupleItems = prefixItems.map((item) => convertSchema(item, ctx));\n                const rest = items && typeof items === \"object\" && !Array.isArray(items)\n                    ? convertSchema(items, ctx)\n                    : undefined;\n                if (rest) {\n                    zodSchema = z.tuple(tupleItems).rest(rest);\n                }\n                else {\n                    zodSchema = z.tuple(tupleItems);\n                }\n                // Apply minItems/maxItems constraints to tuples\n                if (typeof schema.minItems === \"number\") {\n                    zodSchema = zodSchema.check(z.minLength(schema.minItems));\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n                }\n            }\n            else if (Array.isArray(items)) {\n                // Tuple with items array (draft-7)\n                const tupleItems = items.map((item) => convertSchema(item, ctx));\n                const rest = schema.additionalItems && typeof schema.additionalItems === \"object\"\n                    ? convertSchema(schema.additionalItems, ctx)\n                    : undefined; // additionalItems: false means no rest, handled by default tuple behavior\n                if (rest) {\n                    zodSchema = z.tuple(tupleItems).rest(rest);\n                }\n                else {\n                    zodSchema = z.tuple(tupleItems);\n                }\n                // Apply minItems/maxItems constraints to tuples\n                if (typeof schema.minItems === \"number\") {\n                    zodSchema = zodSchema.check(z.minLength(schema.minItems));\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    zodSchema = zodSchema.check(z.maxLength(schema.maxItems));\n                }\n            }\n            else if (items !== undefined) {\n                // Regular array\n                const element = convertSchema(items, ctx);\n                let arraySchema = z.array(element);\n                // Apply constraints\n                if (typeof schema.minItems === \"number\") {\n                    arraySchema = arraySchema.min(schema.minItems);\n                }\n                if (typeof schema.maxItems === \"number\") {\n                    arraySchema = arraySchema.max(schema.maxItems);\n                }\n                zodSchema = arraySchema;\n            }\n            else {\n                // No items specified - array of any\n                zodSchema = z.array(z.any());\n            }\n            break;\n        }\n        default:\n            throw new Error(`Unsupported type: ${type}`);\n    }\n    return zodSchema;\n}\nfunction convertSchema(schema, ctx) {\n    if (typeof schema === \"boolean\") {\n        return schema ? z.any() : z.never();\n    }\n    // Convert base schema first (ignoring composition keywords)\n    let baseSchema = convertBaseSchema(schema, ctx);\n    const hasExplicitType = schema.type || schema.enum !== undefined || schema.const !== undefined;\n    // Process composition keywords LAST (they can appear together)\n    // Handle anyOf - wrap base schema with union\n    if (schema.anyOf && Array.isArray(schema.anyOf)) {\n        const options = schema.anyOf.map((s) => convertSchema(s, ctx));\n        const anyOfUnion = z.union(options);\n        baseSchema = hasExplicitType ? z.intersection(baseSchema, anyOfUnion) : anyOfUnion;\n    }\n    // Handle oneOf - exclusive union (exactly one must match)\n    if (schema.oneOf && Array.isArray(schema.oneOf)) {\n        const options = schema.oneOf.map((s) => convertSchema(s, ctx));\n        const oneOfUnion = z.xor(options);\n        baseSchema = hasExplicitType ? z.intersection(baseSchema, oneOfUnion) : oneOfUnion;\n    }\n    // Handle allOf - wrap base schema with intersection\n    if (schema.allOf && Array.isArray(schema.allOf)) {\n        if (schema.allOf.length === 0) {\n            baseSchema = hasExplicitType ? baseSchema : z.any();\n        }\n        else {\n            let result = hasExplicitType ? baseSchema : convertSchema(schema.allOf[0], ctx);\n            const startIdx = hasExplicitType ? 0 : 1;\n            for (let i = startIdx; i < schema.allOf.length; i++) {\n                result = z.intersection(result, convertSchema(schema.allOf[i], ctx));\n            }\n            baseSchema = result;\n        }\n    }\n    // Handle nullable (OpenAPI 3.0)\n    if (schema.nullable === true && ctx.version === \"openapi-3.0\") {\n        baseSchema = z.nullable(baseSchema);\n    }\n    // Handle readOnly\n    if (schema.readOnly === true) {\n        baseSchema = z.readonly(baseSchema);\n    }\n    // Apply `default` so it wraps the fully-composed schema. This ensures\n    // `parse(undefined) -> default` works regardless of which branch of\n    // `convertBaseSchema` produced the inner schema (enum/const/not/typed/etc.).\n    if (schema.default !== undefined) {\n        baseSchema = baseSchema.default(schema.default);\n    }\n    // Collect non-description annotation metadata into the user-supplied\n    // registry. Description is handled separately below via `.describe()` to\n    // preserve the contract that `schema.description` reads from globalRegistry.\n    const extraMeta = {};\n    const coreMetadataKeys = [\"$id\", \"id\", \"$comment\", \"$anchor\", \"$vocabulary\", \"$dynamicRef\", \"$dynamicAnchor\"];\n    for (const key of coreMetadataKeys) {\n        if (key in schema) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    const contentMetadataKeys = [\"contentEncoding\", \"contentMediaType\", \"contentSchema\"];\n    for (const key of contentMetadataKeys) {\n        if (key in schema) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    for (const key of Object.keys(schema)) {\n        if (!RECOGNIZED_KEYS.has(key)) {\n            extraMeta[key] = schema[key];\n        }\n    }\n    if (Object.keys(extraMeta).length > 0) {\n        ctx.registry.add(baseSchema, extraMeta);\n    }\n    // Apply description last. `.describe()` clones the schema and sets\n    // `_zod.parent` on the clone, so registry lookups on the returned reference\n    // still resolve `extraMeta` via parent inheritance.\n    if (schema.description) {\n        baseSchema = baseSchema.describe(schema.description);\n    }\n    return baseSchema;\n}\n/**\n * Converts a JSON Schema to a Zod schema. This function should be considered semi-experimental. It's behavior is liable to change. */\nexport function fromJSONSchema(schema, params) {\n    // Handle boolean schemas\n    if (typeof schema === \"boolean\") {\n        return schema ? z.any() : z.never();\n    }\n    // Normalize input via a JSON round-trip. This guarantees the converter\n    // walks a plain, finite, JSON-valid object graph: cyclic inputs fail here,\n    // getter/Proxy-based properties are materialized into static values, and\n    // class instances collapse to plain objects.\n    let normalized;\n    try {\n        normalized = JSON.parse(JSON.stringify(schema));\n    }\n    catch {\n        throw new Error(\"fromJSONSchema input is not valid JSON (possibly cyclic); use $defs/$ref for recursive schemas\");\n    }\n    const version = detectVersion(normalized, params?.defaultTarget);\n    const defs = (normalized.$defs || normalized.definitions || {});\n    const ctx = {\n        version,\n        defs,\n        refs: new Map(),\n        processing: new Set(),\n        rootSchema: normalized,\n        registry: params?.registry ?? globalRegistry,\n    };\n    return convertSchema(normalized, ctx);\n}\n","export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, TimePrecision, util, NEVER, } from \"../core/index.js\";\nexport { toJSONSchema } from \"../core/json-schema-processors.js\";\nexport { fromJSONSchema } from \"./from-json-schema.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n","// CredentialStore — secret credentials per-workspace (global-only).\n// Design: 04-system.md §6, 01-vision.md §B.8 D8, 08-non-functional.md §A.\n//\n// Auth union: mỗi workspace entry {url, workspace} + ({token} XOR {email,password}).\n// `workspace` BẮT BUỘC (Huly workspace name truyền cho api-client connect/connectRest).\n// Same-name diff-URL → id distinct (vd `corp-prod`), `workspace` giữ tên Huly thật.\n//\n// Security (08 §A):\n// - chmod 600 verify on load (reject loose perms — Spoofing mitigation)\n// - atomic write (temp + rename — Tampering mitigation)\n// - schema validate on load + reject malformed\n// - KHÔNG log token/password values\n\nimport { existsSync } from \"node:fs\";\nimport { readFile, rename, stat, writeFile, mkdir, chmod } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\n\n// Types\n\n/** Auth union: token OR email+password (XOR — không cả 2, không thiếu). */\nexport type AuthMethod = { token: string } | { email: string; password: string };\n\n/** Workspace credentials entry. `workspace` BẮT BUỘC. */\nexport type WorkspaceCreds = {\n  url: string;\n  workspace: string;\n} & AuthMethod;\n\n/** Credentials.json root shape. */\nexport type Credentials = {\n  version: 1;\n  workspaces: Record<string, WorkspaceCreds>;\n};\n\n/** Path tới credentials.json (omp, ~/.omp/agent/huly/). */\nexport const CREDENTIALS_DIR = join(homedir(), \".omp\", \"agent\", \"huly\");\nexport const CREDENTIALS_PATH = join(CREDENTIALS_DIR, \"credentials.json\");\nexport const LEGACY_CREDENTIALS_PATH = join(homedir(), \".pi\", \"agent\", \"huly\", \"credentials.json\");\n\n/** File mode cho credentials.json (rw owner only — 08 §A Spoofing mitigation). */\nconst SECURE_MODE = 0o600;\n\n/**\n * Validate workspace entry schema: required fields + auth union XOR.\n * Throws error với field name (KHÔNG leak value).\n */\nfunction validateWorkspace(id: string, entry: unknown): asserts entry is WorkspaceCreds {\n  if (typeof entry !== \"object\" || entry === null) {\n    throw new Error(`credentials.json schema invalid: workspace \"${id}\" must be an object`);\n  }\n  const e = entry as Record<string, unknown>;\n  if (typeof e.url !== \"string\" || e.url.length === 0) {\n    throw new Error(`credentials.json schema invalid: workspace \"${id}\" — url required`);\n  }\n  if (typeof e.workspace !== \"string\" || e.workspace.length === 0) {\n    throw new Error(`credentials.json schema invalid: workspace \"${id}\" — workspace required`);\n  }\n  const hasToken = typeof e.token === \"string\" && e.token.length > 0;\n  const hasEmail = typeof e.email === \"string\" && e.email.length > 0;\n  const hasPassword = typeof e.password === \"string\" && e.password.length > 0;\n  const hasEmailPass = hasEmail && hasPassword;\n  const hasAnyAuthField = hasToken || hasEmail || hasPassword;\n  // XOR: exactly one complete auth method, NO extra fields (mirror TS union).\n  // Reject cases:\n  // - BOTH complete methods (token + email+password)\n  // - partial email/password (one without the other) — field leak prevention\n  // - token + any email/password field — extra field alongside valid token\n  // - NEITHER method\n  if (hasToken && hasEmailPass) {\n    throw new Error(\n      `credentials.json auth union XOR violated: workspace \"${id}\" has BOTH token and email+password`,\n    );\n  }\n  if (hasToken && (hasEmail || hasPassword)) {\n    throw new Error(\n      `credentials.json auth union XOR violated: workspace \"${id}\" has token alongside partial email/password fields`,\n    );\n  }\n  if (!hasToken && !hasEmailPass) {\n    if (hasAnyAuthField) {\n      throw new Error(\n        `credentials.json auth union XOR violated: workspace \"${id}\" has partial email/password (both required if either present)`,\n      );\n    }\n    throw new Error(\n      `credentials.json auth union XOR violated: workspace \"${id}\" has NEITHER token nor email+password`,\n    );\n  }\n}\n\n/**\n * Verify file permissions secure (mode === 0o600, owner-only).\n * Windows skip (NTFS khác, ACL-based).\n */\nasync function verifySecureMode(filePath: string, st: { mode: number }): Promise<void> {\n  if (process.platform === \"win32\") return;\n  // Mask chỉ permission bits (lower 12 bits includes file type — chỉ lấy 9 bits permission).\n  const permBits = st.mode & 0o777;\n  if (permBits !== SECURE_MODE) {\n    throw new Error(\n      `credentials.json permissions too open (mode ${permBits.toString(8)}, expected 600)`,\n    );\n  }\n}\n\n/**\n * Load credentials từ file (global path mặc định, hoặc path override cho test).\n * - File không tồn tại → trả empty Credentials (KHÔNG throw)\n * - File loose perms → throw (08 §A)\n * - File malformed JSON → throw\n * - File schema invalid → throw\n * - Legacy ~/.pi credentials merged if exists (omp wins on collision)\n */\nexport async function loadCredentials(\n  filePath: string = CREDENTIALS_PATH,\n  legacyPath: string = LEGACY_CREDENTIALS_PATH,\n): Promise<Credentials> {\n  if (!existsSync(filePath)) {\n    const ompCreds = { version: 1 as const, workspaces: {} as Record<string, WorkspaceCreds> };\n    // Try migrating from legacy ~/.pi if omp store absent\n    if (existsSync(legacyPath)) {\n      try {\n        const st = await stat(legacyPath);\n        await verifySecureMode(legacyPath, st);\n        let raw: string;\n        try {\n          raw = await readFile(legacyPath, \"utf8\");\n        } catch (e) {\n          throw new Error(`legacy credentials.json read failed: ${(e as Error).message}`);\n        }\n        let parsed: unknown;\n        try {\n          parsed = JSON.parse(raw);\n        } catch (e) {\n          throw new Error(`legacy credentials.json malformed JSON: ${(e as Error).message}`);\n        }\n        if (typeof parsed !== \"object\" || parsed === null) {\n          throw new Error(\"legacy credentials.json schema invalid: root must be an object\");\n        }\n        const root = parsed as Record<string, unknown>;\n        if (root.version !== 1) {\n          throw new Error(`legacy credentials.json schema invalid: version must be 1 (got ${root.version})`);\n        }\n        if (typeof root.workspaces !== \"object\" || root.workspaces === null) {\n          throw new Error(\"legacy credentials.json schema invalid: workspaces must be an object\");\n        }\n        const workspaces = root.workspaces as Record<string, unknown>;\n        // Validate each legacy entry and migrate to omp store\n        let migrated = false;\n        for (const [id, entry] of Object.entries(workspaces)) {\n          // Only migrate if not already in omp store (omp wins on collision)\n          if (!(id in ompCreds.workspaces)) {\n            validateWorkspace(id, entry);\n            ompCreds.workspaces[id] = entry as WorkspaceCreds;\n            migrated = true;\n          }\n        }\n        // Persist migrated entries to omp store (atomic + chmod 600)\n        if (migrated) {\n          await saveCredentials(ompCreds, filePath);\n        }\n      } catch (e) {\n        // Silently ignore legacy migration errors — omp store takes precedence\n        console.warn(`Failed to migrate legacy credentials from ${legacyPath}: ${(e as Error).message}`);\n      }\n    }\n    return ompCreds;\n  }\n\n  const st = await stat(filePath);\n  await verifySecureMode(filePath, st);\n  let raw: string;\n  try {\n    raw = await readFile(filePath, \"utf8\");\n  } catch (e) {\n    throw new Error(`credentials.json read failed: ${(e as Error).message}`);\n  }\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(raw);\n  } catch (e) {\n    throw new Error(`credentials.json malformed JSON: ${(e as Error).message}`);\n  }\n  if (typeof parsed !== \"object\" || parsed === null) {\n    throw new Error(\"credentials.json schema invalid: root must be an object\");\n  }\n  const root = parsed as Record<string, unknown>;\n  if (root.version !== 1) {\n    throw new Error(`credentials.json schema invalid: version must be 1 (got ${root.version})`);\n  }\n  if (typeof root.workspaces !== \"object\" || root.workspaces === null) {\n    throw new Error(\"credentials.json schema invalid: workspaces must be an object\");\n  }\n  const workspaces = root.workspaces as Record<string, unknown>;\n  // Validate mỗi entry\n  for (const [id, entry] of Object.entries(workspaces)) {\n    validateWorkspace(id, entry);\n  }\n  const ompCreds = { version: 1 as const, workspaces: workspaces as Record<string, WorkspaceCreds> };\n\n  // After loading omp store, try migrating any missing entries from legacy\n  if (existsSync(legacyPath)) {\n    try {\n      const st = await stat(legacyPath);\n      await verifySecureMode(legacyPath, st);\n      let raw: string;\n      try {\n        raw = await readFile(legacyPath, \"utf8\");\n      } catch (e) {\n        throw new Error(`legacy credentials.json read failed: ${(e as Error).message}`);\n      }\n      let parsed: unknown;\n      try {\n        parsed = JSON.parse(raw);\n      } catch (e) {\n        throw new Error(`legacy credentials.json malformed JSON: ${(e as Error).message}`);\n      }\n      if (typeof parsed !== \"object\" || parsed === null) {\n        throw new Error(\"legacy credentials.json schema invalid: root must be an object\");\n      }\n      const root = parsed as Record<string, unknown>;\n      if (root.version !== 1) {\n        throw new Error(`legacy credentials.json schema invalid: version must be 1 (got ${root.version})`);\n      }\n      if (typeof root.workspaces !== \"object\" || root.workspaces === null) {\n        throw new Error(\"legacy credentials.json schema invalid: workspaces must be an object\");\n      }\n      const workspaces = root.workspaces as Record<string, unknown>;\n      // Validate each legacy entry and merge missing ones into omp store\n      let migrated = false;\n      for (const [id, entry] of Object.entries(workspaces)) {\n        // Only migrate if not already in omp store (omp wins on collision)\n        if (!(id in ompCreds.workspaces)) {\n          validateWorkspace(id, entry);\n          ompCreds.workspaces[id] = entry as WorkspaceCreds;\n          migrated = true;\n        }\n      }\n      // Persist merged entries to omp store (atomic + chmod 600)\n      if (migrated) {\n        await saveCredentials(ompCreds, filePath);\n      }\n    } catch (e) {\n      // Silently ignore legacy migration errors — omp store takes precedence\n      console.warn(`Failed to migrate legacy credentials from ${legacyPath}: ${(e as Error).message}`);\n    }\n  }\n\n  return ompCreds;\n}\n\n/**\n * Save credentials to file atomic + chmod 600.\n * Atomic: write to temp file (same dir → same volume) + rename.\n * Tighten perms: chmod 600 sau write (cover existing file với loose perms).\n */\nexport async function saveCredentials(\n  creds: Credentials,\n  filePath: string = CREDENTIALS_PATH,\n): Promise<void> {\n  // Validate all entries trước khi write (fail fast — KHÔNG write malformed)\n  for (const [id, entry] of Object.entries(creds.workspaces)) {\n    validateWorkspace(id, entry);\n  }\n  const dir = dirname(filePath);\n  await mkdir(dir, { recursive: true });\n  const json = `${JSON.stringify(creds, null, 2)}\\n`;\n  // Atomic: temp file cùng dir (same volume) + rename\n  const tmpPath = join(dir, `.credentials.json.tmp.${process.pid}`);\n  await writeFile(tmpPath, json, \"utf8\");\n  await chmod(tmpPath, SECURE_MODE);\n  await rename(tmpPath, filePath);\n}\n\n/**\n * Add/update workspace entry (upsert). `id` default = workspace name.\n * Mutates file: load → upsert → save atomic.\n */\nexport async function addWorkspace(\n  id: string | undefined,\n  entry: WorkspaceCreds,\n  filePath: string = CREDENTIALS_PATH,\n): Promise<void> {\n  const resolvedId = id ?? entry.workspace;\n  // Validate entry trước (throws nếu invalid — KHÔNG touch file)\n  validateWorkspace(resolvedId, entry);\n  const creds = await loadCredentials(filePath, \"\");\n  creds.workspaces[resolvedId] = entry;\n  await saveCredentials(creds, filePath);\n}\n\n/**\n * Remove workspace entry by id. No-op nếu id không tồn tại.\n * KHÔNG delete file khi empty (giữ file để loadCredentials không recreate).\n */\nexport async function removeWorkspace(\n  id: string,\n  filePath: string = CREDENTIALS_PATH,\n): Promise<void> {\n  const creds = await loadCredentials(filePath, \"\");\n  if (!(id in creds.workspaces)) return;\n  delete creds.workspaces[id];\n  await saveCredentials(creds, filePath);\n}\n\n/**\n * Lookup workspace by id handle. Returns undefined nếu không tồn tại.\n */\nexport async function getWorkspace(\n  id: string,\n  filePath: string = CREDENTIALS_PATH,\n): Promise<WorkspaceCreds | undefined> {\n  const creds = await loadCredentials(filePath, \"\");\n  return creds.workspaces[id];\n}\n\n/**\n * Find workspaces by Huly workspace name. Returns Array (có thể empty).\n * Same-name diff-URL → multiple results (disambiguate per D8).\n */\nexport async function findByName(\n  name: string,\n  filePath: string = CREDENTIALS_PATH,\n): Promise<Array<WorkspaceCreds & { id: string }>> {\n  const creds = await loadCredentials(filePath, \"\");\n  return Object.entries(creds.workspaces)\n    .filter(([, entry]) => entry.workspace === name)\n    .map(([id, entry]) => ({ id, ...entry }));\n}\n","// ConfigStore — non-secret config global (transport toggle + cwd project binding).\n// Design: 04-system.md §6, 01-vision.md §B.3 D3 (transport), §B.8 D8 (config.json format).\n//\n// transport = global toggle: 'ws' (default, connect persistent + pool) | 'rest' (stateless).\n// projects = cwd (longest-prefix) → {workspace id-handle, project}.\n//\n// KHÔNG chmod 600 (non-secret, default perms OK — khác credentials.json).\n\nimport { existsSync } from \"node:fs\";\nimport { readFile, writeFile, mkdir, rename, rm } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve, sep } from \"node:path\";\n\n// Types\n\n/** Transport global toggle (D3). */\nexport type Transport = \"ws\" | \"rest\";\n\n/** Project binding entry: cwd → {workspace id-handle, project}. */\nexport type ProjectBinding = {\n  workspace: string;\n  project: string;\n};\n\n/** config.json root shape. */\nexport type Config = {\n  version: 1;\n  /** Transport global toggle. Default 'ws' (D3). */\n  transport?: Transport;\n  /** cwd → binding map. Key = absolute path (normalized). */\n  projects: Record<string, ProjectBinding>;\n  /** Connection pool config (ws only). */\n  pool?: { maxSize?: number };\n  /**\n   * T-62 #67: Filter upstream console spam (no document found + WS error spam).\n   * Default `true` — gate `console.warn/error/log` của @hcengineering trong scope\n   * connect/warmPool. Set `false` để debug thật (xem upstream output nguyên bản).\n   */\n  quietUpstreamNoise?: boolean;\n  /**\n   * T-62 #67: Override default pattern registry. Mỗi entry là RegExp source\n   * string (case-insensitive). Match first-arg string HOẶC structured log có\n   * field `message`. Mặc định: [`/^no document found, failed to apply model transaction/i`].\n   *\n   * Empty array (`[]`) = no-op → fall về DEFAULT_UPSTREAM_NOISE_PATTERNS (KHÔNG\n   * disable filter). Để disable filter hoàn toàn, dùng `quietUpstreamNoise: false`.\n   */\n  upstreamNoisePatterns?: string[];\n};\n\n/** Path tới config.json (omp, ~/.omp/agent/huly/). */\nexport const CONFIG_DIR = join(homedir(), \".omp\", \"agent\", \"huly\");\nexport const CONFIG_PATH = join(CONFIG_DIR, \"config.json\");\nexport const LEGACY_CONFIG_PATH = join(homedir(), \".pi\", \"agent\", \"huly\", \"config.json\");\n\n/** Default config khi file không tồn tại hoặc thiếu transport field. */\nexport const DEFAULT_CONFIG: Config = {\n  version: 1,\n  transport: \"ws\",\n  projects: {},\n};\n\n/**\n * Normalize path: resolve `.`, `..`, expand `~`, strip trailing separator (except root).\n * Cross-platform qua path.resolve (auto platform separator).\n */\nexport function normalizePath(p: string): string {\n  let expanded = p;\n  if (expanded.startsWith(\"~\")) {\n    expanded = join(homedir(), expanded.slice(1));\n  }\n  const resolved = resolve(expanded);\n  // Strip trailing separator except root (vd '/a/b/' → '/a/b', '/' giữ '/')\n  if (resolved.length > 1 && resolved.endsWith(sep)) {\n    return resolved.slice(0, -1);\n  }\n  return resolved;\n}\n\n/**\n * Load config từ file (global path mặc định, hoặc path override cho test).\n * - File không tồn tại → return DEFAULT_CONFIG\n * - File malformed/schema invalid → throw\n * - transport thiếu → default 'ws'\n * - Legacy ~/.pi config merged if exists (omp wins on collision)\n */\nexport async function loadConfig(\n  filePath: string = CONFIG_PATH,\n  legacyPath: string = LEGACY_CONFIG_PATH,\n): Promise<Config> {\n  let ompCfg: Config;\n  if (!existsSync(filePath)) {\n    ompCfg = { ...DEFAULT_CONFIG, projects: {} };\n  } else {\n    let raw: string;\n    try {\n      raw = await readFile(filePath, \"utf8\");\n    } catch (e) {\n      throw new Error(`config.json read failed: ${(e as Error).message}`);\n    }\n    let parsed: unknown;\n    try {\n      parsed = JSON.parse(raw);\n    } catch (e) {\n      throw new Error(`config.json malformed JSON: ${(e as Error).message}`);\n    }\n    ompCfg = validateConfig(parsed);\n  }\n\n  // Try migrating from legacy ~/.pi config\n  if (existsSync(legacyPath)) {\n    try {\n      let raw: string;\n      try {\n        raw = await readFile(legacyPath, \"utf8\");\n      } catch (e) {\n        throw new Error(`legacy config.json read failed: ${(e as Error).message}`);\n      }\n      let parsed: unknown;\n      try {\n        parsed = JSON.parse(raw);\n      } catch (e) {\n        throw new Error(`legacy config.json malformed JSON: ${(e as Error).message}`);\n      }\n      const legacyCfg = validateConfig(parsed);\n\n      let migrated = false;\n\n      // Merge legacy projects missing from omp (omp wins on key collision)\n      for (const [cwd, binding] of Object.entries(legacyCfg.projects)) {\n        if (!(cwd in ompCfg.projects)) {\n          ompCfg.projects[cwd] = binding;\n          migrated = true;\n        }\n      }\n\n      // Merge transport only if absent in omp (omp wins)\n      if (ompCfg.transport === DEFAULT_CONFIG.transport && legacyCfg.transport !== DEFAULT_CONFIG.transport) {\n        ompCfg.transport = legacyCfg.transport;\n        migrated = true;\n      }\n\n      // Merge pool only if absent in omp (omp wins)\n      if (legacyCfg.pool && !ompCfg.pool) {\n        ompCfg.pool = legacyCfg.pool;\n        migrated = true;\n      }\n\n      // Merge quietUpstreamNoise only if absent in omp (omp wins)\n      if (legacyCfg.quietUpstreamNoise !== undefined && ompCfg.quietUpstreamNoise === undefined) {\n        ompCfg.quietUpstreamNoise = legacyCfg.quietUpstreamNoise;\n        migrated = true;\n      }\n\n      // Merge upstreamNoisePatterns only if absent in omp (omp wins)\n      if (legacyCfg.upstreamNoisePatterns && !ompCfg.upstreamNoisePatterns) {\n        ompCfg.upstreamNoisePatterns = legacyCfg.upstreamNoisePatterns;\n        migrated = true;\n      }\n\n      // Persist merged config if anything changed\n      if (migrated) {\n        await saveConfig(ompCfg, filePath);\n      }\n    } catch (e) {\n      // Silently ignore legacy migration errors — omp config takes precedence\n      console.warn(`Failed to migrate legacy config from ${legacyPath}: ${(e as Error).message}`);\n    }\n  }\n\n  return ompCfg;\n}\n\n/** Validate + normalize parsed config object. */\nfunction validateConfig(parsed: unknown): Config {\n  if (typeof parsed !== \"object\" || parsed === null) {\n    throw new Error(\"config.json schema invalid: root must be an object\");\n  }\n  const root = parsed as Record<string, unknown>;\n  if (root.version !== 1) {\n    throw new Error(`config.json schema invalid: version must be 1 (got ${root.version})`);\n  }\n  // transport optional, default 'ws'\n  let transport: Transport | undefined;\n  if (root.transport !== undefined) {\n    if (root.transport !== \"ws\" && root.transport !== \"rest\") {\n      throw new Error(\n        `config.json schema invalid: transport must be 'ws' or 'rest' (got ${root.transport})`,\n      );\n    }\n    transport = root.transport;\n  }\n  if (typeof root.projects !== \"object\" || root.projects === null) {\n    throw new Error(\"config.json schema invalid: projects must be an object\");\n  }\n  const projects = root.projects as Record<string, unknown>;\n  const normalizedProjects: Record<string, ProjectBinding> = {};\n  for (const [cwd, binding] of Object.entries(projects)) {\n    if (typeof binding !== \"object\" || binding === null) {\n      throw new Error(`config.json schema invalid: projects[\"${cwd}\"] must be an object`);\n    }\n    const b = binding as Record<string, unknown>;\n    if (typeof b.workspace !== \"string\" || b.workspace.length === 0) {\n      throw new Error(`config.json schema invalid: projects[\"${cwd}\"].workspace required`);\n    }\n    if (typeof b.project !== \"string\" || b.project.length === 0) {\n      throw new Error(`config.json schema invalid: projects[\"${cwd}\"].project required`);\n    }\n    normalizedProjects[normalizePath(cwd)] = { workspace: b.workspace, project: b.project };\n  }\n  let pool: { maxSize?: number } | undefined;\n  if (root.pool !== undefined) {\n    if (typeof root.pool !== \"object\" || root.pool === null) {\n      throw new Error(\"config.json schema invalid: pool must be an object\");\n    }\n    const p = root.pool as Record<string, unknown>;\n    if (p.maxSize !== undefined) {\n      if (typeof p.maxSize !== \"number\" || p.maxSize < 1) {\n        throw new Error(\"config.json schema invalid: pool.maxSize must be positive number\");\n      }\n      pool = { maxSize: p.maxSize };\n    }\n  }\n  // T-62 #67: quietUpstreamNoise (boolean, default true) + upstreamNoisePatterns\n  // (string[] — RegExp source, case-insensitive).\n  let quietUpstreamNoise: boolean | undefined;\n  if (root.quietUpstreamNoise !== undefined) {\n    if (typeof root.quietUpstreamNoise !== \"boolean\") {\n      throw new Error(\n        \"config.json schema invalid: quietUpstreamNoise must be boolean (got \" +\n          `${typeof root.quietUpstreamNoise})`,\n      );\n    }\n    quietUpstreamNoise = root.quietUpstreamNoise;\n  }\n  let upstreamNoisePatterns: string[] | undefined;\n  if (root.upstreamNoisePatterns !== undefined) {\n    if (!Array.isArray(root.upstreamNoisePatterns)) {\n      throw new Error(\"config.json schema invalid: upstreamNoisePatterns must be array\");\n    }\n    for (const [i, p] of root.upstreamNoisePatterns.entries()) {\n      if (typeof p !== \"string\") {\n        throw new Error(`config.json schema invalid: upstreamNoisePatterns[${i}] must be string`);\n      }\n      // Validate RegExp compilable — KHÔNG crash sau load.\n      try {\n        new RegExp(p, \"i\");\n      } catch (e) {\n        throw new Error(\n          `config.json schema invalid: upstreamNoisePatterns[${i}] not valid RegExp: ` +\n            `${(e as Error).message}`,\n        );\n      }\n    }\n    upstreamNoisePatterns = root.upstreamNoisePatterns;\n  }\n  return {\n    version: 1,\n    transport: transport ?? \"ws\",\n    projects: normalizedProjects,\n    ...(pool !== undefined ? { pool } : {}),\n    ...(quietUpstreamNoise !== undefined ? { quietUpstreamNoise } : {}),\n    ...(upstreamNoisePatterns !== undefined ? { upstreamNoisePatterns } : {}),\n  };\n}\n\n/**\n * Save config atomic (temp + rename). KHÔNG chmod (non-secret).\n */\nexport async function saveConfig(config: Config, filePath: string = CONFIG_PATH): Promise<void> {\n  if (config.version !== 1) {\n    throw new Error(`config.json schema invalid: version must be 1 (got ${config.version})`);\n  }\n  if (config.transport !== undefined && config.transport !== \"ws\" && config.transport !== \"rest\") {\n    throw new Error(`config.json schema invalid: transport must be 'ws' or 'rest'`);\n  }\n  const dir = dirname(filePath);\n  await mkdir(dir, { recursive: true });\n  const json = `${JSON.stringify(config, null, 2)}\\n`;\n  const tmpPath = join(dir, `.config.json.tmp.${process.pid}`);\n  await writeFile(tmpPath, json, \"utf8\");\n  try {\n    await rename(tmpPath, filePath);\n  } catch (e) {\n    // Cleanup temp file nếu rename fail (cross-device, permission) — tránh leak\n    await rm(tmpPath, { force: true });\n    throw e;\n  }\n}\n\n/**\n * Bind cwd → {workspace, project} (upsert).\n */\nexport async function bindProject(\n  cwd: string,\n  binding: ProjectBinding,\n  filePath: string = CONFIG_PATH,\n): Promise<void> {\n  if (typeof binding.workspace !== \"string\" || binding.workspace.length === 0) {\n    throw new Error(\"bindProject: workspace required\");\n  }\n  if (typeof binding.project !== \"string\" || binding.project.length === 0) {\n    throw new Error(\"bindProject: project required\");\n  }\n  const config = await loadConfig(filePath, \"\");\n  config.projects[normalizePath(cwd)] = binding;\n  await saveConfig(config, filePath);\n}\n\n/**\n * Unbind cwd. No-op nếu cwd không tồn tại.\n */\nexport async function unbindProject(cwd: string, filePath: string = CONFIG_PATH): Promise<void> {\n  const config = await loadConfig(filePath, \"\");\n  const normalized = normalizePath(cwd);\n  if (!(normalized in config.projects)) return;\n  delete config.projects[normalized];\n  await saveConfig(config, filePath);\n}\n\n/**\n * Resolve cwd → binding via longest-prefix match.\n * - Sort binding paths by segment count desc\n * - Return first binding where cwd starts with binding path (segment-aligned)\n * - No match → undefined\n *\n * Segment-aligned: `/a/b` match `/a/b/c` (ok) nhưng KHÔNG match `/a/bcd` (khác segment).\n */\nexport async function resolveByCwd(\n  cwd: string,\n  filePath: string = CONFIG_PATH,\n): Promise<ProjectBinding | undefined> {\n  const config = await loadConfig(filePath, \"\");\n  const normalizedCwd = normalizePath(cwd);\n  const bindings = Object.entries(config.projects);\n  if (bindings.length === 0) return undefined;\n  // Sort by path depth desc (longest first)\n  bindings.sort((a, b) => pathDepth(b[0]) - pathDepth(a[0]));\n  for (const [bindingPath, binding] of bindings) {\n    if (isPathPrefix(bindingPath, normalizedCwd)) {\n      return binding;\n    }\n  }\n  return undefined;\n}\n\n/** Count path segments (vd '/a/b/c' = 3, '/' = 0). */\nfunction pathDepth(p: string): number {\n  if (p === \"/\" || p === \"\") return 0;\n  return p.split(sep).filter(Boolean).length;\n}\n\n/**\n * Check if `prefix` is a segment-aligned prefix of `path`.\n * - '/a/b' prefix of '/a/b/c' → true\n * - '/a/b' prefix of '/a/b' → true (exact)\n * - '/a/b' prefix of '/a/bcd' → false (segment mismatch)\n * - '/' prefix of anything → true\n */\nfunction isPathPrefix(prefix: string, path: string): boolean {\n  if (prefix === \"/\" || prefix === \"\") return true;\n  if (prefix === path) return true;\n  // path must start with prefix + separator\n  return path.startsWith(prefix + sep);\n}\n","// huly-ids.ts — Local replication của @hcengineering/core id helpers.\n//\n// Lý do KHÔNG import từ @hcengineering/core (CJS):\n//   1. Static default import mất generateId/makeCollabId dưới vitest/vite transform\n//      (cjs-module-lexer không detect exports qua __reExport loop) → test gãy.\n//   2. createRequire(import.meta.url) sinh runtime require() mà omp loader KHÔNG\n//      resolve được → \"Cannot find module '@hcengineering/core'\" khi load extension.\n//   3. Cả 2 func KHÔNG có trong types/index.d.ts → buộc `as` cast unchecked.\n// Local replication triệt tiêu cả 3: pure TS, zero CJS dependency, zero cast.\n//\n// Impl verified vs @hcengineering/core@0.7.423:\n//   - lib/utils.js: toHex, counter, random, timestamp, generateId\n//   - lib/collaboration.js: makeCollabId\n// Format invariants: generateId = 24 lowercase hex (isId: /^[0-9a-f]{24}$/),\n// makeCollabId = plain { objectClass, objectId, objectAttr } object.\n\n/** Hex-encode value, zero-pad trái đến `chars` digits (mirror core toHex). */\nfunction toHex(value: number, chars: number): string {\n  const result = value.toString(16);\n  return result.length < chars ? \"0\".repeat(chars - result.length) + result : result;\n}\n\n// 24-bit counter (seed random) + 10-hex process-random (mirror core utils.js:96-97).\nlet counter = (Math.random() * (1 << 24)) | 0;\nconst random =\n  toHex((Math.random() * (1 << 24)) | 0, 6) + toHex((Math.random() * (1 << 16)) | 0, 4);\n\n/**\n * Generate Huly _id: 24 lowercase hex (8 timestamp + 10 random + 6 counter).\n * Mirror @hcengineering/core generateId() — match doc thật + huly-mcp convention.\n * KHÔNG dùng `${class}.<rand>` class-prefix (hex 24 là convention Huly).\n */\nexport function generateId(): string {\n  const time = (Date.now() / 1e3) | 0;\n  const count = counter++ & 0xffffff;\n  return toHex(time, 8) + random + toHex(count, 6);\n}\n\n/**\n * Build Huly collaboration id (objectClass + objectId + objectAttr).\n * Mirror @hcengineering/core makeCollabId() — trivial object wrapper, dùng cho\n * client.updateMarkup (collaborator.updateMarkup rpc).\n */\nexport function makeCollabId(\n  objectClass: string,\n  objectId: string,\n  objectAttr: string,\n): { objectClass: string; objectId: string; objectAttr: string } {\n  return { objectClass, objectId, objectAttr };\n}\n","// HulyError taxonomy — classify api-client/PlatformError + network errors.\n// Design: 04-system.md §3 (taxonomy) + §6 (client/errors.ts contract), 08 §A (no-leak NFR-04).\n//\n// PlatformError (from @hcengineering/platform, re-exported via api-client) has shape:\n//   class PlatformError extends Error { readonly status: { severity, code, params } }\n// where `status.code` is a branded IntlString like 'platform:status:Unauthorized'.\n//\n// mapError uses DUCK-TYPING (no direct @hcengineering import) to avoid coupling:\n//   - `e instanceof Error && 'status' in e` → treat as PlatformError, classify via status.code\n//   - network patterns (ECONN*/fetch failed/WebSocket) → ConnectionError\n//   - else → InternalError\n//\n// Security (08 §A): toToolResult strips token/password/stack — KHÔNG leak secrets.\n\n/**\n * Error class identifier (04 §3 taxonomy, 8 classes).\n * T-57 #61: thêm \"Unavailable\" — class ref sai runtime (domain not found),\n * distinct khỏi NotFound (entity không tồn tại) và Internal (bug pi-huly).\n */\nexport type ErrorClass =\n  | \"Auth\"\n  | \"Connection\"\n  | \"NotFound\"\n  | \"Conflict\"\n  | \"Validation\"\n  | \"Internal\"\n  | \"External\"\n  | \"Unavailable\";\n\n/** Base HulyError — all 7 subclasses extend this. */\nexport class HulyError extends Error {\n  readonly class: ErrorClass;\n  override readonly cause?: unknown;\n\n  constructor(errorClass: ErrorClass, message: string, cause?: unknown) {\n    super(message);\n    this.name = `${errorClass}Error`;\n    this.class = errorClass;\n    if (cause !== undefined) {\n      this.cause = cause;\n    }\n  }\n}\n\nexport class AuthError extends HulyError {\n  constructor(message: string, cause?: unknown) {\n    super(\"Auth\", message, cause);\n  }\n}\n\nexport class ConnectionError extends HulyError {\n  constructor(message: string, cause?: unknown) {\n    super(\"Connection\", message, cause);\n  }\n}\n\nexport class NotFoundError extends HulyError {\n  constructor(message: string, cause?: unknown) {\n    super(\"NotFound\", message, cause);\n  }\n}\n\nexport class ConflictError extends HulyError {\n  constructor(message: string, cause?: unknown) {\n    super(\"Conflict\", message, cause);\n  }\n}\n\nexport class ValidationError extends HulyError {\n  constructor(message: string, cause?: unknown) {\n    super(\"Validation\", message, cause);\n  }\n}\n\nexport class InternalError extends HulyError {\n  constructor(message: string, cause?: unknown) {\n    super(\"Internal\", message, cause);\n  }\n}\n\nexport class ExternalError extends HulyError {\n  constructor(message: string, cause?: unknown) {\n    super(\"External\", message, cause);\n  }\n}\n\n/**\n * T-57 #61: Class ref sai runtime (domain not found) — distinct từ NotFound/\n * Internal. Khi Huly throw \"domain not found: <class>\", class đích KHÔNG tồn\n * tại trong workspace (package chưa enable HOẶC pi-huly dùng sai class ref).\n * Tool không chạy được → báo honest cho LLM thay vì generic InternalError.\n */\nexport class UnavailableError extends HulyError {\n  /** Class ref bị reject (vd \"tracker:class:Document\"). */\n  readonly hulyClass?: string;\n  constructor(message: string, cause?: unknown, hulyClass?: string) {\n    super(\"Unavailable\", message, cause);\n    if (hulyClass !== undefined) {\n      this.hulyClass = hulyClass;\n    }\n  }\n}\n\n// PlatformError duck-type shape (matches @hcengineering/platform PlatformError).\ntype IntlStringObj = { _id?: string; default?: string; key?: string; value?: string };\ntype StatusLike = {\n  severity: string;\n  code: string | IntlStringObj;\n  params?: Record<string, unknown>;\n};\n\ntype PlatformErrorLike = Error & {\n  status?: StatusLike;\n};\n\n/** Extract string code from status.code (handles branded IntlString shape). */\nfunction statusCode(code: StatusLike[\"code\"]): string {\n  if (typeof code === \"string\") return code;\n  if (code && typeof code === \"object\") {\n    return code._id ?? code.default ?? code.key ?? code.value ?? \"\";\n  }\n  return \"\";\n}\n\n/** Check if error looks like a PlatformError (duck-type, no instanceof). */\nfunction isPlatformError(e: unknown): e is PlatformErrorLike {\n  return e instanceof Error && \"status\" in e && typeof e.status === \"object\";\n}\n\n/** Network error patterns (raw Error, NOT PlatformError). */\nconst NETWORK_PATTERNS = [\n  /ECONNREFUSED/i,\n  /ECONNRESET/i,\n  /ETIMEDOUT/i,\n  /ENOTFOUND/i,\n  /EAI_AGAIN/i,\n  /EHOSTUNREACH/i,\n  /ENETUNREACH/i,\n  /fetch\\s*failed/i,\n  /WebSocket/i,\n  /abnormal\\s*closure/i,\n  /socket\\s*hang\\s*up/i,\n  /network/i,\n];\n\n/** Classify PlatformError status.code → HulyError subclass. */\nfunction classifyPlatformError(e: PlatformErrorLike): HulyError {\n  const status = e.status!;\n  const code = statusCode(status.code);\n  const params = status.params ?? {};\n\n  // Auth: Unauthorized, TokenExpired, TokenNotActive, PasswordExpired,\n  //       WorkspaceNotFound, PasswordLoginLocked, InvalidPassword,\n  //       AccountNotConfirmed, SocialIdNotConfirmed, Forbidden, ReadOnlyAccount\n  if (\n    code.includes(\"Unauthorized\") ||\n    code.includes(\"TokenExpired\") ||\n    code.includes(\"TokenNotActive\") ||\n    code.includes(\"PasswordExpired\") ||\n    code.includes(\"WorkspaceNotFound\") ||\n    code.includes(\"PasswordLoginLocked\") ||\n    code.includes(\"InvalidPassword\") ||\n    code.includes(\"AccountNotConfirmed\") ||\n    code.includes(\"SocialIdNotConfirmed\") ||\n    code.includes(\"Forbidden\") ||\n    code.includes(\"ReadOnlyAccount\") ||\n    code.includes(\"AccountNotFound\") ||\n    code.includes(\"AccountMismatch\")\n  ) {\n    const hint = code.includes(\"WorkspaceNotFound\")\n      ? \" Run /huly init to bind.\"\n      : code.includes(\"PasswordLoginLocked\")\n        ? \" Account locked — try again later or re-init.\"\n        : \"\";\n    return new AuthError(`Auth failed: ${code}${hint}`, e);\n  }\n\n  // Connection: ConnectionClosed, MaintenanceWarning, WorkspaceMigration, WorkspaceRateLimit\n  if (\n    code.includes(\"ConnectionClosed\") ||\n    code.includes(\"Maintenance\") ||\n    code.includes(\"Migration\") ||\n    code.includes(\"RateLimit\")\n  ) {\n    return new ConnectionError(`Huly connection issue: ${code}`, e);\n  }\n\n  // Conflict: Conflict, AlreadyExists, AccountAlreadyExists, WorkspaceAlreadyExists\n  if (\n    code.includes(\"Conflict\") ||\n    code.includes(\"AlreadyExists\") ||\n    code.includes(\"IntegrationExists\") ||\n    code.includes(\"SecretAlreadyExists\")\n  ) {\n    return new ConflictError(`Conflict: ${code}`, e);\n  }\n\n  // Validation: BadRequest, InvalidId, ExpiredLink, SocialIdAlreadyConfirmed\n  if (\n    code.includes(\"BadRequest\") ||\n    code.includes(\"InvalidId\") ||\n    code.includes(\"ExpiredLink\") ||\n    code.includes(\"AlreadyConfirmed\")\n  ) {\n    return new ValidationError(`Validation: ${code}`, e);\n  }\n\n  // NotFound: PersonNotFound, InviteNotFound, SecretNotFound, NotFound\n  if (\n    code.includes(\"PersonNotFound\") ||\n    code.includes(\"InviteNotFound\") ||\n    code.includes(\"SecretNotFound\") ||\n    /(^|[:.])NotFound$/.test(code)\n  ) {\n    const id = typeof params.id === \"string\" ? `: ${params.id}` : \"\";\n    return new NotFoundError(`Not found: ${code}${id}`, e);\n  }\n\n  // Internal (fallback): BadError, UnknownError, InternalServerError, UnknownMethod, MailboxError\n  return new InternalError(`Internal: ${code}`, e);\n}\n\n/**\n * T-57 #61: Detect \"domain not found: <class>\" pattern trong error message.\n * Huly throw pattern này khi class ref KHÔNG tồn tại runtime (package chưa\n * enable HOẶC pi-huly dùng sai class ref). Match cả 2 dạng:\n *   - \"domain not found: tracker:class:Document\"\n *   - \"Error: domain not found: core:class:TsRelation\"\n *\n * Trả class ref thật (group 1) hoặc null nếu không match.\n */\n// Capture đến whitespace/EOL (code-review MINOR #5) — defensive nếu Huly thêm\n// class ref có ký tự lạ (vd dash). Trước đây `[\\w:]+` cắt tại ký tự không match.\nconst DOMAIN_NOT_FOUND_RE = /domain\\s+not\\s+found:\\s*(\\S+)/i;\nexport function matchDomainNotFound(message: string): string | null {\n  const m = DOMAIN_NOT_FOUND_RE.exec(message);\n  return m ? m[1] : null;\n}\n\n/**\n * Map any error (PlatformError, network Error, generic) → HulyError subclass.\n * Order:\n *   1. Already HulyError → return as-is\n *   2. PlatformError (duck-type) → classify via status.code\n *   3. Network Error (ECONNREFUSED, fetch failed, WebSocket) → ConnectionError\n *   4. Plain Error 'Workspace not found' → AuthError (run /huly init)\n *   5. ExternalError → unwrap cause, mapError recursive\n *   6. Else → InternalError (wrap)\n *\n * T-57 #61: trước InternalError fallback, check \"domain not found\" pattern\n * (xuất hiện trong cả PlatformError UnknownError + plain Error) → UnavailableError.\n */\nexport function mapError(e: unknown): HulyError {\n  // 0. Already HulyError\n  if (e instanceof HulyError) {\n    // ExternalError → unwrap cause recursively\n    if (e instanceof ExternalError && e.cause !== undefined) {\n      return mapError(e.cause);\n    }\n    return e;\n  }\n\n  // 1. PlatformError (duck-type)\n  if (isPlatformError(e)) {\n    const classified = classifyPlatformError(e);\n    // T-57: PlatformError UnknownError có thể wrap \"domain not found\" trong\n    // raw message (vd createDoc class sai → server throw UnknownError với\n    // message \"domain not found: <class>\"). classifyPlatformError build message\n    // từ status.code (chỉ \"UnknownError\") KHÔNG giữ raw text → check cả 2.\n    if (classified.class === \"Internal\") {\n      const cls = matchDomainNotFound(e.message) ?? matchDomainNotFound(classified.message);\n      if (cls !== null) {\n        return new UnavailableError(buildUnavailableMessage(cls), e, cls);\n      }\n    }\n    return classified;\n  }\n\n  // 2. Plain Error\n  if (e instanceof Error) {\n    const msg = e.message ?? \"\";\n    // Network patterns\n    if (NETWORK_PATTERNS.some((re) => re.test(msg) || re.test(e.name))) {\n      return new ConnectionError(`Huly unreachable: ${msg}`, e);\n    }\n    // T-57 #61: \"domain not found: <class>\" → UnavailableError (trước fallback\n    // generic InternalError — Huly raw error message thường chứa pattern này).\n    const cls = matchDomainNotFound(msg);\n    if (cls !== null) {\n      return new UnavailableError(buildUnavailableMessage(cls), e, cls);\n    }\n    // api-client own: 'Workspace <name> not found'\n    if (/^Workspace\\s+\\S+\\s+not\\s+found/i.test(msg)) {\n      return new AuthError(`Auth failed: ${msg} Run /huly init.`, e);\n    }\n    // Generic — include e.message cho ops debug (sanitize() ở toToolResult strip secret)\n    return new InternalError(`Internal: ${e.name}: ${e.message}`, e);\n  }\n\n  // 3. Non-Error (string, object, null, undefined) → wrap\n  const detail = typeof e === \"string\" ? e : JSON.stringify(e);\n  return new InternalError(`Internal: ${detail}`, e);\n}\n\n/**\n * T-57 #61: Build honest message cho UnavailableError — list possible causes\n * giúp LLM/user debug (package chưa enable / sai class ref / report bug).\n */\nfunction buildUnavailableMessage(cls: string): string {\n  return (\n    `Class \"${cls}\" không khả dụng trong workspace này. ` +\n    `Có thể: (1) workspace chưa enable package chứa class này ` +\n    `(vd Document/Tags feature opt-in); (2) pi-huly dùng sai class ref ` +\n    `(report bug kèm workspace Huly version); (3) class đã bị rename/deprecated ` +\n    `trong phiên bản Huly mới hơn.`\n  );\n}\n\n/**\n * Convert HulyError → pi tool result (04 §6, 08 §A no-leak).\n * Strips: token, password, stack trace, internal _class names.\n * Keeps: error class, sanitized message.\n */\nexport type ToolResult = {\n  content: Array<{ type: \"text\"; text: string }>;\n  isError: true;\n};\n\n/**\n * Patterns to strip from messages (secrets + stack) — 08 §A NFR-04 no-leak.\n * Centralized ở errors.ts để mọi consumer (toToolResult, builder sanitize path)\n * dùng chung single source of truth (tránh drift khi thêm pattern mới).\n */\nexport const LEAK_PATTERNS = [\n  // Generic key=value assignment (token / password / secret / api_key / authorization).\n  /(?:token|password|secret|api[_-]?key|authorization)\\s*[=:]\\s*['\"]?[A-Za-z0-9_.+/ -]{8,}['\"]?/gi,\n  // GitHub tokens (classic PAT, fine-grained, npm)\n  /ghp_[A-Za-z0-9]{36,}/g,\n  /npm_[A-Za-z0-9]{36,}/g,\n  /github_pat_[A-Za-z0-9_]+/g,\n  // Cloud provider access keys: AWS (AKIA...), OpenAI (sk-...)\n  /(?:AKIA|sk-)[A-Za-z0-9]{16,}/g,\n  // JWT (3 dot-separated base64url segments, each ≥10 chars)\n  /eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,}/g,\n  // URL-embedded credentials: https://user:pass@host\n  /https?:\\/\\/[^/\\s@]+:[^/\\s@]+@/gi,\n  // Stack frame: \"at <path>:<line>:<col>\" hoặc V8 \"at fn (file.js:10:5)\"\n  /\\bat\\s+.*?:\\d+:\\d+(?::\\d+)?\\)?/g,\n];\n\n/**\n * Sanitize message — strip secrets + stack traces (08 §A NFR-04).\n * Exported để builder + domain tool reuse (single source of truth cho patterns).\n */\nexport function sanitize(message: string): string {\n  let out = message;\n  for (const re of LEAK_PATTERNS) {\n    out = out.replace(re, \"[REDACTED]\");\n  }\n  return out;\n}\n\nexport function toToolResult(err: HulyError): ToolResult {\n  const errorClass = err.class;\n  const sanitizedMsg = sanitize(err.message);\n  return {\n    content: [\n      {\n        type: \"text\",\n        text: `[${errorClass}Error] ${sanitizedMsg}`,\n      },\n    ],\n    isError: true,\n  };\n}\n","// T-62 #67: Filter framework gate upstream console spam.\n//\n// Upstream `@hcengineering` (core/memdb + core/client buildModel + client-resources\n// connection.js) in ra stderr hàng loạt `console.warn`/`console.error`/`console.log`\n// không seam, break UI pi. Verified KHÔNG có seam inject logger trong upstream\n// `connect()` (`api-client/lib/client.js:42-79` — chỉ nhận socketFactory +\n// connectionTimeout). → Filter ở ranh giới pi-huly.\n//\n// Design:\n// - `UpstreamConsoleFilter` class: install/restore `console.warn`/`.error`/`.log`.\n//   Match argument đầu tiên (string) HOẶC structured log (object có field `message`)\n//   qua danh sách pattern `RegExp[]`. Đếm per-pattern + total.\n// - `runWithConsoleFilter(patterns, fn)`: wrap async block, install → run → restore\n//   (try/finally LUÔN restore — KHÔNG leak override global dù block throw).\n// - `DEFAULT_UPSTREAM_NOISE_PATTERNS`: pattern registry. T-62 ship pattern #67.\n//   T-64 (blocked-by T-62) đăng ký thêm WS error + token leak pattern.\n// - Module-level counter: expose qua pool `health()` → `/huly status` display.\n\n/** Console method names được filter. */\ntype ConsoleMethod = \"warn\" | \"error\" | \"log\";\n\n/** Console method override target — uniform fn signature (warn/error/log interchangeable). */\ntype ConsoleFn = (...args: unknown[]) => void;\nconst CONSOLE_METHODS: readonly ConsoleMethod[] = [\"warn\", \"error\", \"log\"];\n\n/**\n * Đếm số dòng đã filter: total + per-pattern (key = pattern.source).\n * Module-level để pool `health()` aggregate cross filter instance.\n */\ninterface NoiseCounters {\n  total: number;\n  byPattern: Record<string, number>;\n}\n\nconst moduleCounters: NoiseCounters = { total: 0, byPattern: {} };\n\n/**\n * Reset module-level counters. Test-only — pool health KHÔNG reset runtime\n * (counter accumulate qua session lifetime để report cumulative).\n */\nexport function resetUpstreamNoiseCounters(): void {\n  moduleCounters.total = 0;\n  moduleCounters.byPattern = {};\n}\n\n/**\n * Read-only snapshot counters cho pool `health()` expose.\n * Return copy để caller KHÔNG mutate module state.\n */\nexport function getUpstreamNoiseCounters(): NoiseCounters {\n  return {\n    total: moduleCounters.total,\n    byPattern: { ...moduleCounters.byPattern },\n  };\n}\n\n/**\n * Trích first-arg string ra string match-able. Support 2 shape:\n * - first-arg là string → return trực tiếp\n * - first-arg là object có field `message` string → return message (structured log)\n * - KHÁC (number/null/array/...) → return undefined (KHÔNG match — guard)\n */\nfunction extractMessage(firstArg: unknown): string | undefined {\n  if (typeof firstArg === \"string\") return firstArg;\n  // Structured log: object có field `message` string. KHÔNG match Error instance\n  // (Error.message là real error — filter che là sai). Upstream warn dùng plain\n  // object {message: \"...\"} không phải Error throw.\n  if (\n    typeof firstArg === \"object\" &&\n    firstArg !== null &&\n    !Array.isArray(firstArg) &&\n    !(firstArg instanceof Error) &&\n    \"message\" in firstArg &&\n    typeof firstArg.message === \"string\"\n  ) {\n    return firstArg.message;\n  }\n  return undefined;\n}\n\n/**\n * UpstreamConsoleFilter — install/restore console.warn/error/log override.\n *\n * Match first-arg string qua `RegExp[]`. Match → swallow (KHÔNG delegate ra\n * original method) + counter +1 (per-pattern + total). Miss → delegate original\n * (log vẫn ra như cũ).\n */\nexport class UpstreamConsoleFilter {\n  private readonly patterns: RegExp[];\n  private installed = false;\n  private readonly originals: Partial<Record<ConsoleMethod, ConsoleFn>> = {};\n\n  constructor(patterns: RegExp[]) {\n    this.patterns = patterns;\n  }\n\n  /** Install override cho console.warn/error/log. Idempotent (install 2 lần no-op). */\n  install(): void {\n    if (this.installed) return;\n    this.installed = true;\n    for (const method of CONSOLE_METHODS) {\n      this.originals[method] = console[method];\n      // Arrow function giữ `this` + closure pattern. Bind original qua closure\n      // (KHÔNG dùng .bind — giữ call site debug stack chính xác).\n      const original = this.originals[method]!;\n      const patterns = this.patterns;\n      console[method] = (...args: unknown[]) => {\n        const msg = extractMessage(args[0]);\n        if (msg !== undefined) {\n          // First-match-wins: chỉ pattern đầu (theo order trong mảng) match được\n          // count — tránh double-count khi nhiều pattern cùng match 1 message.\n          const matched = patterns.find((p) => p.test(msg));\n          if (matched !== undefined) {\n            // Filter: swallow + counter +1\n            moduleCounters.total += 1;\n            const key = matched.toString();\n            moduleCounters.byPattern[key] = (moduleCounters.byPattern[key] ?? 0) + 1;\n            return;\n          }\n        }\n        // KHÔNG match → delegate original (log ra như cũ)\n        original.apply(console, args);\n      };\n    }\n  }\n\n  /** Restore original console.warn/error/log. Idempotent (restore 2 lần no-op). */\n  restore(): void {\n    if (!this.installed) return;\n    this.installed = false;\n    for (const method of CONSOLE_METHODS) {\n      const original = this.originals[method];\n      if (original !== undefined) {\n        console[method] = original;\n        delete this.originals[method];\n      }\n    }\n  }\n}\n\n/**\n * Wrap async block với console filter active. Install → run → restore (try/finally\n * LUÔN restore — KHÔNG leak override global dù block throw).\n *\n * **Scope hạn chế**: chỉ cover connect-time spam (cache-miss replay khi buildModel).\n * WS error post-connect (wsocket.onerror async callback) KHÔNG cover — dùng\n * `installGlobalConsoleFilter()` cho connection lifetime.\n *\n * @param patterns RegExp[] match first-arg string (hoặc object.message)\n * @param fn async block (vd quanh connect() / warmPool)\n * @returns giá trị fn trả về\n */\nexport async function runWithConsoleFilter<T>(\n  patterns: RegExp[],\n  fn: () => Promise<T>,\n): Promise<T> {\n  const filter = new UpstreamConsoleFilter(patterns);\n  filter.install();\n  try {\n    return await fn();\n  } finally {\n    filter.restore();\n  }\n}\n\n/**\n * T-64 #69: Global console filter — install 1 lần, active toàn session lifetime\n * (KHÔNG restore). Cần thiết vì WS error (`wsocket.onerror` async callback trong\n * `client-resources/lib/connection.js:554`) fires **post-connect** — `runWithConsoleFilter`\n * chỉ cover connect-time, restore `console.error` trước khi WS error thật sự fire.\n *\n * Token leak (URL `_transactor/<token>`) chỉ gate được nếu filter active khi WS\n * error fire (bất kỳ lúc nào post-connect: reconnect, server down, network blip).\n *\n * Install idempotent — gọi 2 lần no-op (return false nếu đã active).\n *\n * @param patterns RegExp[] match first-arg string (hoặc object.message)\n * @returns true nếu install mới, false nếu đã active (no-op)\n */\nlet globalFilterInstalled = false;\nlet globalFilter: UpstreamConsoleFilter | null = null;\n\nexport function installGlobalConsoleFilter(patterns: RegExp[]): boolean {\n  if (globalFilterInstalled) return false;\n  globalFilter = new UpstreamConsoleFilter(patterns);\n  globalFilter.install();\n  globalFilterInstalled = true;\n  return true;\n}\n\n/**\n * Restore global filter (test-only — production KHÔNG gọi, filter active toàn session).\n */\nexport function __resetGlobalFilterForTests(): void {\n  if (globalFilter !== null) {\n    globalFilter.restore();\n    globalFilter = null;\n  }\n  globalFilterInstalled = false;\n}\n\n/**\n * Default upstream noise pattern registry.\n *\n * T-62 ship #67 (cache-miss warn). T-64 (#69) đăng ký thêm WS error spam +\n * token leak + 7 dòng spam khác trong `client-resources/lib/connection.js`.\n *\n * Pattern match FIRST-arg string (case-insensitive). KHÔNG match log khác\n * (vd pi-huly tool call log `[huly_list_issues] args: ...`) — guard test có sẵn.\n *\n * **KHÔNG filter Error instance** (dòng `console.error(new Error(...))` ở\n * connection.js:329 `unknown response id` + 488/496/510/518 decompress error):\n * Error.message là real error cần debug. Filter chỉ apply cho plain string /\n * structured log {message}. Decision documented CHANGELOG.\n */\nexport const DEFAULT_UPSTREAM_NOISE_PATTERNS: RegExp[] = [\n  // #67 (T-62): cache-miss warn khi replay TxUpdateDoc/TxRemoveDoc/TxMixin cho\n  // doc không có trong local model. Vô hại (doc đã expire/removed trên server).\n  /^no document found, failed to apply model transaction/i,\n  // #69 (T-64): WS error spam + token leak. Upstream connection.js:554 in ra\n  // `client websocket error: <id> wss://.../_transactor/<token> <ws> <user>`\n  // mỗi lần WS gặp error (reconnect backoff). URL chứa api-token → NFR-04\n  // violation nếu log ra stderr/UI. Filter swallow toàn bộ (KHÔNG redact).\n  /^client websocket error/i,\n  // #69 (T-64): 6 dòng spam khác trong connection.js — session info, ping,\n  // version, upgrade, perf warning. Vô hại, break UI pi.\n  /^Generate new SessionId/i,\n  /^no ping response from server/i,\n  /^Connected to server/i,\n  /^Processing upgrade/i,\n  /^measure slow findAll/i,\n];\n","// HulyClient — thin wrapper @hcengineering/api-client (ws + rest).\n// Design: 04-system.md §6 (reconciled T-05 với api-client@0.7.423 real API).\n//\n// Transport toggle (D3):\n//   ws   = connect() persistent + full CRUD via PlatformClient\n//   rest = connectRest() + createRestTxOperations() (RestClient read-only + TxOperations cho write)\n//\n// getCurrentUser() wrap client.getAccount() (D15 FR-18 default assignee).\n// Error mapping: delegate sang T-04 HulyError qua mapError.\n\n// CJS interop: @hcengineering/* ship CommonJS (dynamic __reExport loop) → named\n// ESM imports crash at runtime (\"Named export 'connect' not found\"). Default\n// import = module.exports, destructure for values. Types stay type-only.\nimport apiClient from \"@hcengineering/api-client\";\nimport type {\n  Account,\n  ConnectOptions,\n  AttachedData,\n  AttachedDoc,\n  Class,\n  Doc,\n  DocumentQuery,\n  DocumentUpdate,\n  FindOptions,\n  FindResult,\n  Mixin,\n  MixinData,\n  PlatformClient,\n  Ref,\n  RestClient,\n  Space,\n  StorageClient,\n  TxOperations,\n  TxResult,\n  WithLookup,\n  WithMarkup,\n} from \"@hcengineering/api-client\";\n// T-103 #156: makeCollabId + jsonToMarkup exist runtime nhưng KHÔNG trong .d.ts.\n// 0.2.4 fix: makeCollabId replicated local (src/client/huly-ids.ts) — triệt tiêu\n// CJS interop (static import mất func dưới vitest; createRequire break omp loader)\n// + bỏ `as` cast unchecked. jsonToMarkup (text-core) phức tạp → giữ default import\n// + cast (pre-existing beta.18, work ở cả vitest + dist).\nimport { makeCollabId } from \"./huly-ids.js\";\nimport textCore from \"@hcengineering/text-core\";\nimport textMarkdown from \"@hcengineering/text-markdown\";\nconst { connect, connectRest, connectStorage, createRestTxOperations, getWorkspaceToken } =\n  apiClient;\nconst { markdownToMarkup } = textMarkdown;\nconst jsonToMarkup = (textCore as unknown as { jsonToMarkup: (j: unknown) => string }).jsonToMarkup;\nimport { mapError } from \"./errors.js\";\nimport { DEFAULT_UPSTREAM_NOISE_PATTERNS, runWithConsoleFilter } from \"./console-filter.js\";\nimport { loadConfig } from \"../config/config.js\";\n\n/** Transport global toggle (D3). Default 'ws'. */\nexport type Transport = \"ws\" | \"rest\";\n\n/** Huly credentials: url tách + auth union (D8) + workspace BẮT BUỘC. */\nexport type HulyCredentials = {\n  url: string;\n} & ConnectOptions;\n\n/** Current user shape (mapped từ Account, D15 FR-18). */\nexport interface CurrentUser {\n  id: string;\n  name: string;\n  email: string;\n}\n\n/**\n * HulyClient — unified interface cho cả ws + rest transport.\n * Methods ủy quyền PlatformClient (ws) hoặc RestClient + TxOperations (rest).\n */\nexport interface HulyClient {\n  readonly transport: Transport;\n\n  // FindOperations\n  findOne<T extends Doc>(\n    _class: Ref<Class<T>>,\n    query: DocumentQuery<T>,\n    options?: FindOptions<T>,\n  ): Promise<WithLookup<T> | undefined>;\n  findAll<T extends Doc>(\n    _class: Ref<Class<T>>,\n    query: DocumentQuery<T>,\n    options?: FindOptions<T>,\n  ): Promise<FindResult<T>>;\n\n  // DocOperations (write)\n  createDoc<T extends Doc>(\n    _class: Ref<Class<T>>,\n    space: Ref<Space>,\n    attributes: WithMarkup<Record<string, unknown>>,\n    id?: Ref<T>,\n  ): Promise<Ref<T>>;\n  updateDoc<T extends Doc>(\n    _class: Ref<Class<T>>,\n    space: Ref<Space>,\n    objectId: Ref<T>,\n    operations: WithMarkup<DocumentUpdate<T>>,\n    retrieve?: boolean,\n  ): Promise<TxResult>;\n  removeDoc<T extends Doc>(\n    _class: Ref<Class<T>>,\n    space: Ref<Space>,\n    objectId: Ref<T>,\n  ): Promise<TxResult>;\n\n  // CollectionOperations (cho comments/labels/relations)\n  addCollection<T extends Doc, P extends AttachedDoc>(\n    _class: Ref<Class<P>>,\n    space: Ref<Space>,\n    attachedTo: Ref<T>,\n    attachedToClass: Ref<Class<T>>,\n    collection: string,\n    attributes: WithMarkup<AttachedData<P>>,\n    id?: Ref<P>,\n  ): Promise<Ref<P>>;\n\n  // MixinOperations\n  createMixin<D extends Doc, M extends D>(\n    objectId: Ref<D>,\n    objectClass: Ref<Class<D>>,\n    objectSpace: Ref<Space>,\n    mixin: Ref<Mixin<M>>,\n    attributes: WithMarkup<MixinData<D, M>>,\n  ): Promise<TxResult>;\n\n  // MarkupOperations (T-41 — fetch markup content từ MarkupBlobRef; T-66 — upload/update)\n  // Issue.description / Document.content là MarkupBlobRef (document ref), KHÔNG inline string.\n  // fetchMarkup resolve ref → markdown/html/markup string theo format.\n  // uploadMarkup/upload-save markup → trả MarkupBlobRef (create + edit document).\n  // Ref branded types bypass (string runtime, Ref compile-time).\n  fetchMarkup(\n    objectClass: string,\n    objectId: string,\n    objectAttr: string,\n    markup: unknown,\n    format: \"markdown\" | \"html\" | \"markup\",\n  ): Promise<string>;\n  uploadMarkup(\n    objectClass: string,\n    objectId: string,\n    objectAttr: string,\n    markup: string,\n    format: \"markdown\" | \"html\" | \"markup\",\n  ): Promise<unknown>;\n  // T-103 #156: updateMarkup = updateContent rpc (edit existing doc content).\n  // uploadMarkup/createMarkup (createContent rpc) chỉ tạo INITIAL version — KHÔNG\n  // update document đã tồn tại (content unchanged, 0 snapshot). updateMarkup update\n  // content in-place qua collaborator. Optional (chỉ WS transport có).\n  updateMarkup?(\n    objectClass: string,\n    objectId: string,\n    objectAttr: string,\n    markup: string,\n    format: \"markdown\" | \"html\" | \"markup\",\n  ): Promise<void>;\n  // T-77: Fulltext search API (relevance-ranked, fulltext index).\n  // Signature: searchFulltext({query, classes?, spaces?}, {limit?}) → {docs, total?}.\n  // WS PlatformClient có thể KHÔNG expose — handler fallback $like nếu throw.\n  searchFulltext?(query: unknown, options?: unknown): Promise<unknown>;\n\n  // T-75: Blob storage ops (Attachment file upload/download).\n  // uploadBlob → {blobId, size}. getBlob → Buffer. Lazy connectStorage.\n  uploadBlob?(\n    filename: string,\n    buffer: Buffer,\n    contentType: string,\n  ): Promise<{ blobId: string; size: number }>;\n  getBlob?(blobId: string): Promise<Buffer>;\n\n  // Account\n  getAccount(): Promise<Account>;\n  getCurrentUser(): Promise<CurrentUser>;\n\n  // Lifecycle\n  close(): Promise<void>;\n}\n\n/**\n * T-62 #67: Resolve console filter pattern từ config.\n *\n * - `quietUpstreamNoise === false` → return null (KHÔNG filter — debug thật)\n * - `upstreamNoisePatterns` override → compile user pattern (case-insensitive)\n * - Default → `DEFAULT_UPSTREAM_NOISE_PATTERNS` (T-62: #67 + T-64: WS spam)\n *\n * Filter scope hẹp (chỉ quanh connect()) → KHÔNG global-silent vĩnh viễn.\n * KHÔNG throw nếu config invalid (default patterns) — connect vẫn chạy.\n */\nasync function resolveFilterPatterns(): Promise<RegExp[] | null> {\n  let config;\n  try {\n    config = await loadConfig();\n  } catch {\n    // Config error KHÔNG block connect — filter dùng default patterns.\n    return DEFAULT_UPSTREAM_NOISE_PATTERNS;\n  }\n  if (config.quietUpstreamNoise === false) return null;\n  if (config.upstreamNoisePatterns !== undefined && config.upstreamNoisePatterns.length > 0) {\n    // Compile user pattern — skip invalid (KHÔNG crash connect)\n    const compiled: RegExp[] = [];\n    for (const src of config.upstreamNoisePatterns) {\n      try {\n        compiled.push(new RegExp(src, \"i\"));\n      } catch {\n        // Skip — validateConfig đã catch khi load, runtime skip cho safety.\n      }\n    }\n    return compiled.length > 0 ? compiled : DEFAULT_UPSTREAM_NOISE_PATTERNS;\n  }\n  return DEFAULT_UPSTREAM_NOISE_PATTERNS;\n}\n\n/**\n * Create HulyClient theo transport (D3):\n *   ws   → connect() + delegate PlatformClient\n *   rest → connectRest() + createRestTxOperations() + delegate RestClient (read) + TxOperations (write)\n *\n * T-62 #67: wrap `connect()` qua `runWithConsoleFilter()` — gate upstream\n * `console.warn/error/log` spam (cache-miss replay + WS error). Filter scope\n * hẹp (try/finally restore). Escape hatch: config `quietUpstreamNoise: false`.\n *\n * Throws HulyError nếu connect/connectRest/createRestTxOperations fail (mapError từ T-04).\n */\nexport async function createHulyClient(\n  creds: HulyCredentials,\n  transport: Transport = \"ws\",\n): Promise<HulyClient> {\n  const patterns = await resolveFilterPatterns();\n  try {\n    const { url, ...auth } = creds;\n    if (transport === \"ws\") {\n      const connectFn = () => connect(url, auth);\n      // T-62: wrap connect() — upstream replay tải model diff + warn cache-miss\n      // hàng loạt. Filter chỉ active trong scope connect (try/finally restore).\n      const client =\n        patterns !== null ? await runWithConsoleFilter(patterns, connectFn) : await connectFn();\n      return makeWsClient(client, () => connectStorage(url, auth));\n    }\n    // rest\n    const rest = await connectRest(url, auth);\n    const { endpoint, workspaceId, token } = await getWorkspaceToken(url, auth);\n    const tx = await createRestTxOperations(endpoint, workspaceId, token);\n    return makeRestClient(rest, tx, () => connectStorage(url, auth));\n  } catch (e) {\n    throw mapError(e);\n  }\n}\n\n/** Wrap PlatformClient (ws) thành HulyClient. */\nfunction makeWsClient(\n  client: PlatformClient,\n  getStorage: () => Promise<StorageClient>,\n): HulyClient {\n  let cachedUser: CurrentUser | undefined;\n  let cachedStorage: StorageClient | undefined;\n  return {\n    transport: \"ws\",\n    findOne: (...args) => client.findOne(...args),\n    findAll: (...args) => client.findAll(...args),\n    createDoc: (...args) => client.createDoc(...args),\n    updateDoc: (...args) => client.updateDoc(...args),\n    removeDoc: (...args) => client.removeDoc(...args),\n    addCollection: (...args) => client.addCollection(...args),\n    createMixin: (...args) => client.createMixin(...args),\n    // T-41: PlatformClient có fetchMarkup/uploadMarkup built-in (MarkupOperations).\n    // updateMarkup impl ở dưới (markdown→markup + collaborator.updateMarkup) — edit\n    // existing markup content in-place. uploadMarkup (createMarkup) chỉ tạo initial version.\n    fetchMarkup: (...args) => client.fetchMarkup(...args),\n    uploadMarkup: (...args) => client.uploadMarkup(...args),\n    // T-103 #156: updateMarkup qua collaborator.updateMarkup (updateContent rpc).\n    // client.markup = MarkupOperationsImpl (public field) — hold collaborator +\n    // refUrl/imageUrl (private TS, runtime-accessible). Convert markdown→markup\n    // mirror MarkupOperationsImpl.uploadMarkup, rồi updateMarkup thay createMarkup.\n    updateMarkup: async (objectClass, objectId, objectAttr, value, format) => {\n      const mo = (\n        client as unknown as {\n          markup: {\n            collaborator: {\n              updateMarkup: (doc: unknown, markup: string) => Promise<void>;\n            };\n            refUrl?: string;\n            imageUrl?: string;\n          };\n        }\n      ).markup;\n      let markup = \"\";\n      if (format === \"markdown\") {\n        markup = jsonToMarkup(\n          markdownToMarkup(value, { refUrl: mo.refUrl, imageUrl: mo.imageUrl }),\n        );\n      } else {\n        markup = value;\n      }\n      const collabId = makeCollabId(objectClass, objectId, objectAttr);\n      await mo.collaborator.updateMarkup(collabId, markup);\n    },\n    // T-77: searchFulltext — optional trên PlatformClient. Guard runtime +\n    // helpful error nếu undefined (handler fulltext_search fallback $like).\n    searchFulltext: (...args) => {\n      const fn = client.searchFulltext;\n      if (typeof fn !== \"function\") {\n        throw new Error(\"searchFulltext not available on WS transport — fallback to $like.\");\n      }\n      return fn(...args);\n    },\n    // T-75: blob storage ops (lazy connectStorage).\n    uploadBlob: async (filename, buffer, contentType) => {\n      if (!cachedStorage) cachedStorage = await getStorage();\n      const objectName = `attachment/${Math.random().toString(36).slice(2, 14)}/${filename}`;\n      const blob = await cachedStorage.put(objectName, buffer, contentType, buffer.length);\n      return { blobId: blob._id, size: blob.size };\n    },\n    getBlob: async (blobId) => {\n      if (!cachedStorage) cachedStorage = await getStorage();\n      const stream = await cachedStorage.get(blobId);\n      const chunks: Buffer[] = [];\n      for await (const chunk of stream) {\n        chunks.push(typeof chunk === \"string\" ? Buffer.from(chunk) : chunk);\n      }\n      return Buffer.concat(chunks);\n    },\n    getAccount: () => client.getAccount(),\n    async getCurrentUser(): Promise<CurrentUser> {\n      if (cachedUser) return cachedUser;\n      const account = await client.getAccount();\n      cachedUser = accountToUser(account);\n      return cachedUser;\n    },\n    close: () => client.close(),\n  };\n}\n\n/** Wrap RestClient + TxOperations (rest) thành HulyClient. */\nfunction makeRestClient(\n  rest: RestClient,\n  tx: TxOperations,\n  getStorage: () => Promise<StorageClient>,\n): HulyClient {\n  let cachedUser: CurrentUser | undefined;\n  let cachedStorage: StorageClient | undefined;\n  return {\n    transport: \"rest\",\n    // Read ops → RestClient\n    findOne: (...args) => rest.findOne(...args),\n    findAll: (...args) => rest.findAll(...args),\n    // Write ops → TxOperations (RestClient read-only)\n    createDoc: (...args) => tx.createDoc(...args),\n    updateDoc: (...args) => tx.updateDoc(...args),\n    removeDoc: (...args) => tx.removeDoc(...args),\n    addCollection: (...args) => tx.addCollection(...args),\n    createMixin: (...args) => tx.createMixin(...args),\n    // T-41: RestClient KHÔNG có fetchMarkup built-in (chỉ PlatformClient ws có).\n    // REST transport fallback: throw rõ ràng — user đổi sang ws transport nếu cần\n    // resolve MarkupBlobRef (vd get_issue description). Default transport = ws\n    // (config.ts D3) nên path này hiếm khi hit. T-66: upload/updateMarkup cùng.\n    fetchMarkup: () => {\n      throw new Error(\n        \"fetchMarkup not supported on REST transport. Use WS transport (default) \" +\n          \"to resolve MarkupBlobRef fields like issue description.\",\n      );\n    },\n    uploadMarkup: () => {\n      throw new Error(\n        \"uploadMarkup not supported on REST transport. Use WS transport (default) \" +\n          \"to save document content (MarkupBlobRef).\",\n      );\n    },\n    // T-103 #156: updateMarkup cũng WS-only (collaborator) — throwing stub mirror.\n    updateMarkup: () => {\n      throw new Error(\n        \"updateMarkup not supported on REST transport. Use WS transport (default) \" +\n          \"to edit document content.\",\n      );\n    },\n    // T-77: REST has searchFulltext (RestClient.searchFulltext exists).\n    searchFulltext: (...args) => rest.searchFulltext(...args),\n    // T-75: blob storage ops (lazy connectStorage).\n    uploadBlob: async (filename, buffer, contentType) => {\n      if (!cachedStorage) cachedStorage = await getStorage();\n      const objectName = `attachment/${Math.random().toString(36).slice(2, 14)}/${filename}`;\n      const blob = await cachedStorage.put(objectName, buffer, contentType, buffer.length);\n      return { blobId: blob._id, size: blob.size };\n    },\n    getBlob: async (blobId) => {\n      if (!cachedStorage) cachedStorage = await getStorage();\n      const stream = await cachedStorage.get(blobId);\n      const chunks: Buffer[] = [];\n      for await (const chunk of stream) {\n        chunks.push(typeof chunk === \"string\" ? Buffer.from(chunk) : chunk);\n      }\n      return Buffer.concat(chunks);\n    },\n    getAccount: () => rest.getAccount(),\n    async getCurrentUser(): Promise<CurrentUser> {\n      if (cachedUser) return cachedUser;\n      const account = await rest.getAccount();\n      cachedUser = accountToUser(account);\n      return cachedUser;\n    },\n    // REST stateless — close no-op\n    close: async () => {},\n  };\n}\n\n/** Map Account → CurrentUser (D15 FR-18 assignee default). */\nfunction accountToUser(account: Account): CurrentUser {\n  // T-103 #157: primarySocialId có thể là numeric id (Google/huly login), KHÔNG\n  // email. Extract email THẬT từ fullSocialIds[type=email].value (fallback\n  // primarySocialId nếu không có — vd workspace chỉ có 1 social id).\n  const emailSocial = (\n    account as { fullSocialIds?: Array<{ type: string; value: string }> }\n  ).fullSocialIds?.find((s) => s.type === \"email\");\n  const email = emailSocial?.value ?? account.primarySocialId;\n  return {\n    id: account.uuid,\n    name: account.primarySocialId,\n    email,\n  };\n}\n","// ConnectionPool — module singleton, shared subagents (D14).\n// Design: 04-system.md §6 pool.ts, 01 §B.3 D3 transport, §B.14 D14 shared,\n// 08 §A NFR-11 maxSize 8 (ws), NFR-03 reconnect.\n//\n// Pool state = module-level (KHÔNG per-session) → subagent reuse.\n// WS: LRU evict khi > maxSize (default 8). REST: cached instance, no LRU (stateless).\n\nimport { getWorkspace, type WorkspaceCreds } from \"../config/credentials.js\";\nimport { loadConfig } from \"../config/config.js\";\nimport {\n  createHulyClient,\n  type HulyClient,\n  type HulyCredentials,\n  type Transport,\n} from \"./client.js\";\nimport { getUpstreamNoiseCounters } from \"./console-filter.js\";\n\n/** Pool entry: client + metadata. */\ninterface PoolEntry {\n  client: HulyClient;\n  workspaceId: string;\n  transport: Transport;\n  createdAt: number;\n  lastAccess: number;\n}\n\n/** Health status cho /huly diagnostics. */\nexport interface HealthStatus {\n  workspace: string;\n  connected: boolean;\n  transport: Transport;\n  user?: { id: string; name: string; email: string };\n  /**\n   * T-62 #67: count dòng upstream console spam đã filter (cumulative session).\n   * Total + per-pattern breakdown. Populated nếu `quietUpstreamNoise !== false`.\n   */\n  upstreamNoiseFiltered?: { total: number; byPattern: Record<string, number> };\n}\n\n/** Max WS connections in pool (NFR-11 default 8). */\nconst MAX_WS_POOL = 8;\n\n/** Module-level pool singleton (shared subagents D14). */\nconst pool = new Map<string, PoolEntry>();\n\n/**\n * Get-or-create HulyClient cho workspace.\n * WS: LRU evict khi pool > MAX_WS_POOL. REST: cached, no LRU.\n * Lazy reconnect: nếu client closed → recreate (simplified — KHÔNG backoff timing).\n */\nexport async function getClient(workspaceId: string): Promise<HulyClient> {\n  const existing = pool.get(workspaceId);\n  if (existing) {\n    existing.lastAccess = Date.now();\n    return existing.client;\n  }\n  // Cache miss → create\n  const creds = await getWorkspace(workspaceId);\n  if (!creds) {\n    throw new Error(`Workspace \"${workspaceId}\" not found in credentials. Run /huly init to add.`);\n  }\n  const config = await loadConfig();\n  const transport: Transport = config.transport ?? \"ws\";\n\n  // WS LRU evict nếu đạt maxSize\n  if (transport === \"ws\") {\n    const wsEntries = [...pool.values()].filter((e) => e.transport === \"ws\");\n    if (wsEntries.length >= MAX_WS_POOL) {\n      // Evict oldest by lastAccess\n      const oldest = wsEntries.sort((a, b) => a.lastAccess - b.lastAccess)[0];\n      if (oldest) {\n        await oldest.client.close().catch(() => {});\n        pool.delete(oldest.workspaceId);\n      }\n    }\n  }\n\n  const client = await createHulyClient(toCredentials(creds), transport);\n  // Pre-fetch currentUser để cache (D15) + verify connection healthy.\n  // Fail KHÔNG block pool — user available lazily qua client.getCurrentUser().\n  await client.getCurrentUser().catch(() => {});\n  pool.set(workspaceId, {\n    client,\n    workspaceId,\n    transport,\n    createdAt: Date.now(),\n    lastAccess: Date.now(),\n  });\n\n  return client;\n}\n\n/** Map WorkspaceCreds → HulyCredentials (url + ConnectOptions auth union). */\nfunction toCredentials(creds: WorkspaceCreds): HulyCredentials {\n  // WorkspaceCreds = {url,workspace} & AuthMethod = {url} & ConnectOptions = HulyCredentials.\n  return creds;\n}\n\n/**\n * Close all clients + clear pool. session_shutdown cleanup (FR-12).\n * Idempotent — safe to call multiple times.\n */\nexport async function closeAll(): Promise<void> {\n  const entries = [...pool.values()];\n  pool.clear();\n  await Promise.all(entries.map((entry) => entry.client.close().catch(() => {})));\n}\n\n/**\n * Health check cho /huly diagnostics.\n * - workspace given → check specific entry\n * - undefined → aggregate all entries\n */\nexport async function health(workspace?: string): Promise<HealthStatus[]> {\n  if (workspace) {\n    const entry = pool.get(workspace);\n    if (!entry) return [];\n    return [await entryHealth(entry)];\n  }\n  return Promise.all([...pool.values()].map(entryHealth));\n}\n\nasync function entryHealth(entry: PoolEntry): Promise<HealthStatus> {\n  let user: { id: string; name: string; email: string } | undefined;\n  let connected = true;\n  try {\n    user = await entry.client.getCurrentUser();\n  } catch {\n    connected = false;\n  }\n  // T-62 #67: module-level counter cross entry. Populated khi total > 0.\n  const counters = getUpstreamNoiseCounters();\n  const upstreamNoiseFiltered =\n    counters.total > 0 ? { total: counters.total, byPattern: counters.byPattern } : undefined;\n  return {\n    workspace: entry.workspaceId,\n    connected,\n    transport: entry.transport,\n    user,\n    ...(upstreamNoiseFiltered !== undefined ? { upstreamNoiseFiltered } : {}),\n  };\n}\n\n/** Test-only: clear pool without closing (cho unit test isolation). */\nexport function __clearPoolForTests(): void {\n  pool.clear();\n}\n\n/** Test-only: get pool size. */\nexport function __poolSizeForTests(): number {\n  return pool.size;\n}\n\n/** Test-only: get MAX_WS_POOL constant. */\nexport const __MAX_WS_POOL = MAX_WS_POOL;\n","// WorkspaceResolver + ProjectResolver — chain resolution (explicit > cwd-map > init).\n// Design: 04-system.md §6, 01-vision.md §B.8 D8 resolution chain.\n//\n// Resolution chain (no env vars per D8):\n//   resolveWorkspace: explicit param > cwd-map (config.resolveByCwd) > NeedsInitError\n//   resolveProject:   explicit param > cwd-map > undefined (caller prompt list_projects)\n//\n// Same-name diff-URL disambiguation: findByName returns multiple → NeedsDisambiguationError.\n\nimport { CREDENTIALS_PATH, findByName, getWorkspace } from \"./credentials.js\";\nimport { CONFIG_PATH, resolveByCwd, type ProjectBinding } from \"./config.js\";\n\n/** Context injected vào resolver (testability + tránh hard coupling). */\nexport type ResolverCtx = {\n  /** Current working directory (cwd) cho cwd-map resolution. */\n  cwd: string;\n  /** Override credentials path (test inject temp). Default: CREDENTIALS_PATH. */\n  credentialsPath?: string;\n  /** Override config path (test inject temp). Default: CONFIG_PATH. */\n  configPath?: string;\n};\n\n/**\n * Error: workspace explicit param hoặc cwd-map resolves tới same-name diff-URL.\n * Caller catch → prompt user chọn 1 trong matches.\n */\nexport class NeedsDisambiguationError extends Error {\n  readonly matches: Array<{ id: string; url: string; workspace: string }>;\n  constructor(matches: Array<{ id: string; url: string; workspace: string }>) {\n    super(\n      `Workspace name ambiguous: ${matches.length} workspaces match. ` +\n        `Specify one: ${matches.map((m) => `${m.id} (${m.url})`).join(\", \")}`,\n    );\n    this.name = \"NeedsDisambiguationError\";\n    this.matches = matches;\n  }\n}\n\n/**\n * Error: không resolve được workspace (no explicit, no cwd-map binding).\n * Caller catch → run /huly init flow.\n */\nexport class NeedsInitError extends Error {\n  constructor(message = \"No workspace resolved. Run /huly init to bind cwd.\") {\n    super(message);\n    this.name = \"NeedsInitError\";\n  }\n}\n\n/**\n * Resolve workspace id-handle cho tool call.\n * Chain:\n *   1. explicit param → lookup credentials (findByName → multi = NeedsDisambiguationError;\n *      single = return id; getWorkspace exact id = return)\n *   2. cwd-map → resolveByCwd(cwd)?.workspace → return binding.workspace\n *   3. KHÔNG có → throw NeedsInitError\n */\nexport async function resolveWorkspace(\n  explicit?: string,\n  ctx: ResolverCtx = { cwd: process.cwd() },\n): Promise<string> {\n  const credPath = ctx.credentialsPath ?? CREDENTIALS_PATH;\n  const configPath = ctx.configPath ?? CONFIG_PATH;\n\n  // 1. Explicit param\n  if (explicit !== undefined && explicit.length > 0) {\n    // Try exact id first\n    const byId = await getWorkspace(explicit, credPath);\n    if (byId !== undefined) {\n      return explicit;\n    }\n    // Try findByName (multi-result possible)\n    const matches = await findByName(explicit, credPath);\n    if (matches.length === 1) {\n      return matches[0].id;\n    }\n    if (matches.length > 1) {\n      throw new NeedsDisambiguationError(\n        matches.map((m) => ({ id: m.id, url: m.url, workspace: m.workspace })),\n      );\n    }\n    throw new NeedsInitError(\n      `Workspace \"${explicit}\" not found in credentials. Run /huly init to add it.`,\n    );\n  }\n\n  // 2. cwd-map\n  const binding = await resolveByCwd(ctx.cwd, configPath);\n  if (binding !== undefined) {\n    // NOTE: intentional — KHÔNG verify workspace còn tồn tại trong credentials\n    // ở đây. Credential staleness (binding tồn tại nhưng workspace bị remove)\n    // là trách nhiệm client/pool (T-05/T-06), không phải resolver.\n    return binding.workspace;\n  }\n\n  // 3. No resolution\n  throw new NeedsInitError();\n}\n\n/**\n * Resolve project id cho tool call.\n * Chain:\n *   1. explicit param → return as-is\n *   2. cwd-map → resolveByCwd(cwd)?.project → return binding.project\n *   3. KHÔNG có → return undefined (caller prompt list_projects)\n */\nexport async function resolveProject(\n  explicit?: string,\n  ctx: ResolverCtx = { cwd: process.cwd() },\n): Promise<string | undefined> {\n  // 1. Explicit param\n  if (explicit !== undefined && explicit.length > 0) {\n    return explicit;\n  }\n\n  // 2. cwd-map\n  const configPath = ctx.configPath ?? CONFIG_PATH;\n  const binding: ProjectBinding | undefined = await resolveByCwd(ctx.cwd, configPath);\n  if (binding !== undefined) {\n    return binding.project;\n  }\n\n  // 3. No resolution → undefined (caller prompt)\n  return undefined;\n}\n","// confirmGate — confirmDestructive cho destructive ops (FR-09 D9).\n// Design: 04-system.md §6 tools/confirm.ts, 01 §B.9 D9, 06-api.md §6 confirm flow.\n//\n// Behavior:\n//   ctx.hasUI === true (TUI/RPC) → ctx.ui.confirm prompt — user choose yes/no\n//   ctx.hasUI === false (print/json/CI) → auto-deny (KHÔNG bypass — 05 §4 safety)\n//\n// Confirm KHÔNG bypass: non-TUI mode deny mọi destructive op (NFR-10 safety).\n\nimport type { ExtensionContext } from \"@oh-my-pi/pi-coding-agent\";\n\n/** Detail object cho confirm prompt. */\nexport interface ConfirmContext {\n  /** Type entity bị xóa (vd \"issue\", \"document\", \"project\"). */\n  type: string;\n  /** Identifier (vd \"PD-123\", doc id). */\n  id: string;\n  /** Optional extra detail (vd cascade count \"Cascade: 5 items\"). */\n  detail?: string;\n}\n\n/**\n * Confirm destructive operation với user (FR-09 D9).\n *\n * @param ctx Pi extension context (cho hasUI check + ui.confirm)\n * @param c   Confirm context: type + id + optional detail\n * @returns true nếu user confirmed, false nếu denied HOẶC non-TUI auto-deny\n *\n * Non-TUI (print/json/CI, ctx.hasUI===false) → auto-deny KHÔNG bypass.\n */\nexport async function confirmDestructive(\n  ctx: ExtensionContext,\n  c: ConfirmContext,\n): Promise<boolean> {\n  // Non-TUI → auto-deny (KHÔNG bypass — NFR-10)\n  if (ctx.hasUI !== true) {\n    return false;\n  }\n\n  const title = `Delete ${c.type}`;\n  const message =\n    c.detail !== undefined && c.detail.length > 0\n      ? `Delete ${c.type} \"${c.id}\"? ${c.detail}`\n      : `Delete ${c.type} \"${c.id}\"?`;\n\n  try {\n    return await ctx.ui.confirm(title, message);\n  } catch {\n    // UI error (e.g. dialog dismissed) → treat as deny (safe default)\n    return false;\n  }\n}\n","// toolBuilder — single seam cho mọi Huly tool (defineHulyTool).\n// Design: 04-system.md §6 tools/builder.ts, 06-api.md §1 Tool Interface Pattern,\n// 01-vision §B.4 D4 (~102 tools), §B.5 D5 (huly_ prefix).\n//\n// defineHulyTool tự động:\n//   - prefix `huly_` (D5 FR-02)\n//   - resolve workspace + project từ params (FR-06 chain: explicit > cwd-map)\n//   - getClient từ pool (D14 shared)\n//   - error map → AgentToolResult isError (FR-14, 08 §A no-leak)\n//   - confirm gate nếu destructive (FR-09 D9)\n//   - assignee default cho tool khai báo needsAssignee (D15 FR-18)\n//\n// Domain module chỉ khai báo opts (schema + handler thuần), builder lo phần binding.\n\nimport type { ExtensionContext } from \"@oh-my-pi/pi-coding-agent\";\nimport { z } from \"zod\";\nimport { getClient } from \"../client/pool.js\";\nimport { mapError, sanitize } from \"../client/errors.js\";\nimport type { HulyClient, CurrentUser } from \"../client/client.js\";\nimport {\n  resolveProject,\n  resolveWorkspace,\n  NeedsDisambiguationError,\n  NeedsInitError,\n  type ResolverCtx,\n} from \"../config/resolver.js\";\nimport { confirmDestructive, type ConfirmContext } from \"./confirm.js\";\n\n/** Tool parameter schema phải là ZodObject (z.object) cho LLM-callable. */\nexport type ToolParams = z.ZodObject<z.ZodRawShape>;\n\n/** Error class identifier (re-export từ errors.ts — single source). */\nexport type { ErrorClass, HulyError } from \"../client/errors.js\";\n\n/**\n * Huly tool context — passed vào handler sau khi builder resolve binding.\n * Handler nhận client đã kết nối + resolved workspace/project, KHÔNG phải tự lookup.\n */\nexport interface HulyToolContext {\n  /** Pi extension context (ui, cwd, hasUI, ...). */\n  ctx: ExtensionContext;\n  /** Resolved workspace id-handle (đã qua FR-06 chain). */\n  workspace: string;\n  /** Resolved project identifier (FR-06 chain; undefined nếu tool không cần project). */\n  project: string | undefined;\n  /** Current user (cached sau getClient — D15 default assignee source). */\n  currentUser: CurrentUser;\n  /** HulyClient đã kết nối (cho handler gọi CRUD). */\n  client: HulyClient;\n}\n\n/**\n * Result trả về từ handler. Builder convert sang AgentToolResult.\n * - `content` text cho LLM (≤ 50KB / 2000 lines — pi truncate)\n * - `details` structured cho render + state (entity shapes từ 05-data-model.md)\n * - `isError?` true → LLM thấy error\n */\nexport interface HulyToolResult<TDetails = unknown> {\n  /** Human-readable text cho LLM. */\n  content: string;\n  /** Structured details cho render + downstream. */\n  details?: TDetails;\n  /** True nếu result là error (builder wrap message + isError=true). */\n  isError?: boolean;\n}\n\n/**\n * Handler signature cho Huly tool.\n * - `params`: validated theo schema (Zod z.infer<P>)\n * - `toolCtx`: resolved binding (client + workspace + project + user)\n * - Return HulyToolResult (builder convert sang AgentToolResult)\n *\n * TDetails default `unknown` — caller KHÔNG cần khai báo, return type flexible.\n */\nexport type HulyToolHandler<P extends ToolParams, TDetails = unknown> = (\n  params: z.infer<P>,\n  toolCtx: HulyToolContext,\n) => Promise<HulyToolResult<TDetails>>;\n\n/** Re-export HulyClient type cho domain consumer. */\nexport type { HulyClient, CurrentUser } from \"../client/client.js\";\n/** Re-export ResolverCtx cho consumer (test mock). */\nexport type { ResolverCtx, NeedsInitError, NeedsDisambiguationError } from \"../config/resolver.js\";\n\n/**\n * defineHulyTool options — domain module chỉ khai báo này.\n * Builder wrap thành ToolDefinition cho pi.registerTool.\n *\n * TDetails default `unknown` — domain KHÔNG cần khai báo. Handler return type flexible\n * (nhiều shape success/error/not-found → TDetails cố định gây union conflict).\n */\nexport interface DefineHulyToolOptions<P extends ToolParams = ToolParams, TDetails = unknown> {\n  /** Tool name KHÔNG có prefix `huly_` — builder tự thêm (D5). VD: \"create_issue\". */\n  name: string;\n  /** Human-readable label cho UI. */\n  label: string;\n  /** Description cho LLM (khi nào gọi, input shape mong đợi). */\n  description: string;\n  /** Optional 1 dòng snippet cho system prompt \"Available tools\" section. */\n  promptSnippet?: string;\n  /** Optional guideline bullets appended to system prompt. */\n  promptGuidelines?: string[];\n  /** Parameter schema (Zod z.object). */\n  parameters: P;\n  /** Handler thuần — nhận resolved binding, return HulyToolResult. */\n  handler: (params: z.infer<P>, toolCtx: HulyToolContext) => Promise<HulyToolResult<TDetails>>;\n  /** True → confirm gate (FR-09 D9). Builder call confirmDestructive trước handler. */\n  destructive?: boolean;\n  /**\n   * Detail object cho confirm prompt (khi destructive=true).\n   * Builder call confirmDestructive({ type, id, detail }).\n   */\n  destructiveContext?: (params: z.infer<P>) => ConfirmContext;\n  /**\n   * True → tool cần project resolved (issues/milestones/components/templates).\n   * False → tool global (workspaces, search, contacts, ...).\n   * Default: false (handler tự resolve nếu cần).\n   */\n  needsProject?: boolean;\n  /**\n   * True → tool có assignee?/owner? param cần auto-resolve currentUser khi absent (D15 FR-18).\n   * Builder resolve trước khi pass params vào handler (param `assignee` filled).\n   */\n  needsAssignee?: boolean;\n  /**\n   * Field name chứa assignee (default \"assignee\"). Builder fill params[fieldName] = email khi absent.\n   */\n  assigneeField?: string;\n}\n\n/**\n * Pi ToolDefinition-compatible shape (subset — builder output).\n * Domain modules return HulyToolDefinition[]; register.ts call pi.registerTool\n * (cast qua ToolDefinition full khi register — bổ sung execute signature chuẩn).\n */\nexport interface HulyToolDefinition<P extends ToolParams = ToolParams, TDetails = unknown> {\n  name: string;\n  label: string;\n  description: string;\n  promptSnippet?: string;\n  promptGuidelines?: string[];\n  parameters: P;\n  execute: (\n    toolCallId: string,\n    params: z.infer<P>,\n    signal: AbortSignal | undefined,\n    onUpdate:\n      | ((partialResult: {\n          content: Array<{ type: \"text\"; text: string }>;\n          details: TDetails;\n          isError?: true;\n        }) => void)\n      | undefined,\n    ctx: ExtensionContext,\n  ) => Promise<{\n    content: Array<{ type: \"text\"; text: string }>;\n    details: TDetails;\n    isError?: true;\n  }>;\n}\n\n/**\n * Build Huly tool từ declaration → pi ToolDefinition-compatible.\n *\n * Flow execute (chạy khi LLM gọi tool):\n *   1. Resolve workspace (params.workspace > cwd-map > NeedsInitError → error result)\n *   2. Resolve project nếu needsProject (params.project > cwd-map > undefined)\n *   3. getClient(workspace) từ pool\n *   4. Nếu needsAssignee + params[fieldName] absent → resolveAssignee (D15)\n *   5. Nếu destructive → confirmDestructive; deny → return \"cancelled\"\n *   6. Call handler(params, { ctx, client, workspace, project, currentUser })\n *   7. Handler throw → mapError → error result (FR-14, 08 §A no-leak)\n *   8. Handler return HulyToolResult → convert sang AgentToolResult shape\n */\nexport function defineHulyTool<P extends ToolParams>(\n  opts: DefineHulyToolOptions<P, unknown>,\n): HulyToolDefinition<P, unknown> {\n  const fullName = `huly_${opts.name}`;\n  const assigneeField = opts.assigneeField ?? \"assignee\";\n  const needsProject = opts.needsProject === true;\n  const needsAssignee = opts.needsAssignee === true;\n\n  return {\n    name: fullName,\n    label: opts.label,\n    description: opts.description,\n    promptSnippet: opts.promptSnippet,\n    promptGuidelines: opts.promptGuidelines,\n    parameters: opts.parameters,\n\n    async execute(_toolCallId, rawParams, _signal, _onUpdate, ctx) {\n      const params = { ...(rawParams as z.infer<P>) } as Record<string, unknown>;\n      const resolverCtx: ResolverCtx = { cwd: ctx.cwd };\n\n      // 1. Resolve workspace\n      let workspace: string;\n      try {\n        workspace = await resolveWorkspace(\n          typeof params.workspace === \"string\" ? params.workspace : undefined,\n          resolverCtx,\n        );\n      } catch (e) {\n        return toErrorResult(e);\n      }\n\n      // 2. Resolve project nếu cần\n      let project: string | undefined;\n      if (needsProject) {\n        try {\n          project = await resolveProject(\n            typeof params.project === \"string\" ? params.project : undefined,\n            resolverCtx,\n          );\n        } catch (e) {\n          return toErrorResult(e);\n        }\n      }\n\n      // 3. getClient từ pool\n      let client: HulyClient;\n      try {\n        client = await getClient(workspace);\n      } catch (e) {\n        return toErrorResult(e);\n      }\n\n      // 4. Current user (cached — D15)\n      let currentUser: CurrentUser;\n      try {\n        currentUser = await client.getCurrentUser();\n      } catch (e) {\n        return toErrorResult(e);\n      }\n\n      // 5. Auto-resolve assignee nếu cần + absent (D15 FR-18)\n      // Dùng currentUser đã fetch ở step 4 (cached — single source = Huly).\n      if (needsAssignee) {\n        const current = params[assigneeField];\n        if (current === undefined || current === null || current === \"\") {\n          params[assigneeField] = currentUser.email;\n        }\n      }\n\n      // 6. Confirm gate (FR-09 D9) — non-TUI auto-deny (KHÔNG bypass)\n      if (opts.destructive === true) {\n        let destructiveCtx: ConfirmContext;\n        if (opts.destructiveContext) {\n          try {\n            destructiveCtx = opts.destructiveContext(rawParams as z.infer<P>);\n          } catch {\n            // destructiveContext throw (domain bug) → fallback safe defaults\n            destructiveCtx = { type: opts.name, id: \"<unknown>\" };\n          }\n        } else {\n          destructiveCtx = { type: opts.name, id: \"<unknown>\" };\n        }\n        const confirmed = await confirmDestructive(ctx, destructiveCtx);\n        if (!confirmed) {\n          return {\n            content: [\n              {\n                type: \"text\",\n                text: `Cancelled: ${opts.name} requires confirmation.`,\n              },\n            ],\n            details: { cancelled: true, tool: fullName },\n            isError: true,\n          };\n        }\n      }\n\n      // 7. Call handler\n      try {\n        const result = await opts.handler(params as z.infer<P>, {\n          ctx,\n          workspace,\n          project,\n          currentUser,\n          client,\n        });\n        // 8. Convert HulyToolResult → AgentToolResult shape\n        // Sanitize content (08 §A no-leak) — handler có thể return entity có\n        // token user paste (vd issue description). Success path cũng strip.\n        const contentText = sanitize(result.content);\n        // T-92 (#138): LUÔN append details summary vào content cho LLM — KHÔNG\n        // gate theo hasUI. Trước đây gate `hasUI !== true` khiến TUI mode drop\n        // details cho ~99 tool (chỉ 3 tool có renderResult hook: get_issue /\n        // list_issues / get_document), model thấy count-only → không drive được\n        // tool follow-up (list_issues không trả identifier, list_tags không _id,\n        // fulltext_search không identifier, add_comment/create_todo không id, …).\n        // Render hook (3 tool) vẫn consume details cho UI user; content (model)\n        // giờ cũng thấy → khác audience, KHÔNG xung đột. Append bị cap\n        // LLM_ARRAY_CAP + sanitize mỗi field. Error path KHÔNG append (content\n        // error message đã đủ, tránh noise).\n        const finalContent =\n          result.isError !== true ? appendDetailsForLLM(contentText, result.details) : contentText;\n        return {\n          content: [{ type: \"text\", text: finalContent }],\n          details: result.details ?? {},\n          isError: result.isError === true ? true : undefined,\n        };\n      } catch (e) {\n        return toErrorResult(e);\n      }\n    },\n  };\n}\n\n/**\n * Số item tối đa khi serialize array details → content text (T-40).\n * Tránh bloat context khi list trả nhiều (list_issues limit 50, có thể lớn hơn).\n */\nconst LLM_ARRAY_CAP = 30;\n\n/**\n * Append summary của `details` vào content text cho non-TUI path (T-40 #22 #26).\n *\n * Heuristic shape-aware (KHÔNG schema per-tool — 1 seam generic):\n * - Detect MỌI array field (vd `issues`, `members`, `attachments`, `tags`, ...)\n *   KHÔNG whitelist — iterate toàn bộ keys, kiểm `Array.isArray`. Serialize\n *   cap top `LLM_ARRAY_CAP` + đuôi \"... và N khác\". Lưu ý: handler nào đặt\n *   array lớn binary/debug vào details (vd `chunks`) cũng sẽ serialize —\n *   domain tránh pattern đó.\n * - Detect field `id`/`_id`/`identifier` (entity vừa create) → append dạng\n *   `id: <val>`.\n * - Bỏ qua field meta trống/count trùng (count đã trong content gốc nhiều case).\n *\n * Return text đã append (content gốc + \"\\n\" + summary). Nếu details rỗng/không\n * có gì hữu ích → return content gốc y nguyên.\n */\nfunction appendDetailsForLLM(content: string, details: unknown): string {\n  if (details === null || details === undefined) return content;\n  if (typeof details !== \"object\") return content;\n  const d = details as Record<string, unknown>;\n  const keys = Object.keys(d);\n  if (keys.length === 0) return content;\n\n  const lines: string[] = [];\n\n  // 1. Array fields: serialize cap top items\n  const seenArrays = new Set<string>();\n  for (const k of keys) {\n    const v = d[k];\n    if (Array.isArray(v) && v.length > 0) {\n      seenArrays.add(k);\n      const items = v.slice(0, LLM_ARRAY_CAP);\n      const remaining = v.length - items.length;\n      const serialized = items\n        .map((item, idx) => {\n          if (item !== null && typeof item === \"object\") {\n            const obj = item as Record<string, unknown>;\n            // Pick most useful fields cho LLM (identifier/id + title/name + status)\n            const ident = (obj.identifier ?? obj._id ?? obj.id) as string | undefined;\n            const title = (obj.title ?? obj.name ?? obj.label) as string | undefined;\n            const status = (obj.status ?? obj.priority) as string | undefined;\n            const parts: string[] = [];\n            // Sanitize mỗi field (08 §A NFR-04) — details có thể chứa token\n            // user paste (vd issue title có secret). Tránh leak qua non-TUI path.\n            if (ident !== undefined) parts.push(sanitize(String(ident)));\n            if (title !== undefined) parts.push(sanitize(String(title)));\n            if (status !== undefined) parts.push(`[${sanitize(String(status))}]`);\n            return parts.length > 0 ? `  ${idx + 1}. ${parts.join(\" — \")}` : null;\n          }\n          return `  ${idx + 1}. ${sanitize(String(item))}`;\n        })\n        .filter((line): line is string => line !== null);\n      if (serialized.length > 0) {\n        lines.push(`${k} (${v.length}):`);\n        lines.push(...serialized);\n        if (remaining > 0) {\n          lines.push(`  ... và ${remaining} khác.`);\n        }\n      }\n    }\n  }\n\n  // 2. Scalar id-like fields (entity create): id/_id/identifier + title/name.\n  // CHỈ khi chưa có array nào chiếm chỗ (tránh lặp cho list). Hiển thị TẤT CẢ\n  // id-like field (LLM cần `_id` raw cho 1 số tool, `identifier` human-friendly cho\n  // tool khác — vd create_issue trả _id internal + identifier PD-42).\n  if (seenArrays.size === 0) {\n    const idCandidates: Array<[string, unknown]> = [\n      [\"identifier\", d.identifier],\n      [\"_id\", d._id],\n      [\"id\", d.id],\n    ];\n    const idFields = idCandidates.filter(\n      (pair): pair is [string, unknown] => pair[1] !== undefined && pair[1] !== null,\n    );\n    const parts: string[] = [];\n    for (const [k, v] of idFields) {\n      const sv = sanitize(String(v));\n      // Skip nếu id đã xuất hiện trong content (tránh duplicate)\n      if (!content.includes(sv)) {\n        parts.push(`${k}: ${sv}`);\n      }\n    }\n    const title = (d.title ?? d.name ?? d.label) as string | undefined;\n    if (title !== undefined) {\n      const st = sanitize(String(title));\n      if (!content.includes(st)) {\n        parts.push(`title: ${st}`);\n      }\n    }\n    if (parts.length > 0) {\n      lines.push(parts.join(\" · \"));\n    }\n  }\n\n  if (lines.length === 0) return content;\n  return `${content}\\n${lines.join(\"\\n\")}`;\n}\n\n/**\n * Convert error → AgentToolResult với isError=true (FR-14, 08 §A no-leak).\n * Resolver errors (NeedsInit/NeedsDisambiguation) → clear recovery hint.\n * HulyError khác → mapError classify + sanitize.\n */\nfunction toErrorResult<TDetails = unknown>(\n  e: unknown,\n): {\n  content: Array<{ type: \"text\"; text: string }>;\n  details: TDetails;\n  isError: true;\n} {\n  // Resolver errors — clear hint cho LLM\n  if (e instanceof NeedsInitError) {\n    return {\n      content: [{ type: \"text\", text: e.message }],\n      details: { errorClass: \"Auth\", kind: \"NeedsInit\" } as unknown as TDetails,\n      isError: true,\n    };\n  }\n  if (e instanceof NeedsDisambiguationError) {\n    return {\n      content: [\n        {\n          type: \"text\",\n          text: `Workspace ambiguous: ${e.matches\n            .map((m) => `${m.id} (${m.url})`)\n            .join(\", \")}. Specify workspace param.`,\n        },\n      ],\n      details: {\n        errorClass: \"Auth\",\n        kind: \"NeedsDisambiguation\",\n        matches: e.matches,\n      } as unknown as TDetails,\n      isError: true,\n    };\n  }\n\n  // HulyError + PlatformError + network → mapError classify + sanitize\n  const hulyErr = mapError(e);\n  // T-57 #61: UnavailableError (domain not found) → render honest message với\n  // class ref thật + recovery hint, distinct generic InternalError. Dùng duck-type\n  // `class === \"Unavailable\"` (taxonomy identity) thay `instanceof` — compatible\n  // với test mock (mock tạo object cùng shape, KHÔNG phải subclass thật).\n  if (hulyErr.class === \"Unavailable\") {\n    const cls = (hulyErr as { hulyClass?: string }).hulyClass ?? \"<unknown>\";\n    return {\n      content: [\n        {\n          type: \"text\",\n          text:\n            `[UnavailableError] ${sanitize(hulyErr.message)}\\n\\n` +\n            `Recovery: kiểm tra workspace đã enable package chứa class \"${cls}\". ` +\n            `Nếu workspace OK → report bug pi-huly (sai class ref) kèm Huly version.`,\n        },\n      ],\n      details: { errorClass: \"Unavailable\", hulyClass: cls } as unknown as TDetails,\n      isError: true,\n    };\n  }\n  return {\n    content: [{ type: \"text\", text: `[${hulyErr.class}Error] ${sanitize(hulyErr.message)}` }],\n    details: { errorClass: hulyErr.class } as unknown as TDetails,\n    isError: true,\n  };\n}\n\n// Re-export sub-modules cho domain single-import.\nexport { confirmDestructive } from \"./confirm.js\";\nexport type { ConfirmContext } from \"./confirm.js\";\n// Re-export sanitize + LEAK_PATTERNS centralized (cho domain tool muốn sanitize custom output).\nexport { sanitize, LEAK_PATTERNS } from \"../client/errors.js\";\n","// Huly _class refs — string literal cast `as never` (branded Ref<T> bypass).\n// Centralized ở đây để domain modules KHÔNG lặp pattern, dễ search/audit.\n// Runtime: Huly packages có đầy đủ tracker/contact/document/..., pi-huly chỉ\n// dùng string literal (packages KHÔNG trong bundle, only runtime).\n//\n// T-43 fix (2026-07-27): re-verified class refs từ @hcengineering/*@0.7.423\n// source map (npm tarball extraction). Source of truth:\n// docs/design/11-runtime-audit.md. 6+ class broken root cause từng loại riêng\n// (mixin vs class / cross-package import / rename / base abstract).\n//\n// T-58 fix (2026-07-28): DEEP-AUDIT 12 packages @0.7.423 — verify plugin()\n// class block registration (KHÔNG chỉ interface existence). Key findings:\n//   - Document interface exists trong tracker source NHƯNG KHÔNG register class\n//     → `tracker:class:Document` runtime fail (interface orphan). Document search\n//     marked honest-unavailable (T-60).\n//   - Label: 0 match toàn packages → deprecated (Huly dùng TagElement).\n//   - TsRelation: 0 match → Issue.relations inline RelatedDocument[] (T-59\n//     refactor $push/$pull inline, xóa TS_RELATION_CLASS dead code).\n//   - DocumentSnapshot: 0 match → deprecated (T-58 honest-unavailable).\n//   - Space base abstract → Teamspace = drive:class:Drive (T-54).\n\n/**\n * Cast plain string thành Huly _class Ref (branded type bypass).\n * Runtime: string. Compile-time: Ref<T> (KHÔNG break generic constraint).\n */\nexport function classRef(ref: string): never {\n  return ref as never;\n}\n\n/** Cast plain string thành Huly _id Ref (branded type bypass). */\nexport function idRef(id: string): never {\n  return id as never;\n}\n\n/** Cast plain string thành Huly space Ref. */\nexport function spaceRef(space: string): never {\n  return space as never;\n}\n\n// === Domain class refs (verified từ @hcengineering/*@0.7.423 source map, 2026-07-27) ===\n\n// contact (Persons + Employee mixin)\n// Person/Contact = class. Employee = mixin (KHÔNG phải class — runtime lookup\n// khác → \"domain not found\" nếu query như class).\nexport const PERSON_CLASS = classRef(\"contact:class:Person\");\nexport const EMPLOYEE_CLASS = classRef(\"contact:mixin:Employee\"); // T-43: class → mixin\nexport const CONTACT_CLASS = classRef(\"contact:class:Contact\");\n// T-82G #108: Channel = email/phone provider attachments on Person.\n// Email resolve: findOne(Channel, {value: email, provider: Email}).\nexport const CHANNEL_CLASS = classRef(\"contact:class:Channel\");\nexport const EMAIL_PROVIDER = \"contact:channelProvider:Email\";\n\n// tracker (Issues/Milestones/Components/Projects — extends Task)\n// Issue/Milestone/Component/Project/IssueStatus/IssueTemplate/TimeSpendReport\n// define trong tracker package source (extends Task từ task package).\nexport const ISSUE_CLASS = classRef(\"tracker:class:Issue\");\nexport const MILESTONE_CLASS = classRef(\"tracker:class:Milestone\");\nexport const COMPONENT_CLASS = classRef(\"tracker:class:Component\");\nexport const PROJECT_CLASS = classRef(\"tracker:class:Project\");\nexport const ISSUE_STATUS_CLASS = classRef(\"tracker:class:IssueStatus\");\nexport const ISSUE_TEMPLATE_CLASS = classRef(\"tracker:class:IssueTemplate\");\nexport const TIME_SPEND_REPORT_CLASS = classRef(\"tracker:class:TimeSpendReport\"); // T-43: activity → tracker (verify runtime)\n\n// task (Task/TaskType/ProjectType — generic task model, tracker extends)\n// TaskType/ProjectType defined trong @hcengineering/task, import vào tracker.\n// Pi-huly đoán tracker pkg → sai domain.\nexport const TASK_TYPE_CLASS = classRef(\"task:class:TaskType\"); // T-43: tracker → task\nexport const PROJECT_TYPE_CLASS = classRef(\"task:class:ProjectType\"); // T-43: tracker → task\n// T-86 #121: Mixin doc + task.mixin.TaskTypeClass — UNVERIFIED (task pkg not\n// installed locally, không runtime self-host). Refs theo Huly naming convention\n// `<plugin>:<kind>:<Name>` (same convention verified core:space:Model, core:class:Space).\nexport const MIXIN_CLASS = classRef(\"core:class:Mixin\");\nexport const TASK_TYPE_MIXIN = classRef(\"task:mixin:TaskTypeClass\");\nexport const CLASSIFIER_KIND_MIXIN = 2; // ClassifierKind.MIXIN (numeric enum)\nexport const MODEL_LABEL_PREFIX = \"embedded:embedded:\"; // getEmbeddedLabel() format\n\n// Document / Teamspace / DocumentSnapshot — T-65 (2026-07-28): SUPERSEDES\n// T-58 interface-orphan conclusion. Real class registered trong\n// `@hcengineering/document` plugin() (KHÔNG phải tracker). T-58 audited chỉ\n// tracker package + missed document package. Verified vs trusted huly-mcp v0.45\n// (`/tmp/huly-mcp-trusted/src/huly/huly-plugins.ts` loads\n// `@hcengineering/document` → `documentPlugin.class.{Document,Teamspace,\n// DocumentSnapshot}`). Server-side: standard Huly installation bundles document\n// plugin → string ref resolves. Pi-huly dùng string literal (giống tất cả class\n// khác) — KHÔNG cần load plugin client-side (server resolves class by string).\nexport const DOCUMENT_CLASS = classRef(\"document:class:Document\"); // T-65: tracker → document pkg\nexport const TEAMSPACE_CLASS = classRef(\"document:class:Teamspace\"); // T-65: expose (từ document pkg)\nexport const DOCUMENT_SNAPSHOT_CLASS = classRef(\"document:class:DocumentSnapshot\");\n\n// Teamspace create refs (T-78): verified runtime = plain string literals\n// (plugin() factory prefixes `<pluginId>:<category>:<name>`). KHÔNG cần bundle\n// document plugin — same string-literal pattern as class refs.\nexport const TEAMSPACE_ICON = \"document:icon:Teamspace\";\nexport const DEFAULT_TEAMSPACE_TYPE = \"document:spaceType:DefaultTeamspaceType\";\n// T-doc-parent: top-level Document parent marker. Web Documents tree query\n// top-level = { parent: \"document:ids:NoParent\" }. Doc KHÔNG set field này (absent)\n// hay set \"\" → bị loại khỏi sidebar tree (chỉ search thấy). = documentPlugin.ids.NoParent.\n// Verified vs doc thật + huly-mcp createDocument. Port pi-huly beta.19 (#162).\nexport const DOCUMENT_NO_PARENT = \"document:ids:NoParent\";\n// Top-level spaces (Teamspace/Drive/Project) dùng core.space.Space làm parent.\nexport const SPACE_PARENT = spaceRef(\"core:space:Space\");\n\n// Space — base abstract class trong @hcengineering/core.\n// READ-ONLY SAFE: findAll/findOne trên SPACE_CLASS trả subclasses qua inheritance\n// (list_teamspaces/get_teamspace OK cross all space types). T-66 sẽ switch\n// list_teamspaces sang TEAMSPACE_CLASS (chỉ trả Teamspace, không lẫn Project/\n// Drive/ChunterSpace).\nexport const SPACE_CLASS = classRef(\"core:class:Space\");\n// T-54: drive:class:Drive = Documents/Files Teamspace thật (extends TypedSpace,\n// có SpaceTypeDescriptor). Register trong drive plugin() class block line 31.\nexport const DRIVE_CLASS = classRef(\"drive:class:Drive\");\n\n// T-67 (2026-07-28): refs cho create_* AttachedDoc + Project Type.\n// Huly convention <plugin>:<category>:<key> (giống class refs).\n// NoParent = empty ref sentinel (trusted issues-parent.ts:21 tracker.ids.NoParent=\"\").\nexport const NO_PARENT_REF = idRef(\"\");\n// Issue.kind = tracker.taskTypes.Issue (trusted issues-write.ts:168).\nexport const ISSUE_KIND_REF = classRef(\"tracker:taskTypes:Issue\");\n// Project.type (TypedSpace) = tracker.ids.ClassingProjectType (trusted projects.ts:185).\nexport const CLASSIC_PROJECT_TYPE_REF = classRef(\"tracker:ids:ClassingProjectType\");\n\n// chunter (Comments = ChatMessage)\nexport const CHAT_MESSAGE_CLASS = classRef(\"chunter:class:ChatMessage\");\n\n// attachment (Attachments)\nexport const ATTACHMENT_CLASS = classRef(\"attachment:class:Attachment\");\n\n// tags (TagElement = entity thật, NOT \"Tag\")\n// Huly thiết kế: TagElement = tag entity, TagReference = ref trong doc, TagCategory = group.\nexport const TAG_CLASS = classRef(\"tags:class:TagElement\"); // T-43: Tag → TagElement\nexport const TAG_REFERENCE_CLASS = classRef(\"tags:class:TagReference\"); // T-69: AttachedDoc cho tag attachments\nexport const TAG_CATEGORY_CLASS = classRef(\"tags:class:TagCategory\");\n\n// T-73: core.space.Model = root model space (workflow docs IssueStatus/TaskType\n// live here, KHÔNG project space). Verified trusted task-management.ts.\nexport const MODEL_SPACE = spaceRef(\"core:space:Model\");\n\n// T-81 #104: Status base class (task.class.Status alias core.class.Status).\n// Trusted issues-shared.ts:281 resolve statuses qua core.class.Status + batch $in\n// (KHÔNG findOne IssueStatus per ref — \"can fail on some workspaces\").\nexport const STATUS_CLASS = classRef(\"core:class:Status\");\n\n// T-73: StatusCategory Ref<StatusCategory> map (5 values, format task:statusCategory:<Key>).\n// IssueStatus.category = Ref<StatusCategory> (KHÔNG enum string). Verified T-71 + trusted.\nexport const STATUS_CATEGORY_REFS: Record<string, string> = {\n  UnStarted: \"task:statusCategory:UnStarted\",\n  ToDo: \"task:statusCategory:ToDo\",\n  Active: \"task:statusCategory:Active\",\n  Won: \"task:statusCategory:Won\",\n  Lost: \"task:statusCategory:Lost\",\n};\n\n// T-73: IssueStatus.ofAttribute required field (Ref<Attribute<Status>>).\n// Trusted hardcodes tracker.attribute.IssueStatus cho issue statuses.\nexport const ISSUE_STATUS_ATTRIBUTE = \"tracker:attribute:IssueStatus\";\n\n// view — T-58 DEEP-AUDIT: Label KHÔNG tồn tại trong 12 packages (0 match).\n// Deprecated — Huly dùng TagElement (tags:class:TagElement) cho tag/label entity.\n// Labels tools refactor dùng TAG_CLASS (T-45 pattern đã verify).\nexport const LABEL_CLASS = classRef(\"view:class:Label\");\n\n// time (ToDo — chữ viết hoa D, NOT \"Todo\")\n// ToDo extends AttachedDoc, define trong @hcengineering/time (KHÔNG phải task).\nexport const TODO_CLASS = classRef(\"time:class:ToDo\"); // T-43: task:Todo → time:ToDo\n// T-79 #102: ProjectToDo = subclass cho issue-attached todo (KHÔNG base ToDo).\n// Verified trusted huly-mcp planner.ts: createIssueTodo dùng time.class.ProjectToDo.\nexport const PROJECT_TODO_CLASS = classRef(\"time:class:ProjectToDo\");\n// T-79 #102: shared space cho mọi todo (KHÔNG issue.space). Trusted planner.ts:141.\nexport const TODOS_SPACE = spaceRef(\"time:space:ToDos\");\n// T-93b #139: workspace ROOT space cho workspace-global docs (TagCategory).\n// Probe live: 25 tag-categories đều space=\"core:space:Workspace\". Trước đây\n// create_tag_category dùng spaceRef(tctx.workspace) (handle string) → orphan.\nexport const WORKSPACE_SPACE = spaceRef(\"core:space:Workspace\");\n\n// T-59 (2026-07-28): TS_RELATION_CLASS XÓA — Issue relations KHÔNG phải class\n// riêng. Issue.relations?: RelatedDocument[] + Issue.blockedBy?: RelatedDocument[]\n// inline (RelatedDocument = Pick<Doc, '_id' | '_class'>). add/remove/list dùng\n// $push/$pull trực tiếp trên Issue, KHÔNG addCollection.\n","// Common Zod schemas cho domain tools — tránh lặp.\n// 06-api.md §2 Common Parameters Convention.\n\nimport { z } from \"zod\";\nimport type { Class, Doc, DocumentUpdate, Ref, Space, TxResult } from \"@hcengineering/api-client\";\nimport type { HulyClient } from \"../../client/client.js\";\nimport type { HulyToolResult } from \"../builder.js\";\nimport { PROJECT_CLASS, PROJECT_TYPE_CLASS, STATUS_CLASS } from \"./_class-refs.js\";\n\n/** Workspace override param (mọi tool). */\nexport const workspaceParam = z.optional(\n  z.string().describe(\"Workspace id-handle override (default: cwd-map).\"),\n);\n\n/** Project override param (project-scoped tools). */\nexport const projectParam = z.optional(\n  z.string().describe(\"Huly project identifier (vd PD). Default: cwd-map.\"),\n);\n\n/** Limit param (list tools). Default service-side, pi truncate 50KB/2000 lines. */\nexport const limitParam = z.optional(\n  z.number().int().describe(\"Max results (default: 50).\").min(1),\n);\n\n/** Identifier param (issue). vd \"PD-123\" HOẶC raw num. */\nexport const identifierParam = z.string().describe('Issue identifier (vd \"PD-123\") hoặc raw number.');\n\n/** Priority enum (create/update issue). */\nexport const prioritySchema = z.optional(\n  z.enum([\"urgent\", \"high\", \"medium\", \"low\", \"no-priority\"]),\n);\n\n/** statusCategory enum (list/update issue, derived). */\nexport const statusCategorySchema = z.optional(\n  z.enum([\"UnStarted\", \"ToDo\", \"Active\", \"Won\", \"Lost\"]),\n);\n\n/** Base params mọi tool có: workspace?. */\nexport function baseParams() {\n  return z.object({ workspace: workspaceParam });\n}\n\n/**\n * Project base params: workspace? + project?.\n * Domain tool extend thêm field riêng.\n */\nexport function projectParams() {\n  return z.object({ workspace: workspaceParam, project: projectParam });\n}\n\n/**\n * Resolve issue identifier: \"<PROJ>-<num>\" → as-is; raw num → \"<project>-<num>\".\n * Huly identifier format. Vd \"PD-123\" hoặc \"123\" (project=PD).\n *\n * Cross-project guard: nếu input có prefix \"<X>-<num>\" mà X != project →\n * throw Error (KHÔNG silently query sai project). Caller catch → isError.\n */\n/**\n * T-71: Resolve project _id (= space cho AttachedDoc scoping) từ identifier.\n * Project._id === Project.space (self-ref — T-67 confirmed). Trả undefined nếu\n * project không tồn tại (caller → isError).\n */\nexport async function getProjectSpace(\n  client: HulyClient,\n  projectIdentifier: string,\n): Promise<string | undefined> {\n  const project = await client.findOne(PROJECT_CLASS, { identifier: projectIdentifier });\n  return project?._id;\n}\n\n/**\n * T-71: Resolve IssueStatus docs cho project qua ProjectType.statuses traversal.\n * Flow: Project → project.type (Ref<ProjectType>) → ProjectType.statuses\n * (Ref<IssueStatus>[]) → resolve docs. Trả {statuses, defaultStatusId}.\n *\n * category Ref<StatusCategory> → enum key (strip `*:statusCategory:` prefix).\n * isDefault = status._id === project.defaultIssueStatus.\n */\nexport async function getProjectStatuses(\n  client: HulyClient,\n  projectIdentifier: string,\n): Promise<\n  | { statuses: Array<{ _id: string; name: string; category: string; isDefault: boolean }> }\n  | undefined\n> {\n  const project = await client.findOne(PROJECT_CLASS, {\n    identifier: projectIdentifier,\n  } as never);\n  if (!project) return undefined;\n  const projectTypeRef = (project as { type?: string }).type;\n  if (!projectTypeRef) return { statuses: [] };\n  const projectType = await client.findOne(PROJECT_TYPE_CLASS, { _id: projectTypeRef } as never);\n  // ProjectType.statuses = ProjectStatus[] (objects {_id: Ref<Status>, taskType, ...}),\n  // KHÔNG Ref[] — extract ._id trước (trusted issues-shared.ts:157 .map(s => s._id)).\n  const rawStatuses =\n    (projectType as { statuses?: Array<{ _id?: string }> } | null)?.statuses ?? [];\n  const statusRefs = rawStatuses\n    .map((s) => s._id)\n    .filter((r): r is string => typeof r === \"string\");\n  const defaultStatusId = (project as { defaultIssueStatus?: string }).defaultIssueStatus ?? \"\";\n  // T-81 #104: resolve statuses qua core.class.Status + batch $in (KHÔNG\n  // findOne IssueStatus per ref N+1 — trusted né: \"can fail on some workspaces\").\n  let statuses: Array<{ _id: string; name: string; category: string; isDefault: boolean }> = [];\n  if (statusRefs.length > 0) {\n    const statusDocs = (await client.findAll(STATUS_CLASS, {\n      _id: { $in: statusRefs },\n    } as never)) as Array<{ _id?: string; name?: string; category?: string }>;\n    statuses = statusRefs\n      .map((ref) => {\n        const s = statusDocs.find((d) => d._id === ref);\n        if (!s) return null;\n        const rawCat = s.category ?? \"\";\n        return {\n          _id: ref,\n          name: s.name ?? \"\",\n          category: rawCat.split(\":\").pop() ?? rawCat,\n          isDefault: ref === defaultStatusId,\n        };\n      })\n      .filter(\n        (x): x is { _id: string; name: string; category: string; isDefault: boolean } => x !== null,\n      );\n  }\n  return { statuses };\n}\n\nexport function resolveIdentifier(project: string, identifier: string): string {\n  if (/^\\d+$/.test(identifier)) {\n    return `${project}-${identifier}`;\n  }\n  // Check cross-project: input \"FOO-5\" nhưng tool scoped ở \"PD\"\n  const m = /^([A-Za-z]+)-(\\d+)$/.exec(identifier);\n  if (m && m[1] !== project) {\n    throw new Error(\n      `Cross-project identifier not allowed: \"${identifier}\" (tool scoped to project \"${project}\")`,\n    );\n  }\n  return identifier;\n}\n\n/**\n * Escape SQL LIKE wildcards (% _ \\) trong search pattern — tránh injection.\n * Huly $like dùng PostgreSQL LIKE semantics.\n */\nexport function escapeLikePattern(s: string): string {\n  return s.replace(/[\\\\%_]/g, (c) => `\\\\${c}`);\n}\n\n/**\n * Parse Huly markup JSON safe — return null nếu content không phải JSON markup\n * (plain text cũ HOẶC rỗng). Caller fallback về raw content.\n *\n * Huly content field có thể là:\n *   - JSON markup string (mới): `'{\"type\":\"doc\",...}'`\n *   - Plain text (cũ): `\"hello\"`\n *   - Empty: `\"\"`\n */\nexport function parseMarkupSafe(content: unknown): unknown {\n  if (typeof content !== \"string\" || content.length === 0) return null;\n  if (!content.startsWith(\"{\")) return null;\n  try {\n    return JSON.parse(content);\n  } catch {\n    return null;\n  }\n}\n\n// === T-63 #68: safeUpdateDoc / safeRemoveDoc — schema drift guard ===\n//\n// Khi tool gọi `client.updateDoc(_class, space, objectId, ops)` / `removeDoc(...)`\n// với `space` HOẶC `objectId` là `undefined` (data corruption, partial import,\n// schema drift), Huly server KHÔNG throw mà **skip silently** transaction\n// (ModelDb tìm doc theo `_id + space` không match) → update KHÔNG persist\n// (silent data loss, giống bug #36/#40 đã fix T-47/T-50).\n//\n// Helper centralize pattern T-50 (workspace.ts:155-173 — schema drift guard):\n// nhận doc ĐÃ LOOKUP (KHÔNG nhận space/objectId riêng — ép caller lấy từ doc),\n// tự extract `.space` / `._id` + guard undefined → return isError rõ ràng\n// (KHÔNG gửi updateDoc). Migration 42 call site sang helper (audit hardening).\n//\n// Discriminated union return: caller pattern:\n//   const result = await safeUpdateDoc(client, CLASS, doc, ops);\n//   if (!result.ok) return result.error; // isError sẵn sàng return cho LLM\n//   // result.result = TxResult\n\n/** Result khi guard pass — gọi updateDoc/removeDoc thành công. */\ntype SafeWriteOk = { ok: true; result: TxResult };\n/** Result khi guard fail — schema drift, KHÔNG gửi write. */\ntype SafeWriteErr = { ok: false; error: HulyToolResult };\n\n/**\n * Build error result cho schema drift guard. Message include _class + docId\n * (nếu có) cho debug. Details structured cho render.\n */\nfunction schemaDriftError(\n  _class: string,\n  doc: unknown,\n  missingField: \"space\" | \"_id\",\n): HulyToolResult {\n  const docId =\n    typeof doc === \"object\" && doc !== null ? (doc as { _id?: unknown })._id : undefined;\n  return {\n    content:\n      `Cannot update ${_class}: doc record missing \"${missingField}\" field (schema drift). ` +\n      `Update skipped to prevent silent no-op.`,\n    isError: true,\n    details: {\n      _class,\n      docId,\n      missingField,\n      ...(typeof doc === \"object\" && doc !== null ? { docRecord: doc } : {}),\n    },\n  };\n}\n\n/**\n * Validate doc có `.space` + `._id` field (string/ref). Return extracted hoặc\n * undefined nếu schema drift.\n */\nfunction extractDocRefs(\n  doc: unknown,\n): { space: Ref<Space>; objectId: string } | { missing: \"space\" | \"_id\" } {\n  if (typeof doc !== \"object\" || doc === null || Array.isArray(doc)) {\n    return { missing: \"space\" }; // doc không hợp lệ → guard space first\n  }\n  const d = doc as { space?: unknown; _id?: unknown };\n  if (d.space === undefined || d.space === null) return { missing: \"space\" };\n  if (d._id === undefined || d._id === null) return { missing: \"_id\" };\n  return { space: d.space as Ref<Space>, objectId: d._id as string };\n}\n\n/**\n * safeUpdateDoc — updateDoc với schema drift guard.\n *\n * @param client HulyClient đã kết nối\n * @param _class Class ref (vd tracker:class:Issue)\n * @param doc Doc ĐÃ LOOKUP (caller findOne trước). Helper extract .space/._id.\n * @param operations DocumentUpdate ops\n * @returns Discriminated union: ok → TxResult | !ok → isError result (return thẳng)\n *\n * Pattern T-50 (workspace.ts:155-173) centralized.\n */\nexport async function safeUpdateDoc<T extends Doc>(\n  client: HulyClient,\n  _class: Ref<Class<T>>,\n  doc: unknown,\n  operations: DocumentUpdate<T>,\n): Promise<SafeWriteOk | SafeWriteErr> {\n  const refs = extractDocRefs(doc);\n  if (\"missing\" in refs) {\n    return { ok: false, error: schemaDriftError(_class as string, doc, refs.missing) };\n  }\n  const result = await client.updateDoc(\n    _class,\n    refs.space,\n    refs.objectId as Ref<T>,\n    operations as never,\n  );\n  return { ok: true, result };\n}\n\n/**\n * safeRemoveDoc — removeDoc với schema drift guard.\n *\n * @param client HulyClient đã kết nối\n * @param _class Class ref\n * @param doc Doc ĐÃ LOOKUP. Helper extract .space/._id.\n * @returns Discriminated union: ok → TxResult | !ok → isError result\n */\nexport async function safeRemoveDoc<T extends Doc>(\n  client: HulyClient,\n  _class: Ref<Class<T>>,\n  doc: unknown,\n): Promise<SafeWriteOk | SafeWriteErr> {\n  const refs = extractDocRefs(doc);\n  if (\"missing\" in refs) {\n    return { ok: false, error: schemaDriftError(_class as string, doc, refs.missing) };\n  }\n  const result = await client.removeDoc(_class, refs.space, refs.objectId as Ref<T>);\n  return { ok: true, result };\n}\n","// tools/domains/workspace.ts — workspace + profile domain (5 tools).\n// Design: 04-system.md §6 (19 domain modules), 06-api.md §4 (Workspace/profile).\n//\n// Tools (5):\n//   1. huly_get_workspace_info      — workspace name/url (current)\n//   2. huly_list_workspaces         — T-74 honest-unavailable (account-client)\n//   3. huly_list_workspace_members  — T-74 honest-unavailable (account-client)\n//   4. huly_get_user_profile        — current user (getCurrentUser passthrough)\n//   5. huly_update_user_profile     — update current user name\n//\n// _class refs: contact.class.Person + contact.mixin:Employee (string literal).\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { PERSON_CLASS } from \"./_class-refs.js\";\nimport { safeUpdateDoc } from \"./_common.js\";\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. get_workspace_info — workspace binding hiện tại\n  defineHulyTool({\n    name: \"get_workspace_info\",\n    label: \"Get workspace info\",\n    description: \"Get current workspace info (id, resolved). Use để verify binding sau /huly init.\",\n    promptSnippet: \"Get current Huly workspace binding info.\",\n    parameters: z.object({\n      workspace: z.optional(\n        z.string().describe(\"Workspace id-handle override (default: cwd-map).\"),\n      ),\n    }),\n    async handler(_params, tctx) {\n      return {\n        content: `Workspace: ${tctx.workspace}`,\n        details: { workspace: tctx.workspace },\n      };\n    },\n  }),\n\n  // 2. list_workspaces — T-74: honest-unavailable (needs account-client HTTP layer)\n  defineHulyTool({\n    name: \"list_workspaces\",\n    label: \"List workspaces\",\n    description:\n      \"UNAVAILABLE — workspaces = account-level data (AccountClient.listWorkspaces). \" +\n      \"Use huly_get_workspace_info for current workspace binding. Deferred behind ADR.\",\n    promptSnippet: \"List Huly workspaces.\",\n    parameters: z.object({\n      workspace: z.optional(z.string()),\n      limit: z.optional(z.number().int().describe(\"Max results (default: 50).\").min(1)),\n    }),\n    async handler(_params, _tctx) {\n      return {\n        content:\n          \"list_workspaces KHÔNG khả dụng: workspaces = account-level data \" +\n          \"(AccountClient.listWorkspaces, HTTP). Use huly_get_workspace_info for current workspace. \" +\n          \"Deferred behind ADR.\",\n        isError: true,\n        details: {\n          reason: \"account_client_layer_required\",\n          alternative: \"huly_get_workspace_info\",\n        },\n      };\n    },\n  }),\n\n  // 3. list_workspace_members — T-74: honest-unavailable (needs account-client for roles)\n  defineHulyTool({\n    name: \"list_workspace_members\",\n    label: \"List workspace members\",\n    description:\n      \"UNAVAILABLE — workspace members with roles = account-level data (AccountClient.getWorkspaceMembers). \" +\n      \"Use huly_list_employees for employee data (data-client). Deferred behind ADR.\",\n    promptSnippet: \"List Huly workspace members.\",\n    parameters: z.object({\n      workspace: z.optional(z.string()),\n      limit: z.optional(z.number().int().describe(\"Max results (default: 50).\").min(1)),\n    }),\n    async handler(_params, _tctx) {\n      return {\n        content:\n          \"list_workspace_members KHÔNG khả dụng: workspace members with roles = \" +\n          \"account-level data (AccountClient.getWorkspaceMembers, HTTP). Use \" +\n          \"huly_list_employees for employee data via data-client ws. Deferred behind ADR.\",\n        isError: true,\n        details: { reason: \"account_client_layer_required\", alternative: \"huly_list_employees\" },\n      };\n    },\n  }),\n\n  // 4. get_user_profile — current user (passthrough getCurrentUser)\n  defineHulyTool({\n    name: \"get_user_profile\",\n    label: \"Get user profile\",\n    description: \"Get current user profile (id, name, email) — default assignee source.\",\n    promptSnippet: \"Get current Huly user profile.\",\n    parameters: z.object({\n      workspace: z.optional(z.string()),\n    }),\n    async handler(_params, tctx) {\n      return {\n        content: `User: ${tctx.currentUser.name} <${tctx.currentUser.email}> (id: ${tctx.currentUser.id})`,\n        details: { user: tctx.currentUser },\n      };\n    },\n  }),\n\n  // 5. update_user_profile — update current user name (firstName/lastName)\n  defineHulyTool({\n    name: \"update_user_profile\",\n    label: \"Update user profile\",\n    description:\n      'Update current user name (firstName/lastName → Huly \"LastName,FirstName\" format). ' +\n      \"Bio/city/socialLinks honest-unavailable (account-client ADR pending).\",\n    promptSnippet: \"Update current Huly user profile.\",\n    parameters: z.object({\n      workspace: z.optional(z.string()),\n      firstName: z.optional(z.string().describe(\"First name.\")),\n      lastName: z.optional(z.string().describe(\"Last name.\")),\n    }),\n    async handler(params, tctx) {\n      // T-82 #105: Huly Person.name = \"LastName,FirstName\" (trusted persons.ts:65).\n      // Trước đây ghi raw params.name → phá format. Nay tách firstName/lastName +\n      // formatName. Partial update: parse current name, giữ field không truyền.\n      if (params.firstName === undefined && params.lastName === undefined) {\n        return {\n          content: \"No fields to update.\",\n          details: { updated: false },\n        };\n      }\n      // T-103 #157: Person linked to account qua `personUuid` field (= account.uuid\n      // = currentUser.id). Lookup-by-_id fail (Person._id = generated id, KHÔNG\n      // uuid). Channel(email) cũng KHÔNG reliable (numeric socialId). personUuid\n      // là canonical account→Person link.\n      const person = await tctx.client.findOne(PERSON_CLASS, {\n        personUuid: tctx.currentUser.id,\n      } as never);\n      if (!person) {\n        return {\n          content: `Person for current user (uuid ${tctx.currentUser.id}) not found. Cannot update profile.`,\n          isError: true,\n          details: { userId: tctx.currentUser.id },\n        };\n      }\n      const current = parsePersonName((person as { name?: string }).name);\n      const newFirst = params.firstName ?? current.firstName;\n      const newLast = params.lastName ?? current.lastName;\n      const operations: Record<string, unknown> = {\n        name: `${newLast},${newFirst}`,\n      };\n      const result = await safeUpdateDoc(tctx.client, PERSON_CLASS, person, operations);\n      if (!result.ok) return result.error;\n      return {\n        content: `Updated profile name: ${newLast},${newFirst}`,\n        details: { updated: true, fields: [\"name\"], name: `${newLast},${newFirst}` },\n      };\n    },\n  }),\n];\n\n/**\n * T-82 #105: parse Huly Person.name \"LastName,FirstName\" → {firstName, lastName}.\n * Port trusted persons.ts:67 parseName.\n */\nfunction parsePersonName(name: string | undefined): { firstName: string; lastName: string } {\n  if (name === undefined) return { firstName: \"\", lastName: \"\" };\n  const comma = name.indexOf(\",\");\n  if (comma !== -1) {\n    return { firstName: name.slice(comma + 1), lastName: name.slice(0, comma) };\n  }\n  return { firstName: name, lastName: \"\" };\n}\n","// tools/domains/projects.ts — Projects domain (6 tools).\n// Design: 06-api.md §4 Projects. CRUD projects + list_statuses.\n//\n// Tools (6, FR-04 D4):\n//   1. huly_list_projects          — list trong workspace (project-scoped)\n//   2. huly_get_project            — get by identifier\n//   3. huly_create_project         — {name, identifier} → {identifier}\n//   4. huly_update_project         — update name/description\n//   5. huly_delete_project         — destructive, confirm gate\n//   6. huly_list_statuses          — workflow statuses cho project\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { PROJECT_CLASS, CLASSIC_PROJECT_TYPE_REF } from \"./_class-refs.js\";\nimport {\n  workspaceParam,\n  projectParam,\n  safeUpdateDoc,\n  safeRemoveDoc,\n  getProjectStatuses,\n} from \"./_common.js\";\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_projects\n  defineHulyTool({\n    name: \"list_projects\",\n    label: \"List projects\",\n    description: \"List Huly projects trong workspace.\",\n    promptSnippet: \"List Huly projects.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      includeArchived: z.optional(\n        z.boolean().describe(\"Include archived projects (default false).\"),\n      ),\n    }),\n    async handler(params, tctx) {\n      // T-81G #107: archived-filter default (exclude archived) + sort name asc.\n      const query: Record<string, unknown> =\n        params.includeArchived === true ? {} : { archived: { $ne: true } };\n      const projects = await tctx.client.findAll(PROJECT_CLASS, query as never, {\n        sort: { name: 1 },\n      });\n      const list = projects.map((p) => ({\n        identifier: (p as { identifier?: string }).identifier ?? \"\",\n        name: (p as { name?: string }).name ?? \"\",\n        description: (p as { description?: string }).description,\n        archived: (p as { archived?: boolean }).archived === true,\n        total: (p as { sequence?: number }).sequence ?? 0,\n      }));\n      return {\n        content: `Found ${list.length} project(s): ${list.map((p) => p.identifier).join(\", \")}`,\n        details: { count: list.length, projects: list },\n      };\n    },\n  }),\n\n  // 2. get_project\n  defineHulyTool({\n    name: \"get_project\",\n    label: \"Get project\",\n    description: \"Get Huly project by identifier.\",\n    promptSnippet: \"Get Huly project details.\",\n    needsProject: true,\n    parameters: z.object({ workspace: workspaceParam, project: projectParam }),\n    async handler(_params, tctx) {\n      const project = await tctx.client.findOne(PROJECT_CLASS, {\n        identifier: tctx.project,\n      });\n      if (!project) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project, found: false },\n        };\n      }\n      const projFields = project as {\n        identifier?: string;\n        name?: string;\n        description?: string;\n        archived?: boolean;\n      };\n      // T-81G #107: inline defaultStatus + statuses[] (convenience — avoid extra\n      // list_statuses call). getProjectStatuses resolves qua core.class.Status.\n      const statusResult = await getProjectStatuses(tctx.client, tctx.project!);\n      const statuses = statusResult?.statuses ?? [];\n      const defaultStatus = statuses.find((s) => s.isDefault)?.name;\n      return {\n        content: `Project ${projFields.identifier}: ${projFields.name ?? \"\"}`,\n        details: {\n          identifier: projFields.identifier,\n          name: projFields.name,\n          description: projFields.description,\n          archived: projFields.archived ?? false,\n          defaultStatus,\n          statuses: statuses.map((s) => ({ name: s.name, category: s.category })),\n        },\n      };\n    },\n  }),\n\n  // 3. create_project\n  defineHulyTool({\n    name: \"create_project\",\n    label: \"Create project\",\n    description:\n      \"Create Huly project. Idempotent (findOne by identifier trước). Returns identifier.\",\n    promptSnippet: \"Create a new Huly project.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      name: z.string().describe(\"Project name.\"),\n      identifier: z.string().describe(\"1-5 chars uppercase, start with letter.\").min(1).max(5),\n      description: z.optional(z.string()),\n    }),\n    async handler(params, tctx) {\n      // T-67 #75: idempotent — findOne by identifier trước (spec §9).\n      const existing = await tctx.client.findOne(PROJECT_CLASS, {\n        identifier: params.identifier,\n      });\n      if (existing) {\n        return {\n          content: `Project ${params.identifier} (${(existing as { name?: string }).name ?? \"\"}) đã tồn tại.`,\n          details: { identifier: params.identifier, id: existing._id, idempotent: true },\n        };\n      }\n      // T-67 #75: Project = TypedSpace, self-ref space (project._id = own space).\n      // Required fields: type (SpaceType), members/owners, sequence:0,\n      // defaultIssueStatus:\"\" (placeholder), defaultTimeReportDay:\"CurrentWorkDay\".\n      const projectId = `tracker:project.${Math.random().toString(36).slice(2, 14)}`;\n      const id = await tctx.client.createDoc(\n        PROJECT_CLASS,\n        projectId as never, // self-ref space\n        {\n          name: params.name,\n          identifier: params.identifier,\n          description: params.description ?? \"\",\n          private: false,\n          archived: false,\n          members: [tctx.currentUser.id],\n          owners: [tctx.currentUser.id],\n          sequence: 0,\n          type: CLASSIC_PROJECT_TYPE_REF,\n          defaultIssueStatus: \"\", // placeholder — server resolve từ ProjectType statuses\n          defaultTimeReportDay: \"CurrentWorkDay\",\n        } as never,\n        projectId as never,\n      );\n      return {\n        content: `Created project ${params.identifier} (${params.name}).`,\n        details: { identifier: params.identifier, id },\n      };\n    },\n  }),\n\n  // 4. update_project\n  defineHulyTool({\n    name: \"update_project\",\n    label: \"Update project\",\n    description: \"Update Huly project (name, description).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      name: z.optional(z.string()),\n      description: z.optional(z.union([z.string(), z.null()])),\n    }),\n    async handler(params, tctx) {\n      const existing = await tctx.client.findOne(PROJECT_CLASS, {\n        identifier: tctx.project,\n      });\n      if (!existing) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const operations: Record<string, unknown> = {};\n      if (typeof params.name === \"string\") operations.name = params.name;\n      // T-81G #107: description=null → $unset clear.\n      if (params.description !== undefined) {\n        if (params.description === null) {\n          operations.$unset = { description: \"\" };\n        } else {\n          operations.description = params.description;\n        }\n      }\n      if (Object.keys(operations).length === 0) {\n        return { content: \"No fields to update.\", details: { updated: false } };\n      }\n      const updResult = await safeUpdateDoc(tctx.client, PROJECT_CLASS, existing, operations);\n      if (!updResult.ok) return updResult.error;\n      const fields = Object.keys(operations).filter((f) => f !== \"$unset\");\n      if (operations.$unset !== undefined) fields.push(\"description(clear)\");\n      return {\n        content: `Updated project ${tctx.project}: ${fields.join(\", \")}`,\n        details: { updated: true, fields },\n      };\n    },\n  }),\n\n  // 5. delete_project — destructive, confirm gate\n  defineHulyTool({\n    name: \"delete_project\",\n    label: \"Delete project\",\n    description: \"Delete Huly project (destructive — confirm gate).\",\n    promptSnippet: \"Delete a Huly project (asks confirmation).\",\n    destructive: true,\n    needsProject: true,\n    destructiveContext: (p) => ({\n      type: \"project\",\n      id: (p as { project?: string }).project ?? \"<unknown>\",\n    }),\n    parameters: z.object({ workspace: workspaceParam, project: projectParam }),\n    async handler(_params, tctx) {\n      const existing = await tctx.client.findOne(PROJECT_CLASS, {\n        identifier: tctx.project,\n      });\n      if (!existing) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const delResult = await safeRemoveDoc(tctx.client, PROJECT_CLASS, existing);\n      if (!delResult.ok) return delResult.error;\n      return {\n        content: `Deleted project ${tctx.project}.`,\n        details: { deleted: true, identifier: tctx.project },\n      };\n    },\n  }),\n\n  // 6. list_statuses\n  defineHulyTool({\n    name: \"list_statuses\",\n    label: \"List statuses\",\n    description: \"List workflow statuses cho project.\",\n    needsProject: true,\n    parameters: z.object({ workspace: workspaceParam, project: projectParam }),\n    async handler(_params, tctx) {\n      // T-71: ProjectType.statuses traversal (KHÔNG findAll global).\n      const result = await getProjectStatuses(tctx.client, tctx.project!);\n      if (!result) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const list = result.statuses.map((s) => ({\n        name: s.name,\n        category: s.category, // enum key (strip Ref prefix)\n        isDefault: s.isDefault,\n      }));\n      return {\n        content: `Found ${list.length} status(es).`,\n        details: { count: list.length, statuses: list },\n      };\n    },\n  }),\n];\n","// tools/domains/milestones.ts — Milestones domain (6 tools).\n// Design: 06-api.md §4 Milestones. CRUD + set_issue_milestone.\n//\n// Tools (6, FR-04 D4):\n//   1. huly_list_milestones        — list trong project\n//   2. huly_get_milestone          — get by id\n//   3. huly_create_milestone       — {project, label, description?, targetDate} → {id}\n//   4. huly_update_milestone       — update label/description/targetDate/status\n//   5. huly_set_issue_milestone    — gán issue → milestone\n//   6. huly_delete_milestone       — destructive\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { MILESTONE_CLASS, ISSUE_CLASS, PROJECT_CLASS } from \"./_class-refs.js\";\n\n/**\n * T-72 #80: MilestoneStatus enum (numeric) ↔ string map.\n * Verified T-67: Planned=0, InProgress=1, Completed=2, Canceled=3.\n */\nconst MILESTONE_STATUS_MAP: Record<string, number> = {\n  planned: 0,\n  \"in-progress\": 1,\n  completed: 2,\n  canceled: 3,\n};\nfunction stringToMilestoneStatus(s: string): number {\n  const v = MILESTONE_STATUS_MAP[s];\n  if (v === undefined) {\n    throw new Error(\n      `Invalid milestone status \"${s}\". Valid: ${Object.keys(MILESTONE_STATUS_MAP).join(\", \")}.`,\n    );\n  }\n  return v;\n}\n/** T-82 #105: reverse map number → string (READ path). T-72 chỉ fix write. */\nfunction milestoneStatusToString(n: unknown): string {\n  return Object.entries(MILESTONE_STATUS_MAP).find(([, v]) => v === n)?.[0] ?? \"planned\";\n}\nimport {\n  workspaceParam,\n  projectParam,\n  identifierParam,\n  resolveIdentifier,\n  safeUpdateDoc,\n  safeRemoveDoc,\n  getProjectSpace,\n} from \"./_common.js\";\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_milestones\n  defineHulyTool({\n    name: \"list_milestones\",\n    label: \"List milestones\",\n    description: \"List milestones trong project.\",\n    needsProject: true,\n    parameters: z.object({ workspace: workspaceParam, project: projectParam }),\n    async handler(_params, tctx) {\n      // T-71: space scoping (KHÔNG findAll global cross-project).\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const milestones = await tctx.client.findAll(\n        MILESTONE_CLASS,\n        { space } as never,\n        // T-82G #108: sort modifiedOn desc.\n        { sort: { modifiedOn: -1 } } as never,\n      );\n      const list = milestones.map((m) => ({\n        id: m._id,\n        label: (m as { label?: string }).label ?? \"\",\n        // T-82 #105: status READ trả string (KHÔNG raw number — dead `?? \"planned\"`\n        // before fix vì 0 không nullish).\n        status: milestoneStatusToString((m as { status?: number }).status),\n        targetDate: (m as { targetDate?: number }).targetDate,\n      }));\n      return {\n        content: `Found ${list.length} milestone(s).`,\n        details: { count: list.length, milestones: list },\n      };\n    },\n  }),\n\n  // 2. get_milestone\n  defineHulyTool({\n    name: \"get_milestone\",\n    label: \"Get milestone\",\n    description: \"Get milestone by id.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      milestone: z.string().describe(\"Milestone id.\"),\n    }),\n    async handler(params, tctx) {\n      // T-100 (#146): scope milestone lookup theo project space (mirror components.ts T-81).\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const m = await tctx.client.findOne(MILESTONE_CLASS, {\n        _id: params.milestone,\n        space,\n      } as never);\n      if (!m) {\n        return {\n          content: `Milestone \"${params.milestone}\" not found.`,\n          isError: true,\n          details: { milestone: params.milestone },\n        };\n      }\n      const ms = m as {\n        label?: string;\n        status?: number;\n        targetDate?: number;\n        description?: string | null;\n        space?: string;\n        modifiedOn?: number;\n        createdOn?: number;\n      };\n      // T-82G #108: description → markdown (fetchMarkup).\n      let description: string | undefined;\n      if (ms.description) {\n        try {\n          const markup = await tctx.client.fetchMarkup(\n            MILESTONE_CLASS,\n            m._id,\n            \"description\",\n            ms.description,\n            \"markdown\",\n          );\n          description = typeof markup === \"string\" ? markup : undefined;\n        } catch {\n          description = undefined;\n        }\n      }\n      return {\n        content: `Milestone ${ms.label ?? \"\"}`,\n        details: {\n          id: m._id,\n          label: ms.label,\n          // T-82 #105: status READ trả string (KHÔNG raw number).\n          status: milestoneStatusToString(ms.status),\n          targetDate: ms.targetDate,\n          // T-82G #108: add description (markdown), project (=space), modifiedOn, createdOn.\n          description,\n          project: ms.space,\n          modifiedOn: ms.modifiedOn,\n          createdOn: ms.createdOn,\n        },\n      };\n    },\n  }),\n\n  // 3. create_milestone\n  defineHulyTool({\n    name: \"create_milestone\",\n    label: \"Create milestone\",\n    description: \"Create milestone. targetDate BẮT BUỘC (Unix ms).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      label: z.string(),\n      description: z.optional(z.string()),\n      targetDate: z.number().int().describe(\"Unix ms timestamp (BẮT BUỘC).\"),\n    }),\n    async handler(params, tctx) {\n      // T-103 #160: guard label non-empty.\n      if (params.label.trim() === \"\") {\n        return {\n          content: `create_milestone label must be non-empty.`,\n          isError: true,\n          details: { label: params.label },\n        };\n      }\n      const project = await tctx.client.findOne(PROJECT_CLASS, {\n        identifier: tctx.project,\n      });\n      // T-51 #41: project null → isError rõ ràng, KHÔNG fallback workspace.\n      if (!project) {\n        return {\n          content: `Project \"${tctx.project}\" not found. Run /huly init or check binding.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      // T-97 (#143): space = project._id (KHÔNG project.space — T-67 assumption sai).\n      // T-103 #162: description = MarkupBlobRef. Pre-gen id → uploadMarkup ref\n      // (mirror create_component/create_issue). Trước đây push raw string.\n      const msId = `${MILESTONE_CLASS as string}.${Math.random().toString(36).slice(2, 12)}`;\n      let descriptionRef: unknown = null;\n      if (params.description && params.description.trim() !== \"\") {\n        descriptionRef = await tctx.client.uploadMarkup(\n          MILESTONE_CLASS,\n          msId,\n          \"description\",\n          params.description,\n          \"markdown\",\n        );\n      }\n      const id = await tctx.client.createDoc(\n        MILESTONE_CLASS,\n        project._id as never,\n        {\n          label: params.label,\n          description: descriptionRef,\n          targetDate: params.targetDate,\n          // T-67 #75: MilestoneStatus.Planned = 0 (numeric enum, KHÔNG phải string).\n          status: 0,\n        },\n        msId as never,\n      );\n      return {\n        content: `Created milestone \"${params.label}\".`,\n        details: { id, label: params.label },\n      };\n    },\n  }),\n\n  // 4. update_milestone\n  defineHulyTool({\n    name: \"update_milestone\",\n    label: \"Update milestone\",\n    description: \"Update milestone (label, description, targetDate, status).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      milestone: z.string(),\n      label: z.optional(z.string()),\n      description: z.optional(z.string()),\n      targetDate: z.optional(z.number().int()),\n      status: z.optional(\n        z.union([\n          z.literal(\"planned\"),\n          z.literal(\"in-progress\"),\n          z.literal(\"completed\"),\n          z.literal(\"canceled\"),\n        ]),\n      ),\n    }),\n    async handler(params, tctx) {\n      // T-100 (#146): scope milestone lookup theo project space.\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const m = await tctx.client.findOne(MILESTONE_CLASS, {\n        _id: params.milestone,\n        space,\n      } as never);\n      if (!m) {\n        return {\n          content: `Milestone \"${params.milestone}\" not found.`,\n          isError: true,\n          details: { milestone: params.milestone },\n        };\n      }\n      const ops: Record<string, unknown> = {};\n      if (params.label !== undefined) {\n        if (params.label.trim() === \"\")\n          return {\n            content: \"label must be non-empty.\",\n            isError: true,\n            details: { label: params.label },\n          };\n        ops.label = params.label;\n      }\n      // T-103 #162: description = MarkupBlobRef → uploadMarkup ref (mirror update_component).\n      if (params.description !== undefined) {\n        const ref = await tctx.client.uploadMarkup(\n          MILESTONE_CLASS,\n          m._id,\n          \"description\",\n          params.description,\n          \"markdown\",\n        );\n        ops.description = ref;\n      }\n      if (params.targetDate !== undefined) ops.targetDate = params.targetDate;\n      if (params.status !== undefined) {\n        try {\n          ops.status = stringToMilestoneStatus(params.status);\n        } catch (e) {\n          return {\n            content: (e as Error).message,\n            isError: true,\n            details: { milestone: params.milestone, invalidStatus: params.status },\n          };\n        }\n      }\n      if (Object.keys(ops).length === 0) {\n        return { content: \"No fields to update.\", details: { updated: false } };\n      }\n      const updResult = await safeUpdateDoc(tctx.client, MILESTONE_CLASS, m, ops);\n      if (!updResult.ok) return updResult.error;\n      return {\n        content: `Updated milestone ${params.milestone}: ${Object.keys(ops).join(\", \")}`,\n        details: { updated: true, fields: Object.keys(ops) },\n      };\n    },\n  }),\n\n  // 5. set_issue_milestone\n  defineHulyTool({\n    name: \"set_issue_milestone\",\n    label: \"Set issue milestone\",\n    description: \"Gán milestone cho issue. Qua identifier (PD-123 HOẶC raw num).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      // T-82G #108: milestone=null → clear (unassign).\n      milestone: z.optional(z.union([z.string(), z.null()])),\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      // T-82G #108: milestone=null → clear.\n      if (params.milestone === null) {\n        const clr = await safeUpdateDoc(tctx.client, ISSUE_CLASS, issue, { milestone: null });\n        if (!clr.ok) return clr.error;\n        return {\n          content: `Cleared milestone on ${params.identifier}.`,\n          details: { identifier: params.identifier, milestone: null },\n        };\n      }\n      // T-100 (#146): scope milestone lookup theo issue space (issue đã load,\n      // = project._id — giống set_issue_component, tránh getProjectSpace thừa).\n      const milestone = await tctx.client.findOne(MILESTONE_CLASS, {\n        _id: params.milestone,\n        space: issue.space,\n      } as never);\n      if (!milestone) {\n        return {\n          content: `Milestone \"${params.milestone}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier, milestone: params.milestone },\n        };\n      }\n      const updResult = await safeUpdateDoc(tctx.client, ISSUE_CLASS, issue, {\n        milestone: milestone._id as never,\n      });\n      if (!updResult.ok) return updResult.error;\n      return {\n        content: `Set ${params.identifier} → milestone ${params.milestone}.`,\n        details: { identifier: params.identifier, milestone: params.milestone },\n      };\n    },\n  }),\n\n  // 6. delete_milestone — destructive\n  defineHulyTool({\n    name: \"delete_milestone\",\n    label: \"Delete milestone\",\n    description: \"Delete milestone (destructive — confirm gate).\",\n    destructive: true,\n    needsProject: true,\n    destructiveContext: (p) => ({\n      type: \"milestone\",\n      id: (p as { milestone?: string }).milestone ?? \"<unknown>\",\n    }),\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      milestone: z.string(),\n    }),\n    async handler(params, tctx) {\n      // T-100 (#146): scope milestone lookup theo project space.\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const m = await tctx.client.findOne(MILESTONE_CLASS, {\n        _id: params.milestone,\n        space,\n      } as never);\n      if (!m) {\n        return {\n          content: `Milestone \"${params.milestone}\" not found.`,\n          isError: true,\n          details: { milestone: params.milestone },\n        };\n      }\n      const delResult = await safeRemoveDoc(tctx.client, MILESTONE_CLASS, m);\n      if (!delResult.ok) return delResult.error;\n      return {\n        content: `Deleted milestone ${params.milestone}.`,\n        details: { deleted: true, milestone: params.milestone },\n      };\n    },\n  }),\n];\n\n// resolveIdentifier imported từ _common.ts\n","// tools/domains/task-management.ts — Task-management domain (5 tools).\n// Design: 06-api.md §4 Task-mgmt. Project types + task types + status registration.\n//\n// T-73 (2026-07-28): rewrite create_issue_status + create_task_type theo trusted\n// task-management.ts. Status/tasktype created + REGISTERED vào project workflow\n// (ProjectType.statuses ProjectStatus[] + TaskType.statuses Ref[]). Trước đây\n// createDoc orphan — status/tasktype KHÔNG bao giờ link workflow (silent fail).\n// space = core.space.Model (root model space, KHÔNG workspace root).\n// category = Ref<StatusCategory> (KHÔNG raw enum string).\n//\n// Bonus fixes: list_task_types field ofProjectType → parent; create_task_type\n// field ofProjectType → parent + register projectType.tasks.\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport {\n  PROJECT_TYPE_CLASS,\n  TASK_TYPE_CLASS,\n  MODEL_SPACE,\n  STATUS_CATEGORY_REFS,\n  ISSUE_STATUS_ATTRIBUTE,\n  MIXIN_CLASS,\n  TASK_TYPE_MIXIN,\n  CLASSIFIER_KIND_MIXIN,\n  MODEL_LABEL_PREFIX,\n  idRef,\n} from \"./_class-refs.js\";\nimport type { ProjectTypeDoc, TaskTypeDoc, MixinDoc, StatusDoc } from \"./_entity-types.js\";\nimport { workspaceParam } from \"./_common.js\";\n\n/** Generate id helper (Huly convention <class-prefix>.<rand>). */\nfunction genId(prefix: string): string {\n  return `${prefix}.${Math.random().toString(36).slice(2, 12)}`;\n}\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_project_types\n  defineHulyTool({\n    name: \"list_project_types\",\n    label: \"List project types\",\n    description: \"List project types (vd tracker, recruiting, inventory).\",\n    parameters: z.object({ workspace: workspaceParam }),\n    async handler(_params, tctx) {\n      const pts = await tctx.client.findAll(PROJECT_TYPE_CLASS, {}, {});\n      const list = pts.map((p) => ({\n        _id: p._id,\n        name: (p as { name?: string }).name ?? \"\",\n        targetClass: (p as { targetClass?: string }).targetClass,\n      }));\n      return {\n        content: `Found ${list.length} project type(s).`,\n        details: { count: list.length, projectTypes: list },\n      };\n    },\n  }),\n\n  // 2. get_project_type\n  defineHulyTool({\n    name: \"get_project_type\",\n    label: \"Get project type\",\n    description: \"Get project type by id.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      projectType: z.string(),\n    }),\n    async handler(params, tctx) {\n      const pt = await tctx.client.findOne(PROJECT_TYPE_CLASS, {\n        _id: params.projectType,\n      });\n      if (!pt) {\n        return {\n          content: `Project type \"${params.projectType}\" not found.`,\n          isError: true,\n          details: { projectType: params.projectType },\n        };\n      }\n      return {\n        content: `Project type ${(pt as { name?: string }).name ?? \"\"}`,\n        details: {\n          _id: pt._id,\n          name: (pt as { name?: string }).name,\n          targetClass: (pt as { targetClass?: string }).targetClass,\n        },\n      };\n    },\n  }),\n\n  // 3. list_task_types — T-73: field ofProjectType → parent (trusted query field)\n  defineHulyTool({\n    name: \"list_task_types\",\n    label: \"List task types\",\n    description: \"List task types cho project type.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      projectType: z.optional(z.string()),\n    }),\n    async handler(params, tctx) {\n      // T-73: query field `parent` (KHÔNG ofProjectType — trusted getTaskTypesByProjectType).\n      const query = params.projectType !== undefined ? { parent: params.projectType } : {};\n      const tts = await tctx.client.findAll(TASK_TYPE_CLASS, query as never, {});\n      const list = tts.map((t) => ({\n        _id: t._id,\n        name: (t as { name?: string }).name ?? \"\",\n      }));\n      return {\n        content: `Found ${list.length} task type(s).`,\n        details: { count: list.length, taskTypes: list },\n      };\n    },\n  }),\n\n  // 4. create_task_type — T-73: parent field + core.space.Model + register projectType.tasks\n  // T-73 review (M1): copy required fields (statusClass/ofClass/kind/targetClass/\n  // statusCategories/descriptor) từ sibling template TaskType trong cùng projectType.\n  // T-73 review (L1): idempotent check by name+projectType.\n  defineHulyTool({\n    name: \"create_task_type\",\n    label: \"Create task type\",\n    description:\n      \"Create task type trong project type + register vào projectType.tasks. Copies descriptor fields from a sibling template task type.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      name: z.string(),\n      projectType: z.string(),\n    }),\n    async handler(params, tctx) {\n      const projectType = await tctx.client.findOne<ProjectTypeDoc>(PROJECT_TYPE_CLASS, {\n        _id: params.projectType,\n      });\n      if (!projectType) {\n        return {\n          content: `Project type \"${params.projectType}\" not found.`,\n          isError: true,\n          details: { projectType: params.projectType },\n        };\n      }\n      // T-73 review L1: idempotent — findOne existing TaskType by name+parent.\n      const existing = await tctx.client.findOne<TaskTypeDoc>(TASK_TYPE_CLASS, {\n        name: params.name,\n        parent: params.projectType,\n      });\n      if (existing) {\n        return {\n          content: `Task type \"${params.name}\" already exists (idempotent — no-op).`,\n          details: { id: existing._id, name: params.name, idempotent: true },\n        };\n      }\n      // T-73 review M1: copy required fields từ sibling template TaskType.\n      // T-90: native TaskTypeDoc (no inline cast). TaskType schema requires\n      // descriptor/kind/ofClass/targetClass/statusClass/statusCategories.\n      const existingTaskIds = projectType.tasks ?? [];\n      let template: TaskTypeDoc | undefined;\n      if (existingTaskIds.length > 0) {\n        template = await tctx.client.findOne<TaskTypeDoc>(TASK_TYPE_CLASS, {\n          _id: existingTaskIds[0],\n        });\n      }\n      if (!template) {\n        return {\n          content:\n            `Cannot create task type \"${params.name}\": no sibling template TaskType ` +\n            `found trong projectType \"${params.projectType}\" to copy required fields ` +\n            `(descriptor/kind/ofClass/targetClass/statusClass/statusCategories). ` +\n            `Create the first task type via Huly UI, then use this tool for siblings.`,\n          isError: true,\n          details: {\n            projectType: params.projectType,\n            reason: \"no_sibling_template\",\n          },\n        };\n      }\n      const taskTypeId = genId(\"task:tasktype\");\n      // T-86 #121: derive targetClass mixin ref + create Mixin classifier doc +\n      // createMixin(TaskTypeClass) để Huly apply task-typing behavior. Trước đây\n      // skip cả 2 → task type tồn tại nhưng KHÔNG apply TaskTypeClass mixin.\n      // UNVERIFIED: core:class:Mixin + task:mixin:TaskTypeClass theo naming\n      // convention (task pkg not installed locally — flag như T-43).\n      // T-90: native types + satisfies (no inline cast / as never trên payload).\n      const targetClassId = `${taskTypeId}:type:mixin`;\n      const mixinData = {\n        extends: template.ofClass,\n        kind: CLASSIFIER_KIND_MIXIN,\n        label: MODEL_LABEL_PREFIX + params.name,\n        ...(template.icon !== undefined ? { icon: template.icon } : {}),\n      } satisfies Partial<MixinDoc>;\n      await tctx.client.createDoc(MIXIN_CLASS, MODEL_SPACE, mixinData, idRef(targetClassId));\n      await tctx.client.createMixin(\n        idRef(targetClassId),\n        MIXIN_CLASS,\n        MODEL_SPACE,\n        TASK_TYPE_MIXIN,\n        { taskType: taskTypeId, projectType: projectType._id },\n      );\n      // T-86 #121: statuses copy từ template (KHÔNG start []) + targetClass =\n      // new mixin ref (KHÔNG copy template.targetClass).\n      const templateStatusIds = template.statuses ?? [];\n      const taskData = {\n        name: params.name,\n        parent: projectType._id,\n        descriptor: template.descriptor,\n        kind: template.kind,\n        ofClass: template.ofClass,\n        targetClass: targetClassId, // T-86: new mixin ref\n        statusClass: template.statusClass,\n        statusCategories: template.statusCategories,\n        statuses: templateStatusIds, // T-86: copy template (KHÔNG [])\n        ...(template.icon !== undefined ? { icon: template.icon } : {}),\n        ...(template.color !== undefined ? { color: template.color } : {}),\n        ...(template.allowedAsChildOf !== undefined\n          ? { allowedAsChildOf: template.allowedAsChildOf }\n          : {}),\n      } satisfies Partial<TaskTypeDoc>;\n      const id = await tctx.client.createDoc(\n        TASK_TYPE_CLASS,\n        MODEL_SPACE,\n        taskData,\n        idRef(taskTypeId),\n      );\n      // T-86 #121: register projectType.tasks + statuses append {id,taskType}.\n      const ptStatuses = projectType.statuses ?? [];\n      const appendedStatuses = [\n        ...ptStatuses,\n        ...templateStatusIds\n          .filter((sid) => !ptStatuses.some((s) => s._id === sid))\n          .map((sid) => ({ _id: sid, taskType: taskTypeId })),\n      ];\n      await tctx.client.updateDoc(PROJECT_TYPE_CLASS, MODEL_SPACE, idRef(projectType._id), {\n        tasks: existingTaskIds.includes(taskTypeId)\n          ? existingTaskIds\n          : [...existingTaskIds, taskTypeId],\n        statuses: appendedStatuses,\n      });\n      return {\n        content: `Created task type \"${params.name}\" + Mixin classifier + registered to projectType workflow.`,\n        details: {\n          id,\n          name: params.name,\n          projectType: projectType._id,\n          targetClass: targetClassId,\n          mixinCreated: true,\n          registered: true,\n        },\n      };\n    },\n  }),\n\n  // 5. create_issue_status — T-73: full proper flow (register workflow)\n  //   - resolve taskType → statusClass dynamic (taskType.statusClass)\n  //   - core.space.Model space (KHÔNG workspace root)\n  //   - category = Ref<StatusCategory> via STATUS_CATEGORY_REFS (KHÔNG raw enum)\n  //   - register: TaskType.statuses + ProjectType.statuses (ProjectStatus object)\n  //   - idempotent: findOne exact name trên target taskType (KHÔNG global)\n  defineHulyTool({\n    name: \"create_issue_status\",\n    label: \"Create issue status\",\n    description:\n      \"Create issue status + register vào project workflow. Requires taskType param (resolve statusClass). Idempotent per taskType+name.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      taskType: z.string().describe(\"TaskType _id (resolve statusClass + register).\"),\n      name: z.string(),\n      category: z.enum([\"UnStarted\", \"ToDo\", \"Active\", \"Won\", \"Lost\"]),\n    }),\n    async handler(params, tctx) {\n      // T-73: resolve taskType → statusClass + parent projectType. T-90: native TaskTypeDoc.\n      const taskType = await tctx.client.findOne<TaskTypeDoc>(TASK_TYPE_CLASS, {\n        _id: params.taskType,\n      });\n      if (!taskType) {\n        return {\n          content: `Task type \"${params.taskType}\" not found.`,\n          isError: true,\n          details: { taskType: params.taskType },\n        };\n      }\n      const statusClass = taskType.statusClass;\n      if (!statusClass) {\n        return {\n          content: `Task type \"${params.taskType}\" has no statusClass (cannot determine target class).`,\n          isError: true,\n          details: { taskType: params.taskType },\n        };\n      }\n      const projectTypeId = taskType.parent;\n      if (!projectTypeId) {\n        return {\n          content: `Task type \"${params.taskType}\" has no parent projectType.`,\n          isError: true,\n          details: { taskType: params.taskType },\n        };\n      }\n      // T-73: category = Ref<StatusCategory> (KHÔNG raw enum string). Resolve\n      // trước existing-check để validate category mismatch (T-87 #122).\n      const categoryRef = STATUS_CATEGORY_REFS[params.category];\n      if (!categoryRef) {\n        return {\n          content: `Invalid category \"${params.category}\". Valid: ${Object.keys(STATUS_CATEGORY_REFS).join(\", \")}.`,\n          isError: true,\n          details: { invalidCategory: params.category },\n        };\n      }\n      // T-73 review H2: idempotent findOne by {name} trên statusClass ONLY (KHÔNG\n      // ofTaskType — that field KHÔNG thuộc Status schema, server strip → query miss).\n      // T-90: native StatusDoc (statusClass dynamic → as never structural, 1 boundary).\n      const existing = await tctx.client.findOne<StatusDoc>(statusClass as never, {\n        name: params.name,\n      });\n      if (existing) {\n        // T-87 #122: validate category match (trusted requireStatusCategoryMatch).\n        // Same name different category = silent workflow corruption. Error rõ.\n        const existingCategory = existing.category;\n        if (existingCategory !== undefined && existingCategory !== categoryRef) {\n          return {\n            content:\n              `Status \"${params.name}\" already exists with category '${existingCategory}', ` +\n              `not requested category '${params.category}'. Use a different name or category.`,\n            isError: true,\n            details: {\n              name: params.name,\n              existingCategory,\n              requestedCategory: params.category,\n              taskType: params.taskType,\n            },\n          };\n        }\n        return {\n          content: `Status \"${params.name}\" already exists on taskType ${params.taskType} (idempotent — no-op).`,\n          details: {\n            id: existing._id,\n            name: params.name,\n            taskType: params.taskType,\n            idempotent: true,\n          },\n        };\n      }\n      // T-73 review H1: ofAttribute required (Status.ofAttribute: Ref<Attribute<Status>>).\n      // Trusted hardcodes tracker.attribute.IssueStatus cho issue statuses. T-90: satisfies.\n      const statusId = genId(\"tracker:status\");\n      await tctx.client.createDoc(\n        statusClass as never,\n        MODEL_SPACE,\n        {\n          name: params.name,\n          ofAttribute: ISSUE_STATUS_ATTRIBUTE,\n          category: categoryRef,\n        } satisfies Partial<StatusDoc>,\n        idRef(statusId),\n      );\n      // T-73: register vào TaskType.statuses (read-modify-write idempotent).\n      const ttStatuses = taskType.statuses ?? [];\n      if (!ttStatuses.includes(statusId)) {\n        await tctx.client.updateDoc(TASK_TYPE_CLASS, MODEL_SPACE, idRef(taskType._id), {\n          statuses: [...ttStatuses, statusId],\n        });\n      }\n      // T-73: register vào ProjectType.statuses (ProjectStatus[] objects {_id, taskType}).\n      const projectType = await tctx.client.findOne<ProjectTypeDoc>(PROJECT_TYPE_CLASS, {\n        _id: projectTypeId,\n      });\n      if (projectType) {\n        const ptStatuses = projectType.statuses ?? [];\n        if (!ptStatuses.some((s) => s._id === statusId)) {\n          await tctx.client.updateDoc(PROJECT_TYPE_CLASS, MODEL_SPACE, idRef(projectType._id), {\n            statuses: [...ptStatuses, { _id: statusId, taskType: params.taskType }],\n          });\n        }\n      }\n      return {\n        content: `Created status \"${params.name}\" (${params.category}) + registered to workflow.`,\n        details: {\n          id: statusId,\n          name: params.name,\n          category: params.category,\n          statusClass,\n          taskType: params.taskType,\n          projectType: projectTypeId,\n          registered: true,\n        },\n      };\n    },\n  }),\n];\n","// tools/domains/contacts.ts — Contacts domain (2 tools, read-only).\n// Design: 06-api.md §4 Contacts. List employees/persons cho assignee resolution.\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { PERSON_CLASS, EMPLOYEE_CLASS, CHANNEL_CLASS, EMAIL_PROVIDER } from \"./_class-refs.js\";\nimport { workspaceParam, limitParam } from \"./_common.js\";\nimport type { HulyClient, CurrentUser } from \"../../client/client.js\";\n\n/**\n * T-71: Resolve Person._id từ name (cho list_issues assignee filter).\n * Match: findOne Person {name} (Huly Person.name = \"LastName, FirstName\").\n *\n * NOTE: email resolve CẦN Channel(Email)/SocialIdentity lookup (Person.email\n * field KHÔNG tồn tại — email lives trong Channel attachedTo Person). Deferred\n * follow-up — hiện tại chỉ name match. Caller truyền email → undefined → isError.\n *\n * Port pattern (name path) trusted contacts-shared.ts:190.\n */\nexport async function findPersonByEmailOrName(\n  client: HulyClient,\n  input: string,\n  currentUser?: CurrentUser,\n): Promise<string | undefined> {\n  // T-82G #108: email resolve via Channel (provider email, value exact). Port\n  // trusted contacts-shared.ts findPersonByEmailOrName step 2 (Channel exact).\n  // SocialIdentity + $like fuzzy deferred (perf / workspace-members edge).\n  if (input.includes(\"@\")) {\n    const channel = await client.findOne(CHANNEL_CLASS, {\n      value: input,\n      provider: EMAIL_PROVIDER,\n    } as never);\n    if (channel) {\n      const person = await client.findOne(PERSON_CLASS, {\n        _id: (channel as { attachedTo?: string }).attachedTo,\n      } as never);\n      if (person) return person._id;\n    }\n    // Self-email fallback (pi-huly beta.19 #162): self-host Huly thường KHÔNG tạo\n    // Channel email cho Person (verified: 0 email Channel trên workspace test).\n    // Link account→Person thật sự là Account.uuid === Person.personUuid. Account\n    // KHÔNG queryable qua findOne (\"domain not found\") + getAccount() KHÔNG expose\n    // email arbitrary, nên chỉ resolve được KHI input === currentUser.email\n    // (self-assign — case phổ biến nhất, vd assignee=<email get_user_profile trả>).\n    // Arbitrary teammate email vẫn cần Channel data (documented limitation).\n    if (currentUser && input.toLowerCase() === currentUser.email.toLowerCase()) {\n      const self = await client.findOne(PERSON_CLASS, {\n        personUuid: currentUser.id,\n      } as never);\n      if (self) return self._id;\n    }\n  }\n  // Name match (Huly Person.name = \"LastName, FirstName\").\n  const byName = await client.findOne(PERSON_CLASS, { name: input } as never);\n  return byName?._id;\n}\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_employees\n  defineHulyTool({\n    name: \"list_employees\",\n    label: \"List employees\",\n    description: \"List employees trong workspace (cho assignee resolution).\",\n    parameters: z.object({ workspace: workspaceParam, limit: limitParam }),\n    async handler(params, tctx) {\n      const limit = typeof params.limit === \"number\" ? params.limit : 50;\n      const employees = await tctx.client.findAll(EMPLOYEE_CLASS, {}, { limit });\n      // T-74: email field KHÔNG tồn tại trên Employee/Person (lives trong Channel).\n      // T-82G #108: add position + active (Employee mixin fields).\n      const list = employees.map((e) => ({\n        id: e._id,\n        name: (e as { name?: string }).name ?? \"\",\n        position: (e as { role?: string }).role,\n        active: (e as { active?: boolean }).active !== false,\n      }));\n      return {\n        content: `Found ${list.length} employee(s).`,\n        details: { count: list.length, employees: list },\n      };\n    },\n  }),\n\n  // 2. list_persons\n  defineHulyTool({\n    name: \"list_persons\",\n    label: \"List persons\",\n    description: \"List persons (contacts) trong workspace.\",\n    parameters: z.object({ workspace: workspaceParam, limit: limitParam }),\n    async handler(params, tctx) {\n      const limit = typeof params.limit === \"number\" ? params.limit : 50;\n      const persons = await tctx.client.findAll(PERSON_CLASS, {}, { limit });\n      const list = persons.map((p) => ({\n        id: p._id,\n        name: (p as { name?: string }).name ?? \"\",\n        // T-82G #108: add city + modifiedOn. Drop dead email (T-82).\n        city: (p as { city?: string }).city,\n        modifiedOn: (p as { modifiedOn?: number }).modifiedOn,\n      }));\n      return {\n        content: `Found ${list.length} person(s).`,\n        details: { count: list.length, persons: list },\n      };\n    },\n  }),\n];\n","// tools/domains/components.ts — Components domain (6 tools).\n// Design: 06-api.md §4 Components. CRUD + set_issue_component.\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { COMPONENT_CLASS, ISSUE_CLASS, PROJECT_CLASS, PERSON_CLASS } from \"./_class-refs.js\";\nimport {\n  workspaceParam,\n  projectParam,\n  identifierParam,\n  resolveIdentifier,\n  safeUpdateDoc,\n  safeRemoveDoc,\n  getProjectSpace,\n} from \"./_common.js\";\nimport { findPersonByEmailOrName } from \"./contacts.js\";\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_components\n  defineHulyTool({\n    name: \"list_components\",\n    label: \"List components\",\n    description: \"List components trong project.\",\n    needsProject: true,\n    parameters: z.object({ workspace: workspaceParam, project: projectParam }),\n    async handler(_params, tctx) {\n      // T-71: space scoping (KHÔNG findAll global cross-project).\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const comps = await tctx.client.findAll(COMPONENT_CLASS, { space } as never, {});\n      const list = comps.map((c) => ({\n        id: c._id,\n        label: (c as { label?: string }).label ?? \"\",\n        lead: (c as { lead?: string }).lead,\n      }));\n      return {\n        content: `Found ${list.length} component(s).`,\n        details: { count: list.length, components: list },\n      };\n    },\n  }),\n\n  // 2. get_component\n  defineHulyTool({\n    name: \"get_component\",\n    label: \"Get component\",\n    description: \"Get component by id.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      component: z.string(),\n    }),\n    async handler(params, tctx) {\n      // T-81 #104: scope component lookup theo project (space = project._id).\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const c = await tctx.client.findOne(COMPONENT_CLASS, {\n        _id: params.component,\n        space,\n      } as never);\n      if (!c) {\n        return {\n          content: `Component \"${params.component}\" not found.`,\n          isError: true,\n          details: { component: params.component },\n        };\n      }\n      // T-81G #107: resolve lead raw Ref → Person name; description → markdown.\n      const comp = c as { label?: string; description?: string | null; lead?: string };\n      let leadName: string | undefined;\n      if (comp.lead) {\n        const person = await tctx.client.findOne(PERSON_CLASS, { _id: comp.lead } as never);\n        leadName = (person as { name?: string } | null)?.name;\n      }\n      let description: string | undefined;\n      if (comp.description) {\n        try {\n          const markup = await tctx.client.fetchMarkup(\n            COMPONENT_CLASS,\n            c._id,\n            \"description\",\n            comp.description,\n            \"markdown\",\n          );\n          description = typeof markup === \"string\" ? markup : undefined;\n        } catch {\n          description = undefined;\n        }\n      }\n      return {\n        content: `Component ${comp.label ?? \"\"}`,\n        details: {\n          id: c._id,\n          label: comp.label,\n          description,\n          lead: leadName,\n          leadRef: comp.lead,\n        },\n      };\n    },\n  }),\n\n  // 3. create_component\n  defineHulyTool({\n    name: \"create_component\",\n    label: \"Create component\",\n    description: \"Create component.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      label: z.string(),\n      description: z.optional(z.string()),\n      lead: z.optional(z.string().describe(\"Lead email/name.\")),\n    }),\n    async handler(params, tctx) {\n      // T-103 #160: guard label non-empty.\n      if (params.label.trim() === \"\") {\n        return {\n          content: `create_component label must be non-empty.`,\n          isError: true,\n          details: { label: params.label },\n        };\n      }\n      const project = await tctx.client.findOne(PROJECT_CLASS, {\n        identifier: tctx.project,\n      });\n      // T-51 #41: project null → isError rõ ràng, KHÔNG fallback workspace\n      // (trước đây fallback silent → document mồ côi không thuộc project).\n      if (!project) {\n        return {\n          content: `Project \"${tctx.project}\" not found. Run /huly init or check binding.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      // T-81 #104: lead = Ref<Employee> (KHÔNG raw string). Resolve Person trước.\n      let leadRef: string | undefined;\n      if (params.lead !== undefined) {\n        leadRef = await findPersonByEmailOrName(tctx.client, params.lead, tctx.currentUser);\n        if (!leadRef) {\n          return {\n            content: `Lead \"${params.lead}\" not found (no Person matching email/name).`,\n            isError: true,\n            details: { lead: params.lead, project: tctx.project },\n          };\n        }\n      }\n      // T-81 #104: comments:0 default (pattern chung Component/Milestone/IssueTemplate).\n      // T-97 (#143): space = project._id (getProjectSpace canonical), KHÔNG\n      // project.space (T-67 assumption project._id===project.space SAI cho ws này\n      // → component orphan, set_issue_component scope issue.space=project._id\n      // không thấy). Đồng bộ list/get/update/set/delete (dùng getProjectSpace).\n      // T-103 #162: description = MarkupBlobRef. Pre-gen id → uploadMarkup ref\n      // (mirror create_issue/create_document). Trước đây push raw string →\n      // get_component fetchMarkup đọc garbage → description undefined.\n      const compId = `${COMPONENT_CLASS as string}.${Math.random().toString(36).slice(2, 12)}`;\n      let descriptionRef: unknown = null;\n      if (params.description && params.description.trim() !== \"\") {\n        descriptionRef = await tctx.client.uploadMarkup(\n          COMPONENT_CLASS,\n          compId,\n          \"description\",\n          params.description,\n          \"markdown\",\n        );\n      }\n      const id = await tctx.client.createDoc(\n        COMPONENT_CLASS,\n        project._id as never,\n        {\n          label: params.label,\n          description: descriptionRef,\n          lead: leadRef,\n          comments: 0,\n        },\n        compId as never,\n      );\n      return {\n        content: `Created component \"${params.label}\".`,\n        details: { id, label: params.label },\n      };\n    },\n  }),\n\n  // 4. update_component\n  defineHulyTool({\n    name: \"update_component\",\n    label: \"Update component\",\n    description: \"Update component (label, description, lead).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      component: z.string(),\n      label: z.optional(z.string()),\n      description: z.optional(z.string()),\n      lead: z.optional(z.string()),\n    }),\n    async handler(params, tctx) {\n      // T-81 #104: scope component lookup theo project.\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const c = await tctx.client.findOne(COMPONENT_CLASS, {\n        _id: params.component,\n        space,\n      } as never);\n      if (!c) {\n        return {\n          content: `Component \"${params.component}\" not found.`,\n          isError: true,\n          details: { component: params.component },\n        };\n      }\n      const ops: Record<string, unknown> = {};\n      if (params.label !== undefined) {\n        if (params.label.trim() === \"\")\n          return {\n            content: \"label must be non-empty.\",\n            isError: true,\n            details: { label: params.label },\n          };\n        ops.label = params.label;\n      }\n      // T-97: description = MarkupBlobRef. Component ĐÃ CÓ description → updateMarkup\n      // (updateContent rpc) edit in-place. KHÔNG ghi description vào ops — mirror trusted\n      // @firfi/huly-mcp: updateMarkup xong KHÔNG updateDoc description field (TxUpdateDoc\n      // trên description → server reset collaborator content → stale). CHƯA có → uploadMarkup\n      // tạo blob + swap ref. Track descUpdated riêng cho success message.\n      let descUpdated = false;\n      if (params.description !== undefined) {\n        const existingDesc =\n          typeof c === \"object\" && \"description\" in c ? c.description : undefined;\n        if (\n          existingDesc != null &&\n          tctx.client.transport === \"ws\" &&\n          typeof tctx.client.updateMarkup === \"function\"\n        ) {\n          await tctx.client.updateMarkup(\n            COMPONENT_CLASS,\n            c._id,\n            \"description\",\n            params.description,\n            \"markdown\",\n          );\n          descUpdated = true;\n        } else {\n          ops.description = await tctx.client.uploadMarkup(\n            COMPONENT_CLASS,\n            c._id,\n            \"description\",\n            params.description,\n            \"markdown\",\n          );\n          descUpdated = true;\n        }\n      }\n      // T-81 #104: lead = Ref<Employee> (resolve Person, KHÔNG raw string).\n      if (params.lead !== undefined) {\n        const leadRef = await findPersonByEmailOrName(tctx.client, params.lead, tctx.currentUser);\n        if (!leadRef) {\n          return {\n            content: `Lead \"${params.lead}\" not found (no Person matching email/name).`,\n            isError: true,\n            details: { lead: params.lead, component: params.component },\n          };\n        }\n        ops.lead = leadRef;\n      }\n      // T-97: updateMarkup path (descUpdated + empty ops) → skip updateDoc.\n      if (Object.keys(ops).length === 0 && !descUpdated) {\n        return { content: \"No fields to update.\", details: { updated: false } };\n      }\n      if (Object.keys(ops).length > 0) {\n        const updResult = await safeUpdateDoc(tctx.client, COMPONENT_CLASS, c, ops);\n        if (!updResult.ok) return updResult.error;\n      }\n      const fields = Object.keys(ops);\n      if (descUpdated && !fields.includes(\"description\")) fields.push(\"description\");\n      return {\n        content: `Updated component ${params.component}.`,\n        details: { updated: true, fields },\n      };\n    },\n  }),\n\n  // 5. set_issue_component\n  defineHulyTool({\n    name: \"set_issue_component\",\n    label: \"Set issue component\",\n    description: \"Gán component cho issue.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      // T-81G #107: component = label OR _id; null → clear (unassign).\n      component: z.optional(z.union([z.string(), z.null()])),\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      // T-81G #107: component=null → clear (unassign).\n      if (params.component === null) {\n        const updResult = await safeUpdateDoc(tctx.client, ISSUE_CLASS, issue, {\n          component: null,\n        });\n        if (!updResult.ok) return updResult.error;\n        return {\n          content: `Cleared component on ${params.identifier}.`,\n          details: { identifier: params.identifier, component: null },\n        };\n      }\n      // T-52 #42 + T-81 #104 + T-81G #107: resolve component by _id OR label + scope.\n      const space = issue.space as string;\n      let component = await tctx.client.findOne(COMPONENT_CLASS, {\n        _id: params.component,\n        space,\n      } as never);\n      if (!component) {\n        // T-81G #107: label-fallback resolve.\n        component = await tctx.client.findOne(COMPONENT_CLASS, {\n          label: params.component,\n          space,\n        } as never);\n      }\n      if (!component) {\n        return {\n          content: `Component \"${params.component}\" not found (by _id or label).`,\n          isError: true,\n          details: { identifier: params.identifier, component: params.component },\n        };\n      }\n      const updResult = await safeUpdateDoc(tctx.client, ISSUE_CLASS, issue, {\n        component: component._id as never,\n      });\n      if (!updResult.ok) return updResult.error;\n      return {\n        content: `Set ${params.identifier} → component ${params.component}.`,\n        details: { identifier: params.identifier, component: params.component },\n      };\n    },\n  }),\n\n  // 6. delete_component — destructive\n  defineHulyTool({\n    name: \"delete_component\",\n    label: \"Delete component\",\n    description: \"Delete component (destructive).\",\n    destructive: true,\n    needsProject: true,\n    destructiveContext: (p) => ({\n      type: \"component\",\n      id: (p as { component?: string }).component ?? \"<unknown>\",\n    }),\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      component: z.string(),\n    }),\n    async handler(params, tctx) {\n      // T-81 #104: scope component lookup theo project.\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const c = await tctx.client.findOne(COMPONENT_CLASS, {\n        _id: params.component,\n        space,\n      } as never);\n      if (!c) {\n        return {\n          content: `Component \"${params.component}\" not found.`,\n          isError: true,\n          details: { component: params.component },\n        };\n      }\n      const delResult = await safeRemoveDoc(tctx.client, COMPONENT_CLASS, c);\n      if (!delResult.ok) return delResult.error;\n      return {\n        content: `Deleted component ${params.component}.`,\n        details: { deleted: true, component: params.component },\n      };\n    },\n  }),\n];\n","// tools/domains/spaces.ts — Spaces domain (5 tools).\n// Design: 06-api.md §4 Spaces. Read-heavy + update.\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { SPACE_CLASS } from \"./_class-refs.js\";\nimport { workspaceParam, safeUpdateDoc } from \"./_common.js\";\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_spaces\n  defineHulyTool({\n    name: \"list_spaces\",\n    label: \"List spaces\",\n    description: \"List Huly spaces (teamspaces + tracker spaces).\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      includeArchived: z.optional(\n        z.boolean().describe(\"Include archived spaces (default false).\"),\n      ),\n    }),\n    async handler(params, tctx) {\n      // T-81G #107: archived-filter default + widen output (class, privacy).\n      const query: Record<string, unknown> =\n        params.includeArchived === true ? {} : { archived: { $ne: true } };\n      const spaces = await tctx.client.findAll(SPACE_CLASS, query as never, {});\n      const list = spaces.map((s) => ({\n        _id: s._id,\n        name: (s as { name?: string }).name ?? \"\",\n        description: (s as { description?: string }).description,\n        class: (s as { _class?: string })._class,\n        private: (s as { private?: boolean }).private === true,\n        archived: (s as { archived?: boolean }).archived === true,\n      }));\n      return {\n        content: `Found ${list.length} space(s).`,\n        details: { count: list.length, spaces: list },\n      };\n    },\n  }),\n\n  // 2. get_space\n  defineHulyTool({\n    name: \"get_space\",\n    label: \"Get space\",\n    description: \"Get space by id.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      space: z.string(),\n    }),\n    async handler(params, tctx) {\n      // T-81G #107: name-fallback — _id trước, exact name sau, ambiguous → isError.\n      let s = (await tctx.client.findOne(SPACE_CLASS, { _id: params.space })) as {\n        _id: string;\n        _class?: string;\n        name?: string;\n        description?: string;\n        private?: boolean;\n        archived?: boolean;\n      } | null;\n      if (!s) {\n        const byName = (await tctx.client.findAll(SPACE_CLASS, {\n          name: params.space,\n        } as never)) as Array<{\n          _id: string;\n          _class?: string;\n          name?: string;\n        }>;\n        if (byName.length === 0) {\n          return {\n            content: `Space \"${params.space}\" not found (by _id or name).`,\n            isError: true,\n            details: { space: params.space },\n          };\n        }\n        if (byName.length > 1) {\n          return {\n            content: `Space name \"${params.space}\" ambiguous (${byName.length} matches). Use _id.`,\n            isError: true,\n            details: {\n              space: params.space,\n              candidates: byName.map((x) => ({ _id: x._id, name: x.name })),\n            },\n          };\n        }\n        s = byName[0]!;\n      }\n      return {\n        content: `Space ${s.name ?? \"\"}`,\n        details: {\n          _id: s._id,\n          name: s.name,\n          description: s.description,\n          class: s._class,\n          private: s.private === true,\n          archived: s.archived === true,\n        },\n      };\n    },\n  }),\n\n  // 3. list_space_types — T-73: honest-unavailable (fabricated data removed).\n  // Space types = SpaceTypeDescriptor config (drive/class注册), KHÔNG query tự do.\n  // Pi-huly KHÔNG bundle drive plugin → KHÔNG access descriptors honestly.\n  defineHulyTool({\n    name: \"list_space_types\",\n    label: \"List space types\",\n    description:\n      \"UNAVAILABLE — space types = SpaceTypeDescriptor config (drive plugin not \" +\n      \"bundled). Create/browse spaces via Huly UI.\",\n    parameters: z.object({ workspace: workspaceParam }),\n    async handler(_params, _tctx) {\n      return {\n        content:\n          \"list_space_types KHÔNG khả dụng: space types = SpaceTypeDescriptor \" +\n          \"config registered qua drive plugin (pi-huly KHÔNG bundle drive). \" +\n          \"Browse/create spaces qua Huly UI trực tiếp.\",\n        isError: true,\n        details: { reason: \"spacetype_descriptor_inaccessible\" },\n      };\n    },\n  }),\n\n  // 4. get_space_type — T-73: honest-unavailable\n  defineHulyTool({\n    name: \"get_space_type\",\n    label: \"Get space type\",\n    description:\n      \"UNAVAILABLE — space type = SpaceTypeDescriptor config (drive plugin not \" +\n      \"bundled). Browse via Huly UI.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      spaceType: z.string(),\n    }),\n    async handler(_params, _tctx) {\n      return {\n        content:\n          \"get_space_type KHÔNG khả dụng: space type = SpaceTypeDescriptor config \" +\n          \"(drive plugin not bundled). Browse via Huly UI.\",\n        isError: true,\n        details: { reason: \"spacetype_descriptor_inaccessible\" },\n      };\n    },\n  }),\n\n  // 5. update_space\n  defineHulyTool({\n    name: \"update_space\",\n    label: \"Update space\",\n    description: \"Update space (name, description, private, archived, autoJoin).\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      space: z.string(),\n      name: z.optional(z.string()),\n      description: z.optional(z.union([z.string(), z.null()])),\n      // T-81G #107: add private, archived, autoJoin (trusted có 5 fields).\n      private: z.optional(z.boolean()),\n      archived: z.optional(z.boolean()),\n      autoJoin: z.optional(z.boolean()),\n    }),\n    async handler(params, tctx) {\n      const s = await tctx.client.findOne(SPACE_CLASS, { _id: params.space });\n      if (!s) {\n        return {\n          content: `Space \"${params.space}\" not found.`,\n          isError: true,\n          details: { space: params.space },\n        };\n      }\n      const ops: Record<string, unknown> = {};\n      if (params.name !== undefined) ops.name = params.name;\n      if (params.description !== undefined) {\n        if (params.description === null) ops.$unset = { description: \"\" };\n        else ops.description = params.description;\n      }\n      if (params.private !== undefined) ops.private = params.private;\n      if (params.archived !== undefined) ops.archived = params.archived;\n      if (params.autoJoin !== undefined) ops.autoJoin = params.autoJoin;\n      if (Object.keys(ops).length === 0) {\n        return { content: \"No fields to update.\", details: { updated: false } };\n      }\n      const updResult = await safeUpdateDoc(tctx.client, SPACE_CLASS, s, ops);\n      if (!updResult.ok) return updResult.error;\n      const fields = Object.keys(ops).filter((f) => f !== \"$unset\");\n      if (ops.$unset !== undefined) fields.push(\"description(clear)\");\n      return {\n        content: `Updated space ${params.space}: ${fields.join(\", \")}`,\n        details: { updated: true, fields },\n      };\n    },\n  }),\n];\n","// tools/domains/document-snapshots.ts — Document snapshots domain (2 tools).\n// Design: 06-api.md §4 Snapshots. Read-only version history.\n//\n// T-66 (2026-07-28): RE-ENABLE từ honest-unavailable (T-58 conclusion sai).\n// Real class registered trong @hcengineering/document plugin() block —\n// `document:class:DocumentSnapshot`. Verified vs trusted huly-mcp v0.45\n// (document-snapshots.ts:74,80,95,121,139 dùng documentPlugin.class.DocumentSnapshot).\n// Snapshot content = MarkupBlobRef → fetchMarkup.\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { DOCUMENT_SNAPSHOT_CLASS } from \"./_class-refs.js\";\nimport { workspaceParam } from \"./_common.js\";\nimport type { DocumentSnapshotDoc } from \"./_entity-types.js\";\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_document_snapshots — T-66: RE-ENABLED (DOCUMENT_SNAPSHOT_CLASS)\n  defineHulyTool({\n    name: \"list_document_snapshots\",\n    label: \"List document snapshots\",\n    description: \"List document snapshots (version history) for a document.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      document: z.string().describe(\"Document id.\"),\n      limit: z.optional(z.number().describe(\"Max snapshots to return.\")),\n    }),\n    async handler(params, tctx) {\n      // T-85 #120: sort newest-first (trusted createdOn: Descending). T-90: native DocumentSnapshotDoc.\n      const snaps = await tctx.client.findAll<DocumentSnapshotDoc>(\n        DOCUMENT_SNAPSHOT_CLASS,\n        { attachedTo: params.document },\n        {\n          sort: { createdOn: -1 },\n          ...(params.limit !== undefined ? { limit: params.limit } : {}),\n        },\n      );\n      // T-99 (#145): field `_id` (KHÔNG `snapshotId`) — appendDetailsForLLM chỉ\n      // serialize identifier/_id/id → `snapshotId` bị drop → get_document_snapshot\n      // unreachable (dead-end).\n      const list = snaps.map((snap) => ({\n        _id: snap._id,\n        documentId: params.document,\n        title: snap.title,\n        parentDocumentId: snap.parent,\n        createdOn: snap.createdOn,\n        modifiedOn: snap.modifiedOn,\n      }));\n      return {\n        content: `Found ${list.length} snapshot(s) for document \"${params.document}\".`,\n        details: { count: list.length, snapshots: list },\n      };\n    },\n  }),\n\n  // 2. get_document_snapshot — T-66: RE-ENABLED + fetchMarkup content\n  defineHulyTool({\n    name: \"get_document_snapshot\",\n    label: \"Get document snapshot\",\n    description: \"Get a document snapshot content (markdown) by snapshot id.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      snapshot: z.string().describe(\"Snapshot id.\"),\n    }),\n    async handler(params, tctx) {\n      const s = await tctx.client.findOne<DocumentSnapshotDoc>(DOCUMENT_SNAPSHOT_CLASS, {\n        _id: params.snapshot,\n      });\n      if (!s) {\n        return {\n          content: `Snapshot \"${params.snapshot}\" not found.`,\n          isError: true,\n          details: { snapshot: params.snapshot },\n        };\n      }\n      // Snapshot content = MarkupBlobRef → fetchMarkup resolve to markdown.\n      const contentRef = s.content;\n      let content: string | undefined;\n      if (contentRef) {\n        try {\n          content = await tctx.client.fetchMarkup(\n            DOCUMENT_SNAPSHOT_CLASS,\n            s._id,\n            \"content\",\n            contentRef,\n            \"markdown\",\n          );\n        } catch {\n          // Markup fetch fail — return metadata without content.\n        }\n      }\n      // T-99 (#145): body vào content (clone get_document T-88 #123). Trước đây\n      // body chỉ trong details.content → appendDetailsForLLM skip → LLM mất body.\n      const header = `Snapshot ${s.title ?? s._id}${s.createdOn ? ` · ${new Date(s.createdOn).toISOString()}` : \"\"}`;\n      return {\n        content: content !== undefined ? `${header}\\n\\n---\\n${content}` : header,\n        details: {\n          _id: s._id,\n          documentId: s.attachedTo,\n          title: s.title,\n          parentDocumentId: s.parent,\n          createdOn: s.createdOn,\n          modifiedOn: s.modifiedOn,\n          content,\n        },\n      };\n    },\n  }),\n];\n","// tools/domains/labels.ts — Labels domain (4 tools, GLOBAL namespace).\n// Design: 06-api.md §4 Labels. CRUD GLOBAL (KHÔNG project-scoped).\n//\n// T-58 #43 fix (2026-07-28): DEEP-AUDIT 12 packages @0.7.423 — `view:class:Label`\n// KHÔNG tồn tại (0 match interface + class toàn packages). Deprecated — Huly\n// runtime dùng `tags:class:TagElement` cho tag/label entity (đã verify T-43,\n// dùng ở tags.ts). User yêu cầu \"KHÔNG defensive che lỗi\" → honest-unavailable\n// tất cả 4 label tools, hướng dẫn user dùng tag tools (huly_list_tags /\n// huly_create_tag / huly_attach_tag) thay thế.\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { workspaceParam } from \"./_common.js\";\n\n/** Honest-unavailable message cho label tools (deprecated — dùng tag tools). */\nfunction labelUnavailableMessage(operation: string): string {\n  return (\n    `huly_${operation} KHÔNG khả dụng: Huly runtime class \"view:class:Label\" ` +\n    `KHÔNG tồn tại (0 match trong 12 packages @0.7.423 — deprecated). Huly dùng ` +\n    `tags:class:TagElement cho tag/label entity. Dùng tag tools thay thế: ` +\n    `huly_list_tags, huly_create_tag, huly_update_tag, huly_attach_tag, ` +\n    `huly_detach_tag (xem tags domain).`\n  );\n}\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_labels — honest-unavailable (deprecated)\n  defineHulyTool({\n    name: \"list_labels\",\n    label: \"List labels\",\n    description: \"UNAVAILABLE — Label deprecated in Huly runtime. Use huly_list_tags instead.\",\n    parameters: z.object({ workspace: workspaceParam }),\n    async handler(_params, _tctx) {\n      return {\n        content: labelUnavailableMessage(\"list_labels\"),\n        isError: true,\n        details: {\n          reason: \"deprecated\",\n          useClass: \"tags:class:TagElement\",\n          useTool: \"huly_list_tags\",\n        },\n      };\n    },\n  }),\n\n  // 2. create_label — honest-unavailable (deprecated)\n  defineHulyTool({\n    name: \"create_label\",\n    label: \"Create label\",\n    description: \"UNAVAILABLE — Label deprecated in Huly runtime. Use huly_create_tag instead.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      title: z.string(),\n      color: z.optional(z.string()),\n      description: z.optional(z.string()),\n      category: z.optional(z.string()),\n    }),\n    async handler(_params, _tctx) {\n      return {\n        content: labelUnavailableMessage(\"create_label\"),\n        isError: true,\n        details: {\n          reason: \"deprecated\",\n          useClass: \"tags:class:TagElement\",\n          useTool: \"huly_create_tag\",\n        },\n      };\n    },\n  }),\n\n  // 3. update_label — honest-unavailable (deprecated)\n  defineHulyTool({\n    name: \"update_label\",\n    label: \"Update label\",\n    description: \"UNAVAILABLE — Label deprecated in Huly runtime. Use huly_update_tag instead.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      label: z.string(),\n      title: z.optional(z.string()),\n      color: z.optional(z.string()),\n      description: z.optional(z.string()),\n      category: z.optional(z.string()),\n    }),\n    async handler(_params, _tctx) {\n      return {\n        content: labelUnavailableMessage(\"update_label\"),\n        isError: true,\n        details: {\n          reason: \"deprecated\",\n          useClass: \"tags:class:TagElement\",\n          useTool: \"huly_update_tag\",\n        },\n      };\n    },\n  }),\n\n  // 4. delete_label — honest-unavailable (deprecated)\n  defineHulyTool({\n    name: \"delete_label\",\n    label: \"Delete label\",\n    description: \"UNAVAILABLE — Label deprecated in Huly runtime. Use huly_delete_tag instead.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      label: z.string(),\n    }),\n    async handler(_params, _tctx) {\n      return {\n        content: labelUnavailableMessage(\"delete_label\"),\n        isError: true,\n        details: {\n          reason: \"deprecated\",\n          useClass: \"tags:class:TagElement\",\n          useTool: \"huly_delete_tag\",\n        },\n      };\n    },\n  }),\n];\n","// tools/domains/tags.ts — Tags domain (7 tools).\n// Design: 06-api.md §4 Tags. CRUD + attach/detach/list_attached.\n//\n// Tags khác labels: PROJECT-SCOPED (không global). (05-data-model §3)\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { TAG_CLASS, TAG_REFERENCE_CLASS, ISSUE_CLASS, idRef } from \"./_class-refs.js\";\nimport {\n  workspaceParam,\n  projectParam,\n  identifierParam,\n  resolveIdentifier,\n  safeUpdateDoc,\n  safeRemoveDoc,\n  getProjectSpace,\n} from \"./_common.js\";\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_tags — T-73: optional targetClass filter (tags scoped theo class attach)\n  defineHulyTool({\n    name: \"list_tags\",\n    label: \"List tags\",\n    description: \"List tags trong project. Optional targetClass filter (vd tracker:class:Issue).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      targetClass: z.optional(\n        z.string().describe(\"Filter tags theo target class (vd tracker:class:Issue).\"),\n      ),\n    }),\n    async handler(params, tctx) {\n      // T-93 (#139): scope theo project space (tags là PROJECT-SCOPED). Trước đây\n      // findAll không filter → list không thấy tag vừa create (tag tạo sai space).\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const query: Record<string, unknown> = { space };\n      if (params.targetClass !== undefined) query.targetClass = params.targetClass;\n      const tags = await tctx.client.findAll(TAG_CLASS, query as never, {});\n      const list = tags.map((t) => ({\n        _id: t._id,\n        title: (t as { title?: string }).title ?? \"\",\n        color: (t as { color?: string }).color,\n      }));\n      return {\n        content: `Found ${list.length} tag(s).`,\n        details: { count: list.length, tags: list },\n      };\n    },\n  }),\n\n  // 2. create_tag\n  defineHulyTool({\n    name: \"create_tag\",\n    label: \"Create tag\",\n    description: \"Create tag (project-scoped).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      title: z.string(),\n      color: z.optional(z.string()),\n    }),\n    async handler(params, tctx) {\n      // T-103 #160: guard title non-empty.\n      if (params.title.trim() === \"\") {\n        return {\n          content: `create_tag title must be non-empty.`,\n          isError: true,\n          details: { title: params.title },\n        };\n      }\n      // T-93 (#139): tạo trong PROJECT space (project._id self-ref qua\n      // getProjectSpace), KHÔNG spaceRef(tctx.workspace) (workspace-handle string\n      // → tag orphan, list/attach không thấy). File header: tags PROJECT-SCOPED.\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const id = await tctx.client.createDoc(TAG_CLASS, space as never, {\n        title: params.title,\n        color: params.color,\n      });\n      return {\n        content: `Created tag \"${params.title}\".`,\n        details: { id, title: params.title },\n      };\n    },\n  }),\n\n  // 3. update_tag\n  defineHulyTool({\n    name: \"update_tag\",\n    label: \"Update tag\",\n    description: \"Update tag (title, color).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      tag: z.string(),\n      title: z.optional(z.string()),\n      color: z.optional(z.string()),\n    }),\n    async handler(params, tctx) {\n      const t = await tctx.client.findOne(TAG_CLASS, { _id: params.tag });\n      if (!t) {\n        return {\n          content: `Tag \"${params.tag}\" not found.`,\n          isError: true,\n          details: { tag: params.tag },\n        };\n      }\n      const ops: Record<string, unknown> = {};\n      if (params.title !== undefined) {\n        if (params.title.trim() === \"\")\n          return {\n            content: \"title must be non-empty.\",\n            isError: true,\n            details: { title: params.title },\n          };\n        ops.title = params.title;\n      }\n      if (params.color !== undefined) ops.color = params.color;\n      if (Object.keys(ops).length === 0) {\n        return { content: \"No fields to update.\", details: { updated: false } };\n      }\n      const updResult = await safeUpdateDoc(tctx.client, TAG_CLASS, t, ops);\n      if (!updResult.ok) return updResult.error;\n      return {\n        content: `Updated tag ${params.tag}.`,\n        details: { updated: true, fields: Object.keys(ops) },\n      };\n    },\n  }),\n\n  // 4. delete_tag — destructive\n  defineHulyTool({\n    name: \"delete_tag\",\n    label: \"Delete tag\",\n    description: \"Delete tag (destructive).\",\n    destructive: true,\n    needsProject: true,\n    destructiveContext: (p) => ({\n      type: \"tag\",\n      id: (p as { tag?: string }).tag ?? \"<unknown>\",\n    }),\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      tag: z.string(),\n    }),\n    async handler(params, tctx) {\n      const t = await tctx.client.findOne(TAG_CLASS, { _id: params.tag });\n      if (!t) {\n        return {\n          content: `Tag \"${params.tag}\" not found.`,\n          isError: true,\n          details: { tag: params.tag },\n        };\n      }\n      const delResult = await safeRemoveDoc(tctx.client, TAG_CLASS, t);\n      if (!delResult.ok) return delResult.error;\n      return {\n        content: `Deleted tag ${params.tag}.`,\n        details: { deleted: true, tag: params.tag },\n      };\n    },\n  }),\n\n  // 5. list_attached_tags — T-69: findAll TagReference (KHÔNG issue.tags inline)\n  defineHulyTool({\n    name: \"list_attached_tags\",\n    label: \"List attached tags\",\n    description: \"List tags attached to issue.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      // T-69: TagReference là AttachedDoc — findAll collection \"labels\".\n      const refs = await tctx.client.findAll(\n        TAG_REFERENCE_CLASS,\n        {\n          attachedTo: issue._id,\n          attachedToClass: ISSUE_CLASS,\n          collection: \"labels\",\n        } as never,\n        {},\n      );\n      const tags = refs.map((r) => {\n        const ref = r as { _id: string; tag?: string; title?: string; color?: number };\n        return { _id: ref._id, tag: ref.tag, title: ref.title, color: ref.color };\n      });\n      return {\n        content: `Found ${tags.length} tag(s) attached to ${params.identifier}.`,\n        details: { count: tags.length, tags },\n      };\n    },\n  }),\n\n  // 6. attach_tag — T-69: addCollection TagReference (collection \"labels\")\n  defineHulyTool({\n    name: \"attach_tag\",\n    label: \"Attach tag\",\n    description: \"Attach tag to issue. Accepts tag title or _id (resolved title-first).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      tag: z.string().describe(\"Tag title or _id.\"),\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      // T-94 (#140): title-first, _id fallback (mirror add_issue_label). Trước đây\n      // _id-only → dead-end (create_tag/list_tags không surface _id cho LLM).\n      const tag =\n        (await tctx.client.findOne(TAG_CLASS, { title: params.tag })) ??\n        (await tctx.client.findOne(TAG_CLASS, { _id: idRef(params.tag) }));\n      if (!tag) {\n        return {\n          content: `Tag \"${params.tag}\" not found. Create via create_tag first.`,\n          isError: true,\n          details: { identifier: params.identifier, tag: params.tag },\n        };\n      }\n      const tagDoc = tag as { _id: string; title?: string; color?: number | string };\n      // Idempotent: findAll TagReference collection \"labels\" check exists.\n      const existing = await tctx.client.findAll(\n        TAG_REFERENCE_CLASS,\n        {\n          attachedTo: issue._id,\n          attachedToClass: ISSUE_CLASS,\n          collection: \"labels\",\n          tag: tagDoc._id,\n        } as never,\n        {},\n      );\n      if (existing.length > 0) {\n        return {\n          content: `Tag ${params.tag} already attached (no-op).`,\n          details: { attached: true, tag: params.tag, idempotent: true },\n        };\n      }\n      // addCollection TagReference AttachedDoc (collection \"labels\"). Attributes\n      // {tag, title, color:Number} — weight optional, omit khi undefined.\n      const attrs: Record<string, unknown> = {\n        tag: tagDoc._id,\n        title: tagDoc.title ?? params.tag,\n        color: Number(tagDoc.color ?? 0),\n      };\n      const id = await tctx.client.addCollection(\n        TAG_REFERENCE_CLASS,\n        issue.space as never,\n        issue._id as never,\n        ISSUE_CLASS,\n        \"labels\",\n        attrs as never,\n      );\n      return {\n        content: `Attached tag ${params.tag} to ${params.identifier}.`,\n        details: {\n          identifier: params.identifier,\n          tag: params.tag,\n          tagId: tagDoc._id,\n          tagRefId: id,\n        },\n      };\n    },\n  }),\n\n  // 7. detach_tag — T-69: findAll TagReference + removeDoc matching\n  defineHulyTool({\n    name: \"detach_tag\",\n    label: \"Detach tag\",\n    description: \"Detach tag from issue. Accepts tag title or _id (resolved title-first).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      tag: z.string().describe(\"Tag title or _id.\"),\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      // T-94 (#140): title-first, _id fallback (đồng bộ attach_tag).\n      const tag =\n        (await tctx.client.findOne(TAG_CLASS, { title: params.tag })) ??\n        (await tctx.client.findOne(TAG_CLASS, { _id: idRef(params.tag) }));\n      if (!tag) {\n        return {\n          content: `Tag \"${params.tag}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier, tag: params.tag },\n        };\n      }\n      const tagDoc = tag as { _id: string };\n      // findAll TagReference matching tag trên issue.\n      const refs = await tctx.client.findAll(\n        TAG_REFERENCE_CLASS,\n        {\n          attachedTo: issue._id,\n          attachedToClass: ISSUE_CLASS,\n          collection: \"labels\",\n          tag: tagDoc._id,\n        } as never,\n        {},\n      );\n      if (refs.length === 0) {\n        return {\n          content: `Tag ${params.tag} not on ${params.identifier} (no-op).`,\n          details: { detached: false, idempotent: true, tag: params.tag },\n        };\n      }\n      // removeDoc each matching TagReference.\n      for (const r of refs) {\n        const ref = r as { _id: string; space?: string };\n        await tctx.client.removeDoc(\n          TAG_REFERENCE_CLASS,\n          (ref.space ?? issue.space) as never,\n          ref._id as never,\n        );\n      }\n      return {\n        content: `Detached tag ${params.tag} from ${params.identifier}.`,\n        details: {\n          identifier: params.identifier,\n          tag: params.tag,\n          tagId: tagDoc._id,\n          removed: refs.length,\n        },\n      };\n    },\n  }),\n];\n","// tools/domains/tag-categories.ts — Tag categories domain (4 tools).\n// Design: 06-api.md §4 Tag-categories. CRUD.\n//\n// T-77 (2026-07-28): field thật là `label` (KHÔNG `title` — TagCategory.label).\n// reality-checker CONFIRMED vs @hcengineering/tags types. TagElement dùng title,\n// TagCategory dùng label — KHÔNG nhầm.\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { TAG_CATEGORY_CLASS, WORKSPACE_SPACE } from \"./_class-refs.js\";\nimport { workspaceParam, safeUpdateDoc, safeRemoveDoc } from \"./_common.js\";\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_tag_categories\n  defineHulyTool({\n    name: \"list_tag_categories\",\n    label: \"List tag categories\",\n    description: \"List tag categories.\",\n    parameters: z.object({ workspace: workspaceParam }),\n    async handler(_params, tctx) {\n      const cats = await tctx.client.findAll(TAG_CATEGORY_CLASS, {}, {});\n      const list = cats.map((c) => ({\n        _id: c._id,\n        label: (c as { label?: string }).label ?? \"\",\n        targetClass: (c as { targetClass?: string }).targetClass,\n      }));\n      return {\n        content: `Found ${list.length} tag category(ies).`,\n        details: { count: list.length, categories: list },\n      };\n    },\n  }),\n\n  // 2. create_tag_category\n  defineHulyTool({\n    name: \"create_tag_category\",\n    label: \"Create tag category\",\n    description: \"Create tag category.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      label: z.string(),\n      targetClass: z.optional(z.string()),\n    }),\n    async handler(params, tctx) {\n      const id = await tctx.client.createDoc(TAG_CATEGORY_CLASS, WORKSPACE_SPACE, {\n        label: params.label,\n        targetClass: params.targetClass,\n        // T-77: defaults (trusted createTagCategory).\n        icon: \"\",\n        tags: [],\n        default: false,\n      } as never);\n      return {\n        content: `Created tag category \"${params.label}\".`,\n        details: { id, label: params.label },\n      };\n    },\n  }),\n\n  // 3. update_tag_category\n  defineHulyTool({\n    name: \"update_tag_category\",\n    label: \"Update tag category\",\n    description: \"Update tag category (label, targetClass).\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      category: z.string(),\n      label: z.optional(z.string()),\n      targetClass: z.optional(z.string()),\n    }),\n    async handler(params, tctx) {\n      const c = await tctx.client.findOne(TAG_CATEGORY_CLASS, { _id: params.category });\n      if (!c) {\n        return {\n          content: `Tag category \"${params.category}\" not found.`,\n          isError: true,\n          details: { category: params.category },\n        };\n      }\n      const ops: Record<string, unknown> = {};\n      if (params.label !== undefined) ops.label = params.label;\n      if (params.targetClass !== undefined) ops.targetClass = params.targetClass;\n      if (Object.keys(ops).length === 0) {\n        return { content: \"No fields to update.\", details: { updated: false } };\n      }\n      const updResult = await safeUpdateDoc(tctx.client, TAG_CATEGORY_CLASS, c, ops);\n      if (!updResult.ok) return updResult.error;\n      return {\n        content: `Updated tag category ${params.category}.`,\n        details: { updated: true, fields: Object.keys(ops) },\n      };\n    },\n  }),\n\n  // 4. delete_tag_category — destructive\n  defineHulyTool({\n    name: \"delete_tag_category\",\n    label: \"Delete tag category\",\n    description: \"Delete tag category (destructive).\",\n    destructive: true,\n    destructiveContext: (p) => ({\n      type: \"tag category\",\n      id: (p as { category?: string }).category ?? \"<unknown>\",\n    }),\n    parameters: z.object({\n      workspace: workspaceParam,\n      category: z.string(),\n    }),\n    async handler(params, tctx) {\n      const c = await tctx.client.findOne(TAG_CATEGORY_CLASS, { _id: params.category });\n      if (!c) {\n        return {\n          content: `Tag category \"${params.category}\" not found.`,\n          isError: true,\n          details: { category: params.category },\n        };\n      }\n      const delResult = await safeRemoveDoc(tctx.client, TAG_CATEGORY_CLASS, c);\n      if (!delResult.ok) return delResult.error;\n      return {\n        content: `Deleted tag category ${params.category}.`,\n        details: { deleted: true, category: params.category },\n      };\n    },\n  }),\n];\n","// MarkupConverter — markdown ↔ Huly markup wrapper.\n// Design: 04-system.md §6 markup.ts, 01 §B.10 D10 (parser dùng text-markdown).\n//\n// Parser = @hcengineering/text-markdown (markdownToMarkup/markupToMarkdown).\n// Native-ref transform (browse-URL) = reimplement ở T-08b (separate module).\n\n// CJS interop: @hcengineering/text-markdown ships CommonJS → named ESM imports\n// crash at runtime. Default import + destructure.\nimport textMarkdown from \"@hcengineering/text-markdown\";\nimport type { MarkdownOptions } from \"@hcengineering/text-markdown\";\nconst { markdownToMarkup, markupToMarkdown } = textMarkdown;\nimport type { MarkupNode } from \"@hcengineering/text-core\";\n\n/** Re-export MarkupNode type cho consumer. */\nexport type { MarkupNode, MarkdownOptions };\n\n/**\n * Convert markdown → Huly markup node tree.\n * Native-ref transform (md link → native ref) = T-08b (KHÔNG ở đây).\n */\nexport function mdToMarkup(md: string, options?: MarkdownOptions): MarkupNode {\n  return markdownToMarkup(md, options);\n}\n\n/**\n * Convert Huly markup node tree → markdown.\n * Native-ref transform (native ref → md link) = T-08b (KHÔNG ở đây).\n */\nexport function markupToMd(markup: MarkupNode, options?: MarkdownOptions): string {\n  return markupToMarkdown(markup, options);\n}\n\n/**\n * Round-trip: markdown → markup → markdown.\n * Useful cho test (lossless check).\n *\n * Note: KHÔNG guaranteed lossless do markdown dialects khác.\n * R8 native-ref round-trip fidelity = T-08b concern.\n */\nexport function roundTripMd(md: string, options?: MarkdownOptions): string {\n  return markupToMd(mdToMarkup(md, options), options);\n}\n","// tools/domains/comments.ts — Comments domain (4 tools).\n// Design: 06-api.md §4 Comments.\n//\n// T-70 (2026-07-28): field thật là `message` (KHÔNG `body` — gotcha cũ bị\n// ĐẢO ngược). reality-checker CONFIRMED vs trusted comments.ts:150\n// `message: markdownToMarkupString(params.body)`. ChatMessage.message = inline\n// Markup = JSON.stringify(mdToMarkup(md)). KHÔNG MarkupBlobRef (KHÔNG uploadMarkup).\n//\n// Comment = chunter:class:ChatMessage attached to issue (collection \"comments\").\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { CHAT_MESSAGE_CLASS, ISSUE_CLASS } from \"./_class-refs.js\";\nimport {\n  workspaceParam,\n  projectParam,\n  identifierParam,\n  resolveIdentifier,\n  safeUpdateDoc,\n  safeRemoveDoc,\n} from \"./_common.js\";\nimport { mdToMarkup, markupToMd } from \"../../markup/markup.js\";\n\n/** Markdown → inline Huly Markup string (JSON.stringify(markupNode)). */\nfunction markdownToMessage(md: string): string {\n  return JSON.stringify(mdToMarkup(md));\n}\n\n/** Inline Huly Markup string → markdown (round-trip for list read). */\nfunction messageToMarkdown(message: unknown): string | undefined {\n  if (typeof message !== \"string\" || message === \"\") return undefined;\n  try {\n    return markupToMd(JSON.parse(message) as never);\n  } catch {\n    // Non-JSON message (legacy/edge) — return raw.\n    return message;\n  }\n}\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_comments — T-70: filter attachedToClass + read field `message`\n  defineHulyTool({\n    name: \"list_comments\",\n    label: \"List comments\",\n    description: \"List comments trên issue.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      // T-70: query thêm attachedToClass: ISSUE_CLASS (trusted pattern — tránh\n      // trả comments từ attachment/activity khác attach cùng issue).\n      const comments = await tctx.client.findAll(\n        CHAT_MESSAGE_CLASS,\n        { attachedTo: issue._id, attachedToClass: ISSUE_CLASS } as never,\n        { sort: { createdOn: 1 } } as never,\n      );\n      const list = comments.map((c) => {\n        const raw = c as { message?: string; createdOn?: number; modifiedBy?: string };\n        return {\n          _id: c._id,\n          message: messageToMarkdown(raw.message),\n          createdOn: raw.createdOn,\n          modifiedBy: raw.modifiedBy,\n        };\n      });\n      return {\n        content: `Found ${list.length} comment(s) on ${params.identifier}.`,\n        details: { count: list.length, comments: list },\n      };\n    },\n  }),\n\n  // 2. add_comment — T-70: field `message` (inline Markup), KHÔNG `body`\n  defineHulyTool({\n    name: \"add_comment\",\n    label: \"Add comment\",\n    description: \"Add comment to issue. Body param → message field (Huly inline Markup).\",\n    needsProject: true,\n    needsAssignee: true,\n    assigneeField: \"author\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      body: z.string().describe(\"Comment body (markdown).\"),\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      const id = await tctx.client.addCollection(\n        CHAT_MESSAGE_CLASS,\n        issue.space as never,\n        issue._id as never,\n        ISSUE_CLASS,\n        \"comments\",\n        { message: markdownToMessage(params.body) } as never,\n      );\n      return {\n        content: `Comment added to ${params.identifier}.`,\n        details: { id, identifier: params.identifier },\n      };\n    },\n  }),\n\n  // 3. update_comment — T-70: field `message` + editedOn timestamp\n  defineHulyTool({\n    name: \"update_comment\",\n    label: \"Update comment\",\n    description: \"Update comment body (→ message field + editedOn).\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      comment: z.string(),\n      body: z.string(),\n    }),\n    async handler(params, tctx) {\n      const c = await tctx.client.findOne(CHAT_MESSAGE_CLASS, { _id: params.comment });\n      if (!c) {\n        return {\n          content: `Comment \"${params.comment}\" not found.`,\n          isError: true,\n          details: { comment: params.comment },\n        };\n      }\n      const updResult = await safeUpdateDoc(tctx.client, CHAT_MESSAGE_CLASS, c, {\n        message: markdownToMessage(params.body),\n        editedOn: Date.now(),\n      } as never);\n      if (!updResult.ok) return updResult.error;\n      return {\n        content: `Updated comment ${params.comment}.`,\n        details: { updated: true, comment: params.comment },\n      };\n    },\n  }),\n\n  // 4. delete_comment — destructive (không affected by field name)\n  defineHulyTool({\n    name: \"delete_comment\",\n    label: \"Delete comment\",\n    description: \"Delete comment (destructive).\",\n    destructive: true,\n    destructiveContext: (p) => ({\n      type: \"comment\",\n      id: (p as { comment?: string }).comment ?? \"<unknown>\",\n    }),\n    parameters: z.object({\n      workspace: workspaceParam,\n      comment: z.string(),\n    }),\n    async handler(params, tctx) {\n      const c = await tctx.client.findOne(CHAT_MESSAGE_CLASS, { _id: params.comment });\n      if (!c) {\n        return {\n          content: `Comment \"${params.comment}\" not found.`,\n          isError: true,\n          details: { comment: params.comment },\n        };\n      }\n      const delResult = await safeRemoveDoc(tctx.client, CHAT_MESSAGE_CLASS, c);\n      if (!delResult.ok) return delResult.error;\n      return {\n        content: `Deleted comment ${params.comment}.`,\n        details: { deleted: true, comment: params.comment },\n      };\n    },\n  }),\n];\n","// tools/domains/search.ts — Search domain (1 tool, global).\n// Design: 06-api.md §4 Search.\n//\n// T-42 fix (#24): expand query across 3 domains (Issue title, Document title,\n// ChatMessage content) thay vì chỉ Issue.title. $like là client-side regex\n// predicate (audit §3 — % → .*, case-insensitive, anchored). Server có thể\n// KHÔNG support $like → catch + honest error (KHÔNG fake \"Found 0\").\n//\n// T-60 #55 #64 fix (2026-07-28): REMOVE Document domain khỏi search —\n// `tracker:class:Document` interface tồn tại trong source NHƯNG KHÔNG register\n// trong plugin() class block (interface orphan) → runtime fail \"domain not\n// found\" (#55 report 2 lần, T-49 Promise.allSettled chỉ che warning, root cause\n// chưa fix). User yêu cầu \"KHÔNG defensive che lỗi\" → honest remove domain,\n// update tool description rõ Document search KHÔNG available (dùng\n// huly_list_documents trong teamspace cụ thể để browse document).\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { workspaceParam, limitParam, escapeLikePattern } from \"./_common.js\";\nimport { ISSUE_CLASS, CHAT_MESSAGE_CLASS } from \"./_class-refs.js\";\n\n/** Kết quả search từ 1 domain, tag type cho LLM phân biệt. */\ninterface SearchResult {\n  _id: string;\n  type: \"issue\" | \"message\";\n  identifier?: string;\n  title?: string;\n  preview?: string;\n}\n\n/**\n * Query 1 domain với $like substring, return tagged results.\n * Throw nếu server reject $like (caller catch → honest error).\n */\nasync function searchDomain(\n  client: Parameters<Parameters<typeof defineHulyTool>[0][\"handler\"]>[1][\"client\"],\n  _class: string,\n  field: string,\n  query: string,\n  limit: number,\n  type: SearchResult[\"type\"],\n): Promise<SearchResult[]> {\n  const docs = await client.findAll(\n    _class as never,\n    { [field]: { $like: `%${query}%` } } as never,\n    {\n      limit,\n    },\n  );\n  return (docs as unknown as Array<Record<string, unknown>>).map((d) => ({\n    _id: String(d._id ?? \"\"),\n    type,\n    identifier: d.identifier !== undefined ? String(d.identifier) : undefined,\n    title: d.title !== undefined ? String(d.title) : undefined,\n    preview:\n      d.content !== undefined\n        ? String(d.content).slice(0, 120)\n        : d.title !== undefined\n          ? String(d.title).slice(0, 120)\n          : undefined,\n  }));\n}\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. fulltext_search — global (KHÔNG project-scoped)\n  defineHulyTool({\n    name: \"fulltext_search\",\n    label: \"Fulltext search\",\n    description:\n      \"Substring search across Huly workspace: issue titles + message content. \" +\n      \"Uses $like pattern (case-insensitive substring). NOT a fulltext index — \" +\n      \"complex queries may miss partial matches. Document search NOT available \" +\n      \"(Huly tracker:class:Document not registered runtime) — use huly_list_documents \" +\n      \"in a specific teamspace to browse documents. Global across workspace.\",\n    promptSnippet: \"Search Huly issues + messages by substring.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      query: z.string().describe(\"Search query (substring, case-insensitive).\"),\n      limit: limitParam,\n    }),\n    async handler(params, tctx) {\n      const limit = typeof params.limit === \"number\" ? params.limit : 50;\n      // Escape wildcards (% _ \\) tránh injection / unintended pattern.\n      const query = escapeLikePattern(params.query);\n\n      // T-77: prefer searchFulltext API (relevance-ranked fulltext index) khi\n      // available. Fallback $like substring nếu WS transport KHÔNG expose.\n      if (typeof tctx.client.searchFulltext === \"function\") {\n        try {\n          const raw = (await tctx.client.searchFulltext({ query: params.query }, { limit })) as {\n            docs?: Array<Record<string, unknown>>;\n            total?: number;\n          };\n          const docs = raw?.docs ?? [];\n          const results: SearchResult[] = docs.map((d) => {\n            const doc = (d.doc ?? d) as Record<string, unknown>;\n            return {\n              _id: String(doc._id ?? d.id ?? \"\"),\n              type: String(doc._class ?? \"\").includes(\"Issue\") ? \"issue\" : \"message\",\n              identifier: doc.identifier !== undefined ? String(doc.identifier) : undefined,\n              title:\n                d.title !== undefined\n                  ? String(d.title)\n                  : doc.title !== undefined\n                    ? String(doc.title)\n                    : undefined,\n              preview:\n                d.description !== undefined ? String(d.description).slice(0, 120) : undefined,\n            };\n          });\n          return {\n            content: `Found ${results.length} result(s) for \"${params.query}\" (searchFulltext).`,\n            details: {\n              count: results.length,\n              query: params.query,\n              engine: \"searchFulltext\",\n              results,\n            },\n          };\n        } catch {\n          // Fall through to $like fallback.\n        }\n      }\n\n      // T-60: chỉ 2 domain — Issue (title) + ChatMessage (content). Document\n      // domain REMOVE (class not registered runtime — #55 honest unavailable).\n      const domainConfigs: Array<{\n        name: string;\n        type: SearchResult[\"type\"];\n        _class: string;\n        field: string;\n      }> = [\n        { name: \"issues\", type: \"issue\", _class: ISSUE_CLASS, field: \"title\" },\n        { name: \"messages\", type: \"message\", _class: CHAT_MESSAGE_CLASS, field: \"content\" },\n      ];\n\n      try {\n        const settled = await Promise.allSettled(\n          domainConfigs.map((cfg) =>\n            searchDomain(tctx.client, cfg._class, cfg.field, query, limit, cfg.type),\n          ),\n        );\n\n        const results: SearchResult[] = [];\n        const counts: Record<string, number> = {};\n        const failedDomains: Array<{ name: string; reason: string }> = [];\n\n        settled.forEach((s, idx) => {\n          const cfg = domainConfigs[idx];\n          if (s.status === \"fulfilled\") {\n            results.push(...s.value);\n            counts[cfg.name] = s.value.length;\n          } else {\n            // Non-Error rejection (string/number/object) → String() fallback\n            const reason = s.reason instanceof Error ? s.reason.message : String(s.reason);\n            failedDomains.push({ name: cfg.name, reason });\n            counts[cfg.name] = 0;\n          }\n        });\n\n        // All domains failed → isError (KHÔNG fake \"Found 0 results\").\n        if (results.length === 0 && failedDomains.length === domainConfigs.length) {\n          const reasons = failedDomains.map((d) => `${d.name}: ${d.reason}`).join(\"; \");\n          return {\n            content: `All search domains failed: ${reasons}.`,\n            isError: true,\n            details: { query: params.query, failedDomains },\n          };\n        }\n\n        // Build content: partial result + warning nếu có domain fail.\n        const countSummary = domainConfigs\n          .map((cfg) => `${counts[cfg.name]} ${cfg.name}`)\n          .join(\", \");\n        let content = `Found ${results.length} result(s) for \"${params.query}\" (${countSummary}).`;\n        if (failedDomains.length > 0) {\n          const warnings = failedDomains\n            .map((d) => `${d.name} search failed: ${d.reason.slice(0, 100)}`)\n            .join(\" | \");\n          content += ` Warning: ${warnings}.`;\n        }\n\n        return {\n          content,\n          details: {\n            count: results.length,\n            query: params.query,\n            results,\n            failedDomains: failedDomains.length > 0 ? failedDomains : undefined,\n          },\n        };\n      } catch (e) {\n        // Safety net cho unexpected programming errors.\n        const msg = e instanceof Error ? e.message : String(e);\n        return {\n          content: `Search failed unexpectedly: ${msg}.`,\n          isError: true,\n          details: { query: params.query, error: msg },\n        };\n      }\n    },\n  }),\n];\n","// tools/domains/deletion.ts — Deletion preview domain (1 tool).\n// Design: 06-api.md §4 Deletion. Preview cascade trước khi delete.\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { workspaceParam, projectParam, identifierParam, resolveIdentifier } from \"./_common.js\";\nimport { ISSUE_CLASS } from \"./_class-refs.js\";\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. preview_deletion — cascade preview\n  defineHulyTool({\n    name: \"preview_deletion\",\n    label: \"Preview deletion\",\n    description:\n      \"Preview cascade deletion của entity (issues, comments, attachments affected). KHÔNG xóa — preview only.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      _class: z.optional(\n        z.string().describe(\"Entity _class (default: tracker:class:Issue).\"),\n      ),\n    }),\n    async handler(params, tctx) {\n      const cls = (params._class ?? ISSUE_CLASS) as never;\n      const entity = await tctx.client.findOne(cls, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!entity) {\n        return {\n          content: `Entity \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      // T-84 #119: read CollectionSize counters trực tiếp từ entity (subIssues/\n      // comments/attachments) + inline blockedBy/relations. KHÔNG N+1 findAll\n      // (Issue có sẵn counters) + KHÔNG reverseBlocks (dotted-path `blockedBy._id`\n      // broken query — T-80 confirmed trả 0 rows; trusted previewIssueDeletion\n      // không track direction này). total match trusted formula (no +1 entity).\n      const issueFields = entity as {\n        subIssues?: number;\n        comments?: number;\n        attachments?: number;\n        blockedBy?: Array<{ _id?: string }>;\n        relations?: Array<{ _id?: string }>;\n      };\n      const subIssues = issueFields.subIssues ?? 0;\n      const comments = issueFields.comments ?? 0;\n      const attachments = issueFields.attachments ?? 0;\n      const blockedByCount = issueFields.blockedBy?.length ?? 0;\n      const relationsCount = issueFields.relations?.length ?? 0;\n      const cascade = {\n        entity: entity._id,\n        comments,\n        attachments,\n        subIssues,\n        blockedBy: blockedByCount,\n        relations: relationsCount,\n        total: subIssues + comments + attachments + blockedByCount + relationsCount,\n      };\n      const warnings: string[] = [];\n      if (subIssues > 0) warnings.push(`${subIssues} sub-issue(s) orphaned`);\n      if (blockedByCount > 0) warnings.push(`${blockedByCount} blockedBy reference(s) dropped`);\n      if (relationsCount > 0) warnings.push(`${relationsCount} relation(s) dropped`);\n      const warnText = warnings.length > 0 ? ` Warnings: ${warnings.join(\"; \")}.` : \"\";\n      return {\n        content: `Deletion preview for ${params.identifier}: ${cascade.total} item(s) affected (${subIssues} sub-issues + ${comments} comments + ${attachments} attachments + ${blockedByCount} blockedBy + ${relationsCount} relations).${warnText}`,\n        details: { cascade, warnings: warnings.length > 0 ? warnings : undefined },\n      };\n    },\n  }),\n];\n","// tools/domains/time.ts — Time log domain (1 tool).\n// Design: 06-api.md §4 Time.\n//\n// T-74 (2026-07-28): collection \"reports\" (KHÔNG \"timetracking\"), value = hours\n// (Huly native unit, fractional OK — 0.25 = 15min), date + employee fields.\n// reality-checker CONFIRMED vs trusted time.ts + tracker-types.ts.\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { TIME_SPEND_REPORT_CLASS, ISSUE_CLASS, EMPLOYEE_CLASS } from \"./_class-refs.js\";\nimport { workspaceParam, projectParam, identifierParam, resolveIdentifier } from \"./_common.js\";\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. log_time — T-74: value = hours (Huly native unit)\n  defineHulyTool({\n    name: \"log_time\",\n    label: \"Log time\",\n    description:\n      \"Log time on issue (value = HOURS, Huly native unit — 0.25 = 15min, 8 = 1 work day). \" +\n      \"Fractional allowed. Employee resolved từ current user.\",\n    promptSnippet: \"Log time spent on a Huly issue.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      value: z.number().describe(\"Time in HOURS (0.25 = 15min, 8 = 1 day).\").min(0.01),\n      description: z.optional(z.string()),\n    }),\n    async handler(params, tctx) {\n      // T-103 #158: guard value > 0 (schema min 0.01 unenforced — negative =\n      // time corruption, 0 = noise). Reject loudly.\n      if (!(params.value > 0)) {\n        return {\n          content: `log_time value must be > 0 hours (got ${params.value}). Negative corrupts tracked time, 0 is noise.`,\n          isError: true,\n          details: { value: params.value },\n        };\n      }\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      // T-74: resolve current user → Employee ref (best-effort).\n      let employeeRef: string | undefined;\n      try {\n        const user = await tctx.client.getCurrentUser();\n        const emp = await tctx.client.findOne(EMPLOYEE_CLASS, {\n          personUuid: user.id,\n        } as never);\n        employeeRef = emp?._id;\n      } catch {\n        // Resolution fail — omit employee, server may default to current.\n      }\n      const attrs: Record<string, unknown> = {\n        value: params.value,\n        date: Date.now(),\n      };\n      if (params.description !== undefined) attrs.description = params.description;\n      if (employeeRef !== undefined) attrs.employee = employeeRef;\n      // T-74: collection \"reports\" (KHÔNG \"timetracking\" — Issue.reports field).\n      await tctx.client.addCollection(\n        TIME_SPEND_REPORT_CLASS,\n        issue.space as never,\n        issue._id as never,\n        ISSUE_CLASS,\n        \"reports\",\n        attrs as never,\n      );\n      return {\n        content: `Logged ${params.value}h on ${params.identifier}.`,\n        details: {\n          identifier: params.identifier,\n          value: params.value,\n          unit: \"hours\",\n          employee: employeeRef,\n          date: attrs.date,\n        },\n      };\n    },\n  }),\n];\n","// tools/domains/documents.ts — Documents/Teamspaces domain (10 tools).\n// Design: 06-api.md §4 Documents/Teamspaces. Teamspace + Document CRUD.\n//\n// T-66 (2026-07-28): RE-ENABLE từ honest-unavailable (T-58/T-60 conclusion sai).\n// Real class registered trong @hcengineering/document plugin() block — verified\n// vs trusted huly-mcp v0.45. Class refs từ _class-refs.ts (T-65 fix):\n//   TEAMSPACE_CLASS = document:class:Teamspace\n//   DOCUMENT_CLASS  = document:class:Document\n//\n// Teamspace model (verified trusted documents.ts):\n//   - findAll/findOne TEAMSPACE_CLASS (KHÔNG SPACE_CLASS — trả cross all spaces)\n//   - CRUD space param = core.space.Space (root, top-level space parent)\n//   - fields: name, description, private, archived, members, owners\n//   - create needs icon (documentPlugin.icon.Teamspace) + spaceType\n//     (documentPlugin.spaceType.DefaultTeamspaceType) — Ref values từ document\n//     plugin, pi-huly KHÔNG bundle → create_teamspace stays honest-unavailable.\n//\n// Document model (verified trusted documents-edit.ts):\n//   - findAll/findOne DOCUMENT_CLASS + space=teamspace._id (scoping)\n//   - content = MarkupBlobRef → fetchMarkup (get) / uploadMarkup (create, first version) /\n//     updateMarkup (edit existing content in-place — #156; uploadMarkup no-op khi doc tồn tại).\n//   - parent: Ref<Document> (document hierarchy), rank (lexorank)\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport {\n  TEAMSPACE_CLASS,\n  TEAMSPACE_ICON,\n  DEFAULT_TEAMSPACE_TYPE,\n  SPACE_PARENT,\n  DOCUMENT_CLASS,\n  DOCUMENT_NO_PARENT,\n} from \"./_class-refs.js\";\nimport { workspaceParam, limitParam, safeRemoveDoc } from \"./_common.js\";\nimport type { TeamspaceDoc, DocumentDoc } from \"./_entity-types.js\";\n// generateId: Huly _id (24 hex). 0.2.4 — replicated local (src/client/huly-ids.ts)\n// thay vì import @hcengineering/core: bỏ CJS interop (mất func dưới vitest /\n// createRequire break omp loader) + bỏ `as` cast unchecked. Hex 24 = convention\n// Huly (KHÔNG dùng `${DOCUMENT_CLASS}.<rand>` class-prefix).\nimport { generateId } from \"../../client/huly-ids.js\";\n\n/** Teamspace CRUD space = core.space.Space (root, top-level space parent). */\nconst TEAMSPACE_PARENT_SPACE = SPACE_PARENT;\n\nexport const tools: HulyToolDefinition[] = [\n  // === Teamspaces (5) ===\n\n  // 1. list_teamspaces — T-66: TEAMSPACE_CLASS (chỉ trả Teamspace, không lẫn Project/Drive)\n  defineHulyTool({\n    name: \"list_teamspaces\",\n    label: \"List teamspaces\",\n    description: \"List teamspaces (document spaces).\",\n    parameters: z.object({ workspace: workspaceParam, limit: limitParam }),\n    async handler(params, tctx) {\n      const limit = typeof params.limit === \"number\" ? params.limit : 50;\n      // T-88 #123: sort name Ascending (trusted). T-90: native TeamspaceDoc.\n      const spaces = await tctx.client.findAll<TeamspaceDoc>(\n        TEAMSPACE_CLASS,\n        { archived: false },\n        {\n          limit,\n          sort: { name: 1 },\n        },\n      );\n      const list = spaces.map((s) => ({\n        id: s._id,\n        name: s.name ?? \"\",\n        description: s.description,\n        private: s.private ?? false,\n        archived: s.archived ?? false,\n      }));\n      // T-78: surface ids+names trong content (agent đọc content để resolve).\n      const lines = list.map((t) => `- ${t.name} (${t.id})`).join(\"\\n\");\n      return {\n        content:\n          list.length === 0\n            ? \"No teamspaces found.\"\n            : `Found ${list.length} teamspace(s):\\n${lines}`,\n        details: { count: list.length, teamspaces: list },\n      };\n    },\n  }),\n\n  // 2. get_teamspace — T-66: TEAMSPACE_CLASS\n  defineHulyTool({\n    name: \"get_teamspace\",\n    label: \"Get teamspace\",\n    description: \"Get teamspace by id.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      teamspace: z.string(),\n    }),\n    async handler(params, tctx) {\n      const s = await tctx.client.findOne<TeamspaceDoc>(TEAMSPACE_CLASS, { _id: params.teamspace });\n      if (!s) {\n        return {\n          content: `Teamspace \"${params.teamspace}\" not found.`,\n          isError: true,\n          details: { teamspace: params.teamspace },\n        };\n      }\n      // T-88 #123: document count trong teamspace (capped 1000). T-90: native DocumentDoc.\n      const docs = await tctx.client.findAll<DocumentDoc>(\n        DOCUMENT_CLASS,\n        { space: s._id },\n        {\n          limit: 1000,\n        },\n      );\n      return {\n        content: `Teamspace ${s.name ?? \"\"}`,\n        details: {\n          id: s._id,\n          name: s.name,\n          description: s.description,\n          private: s.private,\n          archived: s.archived ?? false,\n          documentCount: docs.length,\n        },\n      };\n    },\n  }),\n\n  // 3. create_teamspace — T-78: implement (string-literal icon/spaceType refs).\n  // Idempotent: return existing nếu name đã tồn tại (archived:false).\n  defineHulyTool({\n    name: \"create_teamspace\",\n    label: \"Create teamspace\",\n    description:\n      \"Create teamspace. Idempotent (returns existing if name exists). \" +\n      \"Returns teamspace id for use in document tools.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      name: z.string(),\n      description: z.optional(z.string()),\n      private: z.optional(z.boolean()),\n    }),\n    async handler(params, tctx) {\n      // Idempotent: findOne by name (archived:false).\n      const existing = await tctx.client.findOne(TEAMSPACE_CLASS, {\n        name: params.name,\n        archived: false,\n      });\n      if (existing) {\n        return {\n          content: `Teamspace \"${params.name}\" already exists (id ${existing._id}).`,\n          details: { id: existing._id, name: params.name, created: false },\n        };\n      }\n      // Account UUID for members/owners.\n      const account = await tctx.client.getAccount();\n      const uuid = account.uuid as string;\n      const id = await tctx.client.createDoc(TEAMSPACE_CLASS, TEAMSPACE_PARENT_SPACE, {\n        name: params.name,\n        description: params.description ?? \"\",\n        private: params.private ?? false,\n        archived: false,\n        members: [uuid],\n        owners: [uuid],\n        icon: TEAMSPACE_ICON,\n        type: DEFAULT_TEAMSPACE_TYPE,\n      } as never);\n      return {\n        content: `Created teamspace \"${params.name}\" (id ${id}).`,\n        details: { id, name: params.name, created: true },\n      };\n    },\n  }),\n\n  // 4. update_teamspace — T-66: TEAMSPACE_CLASS + core.space.Space parent\n  defineHulyTool({\n    name: \"update_teamspace\",\n    label: \"Update teamspace\",\n    description: \"Update teamspace (name, description, private).\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      teamspace: z.string(),\n      name: z.optional(z.string()),\n      description: z.optional(z.string()),\n      private: z.optional(z.boolean()),\n    }),\n    async handler(params, tctx) {\n      const s = await tctx.client.findOne(TEAMSPACE_CLASS, { _id: params.teamspace });\n      if (!s) {\n        return {\n          content: `Teamspace \"${params.teamspace}\" not found.`,\n          isError: true,\n          details: { teamspace: params.teamspace },\n        };\n      }\n      const ops: Record<string, unknown> = {};\n      if (params.name !== undefined) ops.name = params.name;\n      if (params.description !== undefined) ops.description = params.description;\n      if (params.private !== undefined) ops.private = params.private;\n      if (Object.keys(ops).length === 0) {\n        return { content: \"No fields to update.\", details: { updated: false } };\n      }\n      // Teamspace = top-level space, parent space = core.space.Space (root).\n      await tctx.client.updateDoc(\n        TEAMSPACE_CLASS,\n        TEAMSPACE_PARENT_SPACE,\n        s._id as never,\n        ops as never,\n      );\n      return {\n        content: `Updated teamspace ${params.teamspace}.`,\n        details: { updated: true, fields: Object.keys(ops) },\n      };\n    },\n  }),\n\n  // 5. delete_teamspace — destructive. T-66: TEAMSPACE_CLASS + core.space.Space\n  defineHulyTool({\n    name: \"delete_teamspace\",\n    label: \"Delete teamspace\",\n    description: \"Delete teamspace (destructive). Cascade xóa tất cả documents.\",\n    destructive: true,\n    destructiveContext: (p) => ({\n      type: \"teamspace\",\n      id: (p as { teamspace?: string }).teamspace ?? \"<unknown>\",\n    }),\n    parameters: z.object({\n      workspace: workspaceParam,\n      teamspace: z.string(),\n    }),\n    async handler(params, tctx) {\n      const s = await tctx.client.findOne(TEAMSPACE_CLASS, { _id: params.teamspace });\n      if (!s) {\n        return {\n          content: `Teamspace \"${params.teamspace}\" not found.`,\n          isError: true,\n          details: { teamspace: params.teamspace },\n        };\n      }\n      await tctx.client.removeDoc(TEAMSPACE_CLASS, TEAMSPACE_PARENT_SPACE, s._id as never);\n      return {\n        content: `Deleted teamspace ${params.teamspace}.`,\n        details: { deleted: true, teamspace: params.teamspace },\n      };\n    },\n  }),\n\n  // === Documents (5) — T-66: RE-ENABLED (DOCUMENT_CLASS + space scoping) ===\n\n  // 6. list_documents — T-66: DOCUMENT_CLASS + space=teamspace._id\n  defineHulyTool({\n    name: \"list_documents\",\n    label: \"List documents\",\n    description: \"List documents in a teamspace.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      teamspace: z.string(),\n      limit: limitParam,\n      titleSearch: z.optional(z.string()),\n    }),\n    async handler(params, tctx) {\n      const ts = await tctx.client.findOne<TeamspaceDoc>(TEAMSPACE_CLASS, {\n        _id: params.teamspace,\n      });\n      if (!ts) {\n        return {\n          content: `Teamspace \"${params.teamspace}\" not found.`,\n          isError: true,\n          details: { teamspace: params.teamspace },\n        };\n      }\n      const limit = typeof params.limit === \"number\" ? params.limit : 50;\n      const query: Record<string, unknown> = { space: ts._id };\n      if (params.titleSearch) {\n        query.title = { $like: `%${params.titleSearch}%` };\n      }\n      // T-88 #123: sort modifiedOn Descending + output teamspace/modifiedOn. T-90: native DocumentDoc.\n      const docs = await tctx.client.findAll<DocumentDoc>(DOCUMENT_CLASS, query, {\n        limit,\n        sort: { modifiedOn: -1 },\n      });\n      const tsName = ts.name ?? params.teamspace;\n      const list = docs.map((d) => ({\n        id: d._id,\n        title: d.title ?? \"\",\n        teamspace: tsName,\n        modifiedOn: d.modifiedOn,\n      }));\n      // T-88 #123 fix: surface titles+ids trong content (giống list_teamspaces).\n      // Trước đó chỉ count → LLM/consumer không thấy danh sách.\n      const lines = list.map((d) => `- ${d.title || \"(untitled)\"} (${d.id})`).join(\"\\n\");\n      return {\n        content:\n          list.length === 0\n            ? `No documents found in teamspace \"${tsName}\".`\n            : `Found ${list.length} document(s) in teamspace \"${tsName}\":\\n${lines}`,\n        details: { count: list.length, documents: list },\n      };\n    },\n  }),\n\n  // 7. get_document — T-66: DOCUMENT_CLASS + fetchMarkup content\n  defineHulyTool({\n    name: \"get_document\",\n    label: \"Get document\",\n    description: \"Get document by id with full content (markdown).\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      document: z.string(),\n    }),\n    async handler(params, tctx) {\n      const d = await tctx.client.findOne<DocumentDoc>(DOCUMENT_CLASS, { _id: params.document });\n      if (!d) {\n        return {\n          content: `Document \"${params.document}\" not found.`,\n          isError: true,\n          details: { document: params.document },\n        };\n      }\n      // Document.content = MarkupBlobRef → fetchMarkup resolve to markdown.\n      const contentRef = d.content;\n      let content: string | undefined;\n      if (contentRef) {\n        try {\n          content = await tctx.client.fetchMarkup(\n            DOCUMENT_CLASS,\n            d._id,\n            \"content\",\n            contentRef,\n            \"markdown\",\n          );\n        } catch {\n          // Markup fetch fail (blob missing/corrupted) — return metadata without content.\n        }\n      }\n      // T-88 #123: resolve teamspace name + createdOn. T-90: native TeamspaceDoc.\n      let teamspaceName: string | undefined;\n      if (d.space) {\n        const ts = await tctx.client.findOne<TeamspaceDoc>(TEAMSPACE_CLASS, { _id: d.space });\n        teamspaceName = ts?.name;\n      }\n      // T-88 #123 fix: body markdown phải đến content text (LLM đọc document).\n      // Trước đó content chỉ = \"Document <title>\" — body nằm trong details.content\n      // (string, KHÔNG array) → appendDetailsForLLM skip → LLM mất body hoàn toàn.\n      const titleDisplay = d.title?.trim() || \"(untitled)\";\n      const header = `Document \"${titleDisplay}\" (id ${d._id})`;\n      const body = content ?? \"(no content)\";\n      return {\n        content: `${header}\\n\\n---\\n${body}`,\n        details: {\n          id: d._id,\n          title: d.title,\n          teamspace: teamspaceName ?? d.space,\n          createdOn: d.createdOn,\n        },\n      };\n    },\n  }),\n\n  // 8. create_document — T-66: DOCUMENT_CLASS + uploadMarkup content\n  defineHulyTool({\n    name: \"create_document\",\n    label: \"Create document\",\n    description: \"Create document in a teamspace with optional markdown content.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      teamspace: z.string(),\n      title: z.string(),\n      content: z.optional(z.string().describe(\"Markdown content.\")),\n      parent: z.optional(\n        z\n          .string()\n          .describe(\n            \"Parent document title or _id trong cùng teamspace (tạo nested doc). Bỏ qua = top-level.\",\n          ),\n      ),\n    }),\n    async handler(params, tctx) {\n      const ts = await tctx.client.findOne(TEAMSPACE_CLASS, { _id: params.teamspace });\n      if (!ts) {\n        return {\n          content: `Teamspace \"${params.teamspace}\" not found.`,\n          isError: true,\n          details: { teamspace: params.teamspace },\n        };\n      }\n      // T-doc-parent: resolve parent doc (nếu có) — by _id trước, fallback title,\n      // scope trong teamspace. Match huly-mcp findByNameOrId pattern.\n      let parentRef: string = DOCUMENT_NO_PARENT;\n      if (params.parent !== undefined) {\n        const byId = await tctx.client.findOne<DocumentDoc>(DOCUMENT_CLASS, {\n          _id: params.parent as never,\n          space: ts._id as never,\n        } as never);\n        const parentDoc =\n          byId ??\n          (await tctx.client.findOne<DocumentDoc>(DOCUMENT_CLASS, {\n            title: params.parent,\n            space: ts._id as never,\n          } as never));\n        if (!parentDoc) {\n          return {\n            content: `Parent document \"${params.parent}\" not found in teamspace \"${\n              (ts as { name?: string }).name ?? params.teamspace\n            }\" (by _id or title).`,\n            isError: true,\n            details: { parent: params.parent, teamspace: ts._id },\n          };\n        }\n        parentRef = parentDoc._id;\n      }\n      // T-doc-parent: generateId() (hex 24, convention Huly) — KHÔNG `${DOCUMENT_CLASS}.<rand>`.\n      const docId = generateId();\n      let contentRef: unknown = null;\n      if (params.content && params.content.trim() !== \"\") {\n        contentRef = await tctx.client.uploadMarkup(\n          DOCUMENT_CLASS,\n          docId,\n          \"content\",\n          params.content,\n          \"markdown\",\n        );\n      }\n      const newId = await tctx.client.createDoc(\n        DOCUMENT_CLASS,\n        ts._id as never,\n        {\n          title: params.title,\n          content: contentRef,\n          // T-doc-parent: top-level marker hoặc parent doc._id (nested).\n          // Web Documents tree query top-level = { parent: \"document:ids:NoParent\" }.\n          parent: parentRef,\n        } as never,\n        docId as never,\n      );\n      return {\n        content: `Created document \"${params.title}\" in teamspace \"${\n          (ts as { name?: string }).name ?? params.teamspace\n        }\"${params.parent ? ` under \"${params.parent}\"` : \" (top-level)\"}.`,\n        details: { id: newId, title: params.title, teamspace: ts._id, parent: parentRef },\n      };\n    },\n  }),\n\n  // 9. edit_document — T-66: DOCUMENT_CLASS + uploadMarkup+updateDoc (no updateMarkup)\n  defineHulyTool({\n    name: \"edit_document\",\n    label: \"Edit document\",\n    description: \"Edit document. Either full content replace OR search-and-replace.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      document: z.string(),\n      old_text: z.optional(z.string()),\n      new_text: z.optional(z.string()),\n      content: z.optional(z.string().describe(\"Full new content (markdown).\")),\n      replace_all: z.optional(\n        z.boolean().describe(\"true nếu old_text match nhiều (default false).\"),\n      ),\n    }),\n    async handler(params, tctx) {\n      const d = await tctx.client.findOne(DOCUMENT_CLASS, { _id: params.document });\n      if (!d) {\n        return {\n          content: `Document \"${params.document}\" not found.`,\n          isError: true,\n          details: { document: params.document },\n        };\n      }\n      const existingContentRef = (d as { content?: unknown }).content;\n      // T-103 #156: createMarkup (uploadMarkup/createContent rpc) KHÔNG update\n      // document đã tồn tại (content unchanged + 0 snapshot). Dùng updateMarkup\n      // (updateContent rpc) — edit operation đúng cho existing doc content.\n      const saveContent = async (text: string): Promise<void> => {\n        await tctx.client.updateMarkup!(DOCUMENT_CLASS, d._id, \"content\", text, \"markdown\");\n      };\n\n      // Mode validation: content vs old_text/new_text mutually exclusive.\n      if (params.content !== undefined && (params.old_text || params.new_text)) {\n        return {\n          content: \"edit_document: content cannot combine with old_text/new_text.\",\n          isError: true,\n          details: { document: params.document },\n        };\n      }\n\n      // Mode 1: full content replace.\n      if (params.content !== undefined) {\n        const newContent = params.content.trim() === \"\" ? \"\" : params.content;\n        await saveContent(newContent);\n        return {\n          content: `Updated document ${params.document} content.`,\n          details: { updated: true, mode: \"content-replace\", document: d._id },\n        };\n      }\n\n      // Mode 2: search-and-replace.\n      if (params.old_text !== undefined && params.new_text !== undefined) {\n        if (!existingContentRef) {\n          return {\n            content: `Document \"${params.document}\" has no content to search.`,\n            isError: true,\n            details: { document: params.document },\n          };\n        }\n        const current = await tctx.client.fetchMarkup(\n          DOCUMENT_CLASS,\n          d._id,\n          \"content\",\n          existingContentRef,\n          \"markdown\",\n        );\n        const idx = current.indexOf(params.old_text);\n        if (idx === -1) {\n          return {\n            content: `Text not found in document \"${params.document}\".`,\n            isError: true,\n            details: { document: params.document, search: params.old_text },\n          };\n        }\n        const occurrences = current.split(params.old_text).length - 1;\n        if (occurrences > 1 && !params.replace_all) {\n          return {\n            content: `Text matches ${occurrences} times. Set replace_all=true to replace all.`,\n            isError: true,\n            details: { document: params.document, matches: occurrences },\n          };\n        }\n        const updated = params.replace_all\n          ? current.split(params.old_text).join(params.new_text)\n          : current.substring(0, idx) +\n            params.new_text +\n            current.substring(idx + params.old_text.length);\n        await saveContent(updated);\n        return {\n          content: `Updated document ${params.document} (search-replace).`,\n          details: {\n            updated: true,\n            mode: \"search-replace\",\n            replaced: params.replace_all ? occurrences : 1,\n            document: d._id,\n          },\n        };\n      }\n\n      return {\n        content: \"edit_document: provide content OR old_text+new_text.\",\n        isError: true,\n        details: { document: params.document },\n      };\n    },\n  }),\n\n  // 10. delete_document — destructive. T-66: DOCUMENT_CLASS + space from doc\n  defineHulyTool({\n    name: \"delete_document\",\n    label: \"Delete document\",\n    description: \"Delete document (destructive).\",\n    destructive: true,\n    destructiveContext: (p) => ({\n      type: \"document\",\n      id: (p as { document?: string }).document ?? \"<unknown>\",\n    }),\n    parameters: z.object({\n      workspace: workspaceParam,\n      document: z.string(),\n    }),\n    async handler(params, tctx) {\n      const d = await tctx.client.findOne(DOCUMENT_CLASS, { _id: params.document });\n      if (!d) {\n        return {\n          content: `Document \"${params.document}\" not found.`,\n          isError: true,\n          details: { document: params.document },\n        };\n      }\n      const delResult = await safeRemoveDoc(tctx.client, DOCUMENT_CLASS, d);\n      if (!delResult.ok) return delResult.error;\n      return {\n        content: `Deleted document ${params.document}.`,\n        details: { deleted: true, document: params.document },\n      };\n    },\n  }),\n];\n","// tools/domains/issues-hierarchy.ts — Issue parent/child hierarchy helpers.\n//\n// T-68 (2026-07-28): Huly models issue hierarchy qua AttachedDoc fields:\n//   - attachedTo:      Ref<Issue> — parent issue _id (top-level = NoParent \"\")\n//   - attachedToClass: Ref<Class>  — tracker:class:Issue\n//   - collection:      \"subIssues\" — Huly collection name\n//   - parents:         IssueParentInfo[] — breadcrumb (grandparents → direct parent)\n//   - subIssues:       number — count of direct children\n//\n// Field `parentIssue` KHÔNG tồn tại runtime (T-68 root cause — trusted\n// issues-parent.ts dùng attachedTo/attachedToClass/collection/parents).\n//\n// Port từ trusted issues-parent.ts + issues-move.ts (adapted: string-literal\n// class refs, direct async/await thay Effect, HulyClient interface pi-huly).\n\nimport type { HulyClient } from \"../../client/client.js\";\nimport { ISSUE_CLASS, NO_PARENT_REF } from \"./_class-refs.js\";\n\n/** IssueParentInfo shape (Huly tracker): breadcrumb entry cho parent chain. */\nexport interface IssueParentInfo {\n  parentId: string;\n  identifier: string;\n  parentTitle: string;\n  space: string;\n}\n\n/** Minimal issue shape cho hierarchy ops (chỉ cần fields hierarchy). */\nexport interface IssueHierarchyFields {\n  _id: string;\n  identifier?: string;\n  title?: string;\n  attachedTo?: string;\n  attachedToClass?: string;\n  subIssues?: number;\n  parents?: IssueParentInfo[];\n  space?: string;\n}\n\n/** Parent data cần set khi attach issue làm child (hoặc top-level). */\nexport interface IssueParentData {\n  attachedTo: string; // Ref<Issue> or NoParent \"\"\n  attachedToClass: string; // ISSUE_CLASS\n  collection: \"subIssues\";\n  parents: IssueParentInfo[];\n}\n\n/** Build parent data cho top-level issue (NoParent sentinel). */\nexport function topLevelIssueParent(): IssueParentData {\n  return {\n    attachedTo: NO_PARENT_REF as string,\n    attachedToClass: ISSUE_CLASS as string,\n    collection: \"subIssues\",\n    parents: [],\n  };\n}\n\n/** Build parent data cho child issue (attached to parentIssue). */\nexport function childIssueParent(\n  parentIssue: Pick<IssueHierarchyFields, \"_id\" | \"identifier\" | \"parents\" | \"title\">,\n  projectSpace: string,\n): IssueParentData {\n  return {\n    attachedTo: parentIssue._id,\n    attachedToClass: ISSUE_CLASS as string,\n    collection: \"subIssues\",\n    parents: [\n      ...((parentIssue.parents as IssueParentInfo[] | undefined) ?? []),\n      {\n        parentId: parentIssue._id,\n        identifier: parentIssue.identifier ?? \"\",\n        parentTitle: parentIssue.title ?? \"\",\n        space: projectSpace,\n      },\n    ],\n  };\n}\n\n/** Check nếu issue có parent là issue (KHÔNG phải top-level NoParent). */\nexport function hasConcreteIssueParent(\n  issue: Pick<IssueHierarchyFields, \"attachedTo\" | \"attachedToClass\">,\n): boolean {\n  return (\n    issue.attachedToClass === (ISSUE_CLASS as string) &&\n    issue.attachedTo !== (NO_PARENT_REF as string) &&\n    issue.attachedTo !== undefined &&\n    issue.attachedTo !== \"\"\n  );\n}\n\n/**\n * Attach issue làm child của parentIssue:\n *   1. updateDoc issue: set attachedTo/attachedToClass/collection/parents + extra ops\n *   2. updateDoc parentIssue: $inc subIssues +1\n *\n * Non-atomic (2 thao tác riêng, khớp trusted attachIssueChild).\n */\nexport async function attachIssueChild(\n  client: HulyClient,\n  projectSpace: string,\n  childId: string,\n  parentIssue: Pick<IssueHierarchyFields, \"_id\" | \"identifier\" | \"parents\" | \"title\">,\n  additionalUpdate: Record<string, unknown>,\n): Promise<void> {\n  const parent = childIssueParent(parentIssue, projectSpace);\n  await client.updateDoc(\n    ISSUE_CLASS,\n    projectSpace as never,\n    childId as never,\n    {\n      ...additionalUpdate,\n      attachedTo: parent.attachedTo,\n      attachedToClass: parent.attachedToClass,\n      collection: parent.collection,\n      parents: parent.parents,\n    } as never,\n  );\n  await client.updateDoc(\n    ISSUE_CLASS,\n    projectSpace as never,\n    parentIssue._id as never,\n    { $inc: { subIssues: 1 } } as never,\n  );\n}\n\n/**\n * Recursively update parents[] breadcrumb trên tất cả descendants khi 1 issue\n * được move. Mỗi descendant giữ chain cũ NHƯNG prepend new ancestor chain.\n *\n * Port từ trusted updateDescendantParents (issues-move.ts:161-188).\n */\nexport async function updateDescendantParents(\n  client: HulyClient,\n  spaceId: string,\n  parentIssue: IssueHierarchyFields,\n  parentNewParents: IssueParentInfo[],\n): Promise<void> {\n  const thisParentInfo: IssueParentInfo = {\n    parentId: parentIssue._id,\n    identifier: parentIssue.identifier ?? \"\",\n    parentTitle: parentIssue.title ?? \"\",\n    space: spaceId,\n  };\n  const children = (await client.findAll(ISSUE_CLASS, {\n    attachedTo: parentIssue._id,\n    space: spaceId,\n  } as never)) as IssueHierarchyFields[];\n  for (const child of children) {\n    const childNewParents = [...parentNewParents, thisParentInfo];\n    await client.updateDoc(\n      ISSUE_CLASS,\n      spaceId as never,\n      child._id as never,\n      { parents: childNewParents } as never,\n    );\n    if ((child.subIssues ?? 0) > 0) {\n      await updateDescendantParents(client, spaceId, child, childNewParents);\n    }\n  }\n}\n","// tools/domains/issues-core.ts — Issues core domain (8 tools).\n// Design: 06-api.md §4 Issues (subset). List/get/create/update/delete/move + labels.\n//\n// Tools (8, FR-04 D4):\n//   1. list_issues      2. get_issue      3. create_issue\n//   4. update_issue     5. delete_issue   6. move_issue\n//   7. add_issue_label  8. remove_issue_label\n//\n// Assignee default: D15 FR-18 (currentUser email khi absent).\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport {\n  ISSUE_CLASS,\n  PROJECT_CLASS,\n  PERSON_CLASS,\n  COMPONENT_CLASS,\n  TAG_REFERENCE_CLASS,\n  TAG_CLASS,\n  idRef,\n  NO_PARENT_REF,\n  ISSUE_KIND_REF,\n} from \"./_class-refs.js\";\nimport type { TagElementDoc, TagReferenceDoc } from \"./_entity-types.js\";\nimport {\n  topLevelIssueParent,\n  attachIssueChild,\n  hasConcreteIssueParent,\n  updateDescendantParents,\n  type IssueHierarchyFields,\n} from \"./issues-hierarchy.js\";\nimport {\n  workspaceParam,\n  projectParam,\n  identifierParam,\n  prioritySchema,\n  statusCategorySchema,\n  resolveIdentifier,\n  escapeLikePattern,\n  safeUpdateDoc,\n  safeRemoveDoc,\n  getProjectSpace,\n  getProjectStatuses,\n} from \"./_common.js\";\nimport { findPersonByEmailOrName } from \"./contacts.js\";\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_issues\n  defineHulyTool({\n    name: \"list_issues\",\n    label: \"List issues\",\n    description:\n      \"List issues trong project. Filter by status, statusCategory, assignee, component, parentIssue, titleSearch.\",\n    promptSnippet: \"List Huly issues in a project.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      status: z.optional(\n        z.string().describe(\"IssueStatus name or _id (resolved → Ref). See huly_list_statuses.\"),\n      ),\n      statusCategory: statusCategorySchema,\n      assignee: z.optional(z.string()),\n      component: z.optional(z.string().describe(\"Component label or _id (resolved → Ref).\")),\n      parentIssue: z.optional(z.string()),\n      titleSearch: z.optional(z.string()),\n      limit: z.optional(z.number().int().min(1)),\n    }),\n    async handler(params, tctx) {\n      const limit = typeof params.limit === \"number\" ? params.limit : 50;\n      // T-71: space scoping — project._id = space (canonical, thay identifier $like).\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const query: Record<string, unknown> = { space };\n      // T-102 #153: status resolve name → IssueStatus._id (mirror update_issue T-98).\n      // Issue.status = Ref<IssueStatus>, raw name → 0 match. Match _id exact trước,\n      // fallback name. Invalid → isError + list valid. Empty workflow → isError.\n      if (params.status !== undefined) {\n        const projectStatuses = await getProjectStatuses(tctx.client, tctx.project!);\n        if (!projectStatuses) {\n          return {\n            content: `Project \"${tctx.project}\" not found.`,\n            isError: true,\n            details: { project: tctx.project },\n          };\n        }\n        const statuses = projectStatuses.statuses;\n        if (statuses.length === 0) {\n          return {\n            content:\n              \"No workflow statuses configured for this project. \" +\n              \"Set up project workflow first (huly_create_issue_status).\",\n            isError: true,\n            details: { requestedStatus: params.status, noStatusesConfigured: true },\n          };\n        }\n        const requested = params.status.trim();\n        const byId = statuses.find((s) => s._id === requested);\n        const byName = statuses.find((s) => s.name === requested);\n        const match = byId ?? byName;\n        if (match === undefined) {\n          const valid = statuses\n            .map((s) => s.name)\n            .filter((n) => n.length > 0)\n            .join(\", \");\n          return {\n            content: `Invalid status \"${params.status}\". Valid statuses: ${valid}.`,\n            isError: true,\n            details: { invalidStatus: params.status, validStatuses: statuses.map((s) => s.name) },\n          };\n        }\n        query.status = match._id;\n      }\n      if (params.statusCategory !== undefined) query.statusCategory = params.statusCategory;\n      // T-71: assignee resolve email/name → Person._id (Issue.assignee = Ref<Person>).\n      if (params.assignee !== undefined) {\n        const personId = await findPersonByEmailOrName(\n          tctx.client,\n          params.assignee,\n          tctx.currentUser,\n        );\n        if (!personId) {\n          return {\n            content: `Assignee \"${params.assignee}\" not found (no Person matching email/name).`,\n            isError: true,\n            details: { assignee: params.assignee },\n          };\n        }\n        query.assignee = personId;\n      }\n      // T-102 #153: component resolve label/_id → Component._id (mirror\n      // set_issue_component T-81G). Issue.component = Ref<Component>, raw label\n      // → 0 match. Try _id first, then label. Both miss → isError.\n      if (params.component !== undefined) {\n        let component = await tctx.client.findOne(COMPONENT_CLASS, {\n          _id: params.component,\n          space,\n        } as never);\n        if (!component) {\n          component = await tctx.client.findOne(COMPONENT_CLASS, {\n            label: params.component,\n            space,\n          } as never);\n        }\n        if (!component) {\n          return {\n            content: `Component \"${params.component}\" not found (by _id or label).`,\n            isError: true,\n            details: { component: params.component },\n          };\n        }\n        query.component = (component as { _id: string })._id;\n      }\n      // T-68: parentIssue filter → resolve identifier → _id, query.attachedTo.\n      if (params.parentIssue !== undefined) {\n        const parent = await tctx.client.findOne(ISSUE_CLASS, {\n          identifier: resolveIdentifier(tctx.project!, params.parentIssue),\n        });\n        if (!parent) {\n          return {\n            content: `Parent issue \"${params.parentIssue}\" not found.`,\n            isError: true,\n            details: { parentIssue: params.parentIssue },\n          };\n        }\n        query.attachedTo = parent._id;\n      }\n      // T-71: titleSearch ADD filter (KHÔNG xóa space — tránh leak cross-project).\n      if (params.titleSearch !== undefined) {\n        query.title = { $like: `%${escapeLikePattern(params.titleSearch)}%` };\n      }\n      const issues = await tctx.client.findAll(ISSUE_CLASS, query, { limit });\n      const list = issues.map((i) => ({\n        identifier: (i as { identifier?: string }).identifier ?? \"\",\n        title: (i as { title?: string }).title ?? \"\",\n        status: (i as { status?: string }).status,\n        priority: (i as { priority?: string }).priority,\n        assignee: (i as { assignee?: string }).assignee,\n      }));\n      return {\n        content: `Found ${list.length} issue(s).`,\n        details: { count: list.length, issues: list },\n      };\n    },\n  }),\n\n  // 2. get_issue\n  defineHulyTool({\n    name: \"get_issue\",\n    label: \"Get issue\",\n    description: \"Get issue detail by identifier.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      const f = issue as {\n        _id?: string;\n        identifier?: string;\n        title?: string;\n        description?: string | null;\n        status?: string;\n        priority?: string;\n        assignee?: string;\n        milestone?: string;\n        component?: string;\n        dueDate?: number;\n        estimation?: number;\n        parents?: Array<{ _id?: string; identifier?: string }>;\n        subIssues?: number;\n        modifiedOn?: number;\n        createdOn?: number;\n      };\n      // T-41 #23: Issue.description là MarkupBlobRef (document ref), KHÔNG inline\n      // markup string. fetchMarkup resolve ref → markdown content qua collaborator.\n      // Null/undefined description → skip. fetchMarkup fail → fallback descriptionRef\n      // rõ ràng cho LLM (tránh trả ref string vô nghĩa).\n      let description: string | undefined;\n      let descriptionRef: string | undefined;\n      if (f.description !== null && f.description !== undefined && f._id !== undefined) {\n        try {\n          const markup = await tctx.client.fetchMarkup(\n            ISSUE_CLASS,\n            f._id,\n            \"description\",\n            f.description,\n            \"markdown\",\n          );\n          description = typeof markup === \"string\" ? markup : undefined;\n        } catch {\n          // fetchMarkup fail (ref stale / collaborator down / REST transport) →\n          // fallback descriptionRef rõ ràng, không trả ref vô nghĩa cho LLM.\n          descriptionRef = f.description;\n        }\n      }\n      // T-80 #103: resolve raw refs → human names. status _id → name (qua\n      // getProjectStatuses ProjectType traversal). assignee Person _id → name.\n      // labels = TagReference attachedTo issue. parentIssue = parents[last].\n      let statusName = f.status;\n      if (f.status !== undefined) {\n        const projectStatuses = await getProjectStatuses(tctx.client, tctx.project!);\n        const match = projectStatuses?.statuses.find((s) => s._id === f.status);\n        if (match) statusName = match.name;\n      }\n      let assigneeName: string | undefined;\n      if (f.assignee !== undefined && f.assignee !== null) {\n        const person = await tctx.client.findOne(PERSON_CLASS, { _id: f.assignee } as never);\n        assigneeName = (person as { name?: string } | null)?.name;\n      }\n      let labels: Array<{ title?: unknown; color?: unknown }> = [];\n      if (f._id !== undefined) {\n        const tagRefs = (await tctx.client.findAll(TAG_REFERENCE_CLASS, {\n          attachedTo: f._id,\n        } as never)) as Array<{ title?: unknown; color?: unknown }>;\n        labels = tagRefs;\n      }\n      const directParent =\n        f.parents !== undefined && f.parents.length > 0\n          ? f.parents[f.parents.length - 1]\n          : undefined;\n      return {\n        content:\n          `${f.identifier}: ${f.title ?? \"\"}\\n\\n` +\n          `Status: ${statusName ?? \"?\"} · Priority: ${f.priority ?? \"?\"} · Assignee: ${assigneeName ?? \"?\"}\\n\\n` +\n          `${description ?? \"\"}`,\n        details: {\n          identifier: f.identifier,\n          title: f.title,\n          description,\n          descriptionRef,\n          status: statusName,\n          statusRef: f.status,\n          priority: f.priority,\n          assignee: assigneeName,\n          assigneeRef: f.assignee,\n          milestone: f.milestone,\n          component: f.component,\n          dueDate: f.dueDate,\n          estimation: f.estimation,\n          parentIssue: directParent?.identifier,\n          subIssues: f.subIssues,\n          labels: labels.map((l) => ({ title: l.title, color: l.color })),\n          modifiedOn: f.modifiedOn,\n          createdOn: f.createdOn,\n        },\n      };\n    },\n  }),\n\n  // 3. create_issue\n  defineHulyTool({\n    name: \"create_issue\",\n    label: \"Create issue\",\n    description:\n      \"Create issue. Assignee absent → default currentUser email (D15). Description = markdown.\",\n    promptSnippet: \"Create a new Huly issue.\",\n    needsProject: true,\n    needsAssignee: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      title: z.string(),\n      description: z.optional(z.string()),\n      priority: prioritySchema,\n      assignee: z.optional(z.string()),\n      status: z.optional(z.string()),\n      taskType: z.optional(z.string()),\n      parentIssue: z.optional(z.string()),\n      dueDate: z.optional(z.number().int()),\n      estimation: z.optional(z.number().int()),\n    }),\n    async handler(params, tctx) {\n      // T-103 #159: guard title non-empty (trim). Empty/whitespace title = garbage\n      // issue (no subject). Schema lacks minLength; server accepts empty.\n      if (params.title.trim() === \"\") {\n        return {\n          content: `create_issue title must be non-empty (got \"${params.title}\"). An issue needs a subject.`,\n          isError: true,\n          details: { title: params.title },\n        };\n      }\n      const project = await tctx.client.findOne(PROJECT_CLASS, {\n        identifier: tctx.project,\n      });\n      if (!project) {\n        return {\n          content: `Project \"${tctx.project}\" not found. Run /huly init or check binding.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      // T-67 #75: $inc sequence trên Project → lấy sequence number (atomic, tránh\n      // race duplicate identifier). trusted issues-write.ts:133.\n      const incResult = await tctx.client.updateDoc(\n        PROJECT_CLASS,\n        \"core:space:Space\" as never,\n        project._id as never,\n        { $inc: { sequence: 1 } } as never,\n        true,\n      );\n      // Extract sequence từ txResult (Huly trả { object: { sequence: N } }).\n      const seqRaw = (incResult as { object?: { sequence?: number } })?.object?.sequence;\n      const sequence =\n        typeof seqRaw === \"number\"\n          ? seqRaw\n          : ((project as { sequence?: number }).sequence ?? 0) + 1;\n      const identifier = `${(project as { identifier?: string }).identifier ?? tctx.project}-${sequence}`;\n\n      // T-72 #80: description = MarkupBlobRef (KHÔNG inline string). uploadMarkup\n      // trả ref → gán vào description. Format \"markdown\" — client parse md→markup.\n      const issueId = `tracker:issue.${Math.random().toString(36).slice(2, 14)}`;\n      let descriptionRef: unknown = null;\n      if (params.description !== undefined && params.description.trim() !== \"\") {\n        descriptionRef = await tctx.client.uploadMarkup(\n          ISSUE_CLASS,\n          issueId,\n          \"description\",\n          params.description,\n          \"markdown\",\n        );\n      }\n      // T-95 (#141): resolve assignee email/name → Person._id (mirror update_issue).\n      // Trước đây push raw email string vào Ref<Person> → garbage ref, get_issue\n      // render \"Assignee: ?\". Builder D15 fill params.assignee = currentUser.email\n      // khi absent → resolve ở đây.\n      // Resilient: default-assignee (== currentUser.email) KHÔNG resolve → fallback\n      // null (unassigned, KHÔNG garbage, KHÔNG fail create — tránh workspace user\n      // chưa có email Channel block toàn bộ create). Explicit assignee KHÔNG resolve\n      // → error rõ (user yêu cầu người cụ thể).\n      let assigneeRef: string | null = null;\n      if (params.assignee !== undefined && params.assignee !== null && params.assignee !== \"\") {\n        const personId = await findPersonByEmailOrName(\n          tctx.client,\n          params.assignee,\n          tctx.currentUser,\n        );\n        const isDefault = params.assignee === tctx.currentUser.email;\n        if (!personId && !isDefault) {\n          return {\n            content: `Assignee \"${params.assignee}\" not found (no Person matching email/name). Issue not created.`,\n            isError: true,\n            details: { assignee: params.assignee },\n          };\n        }\n        assigneeRef = personId ?? null; // default không resolve → null (unassigned)\n      }\n      // T-98 (#144): resolve status name → IssueStatus._id (mirror update_issue).\n      // Trước đây push raw name string vào Ref<IssueStatus> → server silent-reject,\n      // status lost. Guard: chỉ resolve khi params.status provided; statuses rỗng\n      // (workspace chưa config workflow) → leave undefined (server default, KHÔNG\n      // fail create); provided + statuses exist + no match → error rõ.\n      let statusRef: string | undefined;\n      if (params.status !== undefined && params.status !== \"\") {\n        const projectStatuses = await getProjectStatuses(tctx.client, tctx.project!);\n        if (projectStatuses && projectStatuses.statuses.length > 0) {\n          const requested = params.status.trim();\n          const match =\n            projectStatuses.statuses.find((s) => s._id === requested) ??\n            projectStatuses.statuses.find((s) => s.name === requested);\n          if (!match) {\n            const valid = projectStatuses.statuses\n              .map((s) => s.name)\n              .filter(Boolean)\n              .join(\", \");\n            return {\n              content: `Invalid status \"${params.status}\". Valid statuses: ${valid}. Issue not created.`,\n              isError: true,\n              details: {\n                invalidStatus: params.status,\n                validStatuses: projectStatuses.statuses.map((s) => s.name),\n              },\n            };\n          }\n          statusRef = match._id;\n        }\n        // statuses empty → leave undefined (server default), don't block create.\n      }\n      const id = await tctx.client.addCollection(\n        ISSUE_CLASS,\n        project._id as never, // space = project (issues live trong project space)\n        NO_PARENT_REF, // attachedTo = NoParent sentinel (top-level)\n        ISSUE_CLASS, // attachedToClass\n        \"subIssues\", // collection\n        {\n          title: params.title,\n          description: descriptionRef,\n          priority: params.priority,\n          assignee: assigneeRef,\n          status: statusRef,\n          number: sequence,\n          kind: ISSUE_KIND_REF,\n          identifier,\n          component: null,\n          estimation: params.estimation ?? 0,\n          remainingTime: 0,\n          reportedTime: 0,\n          reports: 0,\n          subIssues: 0,\n          parents: [],\n          childInfo: [],\n          dueDate: params.dueDate ?? null,\n          rank: \"\", // lexorank empty — server gán nếu empty (pattern T-46)\n        } as never,\n        issueId as never,\n      );\n      // T-40 #26: identifier computed locally (T-67) — KHÔNG cần lookup server.\n      const contentMsg = `Created issue ${identifier}: \"${params.title}\".`;\n      return {\n        content: contentMsg,\n        details: { id, identifier, title: params.title, number: sequence },\n      };\n    },\n  }),\n\n  // 4. update_issue\n  // T-47 #36: KHÔNG dùng needsAssignee (D15 chỉ cho create). Update KHÔNG\n  // auto-fill assignee → caller muốn đổi assignee phải truyền rõ. Trước đây\n  // leak sang update → mọi update tự claim current user (silent overwrite).\n  // T-47 #36: status phải validate workflow enum — server reject raw short\n  // name (\"Done\") mà cần full ref (\"tracker:status:Done\"). Trước đây push raw\n  // → silent reject, status không persist. Giờ lookup IssueStatus → resolve.\n  defineHulyTool({\n    name: \"update_issue\",\n    label: \"Update issue\",\n    description:\n      \"Update issue fields. Status must match exact IssueStatus name (case-sensitive) or _id full ref.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      title: z.optional(z.string()),\n      description: z.optional(z.string()),\n      priority: prioritySchema,\n      assignee: z.optional(z.union([z.string(), z.null()])),\n      status: z.optional(\n        z\n          .string()\n          .describe(\n            \"Exact IssueStatus name (case-sensitive) or _id ref. Run huly_list_statuses for valid names.\",\n          ),\n      ),\n      dueDate: z.optional(z.number().int()),\n      estimation: z.optional(z.number().int()),\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      const ops: Record<string, unknown> = {};\n      if (params.title !== undefined) {\n        if (params.title.trim() === \"\")\n          return {\n            content: \"title must be non-empty.\",\n            isError: true,\n            details: { title: params.title },\n          };\n        ops.title = params.title;\n      }\n      // T-97: description = MarkupBlobRef. Issue ĐÃ CÓ description → updateMarkup\n      // (updateContent rpc) edit content in-place. KHÔNG ghi description vào ops —\n      // mirror trusted @firfi/huly-mcp (calendar.ts:321, cards.ts:350): updateMarkup\n      // xong return {} (empty ops), updateDoc KHÔNG đụng description field. TX cũ ghi\n      // existingDesc vào ops → TxUpdateDoc trên description field có thể trigger server\n      // re-process → reset collaborator content → description stale (repro VPSM-58/34).\n      // Issue CHƯA có → uploadMarkup tạo blob + swap ref (ghi ref vào ops).\n      // Track descUpdated riêng cho success message (updateMarkup path không thêm ops).\n      let descUpdated = false;\n      if (params.description !== undefined) {\n        const existingDesc =\n          typeof issue === \"object\" && \"description\" in issue ? issue.description : undefined;\n        if (\n          existingDesc != null &&\n          tctx.client.transport === \"ws\" &&\n          typeof tctx.client.updateMarkup === \"function\"\n        ) {\n          await tctx.client.updateMarkup(\n            ISSUE_CLASS,\n            issue._id,\n            \"description\",\n            params.description,\n            \"markdown\",\n          );\n          descUpdated = true;\n        } else {\n          ops.description = await tctx.client.uploadMarkup(\n            ISSUE_CLASS,\n            issue._id,\n            \"description\",\n            params.description,\n            \"markdown\",\n          );\n          descUpdated = true;\n        }\n      }\n      if (params.priority !== undefined) ops.priority = params.priority;\n      if (params.assignee !== undefined) {\n        // T-80 #103: resolve assignee email/name → Person._id (đồng bộ create_issue).\n        // Trước đây push raw string vào Ref<Person> → garbage. Hỗ trợ null (unassign).\n        if (params.assignee === null) {\n          ops.assignee = null;\n        } else {\n          const personId = await findPersonByEmailOrName(\n            tctx.client,\n            params.assignee,\n            tctx.currentUser,\n          );\n          if (!personId) {\n            return {\n              content:\n                `Assignee \"${params.assignee}\" not found (no Person matching email/name). ` +\n                `Assignee unchanged.`,\n              isError: true,\n              details: { assignee: params.assignee, identifier: params.identifier },\n            };\n          }\n          ops.assignee = personId;\n        }\n      }\n      if (params.dueDate !== undefined) ops.dueDate = params.dueDate;\n      if (params.estimation !== undefined) ops.estimation = params.estimation;\n      // T-47 #36: resolve status short name (\"Done\") → full ref\n      // (\"tracker:status:Done\") trước khi push. Huly IssueStatus có _id = full\n      // ref, name = short human. Match _id exact trước (caller truyền full ref\n      // → match chắc), fallback name (caller truyền short → heuristic; có thể\n      // ambiguous nếu multi-project workspace có cùng status name — documented\n      // limitation, scope của fix này không filter theo taskType). Invalid →\n      // isError + list valid statuses cho LLM retry.\n      //\n      // T-47 review fix:\n      // - Empty statuses (fresh workspace chưa config workflow) → isError rõ\n      //   ràng KHÔNG \"Valid statuses: .\" (misleading). Hướng dẫn setup trước.\n      // - Match thành công nhưng _id undefined (schema drift) → isError KHÔNG\n      //   fallback raw params.status (reintroduce bug gốc — raw short name bị\n      //   server silent reject).\n      // - Input trim → match linh hoạt với \" Done \" / \"Done\" (caller LLM hay\n      //   thêm whitespace). Exact case vẫn giữ (Huly status name verbatim).\n      if (params.status !== undefined) {\n        // T-72 #80: scope status theo project (getProjectStatuses T-71 ProjectType\n        // traversal) — KHÔNG findAll global (cross-project ambiguous match).\n        const projectStatuses = await getProjectStatuses(tctx.client, tctx.project!);\n        if (!projectStatuses) {\n          return {\n            content: `Project \"${tctx.project}\" not found.`,\n            isError: true,\n            details: { identifier: params.identifier, project: tctx.project },\n          };\n        }\n        const statuses = projectStatuses.statuses;\n        if (statuses.length === 0) {\n          return {\n            content:\n              \"No workflow statuses configured for this project. \" +\n              \"Set up project workflow or create statuses first (huly_create_issue_status).\",\n            isError: true,\n            details: {\n              identifier: params.identifier,\n              requestedStatus: params.status,\n              noStatusesConfigured: true,\n            },\n          };\n        }\n        const requested = params.status.trim();\n        // Ưu tiên _id exact trước name short (giảm ambiguity multi-project).\n        const byId = statuses.find((s) => s._id === requested);\n        const byName = statuses.find((s) => s.name === requested);\n        const match = byId ?? byName;\n        if (match === undefined) {\n          const valid = statuses\n            .map((s) => s.name)\n            .filter((n) => n.length > 0)\n            .join(\", \");\n          return {\n            content: `Invalid status \"${params.status}\". Valid statuses: ${valid}.`,\n            isError: true,\n            details: {\n              identifier: params.identifier,\n              invalidStatus: params.status,\n              validStatuses: statuses.map((s) => s.name),\n            },\n          };\n        }\n        ops.status = match._id;\n      }\n      // T-97: updateMarkup path (descUpdated + empty ops) → skip updateDoc (content\n      // đã update qua collaborator, KHÔNG cần TxUpdateDoc trên description field).\n      if (Object.keys(ops).length === 0 && !descUpdated) {\n        return { content: \"No fields to update.\", details: { updated: false } };\n      }\n      if (Object.keys(ops).length > 0) {\n        const updResult = await safeUpdateDoc(tctx.client, ISSUE_CLASS, issue, ops);\n        if (!updResult.ok) return updResult.error;\n      }\n      const fields = Object.keys(ops);\n      if (descUpdated && !fields.includes(\"description\")) fields.push(\"description\");\n      return {\n        content: `Updated issue ${params.identifier}: ${fields.join(\", \")}`,\n        details: { updated: true, identifier: params.identifier, fields },\n      };\n    },\n  }),\n\n  // 5. delete_issue — destructive\n  defineHulyTool({\n    name: \"delete_issue\",\n    label: \"Delete issue\",\n    description: \"Delete issue (destructive — confirm gate).\",\n    destructive: true,\n    needsProject: true,\n    destructiveContext: (p) => ({\n      type: \"issue\",\n      id: (p as { identifier?: string }).identifier ?? \"<unknown>\",\n    }),\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      const delResult = await safeRemoveDoc(tctx.client, ISSUE_CLASS, issue);\n      if (!delResult.ok) return delResult.error;\n      return {\n        content: `Deleted issue ${params.identifier}.`,\n        details: { deleted: true, identifier: params.identifier },\n      };\n    },\n  }),\n\n  // 6. move_issue — change parent (AttachedDoc hierarchy, T-68 fix).\n  // T-52 #42: KHÔNG truyền parentIssue = top-level promotion (Option A user chốt).\n  // T-68: dùng attachedTo/attachedToClass/collection/parents/subIssues thay vì\n  // field `parentIssue` (KHÔNG tồn tại runtime). Helper issues-hierarchy.ts.\n  defineHulyTool({\n    name: \"move_issue\",\n    label: \"Move issue\",\n    description: \"Move issue to new parent (epic). KHÔNG truyền parentIssue → promote top-level.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      parentIssue: z.optional(\n        z.string().describe(\"New parent issue identifier. KHÔNG truyền = top-level promotion.\"),\n      ),\n    }),\n    async handler(params, tctx) {\n      const issue = (await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      })) as IssueHierarchyFields & { space?: string };\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      const projectSpace = (issue.space ?? \"\") as never;\n      // Capture old parent state BEFORE mutate (attachIssueChild overwrites attachedTo).\n      const oldAttachedTo = issue.attachedTo;\n      const wasChild = hasConcreteIssueParent(issue);\n\n      // Case A: top-level promotion (no parentIssue param).\n      if (params.parentIssue === undefined) {\n        const topFields = topLevelIssueParent();\n        await tctx.client.updateDoc(\n          ISSUE_CLASS,\n          projectSpace,\n          issue._id as never,\n          {\n            attachedTo: topFields.attachedTo,\n            attachedToClass: topFields.attachedToClass,\n            collection: topFields.collection,\n            parents: topFields.parents,\n          } as never,\n        );\n        // Dec old parent subIssues if was child (trusted always decs when oldParentIsIssue).\n        if (wasChild && oldAttachedTo) {\n          await tctx.client.updateDoc(\n            ISSUE_CLASS,\n            projectSpace,\n            oldAttachedTo as never,\n            { $inc: { subIssues: -1 } } as never,\n          );\n        }\n        // Re-breadcrumb descendants (clear chain to []).\n        if ((issue.subIssues ?? 0) > 0) {\n          await updateDescendantParents(tctx.client, projectSpace as string, issue, []);\n        }\n        return {\n          content: `Moved ${params.identifier} → top-level.`,\n          details: { identifier: params.identifier, parentIssue: null },\n        };\n      }\n\n      // Case B: move to new parent.\n      const parent = (await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.parentIssue),\n      })) as IssueHierarchyFields;\n      if (!parent) {\n        return {\n          content: `Parent issue \"${params.parentIssue}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier, parentIssue: params.parentIssue },\n        };\n      }\n      // attachIssueChild: set child fields + $inc new parent subIssues +1.\n      await attachIssueChild(tctx.client, projectSpace as string, issue._id, parent, {});\n      // Dec old parent subIssues if was child (always when wasChild — same-parent net 0).\n      if (wasChild && oldAttachedTo) {\n        await tctx.client.updateDoc(\n          ISSUE_CLASS,\n          projectSpace,\n          oldAttachedTo as never,\n          { $inc: { subIssues: -1 } } as never,\n        );\n      }\n      // Re-breadcrumb descendants với new ancestor chain.\n      if ((issue.subIssues ?? 0) > 0) {\n        const parentInfo = {\n          parentId: parent._id,\n          identifier: parent.identifier ?? \"\",\n          parentTitle: parent.title ?? \"\",\n          space: projectSpace as string,\n        };\n        await updateDescendantParents(tctx.client, projectSpace as string, issue, [\n          ...(parent.parents ?? []),\n          parentInfo,\n        ]);\n      }\n      return {\n        content: `Moved ${params.identifier} → parent ${params.parentIssue}.`,\n        details: { identifier: params.identifier, parentIssue: params.parentIssue },\n      };\n    },\n  }),\n\n  // 7. add_issue_label — GLOBAL labels (05-data-model §3)\n  // T-45 #27: validate label tồn tại + push TagReference object shape (audit §4).\n  // T-58 #43: dùng TAG_CLASS (TagElement) thay LABEL_CLASS (deprecated —\n  // view:class:Label 0 match runtime). Label workflow giờ dùng tag entity.\n  defineHulyTool({\n    name: \"add_issue_label\",\n    label: \"Add issue label\",\n    description:\n      \"Add label/tag to issue. Accepts tag title or _id (resolved via tags:class:TagElement). \" +\n      \"Validates tag exists before push. Use huly_create_tag to create new.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      label: z.string().describe(\"Label title or _id ref.\"),\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      // T-45 + T-58: validate tag tồn tại — try by title first, fallback by _id.\n      // T-58: dùng TAG_CLASS (TagElement) thay LABEL_CLASS (deprecated — view:class:Label\n      // 0 match runtime). Label workflow giờ dùng tag entity. T-90: native TagElementDoc.\n      const label =\n        (await tctx.client.findOne<TagElementDoc>(TAG_CLASS, {\n          title: params.label,\n        })) ?? (await tctx.client.findOne<TagElementDoc>(TAG_CLASS, { _id: idRef(params.label) }));\n      if (!label) {\n        return {\n          content: `Label/tag \"${params.label}\" not found. Create via huly_create_tag first.`,\n          isError: true,\n          details: { label: params.label, identifier: params.identifier },\n        };\n      }\n      // T-83 #118: labels = TagReference AttachedDoc (collection \"labels\"), KHÔNG\n      // inline Issue.labels field. $push labels (T-45) = silent data loss (field\n      // không tồn tại runtime). Migrate sang addCollection matching attach_tag (T-69).\n      // T-90: native TagReferenceDoc. Idempotent: findAll check existing.\n      const existing = await tctx.client.findAll<TagReferenceDoc>(\n        TAG_REFERENCE_CLASS,\n        {\n          attachedTo: issue._id,\n          attachedToClass: ISSUE_CLASS,\n          collection: \"labels\",\n          tag: label._id,\n        },\n        {},\n      );\n      if (existing.length > 0) {\n        return {\n          content: `Label ${params.label} already on ${params.identifier} (no-op).`,\n          details: { added: false, idempotent: true, label: params.label },\n        };\n      }\n      // addCollection TagReference AttachedDoc (collection \"labels\"). T-90: satisfies.\n      const attrs = {\n        tag: label._id,\n        title: label.title ?? params.label,\n        color: Number(label.color ?? 0),\n      } satisfies Partial<TagReferenceDoc>;\n      const tagRefId = await tctx.client.addCollection(\n        TAG_REFERENCE_CLASS,\n        idRef(issue.space),\n        idRef(issue._id),\n        ISSUE_CLASS,\n        \"labels\",\n        attrs,\n      );\n      return {\n        content: `Added label ${params.label} to ${params.identifier}.`,\n        details: {\n          added: true,\n          identifier: params.identifier,\n          label: params.label,\n          labelId: label._id,\n          tagRefId,\n        },\n      };\n    },\n  }),\n\n  // 8. remove_issue_label — symmetric with add (T-45)\n  defineHulyTool({\n    name: \"remove_issue_label\",\n    label: \"Remove issue label\",\n    description:\n      \"Remove global label from issue. Accepts label title or _id. \" +\n      \"No-op if label not present on issue (idempotent).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      label: z.string().describe(\"Label title or _id ref.\"),\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      // Validate tag exists (T-58: TAG_CLASS thay LABEL_CLASS deprecated). T-90: native TagElementDoc.\n      const label =\n        (await tctx.client.findOne<TagElementDoc>(TAG_CLASS, {\n          title: params.label,\n        })) ?? (await tctx.client.findOne<TagElementDoc>(TAG_CLASS, { _id: idRef(params.label) }));\n      if (!label) {\n        return {\n          content: `Label \"${params.label}\" not found. Cannot remove.`,\n          isError: true,\n          details: { label: params.label, identifier: params.identifier },\n        };\n      }\n      // T-83 #118: findAll TagReference matching tag trên issue (matching detach_tag).\n      // $pull labels (T-45) = silent no-op (field không tồn tại runtime). T-90: native TagReferenceDoc.\n      const refs = await tctx.client.findAll<TagReferenceDoc>(\n        TAG_REFERENCE_CLASS,\n        {\n          attachedTo: issue._id,\n          attachedToClass: ISSUE_CLASS,\n          collection: \"labels\",\n          tag: label._id,\n        },\n        {},\n      );\n      if (refs.length === 0) {\n        return {\n          content: `Label ${params.label} not on ${params.identifier} (no-op).`,\n          details: { removed: false, idempotent: true, label: params.label },\n        };\n      }\n      // removeDoc each matching TagReference.\n      for (const ref of refs) {\n        await tctx.client.removeDoc(\n          TAG_REFERENCE_CLASS,\n          idRef(ref.space ?? issue.space),\n          idRef(ref._id),\n        );\n      }\n      return {\n        content: `Removed label ${params.label} from ${params.identifier}.`,\n        details: {\n          removed: true,\n          identifier: params.identifier,\n          label: params.label,\n          labelId: label._id,\n          removedCount: refs.length,\n        },\n      };\n    },\n  }),\n];\n","// tools/domains/issues-relations.ts — Issue relations + doclink domain (5 tools).\n// Design: 06-api.md §4 Issue relations. DAG + doc↔issue links.\n//\n// T-61 fix (2026-07-28): storage pattern KHỚP 100% với Huly thật, verified từ:\n//   - plugins/tracker-resources/src/components/RelationsPopup.svelte:33-41\n//   - plugins/tracker-resources/src/issues.ts:111 updateIssueRelation\n//   - tests/sanity/tests/tracker/relations.spec.ts (\"Mark as blocked by\" / \"Mark as blocking\")\n//\n// Issue interface (Huly thật) CHỈ có 2 field relation:\n//   - Issue.blockedBy?: RelatedDocument[]    — issues đang BLOCK issue này\n//   - Issue.relations?: RelatedDocument[]    — related-to (bidirectional)\n// RelatedDocument = Pick<Doc, '_id' | '_class'> = { _id, _class } — KHÔNG có\n// relationType field. KHÔNG có field `blocks` — \"blocks\" được COMPUTE bằng\n// reverse query (tìm issues có blockedBy._id === currentIssue._id).\n//\n// Mapping relationType → storage (T-61, đúng Huly pattern):\n//   - \"blocks\"        → target.blockedBy[] push { _id: source, _class }\n//                       (A blocks B → B.blockedBy.push(A) — push lên ĐÍCH B)\n//   - \"is-blocked-by\" → source.blockedBy[] push { _id: target, _class }\n//                       (A blocked-by B → A.blockedBy.push(B) — push lên NGUỒN A)\n//   - \"relates-to\"    → BIDIRECTIONAL: A.relations.push(B) + B.relations.push(A)\n//                       (2 updateDoc call, khớp RelationsPopup dòng 34-39)\n//\n// Tools (5, FR-04 D4):\n//   1. add_issue_relation     2. remove_issue_relation  3. list_issue_relations\n//   4. link_document_to_issue 5. unlink_document_to_issue\n\nimport { z } from \"zod\";\nimport type { HulyClient } from \"../../client/client.js\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { DOCUMENT_CLASS, idRef, ISSUE_CLASS } from \"./_class-refs.js\";\nimport {\n  workspaceParam,\n  projectParam,\n  identifierParam,\n  resolveIdentifier,\n  safeUpdateDoc,\n} from \"./_common.js\";\n\n/** RelatedDocument shape = { _id: Ref<Doc>, _class: Ref<Class<Doc>> }. */\nfunction makeRelatedDoc(targetId: string): { _id: string; _class: string } {\n  return { _id: targetId, _class: ISSUE_CLASS };\n}\n\n/** Check nếu relation đã tồn tại trong mảng (idempotent guard). */\nfunction hasRelation(arr: unknown[] | undefined, targetId: string): boolean {\n  if (!Array.isArray(arr)) return false;\n  return arr.some((r) => (r as { _id?: string })._id === targetId);\n}\n\n// T-97: resolve Document từ param (title hoặc _id). _id-first (caller truyền raw\n// _id), fallback name (caller truyền document title). Document field = `name`.\n// Unscoped (cross-teamspace) — Huly Document không thuộc project space.\nasync function resolveDocument(\n  client: HulyClient,\n  document: string,\n): Promise<{ _id: string; name?: string } | undefined> {\n  const byId = await client.findOne(DOCUMENT_CLASS, { _id: idRef(document) });\n  if (byId) return byId;\n  return client.findOne(DOCUMENT_CLASS, { name: document });\n}\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. add_issue_relation — DAG dependency\n  defineHulyTool({\n    name: \"add_issue_relation\",\n    label: \"Add issue relation\",\n    description:\n      \"Add relation between issues. relationType: blocks | is-blocked-by | relates-to. \" +\n      \"Storage (T-61, khớp Huly UI): blocks→target.blockedBy, is-blocked-by→source.blockedBy, \" +\n      \"relates-to→bidirectional (cả 2 issue.relations).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      targetIssue: z.string().describe(\"Target issue identifier.\"),\n      relationType: z.enum([\"blocks\", \"is-blocked-by\", \"relates-to\"]),\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      // T-52 #42: validate targetIssue tồn tại + resolve identifier → _id.\n      // targetIssue cho phép CROSS-PROJECT (raw identifier, KHÔNG resolveIdentifier)\n      // — khác source (identifier dòng 67 dùng resolveIdentifier throw nếu cross).\n      // Khớp Huly UI RelationsPopup: ObjectSearchPopup pick bất kỳ issue nào bất kể\n      // project. Đây là INTENT, không phải bug.\n      const target = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: params.targetIssue,\n      });\n      if (!target) {\n        return {\n          content: `Target issue \"${params.targetIssue}\" not found. Check identifier.`,\n          isError: true,\n          details: { targetIssue: params.targetIssue, identifier: params.identifier },\n        };\n      }\n\n      // T-61 fix: storage pattern KHỚP Huly thật (RelationsPopup.svelte +\n      // updateIssueRelation). 3 nhánh rõ ràng:\n      //   - blocks         → target.blockedBy push source (A blocks B → B.blockedBy.push(A))\n      //   - is-blocked-by  → source.blockedBy push target (A blocked-by B → A.blockedBy.push(B))\n      //   - relates-to     → BIDIRECTIONAL: A.relations.push(B) + B.relations.push(A)\n      if (params.relationType === \"blocks\") {\n        // A blocks B → B.blockedBy.push(A). Push lên ĐÍCH B.\n        const targetBlockedBy = (target as { blockedBy?: unknown[] }).blockedBy;\n        if (hasRelation(targetBlockedBy, issue._id as string)) {\n          return {\n            content: `Relation ${params.identifier} -[blocks]-> ${params.targetIssue} already exists (no-op).`,\n            details: { idempotent: true, relationType: params.relationType },\n          };\n        }\n        const updResult = await safeUpdateDoc(tctx.client, ISSUE_CLASS, target, {\n          $push: { blockedBy: makeRelatedDoc(issue._id as string) },\n        });\n        if (!updResult.ok) return updResult.error;\n      } else if (params.relationType === \"is-blocked-by\") {\n        // A is-blocked-by B → A.blockedBy.push(B). Push trên NGUỒN A.\n        const issueBlockedBy = (issue as { blockedBy?: unknown[] }).blockedBy;\n        if (hasRelation(issueBlockedBy, target._id as string)) {\n          return {\n            content: `Relation ${params.identifier} -[is-blocked-by]-> ${params.targetIssue} already exists (no-op).`,\n            details: { idempotent: true, relationType: params.relationType },\n          };\n        }\n        const updResult = await safeUpdateDoc(tctx.client, ISSUE_CLASS, issue, {\n          $push: { blockedBy: makeRelatedDoc(target._id as string) },\n        });\n        if (!updResult.ok) return updResult.error;\n      } else {\n        // relates-to → BIDIRECTIONAL: A.relations.push(B) + B.relations.push(A).\n        // Khớp RelationsPopup.svelte dòng 34-39 (updateRelation type='relations'\n        // gọi updateIssueRelation 2 lần: value→refDocument + refDocument→value).\n        //\n        // NON-ATOMIC (khớp hành vi Huly gốc — RelationsPopup cũng 2 thao tác riêng,\n        // không transaction): nếu forward commit xong nhưng reverse throw (vd network\n        // drop, quyền space khác khi cross-project), A.relations có B nhưng B.relations\n        // chưa có A → lệch 1 chiều. Idempotent guard (forwardExists/reverseExists)\n        // cho phép retry an toàn — lần sau chỉ push chiều còn thiếu, không duplicate.\n        const issueRelations = (issue as { relations?: unknown[] }).relations;\n        const targetRelations = (target as { relations?: unknown[] }).relations;\n        const forwardExists = hasRelation(issueRelations, target._id as string);\n        const reverseExists = hasRelation(targetRelations, issue._id as string);\n        if (forwardExists && reverseExists) {\n          return {\n            content: `Relation ${params.identifier} -[relates-to]-> ${params.targetIssue} already exists (no-op).`,\n            details: { idempotent: true, relationType: params.relationType },\n          };\n        }\n        // Forward: A.relations.push(B)\n        if (!forwardExists) {\n          const updResult = await safeUpdateDoc(tctx.client, ISSUE_CLASS, issue, {\n            $push: { relations: makeRelatedDoc(target._id as string) },\n          });\n          if (!updResult.ok) return updResult.error;\n        }\n        // Reverse: B.relations.push(A)\n        if (!reverseExists) {\n          const updResult = await safeUpdateDoc(tctx.client, ISSUE_CLASS, target, {\n            $push: { relations: makeRelatedDoc(issue._id as string) },\n          });\n          if (!updResult.ok) return updResult.error;\n        }\n      }\n      return {\n        content: `Added relation ${params.identifier} -[${params.relationType}]-> ${params.targetIssue}.`,\n        details: {\n          identifier: params.identifier,\n          targetIssue: params.targetIssue,\n          targetIssueId: target._id,\n          relationType: params.relationType,\n        },\n      };\n    },\n  }),\n\n  // 2. remove_issue_relation — T-59: $pull theo targetIssue + relationType\n  // (KHÔNG dùng relation _id nữa — relation là array element, KHÔNG phải doc riêng)\n  defineHulyTool({\n    name: \"remove_issue_relation\",\n    label: \"Remove issue relation\",\n    description:\n      \"Remove relation between issues. Pass targetIssue + relationType (KHÔNG dùng relation _id — \" +\n      \"Huly stores relations inline trong Issue.relations / blockedBy array). Storage (T-61, khớp \" +\n      \"Huly UI): blocks→target.blockedBy, is-blocked-by→source.blockedBy, relates-to→bidirectional.\",\n    destructive: true,\n    needsProject: true,\n    destructiveContext: (p) => ({\n      type: \"issue relation\",\n      id: (p as { identifier?: string }).identifier ?? \"<unknown>\",\n    }),\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      targetIssue: z.string().describe(\"Target issue identifier to remove relation to.\"),\n      relationType: z.enum([\"blocks\", \"is-blocked-by\", \"relates-to\"]),\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      const target = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: params.targetIssue,\n      });\n      if (!target) {\n        return {\n          content: `Target issue \"${params.targetIssue}\" not found.`,\n          isError: true,\n          details: { targetIssue: params.targetIssue },\n        };\n      }\n\n      // T-61 fix: $pull đối xứng add. 3 nhánh rõ ràng:\n      //   - blocks         → $pull target.blockedBy (xóa source khỏi blockedBy của đích)\n      //   - is-blocked-by  → $pull source.blockedBy (xóa target khỏi blockedBy của nguồn)\n      //   - relates-to     → BIDIRECTIONAL: $pull cả 2 chiều issue.relations + target.relations\n      const pullRef = makeRelatedDoc(target._id as string);\n      const pullSourceRef = makeRelatedDoc(issue._id as string);\n      if (params.relationType === \"blocks\") {\n        // A blocks B → xóa A khỏi B.blockedBy[]. Pull trên ĐÍCH B.\n        if (!hasRelation((target as { blockedBy?: unknown[] }).blockedBy, issue._id as string)) {\n          return {\n            content: `Relation ${params.identifier} -[blocks]-> ${params.targetIssue} did not exist (no-op, idempotent).`,\n            details: { idempotent: true, relationType: params.relationType },\n          };\n        }\n        const updResult = await safeUpdateDoc(tctx.client, ISSUE_CLASS, target, {\n          $pull: { blockedBy: pullSourceRef },\n        });\n        if (!updResult.ok) return updResult.error;\n      } else if (params.relationType === \"is-blocked-by\") {\n        // A is-blocked-by B → xóa B khỏi A.blockedBy[]. Pull trên NGUỒN A.\n        if (!hasRelation((issue as { blockedBy?: unknown[] }).blockedBy, target._id as string)) {\n          return {\n            content: `Relation ${params.identifier} -[is-blocked-by]-> ${params.targetIssue} did not exist (no-op, idempotent).`,\n            details: { idempotent: true, relationType: params.relationType },\n          };\n        }\n        const updResult = await safeUpdateDoc(tctx.client, ISSUE_CLASS, issue, {\n          $pull: { blockedBy: pullRef },\n        });\n        if (!updResult.ok) return updResult.error;\n      } else {\n        // relates-to → BIDIRECTIONAL: $pull cả 2 chiều.\n        const forwardExists = hasRelation(\n          (issue as { relations?: unknown[] }).relations,\n          target._id as string,\n        );\n        const reverseExists = hasRelation(\n          (target as { relations?: unknown[] }).relations,\n          issue._id as string,\n        );\n        if (!forwardExists && !reverseExists) {\n          return {\n            content: `Relation ${params.identifier} -[relates-to]-> ${params.targetIssue} did not exist (no-op, idempotent).`,\n            details: { idempotent: true, relationType: params.relationType },\n          };\n        }\n        if (forwardExists) {\n          const updResult = await safeUpdateDoc(tctx.client, ISSUE_CLASS, issue, {\n            $pull: { relations: pullRef },\n          });\n          if (!updResult.ok) return updResult.error;\n        }\n        if (reverseExists) {\n          const updResult = await safeUpdateDoc(tctx.client, ISSUE_CLASS, target, {\n            $pull: { relations: pullSourceRef },\n          });\n          if (!updResult.ok) return updResult.error;\n        }\n      }\n      return {\n        content: `Removed relation ${params.identifier} -[${params.relationType}]-> ${params.targetIssue}.`,\n        details: {\n          identifier: params.identifier,\n          targetIssue: params.targetIssue,\n          relationType: params.relationType,\n        },\n      };\n    },\n  }),\n\n  // 3. list_issue_relations — T-59: read Issue.relations + blockedBy trực tiếp\n  defineHulyTool({\n    name: \"list_issue_relations\",\n    label: \"List issue relations\",\n    description:\n      \"List relations (blocks/is-blocked-by/relates-to) của issue. \" +\n      \"blocks: reverse query findAll (issues có blockedBy._id === issue._id). \" +\n      \"is-blocked-by: đọc issue.blockedBy trực tiếp. \" +\n      \"relates-to: đọc issue.relations (bidirectional).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      // T-61 fix: 3 hướng rõ ràng, khớp Huly UI RelationsPopup:\n      //   - is-blocked-by: đọc issue.blockedBy (issues blocking this)\n      //   - relates-to:    đọc issue.relations (bidirectional related)\n      //   - blocks:        REVERSE QUERY — findAll issues có blockedBy._id === issue._id\n      //                    (issues mà issue này blocks — KHÔNG có field riêng)\n      const blockedBy = ((issue as { blockedBy?: unknown[] }).blockedBy ?? []) as Array<{\n        _id?: string;\n        _class?: string;\n      }>;\n      const relations = ((issue as { relations?: unknown[] }).relations ?? []) as Array<{\n        _id?: string;\n        _class?: string;\n      }>;\n      // T-80 #103: blocks = REVERSE QUERY. Dotted-path `{ \"blockedBy._id\": x }`\n      // returns NO rows trong Huly query engine — phải object form\n      // `{ blockedBy: { _id, _class } }` (verified trusted PR #48 comment).\n      const blockedResults = (await tctx.client.findAll(ISSUE_CLASS, {\n        blockedBy: { _id: issue._id, _class: ISSUE_CLASS },\n      } as never)) as Array<{ _id?: string; identifier?: string; _class?: string }>;\n      // T-80 #103: resolve raw _id → identifier (batch findAll $in). Trước đây\n      // trả raw Ref → LLM không dùng được kết quả.\n      const allIds = [\n        ...blockedResults.map((r) => r._id),\n        ...blockedBy.map((r) => r._id),\n        ...relations.map((r) => r._id),\n      ].filter((id): id is string => typeof id === \"string\");\n      const idMap = new Map<string, string>();\n      if (allIds.length > 0) {\n        const resolved = (await tctx.client.findAll(ISSUE_CLASS, {\n          _id: { $in: allIds },\n        } as never)) as Array<{ _id?: string; identifier?: string }>;\n        for (const r of resolved) {\n          if (r._id !== undefined && r.identifier !== undefined) {\n            idMap.set(r._id, r.identifier);\n          }\n        }\n      }\n      const blocksList = blockedResults.map((r) => ({\n        identifier: r._id !== undefined ? idMap.get(r._id) : undefined,\n        targetIssueId: r._id,\n        direction: \"blocks\" as const,\n      }));\n      const blockedList = blockedBy.map((r) => ({\n        identifier: r._id !== undefined ? idMap.get(r._id) : undefined,\n        targetIssueId: r._id,\n        direction: \"is-blocked-by\" as const,\n      }));\n      const relList = relations.map((r) => ({\n        identifier: r._id !== undefined ? idMap.get(r._id) : undefined,\n        targetIssueId: r._id,\n        direction: \"relates-to\" as const,\n      }));\n      const all = [...blocksList, ...blockedList, ...relList];\n      return {\n        content:\n          `Found ${all.length} relation(s) on ${params.identifier} ` +\n          `(${blocksList.length} blocks, ${blockedList.length} is-blocked-by, ${relList.length} relates-to).`,\n        details: { count: all.length, relations: all },\n      };\n    },\n  }),\n\n  // 4. link_document_to_issue — T-97 re-enable: Document registered (T-65/T-66\n  // SUPERSEDES T-58/T-60 interface-orphan conclusion). Link = $push Issue.relations\n  // { _id: doc, _class: DOCUMENT_CLASS } — unidirectional (Issue→Document, khớp\n  // Huly UI Relations panel + @firfi/huly-mcp document-relations.ts).\n  defineHulyTool({\n    name: \"link_document_to_issue\",\n    label: \"Link document to issue\",\n    description:\n      \"Link a document to an issue (adds to issue.relations). document accepts title or _id. \" +\n      \"Idempotent — no-op if already linked.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      document: z.string().describe(\"Document title or _id to link.\"),\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      const doc = await resolveDocument(tctx.client, params.document);\n      if (!doc) {\n        return {\n          content: `Document \"${params.document}\" not found.`,\n          isError: true,\n          details: { document: params.document, identifier: params.identifier },\n        };\n      }\n      if (hasRelation((issue as { relations?: unknown[] }).relations, doc._id as string)) {\n        return {\n          content: `Document \"${params.document}\" already linked to ${params.identifier} (no-op).`,\n          details: { idempotent: true, document: params.document, documentId: doc._id },\n        };\n      }\n      const updResult = await safeUpdateDoc(tctx.client, ISSUE_CLASS, issue, {\n        $push: { relations: { _id: doc._id as string, _class: DOCUMENT_CLASS } },\n      });\n      if (!updResult.ok) return updResult.error;\n      return {\n        content: `Linked document \"${params.document}\" to ${params.identifier}.`,\n        details: {\n          identifier: params.identifier,\n          document: params.document,\n          documentId: doc._id,\n        },\n      };\n    },\n  }),\n\n  // 5. unlink_document_to_issue — T-97 re-enable (mirror link, $pull). Idempotent.\n  defineHulyTool({\n    name: \"unlink_document_to_issue\",\n    label: \"Unlink document from issue\",\n    description:\n      \"Unlink a document from an issue (removes from issue.relations). document accepts title or _id. \" +\n      \"Idempotent — no-op if not linked.\",\n    destructive: true,\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      document: z.string().describe(\"Document title or _id to unlink.\"),\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      const doc = await resolveDocument(tctx.client, params.document);\n      if (!doc) {\n        return {\n          content: `Document \"${params.document}\" not found.`,\n          isError: true,\n          details: { document: params.document, identifier: params.identifier },\n        };\n      }\n      if (!hasRelation((issue as { relations?: unknown[] }).relations, doc._id as string)) {\n        return {\n          content: `Document \"${params.document}\" not linked to ${params.identifier} (no-op).`,\n          details: { idempotent: true, document: params.document, documentId: doc._id },\n        };\n      }\n      const updResult = await safeUpdateDoc(tctx.client, ISSUE_CLASS, issue, {\n        $pull: { relations: { _id: doc._id as string } },\n      });\n      if (!updResult.ok) return updResult.error;\n      return {\n        content: `Unlinked document \"${params.document}\" from ${params.identifier}.`,\n        details: {\n          identifier: params.identifier,\n          document: params.document,\n          documentId: doc._id,\n        },\n      };\n    },\n  }),\n];\n","// tools/domains/issues-templates.ts — Issue templates domain (8 tools).\n// Design: 06-api.md §4 Issue templates. CRUD + create_from + children.\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport {\n  ISSUE_TEMPLATE_CLASS,\n  ISSUE_CLASS,\n  PROJECT_CLASS,\n  PERSON_CLASS,\n  COMPONENT_CLASS,\n  NO_PARENT_REF,\n  ISSUE_KIND_REF,\n} from \"./_class-refs.js\";\nimport type { IssueTemplateDoc, PersonDoc, ComponentDoc } from \"./_entity-types.js\";\nimport {\n  workspaceParam,\n  projectParam,\n  safeUpdateDoc,\n  safeRemoveDoc,\n  getProjectSpace,\n} from \"./_common.js\";\nimport { mdToMarkup } from \"../../markup/markup.js\";\nimport { findPersonByEmailOrName } from \"./contacts.js\";\n\n/** T-76: IssueTemplateChild object shape (replaces raw string in children array). */\ninterface TemplateChild {\n  id: string;\n  title: string;\n  description?: string;\n  priority?: string;\n  assignee?: string | null;\n  component?: string | null;\n  estimation?: number;\n}\n\n/** Generate Huly-style id for template child (Ref<Issue> placeholder). */\nfunction genChildId(): string {\n  return `tracker:issue.${Math.random().toString(36).slice(2, 12)}`;\n}\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_templates\n  defineHulyTool({\n    name: \"list_templates\",\n    label: \"List issue templates\",\n    description: \"List issue templates trong project.\",\n    needsProject: true,\n    parameters: z.object({ workspace: workspaceParam, project: projectParam }),\n    async handler(_params, tctx) {\n      // T-71: space scoping (KHÔNG findAll global cross-project).\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      // T-89 #124: sort modifiedOn Descending + output priority/modifiedOn/childrenCount. T-90: native IssueTemplateDoc.\n      const tpls = await tctx.client.findAll<IssueTemplateDoc>(\n        ISSUE_TEMPLATE_CLASS,\n        { space },\n        {\n          sort: { modifiedOn: -1 },\n        },\n      );\n      const list = tpls.map((tpl) => ({\n        _id: tpl._id,\n        title: tpl.title ?? \"\",\n        priority: tpl.priority,\n        modifiedOn: tpl.modifiedOn,\n        childrenCount: tpl.children?.length ?? 0,\n      }));\n      return {\n        content: `Found ${list.length} template(s).`,\n        details: { count: list.length, templates: list },\n      };\n    },\n  }),\n\n  // 2. get_template\n  defineHulyTool({\n    name: \"get_template\",\n    label: \"Get issue template\",\n    description: \"Get issue template by id.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      template: z.string(),\n    }),\n    async handler(params, tctx) {\n      // T-100 (#146): scope template lookup theo project space (mirror components.ts T-81).\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const tpl = await tctx.client.findOne<IssueTemplateDoc>(ISSUE_TEMPLATE_CLASS, {\n        _id: params.template,\n        space,\n      } as never);\n      if (!tpl) {\n        return {\n          content: `Template \"${params.template}\" not found.`,\n          isError: true,\n          details: { template: params.template },\n        };\n      }\n      // T-89 #124: resolve description MarkupBlobRef → markdown.\n      let description: string | undefined;\n      if (tpl.description) {\n        try {\n          description = await tctx.client.fetchMarkup(\n            ISSUE_TEMPLATE_CLASS,\n            tpl._id,\n            \"description\",\n            tpl.description,\n            \"markdown\",\n          );\n        } catch {\n          // Markup fetch fail — omit description.\n        }\n      }\n      // T-89 #124: resolve assignee (Person name) + component (label). T-90: native PersonDoc/ComponentDoc.\n      let assigneeName: string | undefined;\n      if (tpl.assignee) {\n        const person = await tctx.client.findOne<PersonDoc>(PERSON_CLASS, { _id: tpl.assignee });\n        assigneeName = person?.name;\n      }\n      let componentLabel: string | undefined;\n      if (tpl.component) {\n        const comp = await tctx.client.findOne<ComponentDoc>(COMPONENT_CLASS, {\n          _id: tpl.component,\n        });\n        componentLabel = comp?.label;\n      }\n      return {\n        content: `Template ${tpl.title ?? \"\"}`,\n        details: {\n          _id: tpl._id,\n          title: tpl.title,\n          description,\n          priority: tpl.priority,\n          assignee: assigneeName ?? tpl.assignee,\n          component: componentLabel ?? tpl.component,\n          estimation: tpl.estimation,\n          modifiedOn: tpl.modifiedOn,\n          createdOn: tpl.createdOn,\n          children: tpl.children,\n        },\n      };\n    },\n  }),\n\n  // 3. create_template\n  defineHulyTool({\n    name: \"create_template\",\n    label: \"Create issue template\",\n    description: \"Create issue template.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      title: z.string(),\n      description: z.optional(z.string()),\n    }),\n    async handler(params, tctx) {\n      // T-103 #160: guard title non-empty.\n      if (params.title.trim() === \"\") {\n        return {\n          content: `create_template title must be non-empty.`,\n          isError: true,\n          details: { title: params.title },\n        };\n      }\n      const project = await tctx.client.findOne(PROJECT_CLASS, {\n        identifier: tctx.project,\n      });\n      // T-51 #41: project null → isError rõ ràng, KHÔNG fallback workspace.\n      if (!project) {\n        return {\n          content: `Project \"${tctx.project}\" not found. Run /huly init or check binding.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const descMarkup =\n        params.description !== undefined\n          ? JSON.stringify(mdToMarkup(params.description))\n          : undefined;\n      // T-97 (#143): space = project._id (KHÔNG project.space).\n      const id = await tctx.client.createDoc(\n        ISSUE_TEMPLATE_CLASS,\n        project._id as never,\n        {\n          title: params.title,\n          description: descMarkup,\n          // T-76: default fields (trusted createIssueTemplate).\n          priority: \"no-priority\",\n          assignee: null,\n          component: null,\n          estimation: 0,\n          children: [],\n          comments: 0,\n        } as never,\n      );\n      return {\n        content: `Created template \"${params.title}\".`,\n        details: { id, title: params.title },\n      };\n    },\n  }),\n\n  // 4. create_issue_from_template\n  defineHulyTool({\n    name: \"create_issue_from_template\",\n    label: \"Create issue from template\",\n    description: \"Create new issue from template.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      template: z.string(),\n      title: z.optional(z.string()),\n    }),\n    async handler(params, tctx) {\n      // T-100 (#146): project first — dùng project._id scope cho tpl lookup\n      // (tránh getProjectSpace thừa; handler tạo issue trong project._id space).\n      const project = await tctx.client.findOne(PROJECT_CLASS, {\n        identifier: tctx.project,\n      });\n      if (!project) {\n        return {\n          content: `Project \"${tctx.project}\" not found. Run /huly init or check binding.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const tpl = await tctx.client.findOne(ISSUE_TEMPLATE_CLASS, {\n        _id: params.template,\n        space: project._id,\n      } as never);\n      if (!tpl) {\n        return {\n          content: `Template \"${params.template}\" not found.`,\n          isError: true,\n          details: { template: params.template },\n        };\n      }\n      const title = params.title ?? (tpl as { title?: string }).title ?? \"Untitled\";\n      // T-76: copy priority/assignee/component từ template (trước chỉ copy title+desc).\n      const tplFields = tpl as {\n        priority?: string;\n        assignee?: string | null;\n        component?: string | null;\n        description?: string;\n      };\n      // T-103 #155: Issue = AttachedDoc → createDoc crash ('cannot be used for objects\n      // inherited from AttachedDoc'). Mirror create_issue: $inc sequence → identifier\n      // → addCollection (attached-to-project collection), KHÔNG createDoc.\n      const incResult = await tctx.client.updateDoc(\n        PROJECT_CLASS,\n        \"core:space:Space\" as never,\n        project._id as never,\n        { $inc: { sequence: 1 } } as never,\n        true,\n      );\n      const seqRaw = (incResult as { object?: { sequence?: number } })?.object?.sequence;\n      const sequence =\n        typeof seqRaw === \"number\"\n          ? seqRaw\n          : ((project as { sequence?: number }).sequence ?? 0) + 1;\n      const identifier = `${(project as { identifier?: string }).identifier ?? tctx.project}-${sequence}`;\n      // description: copy markup ref từ template (nếu có), KHÔNG re-upload.\n      const issueId = `tracker:issue.${Math.random().toString(36).slice(2, 14)}`;\n      const id = await tctx.client.addCollection(\n        ISSUE_CLASS,\n        project._id as never, // space = project (issues live trong project space)\n        NO_PARENT_REF, // attachedTo = NoParent sentinel (top-level)\n        ISSUE_CLASS, // attachedToClass\n        \"subIssues\", // collection\n        {\n          title,\n          description: tplFields.description ?? null,\n          priority: tplFields.priority ?? \"no-priority\",\n          assignee: tplFields.assignee ?? null,\n          component: tplFields.component ?? null,\n          status: undefined,\n          number: sequence,\n          kind: ISSUE_KIND_REF,\n          identifier,\n          estimation: 0,\n          remainingTime: 0,\n          reportedTime: 0,\n          reports: 0,\n          subIssues: 0,\n          parents: [],\n          childInfo: [],\n          dueDate: null,\n          rank: \"\",\n        } as never,\n        issueId as never,\n      );\n      return {\n        content: `Created issue ${identifier}: \"${title}\" from template.`,\n        details: { id, identifier, title, template: params.template },\n      };\n    },\n  }),\n\n  // 5. update_template\n  defineHulyTool({\n    name: \"update_template\",\n    label: \"Update issue template\",\n    description: \"Update template (title, description).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      template: z.string(),\n      title: z.optional(z.string()),\n      description: z.optional(z.string()),\n    }),\n    async handler(params, tctx) {\n      // T-100 (#146): scope template lookup theo project space.\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const t = await tctx.client.findOne(ISSUE_TEMPLATE_CLASS, {\n        _id: params.template,\n        space,\n      } as never);\n      if (!t) {\n        return {\n          content: `Template \"${params.template}\" not found.`,\n          isError: true,\n          details: { template: params.template },\n        };\n      }\n      const ops: Record<string, unknown> = {};\n      if (params.title !== undefined) {\n        if (params.title.trim() === \"\")\n          return {\n            content: \"title must be non-empty.\",\n            isError: true,\n            details: { title: params.title },\n          };\n        ops.title = params.title;\n      }\n      if (params.description !== undefined)\n        ops.description = JSON.stringify(mdToMarkup(params.description));\n      if (Object.keys(ops).length === 0) {\n        return { content: \"No fields to update.\", details: { updated: false } };\n      }\n      const updResult = await safeUpdateDoc(tctx.client, ISSUE_TEMPLATE_CLASS, t, ops);\n      if (!updResult.ok) return updResult.error;\n      return {\n        content: `Updated template ${params.template}.`,\n        details: { updated: true, fields: Object.keys(ops) },\n      };\n    },\n  }),\n\n  // 6. delete_template — destructive\n  defineHulyTool({\n    name: \"delete_template\",\n    label: \"Delete issue template\",\n    description: \"Delete template (destructive).\",\n    destructive: true,\n    needsProject: true,\n    destructiveContext: (p) => ({\n      type: \"template\",\n      id: (p as { template?: string }).template ?? \"<unknown>\",\n    }),\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      template: z.string(),\n    }),\n    async handler(params, tctx) {\n      // T-100 (#146): scope template lookup theo project space.\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const t = await tctx.client.findOne(ISSUE_TEMPLATE_CLASS, {\n        _id: params.template,\n        space,\n      } as never);\n      if (!t) {\n        return {\n          content: `Template \"${params.template}\" not found.`,\n          isError: true,\n          details: { template: params.template },\n        };\n      }\n      const delResult = await safeRemoveDoc(tctx.client, ISSUE_TEMPLATE_CLASS, t);\n      if (!delResult.ok) return delResult.error;\n      return {\n        content: `Deleted template ${params.template}.`,\n        details: { deleted: true, template: params.template },\n      };\n    },\n  }),\n\n  // 7. add_template_child — T-76: build IssueTemplateChild object + replace array\n  defineHulyTool({\n    name: \"add_template_child\",\n    label: \"Add template child\",\n    description:\n      \"Add child template to parent. Builds IssueTemplateChild object {id,title,priority,...} + replaces full children array.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      template: z.string(),\n      title: z.string(),\n      description: z.optional(z.string()),\n      priority: z.optional(z.string()),\n      assignee: z.optional(z.string()),\n      component: z.optional(z.string()),\n      estimation: z.optional(z.number().int()),\n    }),\n    async handler(params, tctx) {\n      // T-100 (#146): scope template lookup theo project space.\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const t = await tctx.client.findOne(ISSUE_TEMPLATE_CLASS, {\n        _id: params.template,\n        space,\n      } as never);\n      if (!t) {\n        return {\n          content: `Template \"${params.template}\" not found.`,\n          isError: true,\n          details: { template: params.template },\n        };\n      }\n      // T-101 (#147): resolve assignee/component → Ref _id (KHÔNG raw string).\n      // Trước đây child.assignee/component = raw email/label → garbage Ref (cousin\n      // #141). Chỉ resolve khi provided (existing test không truyền → no shift).\n      let assigneeRef: string | undefined;\n      if (params.assignee !== undefined) {\n        assigneeRef = await findPersonByEmailOrName(tctx.client, params.assignee, tctx.currentUser);\n        if (!assigneeRef) {\n          return {\n            content: `Assignee \"${params.assignee}\" not found (no Person matching email/name).`,\n            isError: true,\n            details: { assignee: params.assignee, template: params.template },\n          };\n        }\n      }\n      let componentRef: string | undefined;\n      if (params.component !== undefined) {\n        const tplSpace = (t as { space?: string }).space;\n        const comp = await tctx.client.findOne(COMPONENT_CLASS, {\n          label: params.component,\n          space: tplSpace,\n        } as never);\n        if (!comp) {\n          return {\n            content: `Component \"${params.component}\" not found.`,\n            isError: true,\n            details: { component: params.component, template: params.template },\n          };\n        }\n        componentRef = (comp as { _id: string })._id;\n      }\n      // T-76: build IssueTemplateChild object (KHÔNG raw string).\n      const child: TemplateChild = {\n        id: genChildId(),\n        title: params.title,\n      };\n      if (params.description !== undefined) child.description = params.description;\n      if (params.priority !== undefined) child.priority = params.priority;\n      if (params.assignee !== undefined) child.assignee = assigneeRef;\n      if (params.component !== undefined) child.component = componentRef;\n      if (params.estimation !== undefined) child.estimation = params.estimation;\n      // T-76: replace full children array (KHÔNG $push).\n      const existingChildren = ((t as { children?: TemplateChild[] }).children ??\n        []) as TemplateChild[];\n      const updResult = await safeUpdateDoc(tctx.client, ISSUE_TEMPLATE_CLASS, t, {\n        children: [...existingChildren, child],\n      });\n      if (!updResult.ok) return updResult.error;\n      return {\n        content: `Added child \"${params.title}\" to template ${params.template}.`,\n        details: { template: params.template, childId: child.id, title: params.title },\n      };\n    },\n  }),\n\n  // 8. remove_template_child — T-76: find by id field + replace array\n  defineHulyTool({\n    name: \"remove_template_child\",\n    label: \"Remove template child\",\n    description: \"Remove child from parent template (by child id).\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      template: z.string(),\n      childId: z.string().describe(\"IssueTemplateChild.id to remove.\"),\n    }),\n    async handler(params, tctx) {\n      // T-100 (#146): scope template lookup theo project space.\n      const space = await getProjectSpace(tctx.client, tctx.project!);\n      if (!space) {\n        return {\n          content: `Project \"${tctx.project}\" not found.`,\n          isError: true,\n          details: { project: tctx.project },\n        };\n      }\n      const t = await tctx.client.findOne(ISSUE_TEMPLATE_CLASS, {\n        _id: params.template,\n        space,\n      } as never);\n      if (!t) {\n        return {\n          content: `Template \"${params.template}\" not found.`,\n          isError: true,\n          details: { template: params.template },\n        };\n      }\n      // T-76: find by id field trong children (KHÔNG $pull raw string).\n      const existingChildren = ((t as { children?: TemplateChild[] }).children ??\n        []) as TemplateChild[];\n      const idx = existingChildren.findIndex((c) => c.id === params.childId);\n      if (idx === -1) {\n        return {\n          content: `Child \"${params.childId}\" not found in template ${params.template}.`,\n          isError: true,\n          details: { template: params.template, childId: params.childId },\n        };\n      }\n      const newChildren = existingChildren.filter((_, i) => i !== idx);\n      const updResult = await safeUpdateDoc(tctx.client, ISSUE_TEMPLATE_CLASS, t, {\n        children: newChildren,\n      });\n      if (!updResult.ok) return updResult.error;\n      return {\n        content: `Removed child ${params.childId} from template ${params.template}.`,\n        details: { template: params.template, childId: params.childId },\n      };\n    },\n  }),\n];\n","// tools/domains/attachments.ts — Attachments domain (5 tools).\n// Design: 06-api.md §4 Attachments.\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { ATTACHMENT_CLASS, ISSUE_CLASS, spaceRef } from \"./_class-refs.js\";\nimport { workspaceParam, projectParam, identifierParam, resolveIdentifier } from \"./_common.js\";\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_attachments\n  defineHulyTool({\n    name: \"list_attachments\",\n    label: \"List attachments\",\n    description: \"List attachments attached to entity.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      const atts = await tctx.client.findAll(ATTACHMENT_CLASS, { attachedTo: issue._id }, {});\n      const list = atts.map((a) => ({\n        _id: a._id,\n        name: (a as { name?: string }).name ?? \"\",\n        type: (a as { type?: string }).type, // T-75: field `type` (KHÔNG contentType)\n        size: (a as { size?: number }).size,\n      }));\n      return {\n        content: `Found ${list.length} attachment(s).`,\n        details: { count: list.length, attachments: list },\n      };\n    },\n  }),\n\n  // 2. get_attachment\n  defineHulyTool({\n    name: \"get_attachment\",\n    label: \"Get attachment\",\n    description: \"Get attachment metadata by id.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      attachment: z.string(),\n    }),\n    async handler(params, tctx) {\n      const a = await tctx.client.findOne(ATTACHMENT_CLASS, { _id: params.attachment });\n      if (!a) {\n        return {\n          content: `Attachment \"${params.attachment}\" not found.`,\n          isError: true,\n          details: { attachment: params.attachment },\n        };\n      }\n      return {\n        content: `Attachment ${(a as { name?: string }).name ?? \"\"}`,\n        details: {\n          _id: a._id,\n          name: (a as { name?: string }).name,\n          type: (a as { type?: string }).type, // T-75: field `type`\n          size: (a as { size?: number }).size,\n        },\n      };\n    },\n  }),\n\n  // 3. add_attachment (generic) — T-75: uploadFile → blobId → addCollection\n  defineHulyTool({\n    name: \"add_attachment\",\n    label: \"Add attachment\",\n    description:\n      \"Add attachment to entity. Uploads base64 data → blob, attaches via addCollection.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      attachedTo: z.string(),\n      attachedToClass: z.optional(\n        z.string().describe(\"Target class (default tracker:class:Issue).\"),\n      ),\n      filename: z.string(),\n      contentType: z.string(),\n      data: z.optional(z.string().describe(\"Base64 data (raw, no data: URL prefix).\")),\n      description: z.optional(z.string()),\n    }),\n    async handler(params, tctx) {\n      if (!params.data) {\n        return {\n          content: \"add_attachment requires `data` (base64).\",\n          isError: true,\n          details: { filename: params.filename },\n        };\n      }\n      if (typeof tctx.client.uploadBlob !== \"function\") {\n        return {\n          content: \"uploadBlob not available on this transport (use WS).\",\n          isError: true,\n          details: { reason: \"storage_not_wired\" },\n        };\n      }\n      // T-75: strip data: URL prefix nếu có.\n      const b64 = params.data.replace(/^data:[^;]+;base64,/, \"\");\n      const buffer = Buffer.from(b64, \"base64\");\n      const { blobId, size } = await tctx.client.uploadBlob(\n        params.filename,\n        buffer,\n        params.contentType,\n      );\n      // T-75: Attachment = AttachedDoc → addCollection (KHÔNG createDoc). Fields\n      // {name, file: Ref<Blob>, size, type, lastModified} (KHÔNG contentType/data).\n      const targetClass = params.attachedToClass ?? ISSUE_CLASS;\n      // T-93b TODO(#139): space nên là attachedTo entity's space (resolve entity →\n      // ._id → space). Hiện spaceRef(workspace) = handle string — có thể orphan.\n      // add_issue_attachment (project-scoped) đã đúng (issue.space). Generic path\n      // defer đến khi cần (ít dùng — đa số attach qua add_issue_attachment).\n      const id = await tctx.client.addCollection(\n        ATTACHMENT_CLASS,\n        spaceRef(tctx.workspace),\n        params.attachedTo as never,\n        targetClass as never,\n        \"attachments\",\n        {\n          name: params.filename,\n          file: blobId,\n          size,\n          type: params.contentType,\n          lastModified: Date.now(),\n          ...(params.description ? { description: params.description } : {}),\n        } as never,\n      );\n      return {\n        content: `Added attachment \"${params.filename}\".`,\n        details: { id, filename: params.filename, blobId, size },\n      };\n    },\n  }),\n\n  // 4. add_issue_attachment — issue-specific\n  defineHulyTool({\n    name: \"add_issue_attachment\",\n    label: \"Add issue attachment\",\n    description: \"Add attachment to issue.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      filename: z.string(),\n      contentType: z.string(),\n      data: z.optional(z.string()),\n      description: z.optional(z.string()),\n    }),\n    async handler(params, tctx) {\n      if (!params.data) {\n        return {\n          content: \"add_issue_attachment requires `data` (base64).\",\n          isError: true,\n          details: { filename: params.filename },\n        };\n      }\n      if (typeof tctx.client.uploadBlob !== \"function\") {\n        return {\n          content: \"uploadBlob not available on this transport (use WS).\",\n          isError: true,\n          details: { reason: \"storage_not_wired\" },\n        };\n      }\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      const b64 = params.data.replace(/^data:[^;]+;base64,/, \"\");\n      const buffer = Buffer.from(b64, \"base64\");\n      const { blobId, size } = await tctx.client.uploadBlob(\n        params.filename,\n        buffer,\n        params.contentType,\n      );\n      const id = await tctx.client.addCollection(\n        ATTACHMENT_CLASS,\n        issue.space as never,\n        issue._id as never,\n        ISSUE_CLASS,\n        \"attachments\",\n        {\n          name: params.filename,\n          file: blobId,\n          size,\n          type: params.contentType,\n          lastModified: Date.now(),\n          ...(params.description ? { description: params.description } : {}),\n        } as never,\n      );\n      return {\n        content: `Added attachment \"${params.filename}\" to ${params.identifier}.`,\n        details: { id, filename: params.filename, identifier: params.identifier, blobId, size },\n      };\n    },\n  }),\n\n  // 5. download_attachment — T-75: getBlob → base64 (KHÔNG đọc field `data`)\n  defineHulyTool({\n    name: \"download_attachment\",\n    label: \"Download attachment\",\n    description: \"Get attachment content (base64). Downloads blob via storageClient.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      attachment: z.string(),\n    }),\n    async handler(params, tctx) {\n      const a = await tctx.client.findOne(ATTACHMENT_CLASS, { _id: params.attachment });\n      if (!a) {\n        return {\n          content: `Attachment \"${params.attachment}\" not found.`,\n          isError: true,\n          details: { attachment: params.attachment },\n        };\n      }\n      const fileId = (a as { file?: string }).file;\n      if (!fileId) {\n        return {\n          content: `Attachment \"${params.attachment}\" has no file blob ref.`,\n          isError: true,\n          details: { attachment: params.attachment },\n        };\n      }\n      if (typeof tctx.client.getBlob !== \"function\") {\n        return {\n          content: \"getBlob not available on this transport (use WS).\",\n          isError: true,\n          details: { reason: \"storage_not_wired\" },\n        };\n      }\n      const buffer = await tctx.client.getBlob(fileId);\n      return {\n        content: `Attachment ${(a as { name?: string }).name ?? \"\"} downloaded.`,\n        details: {\n          _id: a._id,\n          name: (a as { name?: string }).name,\n          type: (a as { type?: string }).type,\n          size: (a as { size?: number }).size,\n          data: buffer.toString(\"base64\"),\n        },\n      };\n    },\n  }),\n];\n","// tools/domains/todos.ts — Todos domain (7 tools).\n// Design: 06-api.md §4 Todos. attachedTo: {type:'issue', project, identifier}.\n\nimport { z } from \"zod\";\nimport { defineHulyTool, type HulyToolDefinition } from \"../builder.js\";\nimport { ISSUE_CLASS, TODO_CLASS, PROJECT_TODO_CLASS, TODOS_SPACE } from \"./_class-refs.js\";\nimport {\n  workspaceParam,\n  projectParam,\n  identifierParam,\n  resolveIdentifier,\n  safeUpdateDoc,\n  safeRemoveDoc,\n} from \"./_common.js\";\nimport { findPersonByEmailOrName } from \"./contacts.js\";\n\n/**\n * ToDoPriority enum — Huly Priority (canonical, per @hcengineering/time).\n * T-103 #164: 0=None, 1=Low, 2=Medium, 3=High, 4=Urgent (ASCENDING severity).\n * Trước đây map INVERTED (high:0, no-priority:3) → 'high' lưu 0=None,\n * 'no-priority' lưu 3=High (4/5 sai, chỉ urgent đúng). Pi-huly API dùng\n * string ('urgent','high',...) → map sang number cho server.\n */\nconst TODO_PRIORITY_MAP: Record<string, number> = {\n  \"no-priority\": 0,\n  low: 1,\n  medium: 2,\n  high: 3,\n  urgent: 4,\n};\n\n/** Reverse: numeric Huly priority → human label (cho get_todo render readable). */\nconst TODO_PRIORITY_LABELS: Record<number, string> = {\n  0: \"no-priority\",\n  1: \"low\",\n  2: \"medium\",\n  3: \"high\",\n  4: \"urgent\",\n};\n\n/** Priority param schema (string → number enum mapping). */\nconst todoPrioritySchema = z.optional(z.enum([\"urgent\", \"high\", \"medium\", \"low\", \"no-priority\"]));\n\nexport const tools: HulyToolDefinition[] = [\n  // 1. list_todos\n  defineHulyTool({\n    name: \"list_todos\",\n    label: \"List todos\",\n    description: \"List todos attached to issue.\",\n    needsProject: true,\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n    }),\n    async handler(params, tctx) {\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      // T-79 #102: issue.todos là CollectionSize counter (number), KHÔNG array.\n      // Query todos qua findAll theo attachedTo=issue._id (trusted planner.ts).\n      const todos = (await tctx.client.findAll(TODO_CLASS, {\n        attachedTo: issue._id,\n      } as never)) as Array<{ _id: string; title?: string; doneOn?: number | null }>;\n      const summary = todos.map((t) => ({\n        _id: t._id,\n        title: t.title ?? \"\",\n        done: t.doneOn != null,\n      }));\n      return {\n        content: `Found ${summary.length} todo(s) on ${params.identifier}.`,\n        details: { count: summary.length, todos: summary },\n      };\n    },\n  }),\n\n  // 2. get_todo\n  defineHulyTool({\n    name: \"get_todo\",\n    label: \"Get todo\",\n    description: \"Get todo by id.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      todo: z.string(),\n    }),\n    async handler(params, tctx) {\n      const t = (await tctx.client.findOne(TODO_CLASS, { _id: params.todo })) as {\n        _id: string;\n        title?: string;\n        doneOn?: number | null;\n        user?: string;\n        dueDate?: number | null;\n        priority?: number;\n        description?: unknown;\n      } | null;\n      if (!t) {\n        return {\n          content: `Todo \"${params.todo}\" not found.`,\n          isError: true,\n          details: { todo: params.todo },\n        };\n      }\n      // T-103 #163: fetch description markup (MarkupBlobRef → markdown).\n      let description: string | undefined;\n      if (t.description) {\n        try {\n          const markup = await tctx.client.fetchMarkup(\n            TODO_CLASS,\n            t._id,\n            \"description\",\n            t.description,\n            \"markdown\",\n          );\n          description = typeof markup === \"string\" ? markup : undefined;\n        } catch {\n          description = undefined;\n        }\n      }\n      return {\n        content: `Todo: ${t.title ?? \"\"}`,\n        details: {\n          _id: t._id,\n          title: t.title,\n          description,\n          // T-79 #102: Huly ToDo dùng doneOn (timestamp|null), KHÔNG `done` bool.\n          doneOn: t.doneOn ?? null,\n          done: t.doneOn != null,\n          owner: t.user,\n          dueDate: t.dueDate ?? null,\n          priority: TODO_PRIORITY_LABELS[t.priority ?? -1] ?? t.priority,\n        },\n      };\n    },\n  }),\n\n  // 3. create_todo\n  defineHulyTool({\n    name: \"create_todo\",\n    label: \"Create todo\",\n    description: \"Create todo attached to issue.\",\n    needsProject: true,\n    needsAssignee: true,\n    assigneeField: \"owner\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      project: projectParam,\n      identifier: identifierParam,\n      title: z.string(),\n      description: z.optional(z.string()),\n      dueDate: z.optional(z.number().int()),\n      priority: todoPrioritySchema,\n    }),\n    async handler(params, tctx) {\n      // T-103 #160: guard title non-empty (empty = garbage todo).\n      if (params.title.trim() === \"\") {\n        return {\n          content: `create_todo title must be non-empty.`,\n          isError: true,\n          details: { title: params.title },\n        };\n      }\n      const issue = await tctx.client.findOne(ISSUE_CLASS, {\n        identifier: resolveIdentifier(tctx.project!, params.identifier),\n      });\n      if (!issue) {\n        return {\n          content: `Issue \"${params.identifier}\" not found.`,\n          isError: true,\n          details: { identifier: params.identifier },\n        };\n      }\n      // T-46 #28 + T-79 #102: ProjectToDo = subclass cho issue-attached todo.\n      // space = time.space.ToDos (KHÔNG issue.space). doneOn:null (KHÔNG `done`).\n      // attachedTo/attachedToClass = positional addCollection args (KHÔNG trong data).\n      // description = MarkupBlobRef qua uploadMarkup (KHÔNG JSON.stringify).\n      const priority = TODO_PRIORITY_MAP[params.priority ?? \"medium\"];\n      const todoId = `time:todo.${Math.random().toString(36).slice(2, 14)}` as never;\n      let descriptionRef: unknown = null;\n      if (params.description !== undefined && params.description.trim() !== \"\") {\n        descriptionRef = await tctx.client.uploadMarkup(\n          PROJECT_TODO_CLASS,\n          todoId,\n          \"description\",\n          params.description,\n          \"markdown\",\n        );\n      }\n      try {\n        const id = await tctx.client.addCollection(\n          PROJECT_TODO_CLASS,\n          TODOS_SPACE,\n          issue._id as never,\n          ISSUE_CLASS,\n          \"todos\",\n          {\n            title: params.title,\n            description: descriptionRef,\n            attachedSpace: issue.space,\n            user: tctx.currentUser.id, // Ref<Employee>\n            priority, // ToDoPriority number enum\n            visibility: \"Public\", // Visibility.Public default\n            rank: \"\", // lexorank empty — server gán nếu empty\n            workslots: 0,\n            doneOn: null, // T-79: open todo (KHÔNG `done:false`)\n            dueDate: params.dueDate,\n          },\n          todoId,\n        );\n        return {\n          content: `Created todo \"${params.title}\" on ${params.identifier}.`,\n          details: { id, title: params.title, identifier: params.identifier },\n        };\n      } catch (e) {\n        // Wrap lỗi generic của Huly server (platform:status:UnknownError) với\n        // context rõ ràng hơn — mention todo + issue + class để debug lần sau.\n        const msg = e instanceof Error ? e.message : String(e);\n        return {\n          content:\n            `Failed to create todo \"${params.title}\" on ${params.identifier} ` +\n            `(class ${PROJECT_TODO_CLASS}). Server error: ${msg}. ` +\n            `Verify issue exists and ProjectToDo required fields are valid.`,\n          isError: true,\n          details: {\n            identifier: params.identifier,\n            title: params.title,\n            error: msg,\n          },\n        };\n      }\n    },\n  }),\n\n  // 4. update_todo\n  defineHulyTool({\n    name: \"update_todo\",\n    label: \"Update todo\",\n    description:\n      \"Update todo (title, description, owner, priority, visibility, dueDate). \" +\n      \"dueDate=null clears ($unset).\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      todo: z.string(),\n      title: z.optional(z.string()),\n      description: z.optional(z.string()),\n      owner: z.optional(z.string().describe(\"Owner email/name.\")),\n      priority: todoPrioritySchema,\n      visibility: z.optional(z.enum([\"public\", \"freeBusy\", \"private\"])),\n      // T-79G #106: dueDate=null → \\$unset clear.\n      dueDate: z.optional(z.union([z.number().int(), z.null()])),\n    }),\n    async handler(params, tctx) {\n      const t = await tctx.client.findOne(TODO_CLASS, { _id: params.todo });\n      if (!t) {\n        return {\n          content: `Todo \"${params.todo}\" not found.`,\n          isError: true,\n          details: { todo: params.todo },\n        };\n      }\n      const ops: Record<string, unknown> = {};\n      if (params.title !== undefined) {\n        if (params.title.trim() === \"\")\n          return {\n            content: \"title must be non-empty.\",\n            isError: true,\n            details: { title: params.title },\n          };\n        ops.title = params.title;\n      }\n      // T-97: description = MarkupBlobRef. Todo ĐÃ CÓ description → updateMarkup\n      // (updateContent rpc) edit in-place. KHÔNG ghi description vào ops — mirror trusted\n      // @firfi/huly-mcp (TxUpdateDoc trên description → server reset collaborator → stale).\n      // CHƯA có → uploadMarkup tạo blob + swap ref. Track descUpdated riêng cho success.\n      let descUpdated = false;\n      if (params.description !== undefined) {\n        const existingDesc =\n          typeof t === \"object\" && t !== null && \"description\" in t ? t.description : undefined;\n        if (\n          existingDesc != null &&\n          tctx.client.transport === \"ws\" &&\n          typeof tctx.client.updateMarkup === \"function\"\n        ) {\n          await tctx.client.updateMarkup(\n            TODO_CLASS,\n            t._id,\n            \"description\",\n            params.description,\n            \"markdown\",\n          );\n          descUpdated = true;\n        } else {\n          ops.description = await tctx.client.uploadMarkup(\n            TODO_CLASS,\n            t._id,\n            \"description\",\n            params.description,\n            \"markdown\",\n          );\n          descUpdated = true;\n        }\n      }\n      // T-79G #106: owner → user: Ref<Employee> (resolve Person).\n      if (params.owner !== undefined) {\n        const ownerId = await findPersonByEmailOrName(tctx.client, params.owner, tctx.currentUser);\n        if (!ownerId) {\n          return {\n            content: `Owner \"${params.owner}\" not found (no Person matching email/name).`,\n            isError: true,\n            details: { owner: params.owner, todo: params.todo },\n          };\n        }\n        ops.user = ownerId;\n      }\n      if (params.priority !== undefined) ops.priority = TODO_PRIORITY_MAP[params.priority];\n      if (params.visibility !== undefined) {\n        // visibility string → Huly Visibility (public/freeBusy/private match 1:1).\n        ops.visibility = params.visibility.charAt(0).toUpperCase() + params.visibility.slice(1);\n      }\n      // T-79G #106: dueDate null → \\$unset (clear); number → set.\n      if (params.dueDate !== undefined) {\n        if (params.dueDate === null) {\n          ops.$unset = { dueDate: \"\" };\n        } else {\n          ops.dueDate = params.dueDate;\n        }\n      }\n      if (Object.keys(ops).length === 0 && !descUpdated) {\n        return { content: \"No fields to update.\", details: { updated: false } };\n      }\n      if (Object.keys(ops).length > 0) {\n        const updResult = await safeUpdateDoc(tctx.client, TODO_CLASS, t, ops);\n        if (!updResult.ok) return updResult.error;\n      }\n      const fields = Object.keys(ops).filter((f) => f !== \"$unset\");\n      if (ops.$unset !== undefined) fields.push(\"dueDate(clear)\");\n      if (descUpdated && !fields.includes(\"description\")) fields.push(\"description\");\n      return {\n        content: `Updated todo ${params.todo}: ${fields.join(\", \")}`,\n        details: { updated: true, fields },\n      };\n    },\n  }),\n\n  // 5. complete_todo\n  defineHulyTool({\n    name: \"complete_todo\",\n    label: \"Complete todo\",\n    description: \"Mark todo done.\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      todo: z.string(),\n    }),\n    async handler(params, tctx) {\n      const t = await tctx.client.findOne(TODO_CLASS, { _id: params.todo });\n      if (!t) {\n        return {\n          content: `Todo \"${params.todo}\" not found.`,\n          isError: true,\n          details: { todo: params.todo },\n        };\n      }\n      const updResult = await safeUpdateDoc(tctx.client, TODO_CLASS, t, {\n        doneOn: Date.now(), // T-79 #102: timestamp (KHÔNG `done:true` no-op)\n      });\n      if (!updResult.ok) return updResult.error;\n      return {\n        content: `Completed todo ${params.todo}.`,\n        details: { completed: true, todo: params.todo },\n      };\n    },\n  }),\n\n  // 6. reopen_todo\n  defineHulyTool({\n    name: \"reopen_todo\",\n    label: \"Reopen todo\",\n    description: \"Mark todo not done (reopen).\",\n    parameters: z.object({\n      workspace: workspaceParam,\n      todo: z.string(),\n    }),\n    async handler(params, tctx) {\n      const t = await tctx.client.findOne(TODO_CLASS, { _id: params.todo });\n      if (!t) {\n        return {\n          content: `Todo \"${params.todo}\" not found.`,\n          isError: true,\n          details: { todo: params.todo },\n        };\n      }\n      const updResult = await safeUpdateDoc(tctx.client, TODO_CLASS, t, {\n        doneOn: null, // T-79 #102: clear completion (KHÔNG `done:false` no-op)\n      });\n      if (!updResult.ok) return updResult.error;\n      return {\n        content: `Reopened todo ${params.todo}.`,\n        details: { reopened: true, todo: params.todo },\n      };\n    },\n  }),\n\n  // 7. delete_todo — destructive\n  defineHulyTool({\n    name: \"delete_todo\",\n    label: \"Delete todo\",\n    description: \"Delete todo (destructive).\",\n    destructive: true,\n    destructiveContext: (p) => ({\n      type: \"todo\",\n      id: (p as { todo?: string }).todo ?? \"<unknown>\",\n    }),\n    parameters: z.object({\n      workspace: workspaceParam,\n      todo: z.string(),\n    }),\n    async handler(params, tctx) {\n      const t = (await tctx.client.findOne(TODO_CLASS, { _id: params.todo })) as {\n        _id: string;\n        space: string;\n        attachedTo?: string;\n        attachedToClass?: string;\n        attachedSpace?: string;\n      } | null;\n      if (!t) {\n        return {\n          content: `Todo \"${params.todo}\" not found.`,\n          isError: true,\n          details: { todo: params.todo },\n        };\n      }\n      // T-79 #102: issue-attached todo = ProjectToDo subclass. removeDoc dùng\n      // PROJECT_TODO_CLASS (trusted planner.ts deleteTodo). Personal todo (base\n      // ToDo) dùng TODO_CLASS — distinguish qua attachedToClass + attachedTo.\n      const isIssueTodo =\n        t.attachedToClass === ISSUE_CLASS && t.attachedTo != null && t.attachedTo !== \"\";\n      const delResult = await safeRemoveDoc(\n        tctx.client,\n        isIssueTodo ? PROJECT_TODO_CLASS : TODO_CLASS,\n        t,\n      );\n      if (!delResult.ok) return delResult.error;\n      // Decrement parent Issue.todo counter (CollectionSize) — tránh drift.\n      if (isIssueTodo && t.attachedTo) {\n        const issueSpace = (t.attachedSpace ?? t.space) as never;\n        await tctx.client.updateDoc(\n          ISSUE_CLASS,\n          issueSpace,\n          t.attachedTo as never,\n          { $inc: { todos: -1 } } as never,\n        );\n      }\n      return {\n        content: `Deleted todo ${params.todo}.`,\n        details: { deleted: true, todo: params.todo },\n      };\n    },\n  }),\n];\n","// tools/register.ts — Register all domain modules với pi.\n// Design: 04-system.md §6 (register.ts), 06-api.md §4 (catalog).\n//\n// T-30: collect tools từ 21 domain files (19 domain theo spec FR-04, Issues\n// chia 3 files + Documents tách snapshots = 21 files) + registerTool each.\n// Total: 102 tools (FR-02).\n\nimport type { ExtensionAPI } from \"@oh-my-pi/pi-coding-agent\";\nimport type { HulyToolDefinition } from \"./builder.js\";\n\n// Import 19 domain modules\nimport { tools as workspaceTools } from \"./domains/workspace.js\";\nimport { tools as projectTools } from \"./domains/projects.js\";\nimport { tools as milestoneTools } from \"./domains/milestones.js\";\nimport { tools as taskMgmtTools } from \"./domains/task-management.js\";\nimport { tools as componentTools } from \"./domains/components.js\";\nimport { tools as spaceTools } from \"./domains/spaces.js\";\nimport { tools as snapshotTools } from \"./domains/document-snapshots.js\";\nimport { tools as labelTools } from \"./domains/labels.js\";\nimport { tools as tagTools } from \"./domains/tags.js\";\nimport { tools as tagCategoryTools } from \"./domains/tag-categories.js\";\nimport { tools as commentTools } from \"./domains/comments.js\";\nimport { tools as searchTools } from \"./domains/search.js\";\nimport { tools as deletionTools } from \"./domains/deletion.js\";\nimport { tools as timeTools } from \"./domains/time.js\";\nimport { tools as contactTools } from \"./domains/contacts.js\";\nimport { tools as documentTools } from \"./domains/documents.js\";\nimport { tools as issueCoreTools } from \"./domains/issues-core.js\";\nimport { tools as issueRelationTools } from \"./domains/issues-relations.js\";\nimport { tools as issueTemplateTools } from \"./domains/issues-templates.js\";\nimport { tools as attachmentTools } from \"./domains/attachments.js\";\nimport { tools as todoTools } from \"./domains/todos.js\";\n\n/**\n * All tools từ 19 domain modules. Collect 1 lần, register với pi.\n * Spec FR-02: ~102 tools prefix huly_.\n */\nexport const allTools: HulyToolDefinition[] = [\n  ...workspaceTools,\n  ...projectTools,\n  ...milestoneTools,\n  ...taskMgmtTools,\n  ...componentTools,\n  ...spaceTools,\n  ...snapshotTools,\n  ...labelTools,\n  ...tagTools,\n  ...tagCategoryTools,\n  ...commentTools,\n  ...searchTools,\n  ...deletionTools,\n  ...timeTools,\n  ...contactTools,\n  ...documentTools,\n  ...issueCoreTools,\n  ...issueRelationTools,\n  ...issueTemplateTools,\n  ...attachmentTools,\n  ...todoTools,\n];\n\n/**\n * Register all Huly tools với pi extension API.\n * Called từ index.ts factory (T-33).\n *\n * @param pi Pi ExtensionAPI\n * @param tools Override tool list (default: allTools). Cho phép factory attach\n *              render hooks qua shallow copy KHÔNG mutate module global.\n * @returns number of tools registered\n */\nexport function registerAllTools(pi: ExtensionAPI, tools: HulyToolDefinition[] = allTools): number {\n  let count = 0;\n  for (const tool of tools) {\n    // Cast HulyToolDefinition → pi ToolDefinition (compatible shape).\n    // pi.registerTool expects full ToolDefinition; HulyToolDefinition subset.\n    pi.registerTool(tool as never);\n    count++;\n  }\n  return count;\n}\n\n/** Count tools per domain (cho diagnostics). */\nexport function toolCountByDomain(): Record<string, number> {\n  return {\n    workspace: workspaceTools.length,\n    projects: projectTools.length,\n    milestones: milestoneTools.length,\n    \"task-management\": taskMgmtTools.length,\n    components: componentTools.length,\n    spaces: spaceTools.length,\n    snapshots: snapshotTools.length,\n    labels: labelTools.length,\n    tags: tagTools.length,\n    \"tag-categories\": tagCategoryTools.length,\n    comments: commentTools.length,\n    search: searchTools.length,\n    deletion: deletionTools.length,\n    time: timeTools.length,\n    contacts: contactTools.length,\n    documents: documentTools.length,\n    \"issues-core\": issueCoreTools.length,\n    \"issues-relations\": issueRelationTools.length,\n    \"issues-templates\": issueTemplateTools.length,\n    attachments: attachmentTools.length,\n    todos: todoTools.length,\n  };\n}\n","// commands/huly.ts — unified `/huly` command (git-like subcommands).\n// Design: 04-system.md §6 commands/huly.ts, 06-api.md §5 /huly command,\n// 01-vision §B.10 D10/D11, UC-01 (/huly init flow), UC-02 (link).\n//\n// Subcommands:\n//   /huly              smart: cwd bound → status; unbound → init flow\n//   /huly init         setup/bind cwd (UC-01): workspace → verify → project → bind\n//   /huly status       diagnostics: binding, pool.health, user, version\n//   /huly workspace list|add|remove   global workspace CRUD (credentials.ts)\n//   /huly link [ws] [project]         bind cwd manual\n//   /huly unlink                      remove cwd binding\n//\n// Architecture: tách pure logic (runHulyCommand) khỏi pi registration\n// (registerHulyCommand). runHulyCommand nhận CommandContext injectable →\n// testable KHÔNG cần mock toàn bộ ExtensionCommandContext. Output qua\n// ctx.ui.notify (TUI) + return string (non-TUI / log).\n\nimport type { ExtensionAPI, ExtensionCommandContext } from \"@oh-my-pi/pi-coding-agent\";\nimport {\n  addWorkspace,\n  findByName,\n  getWorkspace,\n  loadCredentials,\n  removeWorkspace,\n  type WorkspaceCreds,\n} from \"../config/credentials.js\";\nimport {\n  bindProject,\n  loadConfig,\n  resolveByCwd,\n  unbindProject,\n  type ProjectBinding,\n} from \"../config/config.js\";\nimport { getClient, health, closeAll } from \"../client/pool.js\";\nimport { createHulyClient } from \"../client/client.js\";\nimport { classRef, spaceRef } from \"../tools/domains/_class-refs.js\";\nimport { HULY_VERSION } from \"../version.js\";\n\n/**\n * UI surface mà command cần (subset của ExtensionUIContext — injectable test).\n * select/confirm/input return undefined khi user cancel hoặc non-TUI.\n */\nexport interface CommandUI {\n  /** Show selector → user choice (1 option). Undefined = cancel/non-TUI. */\n  select(title: string, options: string[]): Promise<string | undefined>;\n  /** Yes/no confirm. */\n  confirm(title: string, message: string): Promise<boolean>;\n  /** Free text input. Undefined = cancel/non-TUI. */\n  input(title: string, placeholder?: string): Promise<string | undefined>;\n  /** Show notification. */\n  notify(message: string, type?: \"info\" | \"warning\" | \"error\"): void;\n}\n\n/**\n * Context inject vào runHulyCommand (testability — thay vì ExtensionCommandContext\n * đầy đủ). Bao gồm UI + cwd + paths override (test inject temp).\n */\nexport interface CommandContext {\n  /** UI surface (TUI/RPC). */\n  ui: CommandUI;\n  /** Whether dialog-capable UI available. false → commands non-interactive. */\n  hasUI: boolean;\n  /** Current working directory. */\n  cwd: string;\n  /** Override credentials path (test). */\n  credentialsPath?: string;\n  /** Override config path (test). */\n  configPath?: string;\n  /** Override legacy ~/.pi credentials path (test isolation; prod undefined → real ~/.pi migration). */\n  legacyCredentialsPath?: string;\n  /** Override legacy ~/.pi config path (test isolation; prod undefined → real ~/.pi migration). */\n  legacyConfigPath?: string;\n}\n\n/** Parse subcommand + positional args từ raw command arg string. */\nexport interface ParsedArgs {\n  /** Subcommand keyword (init/status/workspace/link/unlink). Undefined = no-arg. */\n  subcommand: string | undefined;\n  /** Positional args sau subcommand. */\n  positional: string[];\n}\n\n/**\n * Parse raw arg string → subcommand + positional.\n *   \"\"              → { subcommand: undefined, positional: [] }\n *   \"init\"          → { subcommand: \"init\", positional: [] }\n *   \"workspace add\" → { subcommand: \"workspace\", positional: [\"add\"] }\n *   \"link ws-x PD\"  → { subcommand: \"link\", positional: [\"ws-x\", \"PD\"] }\n *   \"  status  \"    → { subcommand: \"status\", positional: [] } (trim)\n */\nexport function parseArgs(raw: string): ParsedArgs {\n  const tokens = raw\n    .trim()\n    .split(/\\s+/)\n    .filter((t) => t.length > 0);\n  if (tokens.length === 0) {\n    return { subcommand: undefined, positional: [] };\n  }\n  const [subcommand, ...positional] = tokens;\n  return { subcommand, positional };\n}\n\n/** Result trả về từ runHulyCommand (cho non-TUI log + test assert). */\nexport interface CommandResult {\n  /** Human-readable output line(s). */\n  message: string;\n  /** Notification type (info/warning/error). */\n  type: \"info\" | \"warning\" | \"error\";\n}\n\n/**\n * Run unified /huly command. Dispatch theo subcommand.\n *\n * Non-TUI (hasUI=false): commands không thể prompt → trả error message hướng\n * dẫn dùng subcommand explicit (vd `/huly link <ws> <project>` thay vì init\n * interactive). NFR-10 fail-safe — KHÔNG bypass confirmation.\n *\n * @returns CommandResult (message + type) cho caller notify/log\n */\nexport async function runHulyCommand(rawArgs: string, ctx: CommandContext): Promise<CommandResult> {\n  const { subcommand, positional } = parseArgs(rawArgs);\n\n  switch (subcommand) {\n    case undefined:\n      return runSmart(ctx);\n    case \"init\":\n      return runInit(ctx);\n    case \"status\":\n      return runStatus(ctx);\n    case \"workspace\":\n      return runWorkspace(positional, ctx);\n    case \"link\":\n      return runLink(positional, ctx);\n    case \"unlink\":\n      return runUnlink(ctx);\n    default:\n      return {\n        message: `Unknown subcommand \"${subcommand}\". Available: init, status, workspace, link, unlink.`,\n        type: \"error\",\n      };\n  }\n}\n\n// === Smart (no-arg) ===\n\n/** `/huly` no-arg: cwd bound → status; unbound → init flow (TUI only). */\nasync function runSmart(ctx: CommandContext): Promise<CommandResult> {\n  const binding = await safeResolveByCwd(ctx);\n  if (binding !== undefined) {\n    return runStatus(ctx);\n  }\n  // Unbound: init flow yêu cầu interactive UI. Non-TUI → hint link manual\n  // (tránh contradictory messages: notify \"starting init\" rồi init error \"requires UI\").\n  if (ctx.hasUI !== true) {\n    return {\n      message:\n        \"No Huly binding for this directory. Use `/huly link <workspace> <project>` to bind (non-interactive mode).\",\n      type: \"warning\",\n    };\n  }\n  ctx.ui.notify(\"No Huly binding for this directory. Starting /huly init…\", \"info\");\n  return runInit(ctx);\n}\n\n// === /huly init (UC-01) ===\n\n/**\n * `/huly init` — bind cwd → {workspace, project} (UC-01).\n * Flow:\n *   1. prompt workspace name\n *   2. findByName(name): 0 → add (prompt url + auth); 1 → reuse; N → disambiguate\n *   3. verify token (getClient → getCurrentUser)\n *   4. list_projects → pick HOẶC create new\n *   5. bindProject(cwd, {workspace, project})\n *\n * Non-TUI → KHÔNG interactive → error hướng dẫn `/huly link <ws> <project>`.\n * User cancel bất kỳ bước → abort (no bind).\n */\nasync function runInit(ctx: CommandContext): Promise<CommandResult> {\n  if (ctx.hasUI !== true) {\n    return {\n      message:\n        \"/huly init requires interactive UI. Use `/huly link <workspace> <project>` to bind non-interactively.\",\n      type: \"error\",\n    };\n  }\n\n  // 1. Prompt workspace name\n  const name = await ctx.ui.input(\"Huly workspace name:\");\n  if (name === undefined || name.length === 0) {\n    return { message: \"Init cancelled.\", type: \"info\" };\n  }\n\n  // 2. findByName → resolve workspace id-handle\n  let workspaceId: string;\n  try {\n    const matches = await findByName(name, ctx.credentialsPath);\n    if (matches.length === 0) {\n      // Add new workspace entry\n      const added = await promptAddWorkspace(name, ctx);\n      if (added === undefined) {\n        return { message: \"Init cancelled.\", type: \"info\" };\n      }\n      workspaceId = added;\n    } else if (matches.length === 1) {\n      workspaceId = matches[0].id;\n      ctx.ui.notify(`Reusing workspace \"${workspaceId}\".`, \"info\");\n    } else {\n      // Disambiguate (same-name diff-URL). Index lookup thay vì split string\n      // (tránh truncate sai nếu id/url chứa \" (\").\n      const opts = matches.map((m) => `${m.id} (${m.url})`);\n      const chosen = await ctx.ui.select(`Workspace \"${name}\" is ambiguous. Pick:`, opts);\n      if (chosen === undefined) {\n        return { message: \"Init cancelled.\", type: \"info\" };\n      }\n      const idx = opts.indexOf(chosen);\n      if (idx < 0 || matches[idx] === undefined) {\n        return { message: \"Init cancelled (invalid selection).\", type: \"info\" };\n      }\n      workspaceId = matches[idx]!.id;\n    }\n  } catch (e) {\n    return { message: `Init failed: ${errorMessage(e)}`, type: \"error\" };\n  }\n\n  // 3. Verify token (getClient → getCurrentUser). KHÔNG swallow — surface rõ.\n  let user: { name: string; email: string };\n  try {\n    const client = await getClient(workspaceId);\n    const u = await client.getCurrentUser();\n    user = { name: u.name, email: u.email };\n  } catch (e) {\n    return {\n      message: `Auth/connection failed for workspace \"${workspaceId}\": ${errorMessage(\n        e,\n      )}. Check URL/credentials (/huly workspace remove ${workspaceId} + add lại).`,\n      type: \"error\",\n    };\n  }\n\n  // 4. Project: list → pick HOẶC create\n  let project: string;\n  try {\n    project = await promptProject(workspaceId, ctx);\n    if (project.length === 0) {\n      return { message: \"Init cancelled (no project).\", type: \"info\" };\n    }\n  } catch (e) {\n    return { message: `Project setup failed: ${errorMessage(e)}`, type: \"error\" };\n  }\n\n  // 5. Bind cwd\n  try {\n    await bindProject(ctx.cwd, { workspace: workspaceId, project }, ctx.configPath);\n  } catch (e) {\n    return { message: `Bind failed: ${errorMessage(e)}`, type: \"error\" };\n  }\n\n  return {\n    message: `Bound ${ctx.cwd} → workspace \"${workspaceId}\", project \"${project}\" (user: ${user.name} <${user.email}>).`,\n    type: \"info\",\n  };\n}\n\n/**\n * Prompt url + auth method → addWorkspace. Trả id-handle HOẶC undefined (cancel).\n */\nasync function promptAddWorkspace(name: string, ctx: CommandContext): Promise<string | undefined> {\n  const url = await ctx.ui.input(\"Huly URL (vd https://huly.example.com):\");\n  if (url === undefined || url.length === 0) return undefined;\n\n  const method = await ctx.ui.select(\"Auth method:\", [\"Token\", \"Email + password\"]);\n  if (method === undefined) return undefined;\n\n  let entry: WorkspaceCreds;\n  if (method === \"Token\") {\n    const token = await ctx.ui.input(\"Token:\");\n    if (token === undefined || token.length === 0) return undefined;\n    entry = { url, workspace: name, token };\n  } else {\n    const email = await ctx.ui.input(\"Email:\");\n    if (email === undefined || email.length === 0) return undefined;\n    const password = await ctx.ui.input(\"Password:\");\n    if (password === undefined || password.length === 0) return undefined;\n    entry = { url, workspace: name, email, password };\n  }\n\n  // id-handle: dùng name (stable). Nếu trùng id → suffix -2, -3...\n  const baseId = await uniqueWorkspaceId(name, ctx);\n  await addWorkspace(baseId, entry, ctx.credentialsPath);\n  return baseId;\n}\n\n/** Tạo id-handle unik dựa trên name (suffix -2, -3 nếu trùng). */\nasync function uniqueWorkspaceId(name: string, ctx: CommandContext): Promise<string> {\n  const creds = await loadCredentials(ctx.credentialsPath, ctx.legacyCredentialsPath);\n  if (!(name in creds.workspaces)) return name;\n  let i = 2;\n  while (`${name}-${i}` in creds.workspaces) i++;\n  return `${name}-${i}`;\n}\n\n/**\n * List projects → pick existing HOẶC create new.\n * Trả project identifier HOẶC \"\" (cancel).\n */\nasync function promptProject(workspaceId: string, ctx: CommandContext): Promise<string> {\n  const client = await getClient(workspaceId);\n  // Reuse PROJECT_CLASS via classRef (single source với domain modules).\n  // Pattern space=workspaceId-handle nhất quán với domains/projects.ts create_project.\n  const PROJECT_CLASS = classRef(\"tracker:class:Project\");\n  const projects = await client.findAll(PROJECT_CLASS, {}, {});\n  const items = projects.map((p) => ({\n    identifier: (p as { identifier?: string }).identifier ?? \"\",\n    name: (p as { name?: string }).name ?? \"\",\n  }));\n\n  const opts = [\"+ Create new project\", ...items.map((p) => `${p.identifier} — ${p.name}`)];\n  const chosen = await ctx.ui.select(\"Pick project:\", opts);\n  if (chosen === undefined) return \"\";\n\n  if (chosen === \"+ Create new project\") {\n    const name = await ctx.ui.input(\"Project name:\");\n    if (name === undefined || name.length === 0) return \"\";\n    // Validate identifier: 1-5 chars, uppercase letter start (Huly convention).\n    let identifier = await ctx.ui.input(\"Project identifier (1-5 uppercase):\");\n    if (identifier === undefined) return \"\";\n    identifier = identifier.trim().toUpperCase();\n    if (!/^[A-Z][A-Z0-9]{0,4}$/.test(identifier)) {\n      ctx.ui.notify(\n        `Invalid identifier \"${identifier}\": must be 1-5 chars, start with uppercase letter.`,\n        \"error\",\n      );\n      return \"\";\n    }\n    await client.createDoc(PROJECT_CLASS, spaceRef(workspaceId), { name, identifier });\n    return identifier;\n  }\n\n  // Pick existing: index lookup thay vì split string (tránh truncate nếu name chứa \" —\").\n  const idx = opts.indexOf(chosen) - 1; // -1 vì opts[0] = \"+ Create new\"\n  if (idx < 0 || items[idx] === undefined) return \"\";\n  return items[idx]!.identifier;\n}\n\n// === /huly status ===\n\n/**\n * `/huly status` — diagnostics.\n * Output: version, cwd binding (workspace+project), pool health, current user.\n * KHÔNG throw — catch hết, surface dạng warning/error.\n */\nasync function runStatus(ctx: CommandContext): Promise<CommandResult> {\n  const lines: string[] = [`pi-huly v${HULY_VERSION}`, `cwd: ${ctx.cwd}`];\n\n  // Binding\n  const binding = await safeResolveByCwd(ctx);\n  if (binding !== undefined) {\n    lines.push(`binding: workspace \"${binding.workspace}\" · project \"${binding.project}\"`);\n  } else {\n    lines.push(\"binding: (none — run /huly init)\");\n  }\n\n  // Config transport\n  try {\n    const config = await loadConfig(ctx.configPath, ctx.legacyConfigPath);\n    lines.push(`transport: ${config.transport ?? \"ws\"}`);\n  } catch (e) {\n    lines.push(`transport: error reading config — ${errorMessage(e)}`);\n  }\n\n  // Credentials count\n  try {\n    const creds = await loadCredentials(ctx.credentialsPath, ctx.legacyCredentialsPath);\n    lines.push(`workspaces: ${Object.keys(creds.workspaces).length} configured`);\n  } catch (e) {\n    lines.push(`workspaces: error reading credentials — ${errorMessage(e)}`);\n  }\n\n  // Pool health (only if binding exists → check specific workspace)\n  try {\n    const target = binding?.workspace;\n    const statuses = await health(target);\n    if (statuses.length === 0) {\n      lines.push(\"pool: (no active connections)\");\n    } else {\n      // T-62 #67: total noise cross entry (module-level counter) — show 1 lần.\n      let noiseTotal = 0;\n      let noiseByPattern: Record<string, number> = {};\n      for (const s of statuses) {\n        const userStr = s.user ? `${s.user.name} <${s.user.email}>` : \"(user unknown)\";\n        lines.push(\n          `pool[${s.workspace}]: ${s.connected ? \"connected\" : \"disconnected\"} (${s.transport}) · ${userStr}`,\n        );\n        if (s.upstreamNoiseFiltered !== undefined) {\n          noiseTotal = Math.max(noiseTotal, s.upstreamNoiseFiltered.total);\n          noiseByPattern = s.upstreamNoiseFiltered.byPattern;\n        }\n      }\n      if (noiseTotal > 0) {\n        // Per-pattern breakdown giúp user phân biệt nguồn noise (vd #67 model-tx\n        // vs T-64 WS error). Sort desc theo count, format \"key: N\" top 3.\n        const sorted = Object.entries(noiseByPattern)\n          .sort((a, b) => b[1] - a[1])\n          .slice(0, 3)\n          .map(([pattern, count]) => `${pattern}: ${count}`)\n          .join(\", \");\n        lines.push(\n          `pool noise: ${noiseTotal} upstream log filtered${sorted ? ` (${sorted})` : \"\"}`,\n        );\n      }\n    }\n  } catch (e) {\n    lines.push(`pool: health check failed — ${errorMessage(e)}`);\n  }\n\n  return { message: lines.join(\"\\n\"), type: \"info\" };\n}\n\n// === /huly workspace list|add|remove ===\n\nasync function runWorkspace(positional: string[], ctx: CommandContext): Promise<CommandResult> {\n  const action = positional[0];\n  switch (action) {\n    case \"list\":\n      return runWorkspaceList(ctx);\n    case \"add\":\n      return runWorkspaceAdd(ctx);\n    case \"remove\":\n      return runWorkspaceRemove(positional[1], ctx);\n    default:\n      return {\n        message: \"Usage: /huly workspace list|add|remove\",\n        type: \"error\",\n      };\n  }\n}\n\n/** `/huly workspace list` — list configured workspaces (id + url + workspace name). */\nasync function runWorkspaceList(ctx: CommandContext): Promise<CommandResult> {\n  try {\n    const creds = await loadCredentials(ctx.credentialsPath, ctx.legacyCredentialsPath);\n    const ids = Object.keys(creds.workspaces);\n    if (ids.length === 0) {\n      return {\n        message: \"No workspaces configured. Run /huly init or /huly workspace add.\",\n        type: \"info\",\n      };\n    }\n    const lines = ids.map((id) => {\n      const w = creds.workspaces[id]!;\n      const auth = \"token\" in w ? \"token\" : \"email+pass\";\n      return `${id} → ${w.url} · workspace=\"${w.workspace}\" · auth=${auth}`;\n    });\n    return { message: `Workspaces (${ids.length}):\\n${lines.join(\"\\n\")}`, type: \"info\" };\n  } catch (e) {\n    return { message: `Failed to list workspaces: ${errorMessage(e)}`, type: \"error\" };\n  }\n}\n\n/** `/huly workspace add` — interactive add (TUI only). */\nasync function runWorkspaceAdd(ctx: CommandContext): Promise<CommandResult> {\n  if (ctx.hasUI !== true) {\n    return {\n      message: \"/huly workspace add requires interactive UI. Edit credentials.json manually.\",\n      type: \"error\",\n    };\n  }\n  const name = await ctx.ui.input(\"Workspace name (Huly workspace):\");\n  if (name === undefined || name.length === 0) return { message: \"Cancelled.\", type: \"info\" };\n  const id = await promptAddWorkspace(name, ctx);\n  if (id === undefined) return { message: \"Cancelled.\", type: \"info\" };\n  return { message: `Added workspace \"${id}\".`, type: \"info\" };\n}\n\n/** `/huly workspace remove <id>` — remove by id-handle. */\nasync function runWorkspaceRemove(\n  id: string | undefined,\n  ctx: CommandContext,\n): Promise<CommandResult> {\n  if (id === undefined || id.length === 0) {\n    return { message: \"Usage: /huly workspace remove <id>\", type: \"error\" };\n  }\n  try {\n    const existing = await getWorkspace(id, ctx.credentialsPath);\n    if (existing === undefined) {\n      return { message: `Workspace \"${id}\" not found.`, type: \"warning\" };\n    }\n    await removeWorkspace(id, ctx.credentialsPath);\n    return { message: `Removed workspace \"${id}\".`, type: \"info\" };\n  } catch (e) {\n    return { message: `Failed to remove workspace: ${errorMessage(e)}`, type: \"error\" };\n  }\n}\n\n// === /huly link [ws] [project] ===\n\n/**\n * `/huly link [workspace] [project]` — bind cwd manual (non-interactive OK).\n *   /huly link              → TUI: prompt ws + project\n *   /huly link ws PD        → bind trực tiếp (verify workspace tồn tại)\n * Validate workspace có trong credentials trước khi bind (fail-fast).\n */\nasync function runLink(positional: string[], ctx: CommandContext): Promise<CommandResult> {\n  let workspace: string | undefined = positional[0];\n  let project: string | undefined = positional[1];\n\n  // Interactive fill nếu thiếu (TUI only)\n  if ((workspace === undefined || project === undefined) && ctx.hasUI === true) {\n    if (workspace === undefined) {\n      workspace = (await ctx.ui.input(\"Workspace id:\")) ?? undefined;\n    }\n    if (project === undefined && workspace !== undefined && workspace.length > 0) {\n      project = (await ctx.ui.input(\"Project identifier:\")) ?? undefined;\n    }\n  }\n\n  if (workspace === undefined || workspace.length === 0) {\n    return { message: \"Usage: /huly link <workspace> <project>\", type: \"error\" };\n  }\n  if (project === undefined || project.length === 0) {\n    return { message: \"Usage: /huly link <workspace> <project>\", type: \"error\" };\n  }\n\n  // Validate workspace tồn tại trong credentials\n  try {\n    const existing = await getWorkspace(workspace, ctx.credentialsPath);\n    if (existing === undefined) {\n      return {\n        message: `Workspace \"${workspace}\" not found in credentials. Run /huly workspace add first.`,\n        type: \"error\",\n      };\n    }\n  } catch (e) {\n    return { message: `Failed to validate workspace: ${errorMessage(e)}`, type: \"error\" };\n  }\n\n  try {\n    await bindProject(ctx.cwd, { workspace, project }, ctx.configPath);\n  } catch (e) {\n    return { message: `Bind failed: ${errorMessage(e)}`, type: \"error\" };\n  }\n  return {\n    message: `Bound ${ctx.cwd} → workspace \"${workspace}\", project \"${project}\".`,\n    type: \"info\",\n  };\n}\n\n// === /huly unlink ===\n\n/** `/huly unlink` — remove cwd binding. No-op nếu chưa bound. */\nasync function runUnlink(ctx: CommandContext): Promise<CommandResult> {\n  try {\n    const binding = await safeResolveByCwd(ctx);\n    if (binding === undefined) {\n      return { message: `${ctx.cwd} has no Huly binding.`, type: \"info\" };\n    }\n    await unbindProject(ctx.cwd, ctx.configPath);\n    return { message: `Unbound ${ctx.cwd}.`, type: \"info\" };\n  } catch (e) {\n    return { message: `Unbind failed: ${errorMessage(e)}`, type: \"error\" };\n  }\n}\n\n// === Helpers ===\n\n/** resolveByCwd wrap — KHÔNG throw (tránh crash command khi config corrupt). */\nasync function safeResolveByCwd(ctx: CommandContext): Promise<ProjectBinding | undefined> {\n  try {\n    return await resolveByCwd(ctx.cwd, ctx.configPath);\n  } catch {\n    return undefined;\n  }\n}\n\n/** Extract message từ unknown error (KHÔNG leak stack). */\nfunction errorMessage(e: unknown): string {\n  if (e instanceof Error) return e.message;\n  return String(e);\n}\n\n// === Pi registration ===\n\n/**\n * Map CommandUI methods sang ExtensionCommandContext. select/confirm/input\n * trả undefined khi non-TUI (pi đã handle internally).\n */\nfunction adaptUI(ctx: ExtensionCommandContext): CommandUI {\n  return {\n    select: (title, options) => ctx.ui.select(title, options),\n    confirm: (title, message) => ctx.ui.confirm(title, message),\n    input: (title, placeholder) => ctx.ui.input(title, placeholder),\n    notify: (message, type) => ctx.ui.notify(message, type),\n  };\n}\n\n/**\n * Register unified `/huly` command với pi.\n * 1 registration, dispatch subcommand trong handler.\n *\n * @param pi Pi ExtensionAPI\n */\nexport function registerHulyCommand(pi: ExtensionAPI): void {\n  pi.registerCommand(\"huly\", {\n    description: \"Huly workspace/project management (init, status, workspace, link, unlink).\",\n    async handler(args, ctx) {\n      const cmdCtx: CommandContext = {\n        ui: adaptUI(ctx),\n        hasUI: ctx.hasUI,\n        cwd: ctx.cwd,\n      };\n      const result = await runHulyCommand(args, cmdCtx);\n      ctx.ui.notify(result.message, result.type);\n    },\n  });\n}\n\n// Re-export closeAll cho index.ts factory (session_shutdown cleanup).\nexport { closeAll };\n// Re-export createHulyClient cho potential direct use (test/verify).\nexport { createHulyClient };\n","// render/util.ts — shared helpers cho render/issue.ts + render/document.ts.\n// Tách ra để tránh duplicate fmtDate/getOrCreateText/joinLines/opt giữa 2 file\n// (code-review-mentor #3). Cũng chứa ANSI sanitize (#5 security).\n\nimport { Text } from \"@oh-my-pi/pi-tui\";\nimport type { Component } from \"@oh-my-pi/pi-tui\";\n\n/**\n * Minimal theme surface mà render dùng. Pi Theme runtime CHỈ có fg/bg/bold/...,\n * KHÔNG có method dim/muted — \"dim\"/\"muted\" là ThemeColor enum values, gọi qua\n * theme.fg(\"dim\", text) (code-review-mentor #1).\n */\nexport interface RenderTheme {\n  fg(color: string, text: string): string;\n  bg?(color: string, text: string): string;\n  bold(text: string): string;\n  italic?(text: string): string;\n}\n\n/**\n * Minimal render context (ToolRenderContext của pi KHÔNG re-export public).\n * Structurally compatible subset — chỉ cần lastComponent để reuse Text component.\n */\nexport interface RenderContext {\n  /** Previously returned component for this render slot, if any (reuse để avoid flicker). */\n  lastComponent?: Component;\n}\n\n/** Get-or-create Text component (reuse lastComponent nếu là Text, else create new). */\nexport function getOrCreateText(ctx: RenderContext): Text {\n  return ctx.lastComponent instanceof Text ? ctx.lastComponent : new Text(\"\", 0, 0);\n}\n\n/** Format timestamp (Unix ms) → YYYY-MM-DD; invalid/undefined → \"\". */\nexport function fmtDate(ms: number | undefined, theme: RenderTheme): string {\n  if (ms === undefined || ms === null) return \"\";\n  const d = new Date(ms);\n  if (Number.isNaN(d.getTime())) return \"\";\n  return theme.fg(\"warning\", d.toISOString().slice(0, 10));\n}\n\n/** Join non-empty lines (skip empty/undefined entries). */\nexport function joinLines(lines: string[]): string {\n  return lines.filter((l) => l.length > 0).join(\"\\n\");\n}\n\n/** Optional labeled row: skip nếu value undefined/empty; else \"Label: value\". */\nexport function opt(label: string, value: string | undefined, theme: RenderTheme): string {\n  if (value === undefined || value === null || value.length === 0) return \"\";\n  return `${theme.bold(label)}: ${value}`;\n}\n\n/**\n * Strip ANSI escape sequences từ string sourced từ Huly server (code-review-mentor #5).\n * Huly title/description/content/status/assignee có thể chứa escape sequences thật\n * (user input HOẶC markup legacy) → nếu render raw, terminal bị corrupt (hidden\n * cursor, changed title, cleared screen, màu sai).\n *\n * Strip CSI (Control Sequence Introducer) + OSC (Operating System Command) + ESC.\n * Whitelist-ish: giữ printable ASCII + tab + newline.\n */\nexport function sanitize(str: string): string {\n  if (typeof str !== \"string\") return \"\";\n  // Strip ANSI escape sequences từ server-sourced strings (terminal injection防御).\n  // Mọi regex match control chars (U+001B/U+0007/...) — intentional, KHÔNG bug.\n  // eslint-disable-next-line no-control-regex -- CSI escape sequence (intentional strip)\n  const noCsi = str.replace(/\\u001b\\[[0-9;?]*[A-Za-z]/g, \"\");\n  // eslint-disable-next-line no-control-regex -- OSC escape sequence (intentional strip)\n  const noOsc = noCsi.replace(/\\u001b\\][^\\u0007\\u001b]*(?:\\u0007|\\u001b\\\\)/g, \"\");\n  // eslint-disable-next-line no-control-regex -- keypad mode escape (intentional strip)\n  const noKeypad = noOsc.replace(/\\u001b[=>]/g, \"\");\n  // eslint-disable-next-line no-control-regex -- control chars except \\t \\n \\r (intentional strip)\n  return noKeypad.replace(/[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f]/g, \"\");\n}\n","// render/issue.ts — TUI render cho huly_get_issue (card) + huly_list_issues (table).\n// Design: 04-system.md §6 render/issue.ts, 06-api.md §3 render hooks (D12).\n//\n// Render functions theo pi signature: (result, options, theme, context) => Component.\n// Strategy: pure format function (formatIssueCard/formatIssueList) dùng theme.fg()\n// colorize → wrap vào Text component (reuse context.lastComponent khi có).\n//\n// Pure function testable KHÔNG cần pi types (chỉ cần theme stub có fg/bg/bold).\n// Shared helpers + RenderTheme/RenderContext ở render/util.ts.\n\nimport type { Component } from \"@oh-my-pi/pi-tui\";\nimport type { AgentToolResult, ToolRenderResultOptions } from \"@oh-my-pi/pi-coding-agent\";\nimport {\n  fmtDate,\n  getOrCreateText,\n  joinLines,\n  opt,\n  sanitize,\n  type RenderContext,\n  type RenderTheme,\n} from \"./util.js\";\n\n/** Issue shape từ huly_get_issue details (xem domains/issues-core.ts get_issue). */\nexport interface IssueDetails {\n  identifier?: string;\n  title?: string;\n  description?: string;\n  status?: string;\n  priority?: string;\n  assignee?: string;\n  milestone?: string;\n  component?: string;\n  dueDate?: number;\n  estimation?: number;\n}\n\n/** IssueListItem shape từ huly_list_issues details. */\nexport interface IssueListItem {\n  identifier?: string;\n  title?: string;\n  status?: string;\n  priority?: string;\n  assignee?: string;\n}\n\n/** List details shape. */\nexport interface IssueListDetails {\n  count?: number;\n  issues?: IssueListItem[];\n}\n\n// Re-export shared types cho consumer single-import.\nexport type { RenderTheme, RenderContext } from \"./util.js\";\n\n/** Due line: skip nếu dueDate undefined HOẶC invalid (fmtDate trả \"\"). */\nfunction dueLine(ms: number | undefined, t: RenderTheme): string {\n  if (ms === undefined || ms === null) return \"\";\n  const d = fmtDate(ms, t);\n  return d.length > 0 ? `Due: ${d}` : \"\";\n}\n\n/**\n * Format issue card (single issue). Pure function — testable.\n * Layout:\n *   PD-123: Title (bold)\n *   Status: X · Priority: Y · Assignee: Z\n *   Milestone: M · Component: C · Due: 2026-01-01\n *   ─── Description ─── (dim)\n *   <description preview>\n *\n * Mọi string từ server qua sanitize() (code-review-mentor #5 ANSI injection).\n */\nexport function formatIssueCard(details: IssueDetails, theme: RenderTheme): string {\n  const id = sanitize(details.identifier ?? \"?\");\n  const title = sanitize(details.title ?? \"(no title)\");\n  const header = `${theme.fg(\"accent\", id)}: ${theme.bold(title)}`;\n\n  const meta1 = joinLines([\n    opt(\n      \"Status\",\n      details.status ? theme.fg(\"success\", sanitize(details.status)) : undefined,\n      theme,\n    ),\n    opt(\"Priority\", details.priority !== undefined ? sanitize(details.priority) : undefined, theme),\n    opt(\"Assignee\", details.assignee !== undefined ? sanitize(details.assignee) : undefined, theme),\n  ]).replace(/\\n/g, \" · \");\n\n  const meta2 = joinLines([\n    opt(\n      \"Milestone\",\n      details.milestone !== undefined ? sanitize(details.milestone) : undefined,\n      theme,\n    ),\n    opt(\n      \"Component\",\n      details.component !== undefined ? sanitize(details.component) : undefined,\n      theme,\n    ),\n    dueLine(details.dueDate, theme),\n    details.estimation !== undefined ? `Estimation: ${details.estimation}m` : \"\",\n  ]).replace(/\\n/g, \" · \");\n\n  const lines = [header];\n  if (meta1.length > 0) lines.push(meta1);\n  if (meta2.length > 0) lines.push(meta2);\n\n  // Description preview (KHÔNG full — pi truncate tự). Giới hạn 8 dòng đầu.\n  if (details.description !== undefined && details.description.length > 0) {\n    const descLines = sanitize(details.description).split(\"\\n\").slice(0, 8);\n    lines.push(theme.fg(\"dim\", \"─── Description ───\"));\n    lines.push(...descLines);\n  }\n\n  return lines.join(\"\\n\");\n}\n\n/**\n * Format issue list (compact table). Pure function — testable.\n * Layout:\n *   N issue(s)\n *   PD-123  [Status]  Title                          @assignee\n *   PD-124  [Status]  Another title\n *\n * Empty list: theme.fg(\"muted\", \"No issues found (N total).\") — luôn include count\n * (code-review-mentor #2: trước đây dùng theme.muted method KHÔNG tồn tại runtime).\n */\nexport function formatIssueList(details: IssueListDetails, theme: RenderTheme): string {\n  const count = details.count ?? details.issues?.length ?? 0;\n  const issues = details.issues ?? [];\n  if (issues.length === 0) {\n    return theme.fg(\"muted\", `No issues found (${count} total).`);\n  }\n  const header = `${count} issue(s)`;\n  // Column widths: identifier (max 10), status (max 12), title (flex), assignee (suffix)\n  const idWidth = Math.max(8, ...issues.map((i) => sanitize(i.identifier ?? \"\").length));\n  const rows = issues.map((i) => {\n    const id = theme.fg(\"accent\", sanitize(i.identifier ?? \"?\").padEnd(idWidth));\n    const status = theme.fg(\"success\", `[${sanitize(i.status ?? \"?\")}]`.padEnd(12));\n    const title = sanitize(i.title ?? \"(no title)\");\n    const assignee = sanitize(i.assignee ?? \"\");\n    const assigneeSuffix = assignee.length > 0 ? ` ${theme.fg(\"dim\", `@${assignee}`)}` : \"\";\n    return `${id}  ${status}  ${title}${assigneeSuffix}`;\n  });\n  return [header, ...rows].join(\"\\n\");\n}\n\n/**\n * Render cho huly_get_issue (card layout).\n * Pi ToolDefinition.renderResult signature.\n */\nexport function renderIssueResult(\n  result: AgentToolResult<IssueDetails>,\n  _options: ToolRenderResultOptions,\n  theme: RenderTheme,\n  context: RenderContext,\n): Component {\n  const text = getOrCreateText(context);\n  if (result.details !== undefined) {\n    text.setText(formatIssueCard(result.details, theme));\n  }\n  return text;\n}\n\n/**\n * Render cho huly_list_issues (compact table).\n * Pi ToolDefinition.renderResult signature.\n */\nexport function renderIssueListResult(\n  result: AgentToolResult<IssueListDetails>,\n  _options: ToolRenderResultOptions,\n  theme: RenderTheme,\n  context: RenderContext,\n): Component {\n  const text = getOrCreateText(context);\n  if (result.details !== undefined) {\n    text.setText(formatIssueList(result.details, theme));\n  }\n  return text;\n}\n","// render/document.ts — TUI render cho huly_get_document (title + content preview).\n// Design: 04-system.md §6 render/document.ts, 06-api.md §3 render hooks (D12).\n//\n// renderDocumentResult theo pi signature: (result, options, theme, context) => Component.\n// Pure format function (formatDocumentPreview) dùng theme.fg() colorize.\n// Shared helpers + RenderTheme/RenderContext ở render/util.ts.\n//\n// Layout:\n//   Title (bold, mdHeading color)\n//   ─── Content (preview) ─── (dim)\n//   <content preview, 12 dòng đầu>\n//   modified: 2026-01-01 (dim)\n\nimport type { Component } from \"@oh-my-pi/pi-tui\";\nimport type { AgentToolResult, ToolRenderResultOptions } from \"@oh-my-pi/pi-coding-agent\";\nimport {\n  fmtDate,\n  getOrCreateText,\n  sanitize,\n  type RenderContext,\n  type RenderTheme,\n} from \"./util.js\";\n\n/** Document details shape từ huly_get_document (xem domains/documents.ts). */\nexport interface DocumentDetails {\n  id?: string;\n  title?: string;\n  content?: string;\n  modifiedOn?: number;\n}\n\n// Re-export cho consumer single-import.\nexport type { RenderTheme, RenderContext } from \"./util.js\";\n\n/**\n * Format document preview. Pure function — testable.\n * Layout:\n *   Title (mdHeading, bold)\n *   ─── Content (preview) ─── (dim)\n *   <content preview — 12 dòng đầu>\n *   modified: 2026-01-01 (dim, optional)\n *\n * Content preview giới hạn 12 dòng (pi tự truncate byte/line). Tránh dump full\n * document dài vào render (LLM đã nhận content đầy đủ qua tool result text).\n * Mọi string từ server qua sanitize() (code-review-mentor #5 ANSI injection).\n */\nexport function formatDocumentPreview(details: DocumentDetails, theme: RenderTheme): string {\n  const title = sanitize(details.title ?? \"(untitled document)\");\n  const lines: string[] = [`${theme.bold(theme.fg(\"mdHeading\", title))}`];\n\n  if (details.content !== undefined && details.content.length > 0) {\n    const contentLines = sanitize(details.content).split(\"\\n\").slice(0, 12);\n    lines.push(theme.fg(\"dim\", \"─── Content (preview) ───\"));\n    lines.push(...contentLines);\n  }\n\n  const modified = fmtDate(details.modifiedOn, theme);\n  if (modified.length > 0) {\n    lines.push(theme.fg(\"dim\", `modified: ${modified}`));\n  }\n\n  return lines.join(\"\\n\");\n}\n\n/**\n * Render cho huly_get_document (title + content preview).\n * Pi ToolDefinition.renderResult signature.\n */\nexport function renderDocumentResult(\n  result: AgentToolResult<DocumentDetails>,\n  _options: ToolRenderResultOptions,\n  theme: RenderTheme,\n  context: RenderContext,\n): Component {\n  const text = getOrCreateText(context);\n  if (result.details !== undefined) {\n    text.setText(formatDocumentPreview(result.details, theme));\n  }\n  return text;\n}\n","// pi-huly extension entry — factory register tools + commands + lifecycle.\n// Design: 04-system.md §6 index.ts, 07-uc-04 (subagent shared pool), FR-12 (session_shutdown).\n//\n// Factory (T-33):\n//   1. registerAllTools(pi) — 102 tools từ 21 domain modules (register.ts)\n//   2. wire render hooks vào 3 high-value tools (huly_get_issue/list_issues/get_document)\n//   3. registerHulyCommand(pi) — unified /huly command (commands/huly.ts)\n//   4. pi.on(\"session_shutdown\") → pool.closeAll() — cleanup WS connections (FR-12)\n//   5. T-55: pi.on(\"session_start\") → warm pool (fire-and-forget) — fix first-call failure\n//   6. T-56: pi.on(\"tool_execution_start\") → log tool name + args (debug, stderr)\n//   7. Skills qua package manifest `pi.skills` (declarative, KHÔNG runtime register)\n//\n// R6 verification: type-only import force load pi types → typecheck catch TS 7\n// incompatibility với pi types sớm (design 03 §8 R6).\n\nimport type {\n  AgentToolResult,\n  ExtensionAPI,\n  ToolRenderResultOptions,\n} from \"@oh-my-pi/pi-coding-agent\";\nimport type { Component } from \"@oh-my-pi/pi-tui\";\n\nimport { HULY_VERSION } from \"./version.js\";\n// Re-export giữ backward-compat cho consumer import từ index.\nexport { HULY_VERSION };\n\nimport { allTools, registerAllTools } from \"./tools/register.js\";\nimport { registerHulyCommand } from \"./commands/huly.js\";\nimport { closeAll, getClient } from \"./client/pool.js\";\nimport { loadCredentials, type Credentials } from \"./config/credentials.js\";\nimport { sanitize } from \"./client/errors.js\";\nimport { renderIssueListResult, renderIssueResult } from \"./render/issue.js\";\nimport { renderDocumentResult } from \"./render/document.js\";\nimport {\n  DEFAULT_UPSTREAM_NOISE_PATTERNS,\n  installGlobalConsoleFilter,\n} from \"./client/console-filter.js\";\nimport { loadConfig, type Config } from \"./config/config.js\";\n\n/**\n * Render hook signature (omp ToolDefinition.renderResult).\n * omp calls renderResult(result, options, theme, args) — `args` is the tool's\n * parsed params (NOT pi's { lastComponent }). The render funcs read\n * `context.lastComponent` for Text reuse; with omp `args` that field is absent\n * → getOrCreateText() always makes a fresh Text (no crash, minor: no reuse).\n * AgentToolResult + ToolRenderResultOptions are omp types (type-safe).\n */\ntype RenderHook = (\n  result: AgentToolResult<unknown>,\n  options: ToolRenderResultOptions,\n  theme: unknown,\n  args: unknown,\n) => Component;\n\n/** Map tool name → render hook (3 high-value per design 04 §6 D12). */\nconst RENDER_HOOKS: Record<string, RenderHook> = {\n  huly_get_issue: renderIssueResult as unknown as RenderHook,\n  huly_list_issues: renderIssueListResult as unknown as RenderHook,\n  huly_get_document: renderDocumentResult as unknown as RenderHook,\n};\n\n/**\n * Build tool list với render hooks attached (shallow copy — KHÔNG mutate allTools\n * module-level global, tránh leak state giữa các consumer import allTools).\n * Tools KHÔNG trong RENDER_HOOKS → pi fallback default text render (~99 tool).\n */\nfunction buildToolsWithRender(): typeof allTools {\n  return allTools.map((tool) => {\n    const hook = RENDER_HOOKS[tool.name];\n    return hook !== undefined ? { ...tool, renderResult: hook } : tool;\n  });\n}\n\n/** Module-level guard: setup() chỉ chạy 1 lần (tránh dev-reload leak handler/command). */\nlet setupCalled = false;\n\n/** Test-only: reset setup guard (vitest isolation — tránh leak state giữa tests). */\nexport function __resetSetupGuardForTests(): void {\n  setupCalled = false;\n}\n\n/**\n * T-55 #59: Warm pool cho workspace đầu tiên trong credentials (fire-and-forget).\n * Fix first-call failure — WS chỉ kết nối khi tool đầu tiên gọi getClient (lazy),\n * gây delay/fail nếu credentials init chậm. Warm at session_start → connection\n * sẵn sàng trước khi LLM gọi tool đầu tiên.\n *\n * Bounds:\n * - KHÔNG block startup (fire-and-forget — không await trong caller).\n * - Skip khi credentials rỗng / NeedsInitError (no-op, không log lỗi).\n * - KHÔNG crash nếu warm fail (swallow — lazy retry ở lần gọi tool đầu tiên).\n * - Qua getClient(workspace) (KHÔNG bypass pool — D14 shared state nhất quán).\n */\nasync function warmPool(): Promise<void> {\n  try {\n    const creds: Credentials = await loadCredentials();\n    const ids = Object.keys(creds.workspaces);\n    if (ids.length === 0) return; // chưa init → no-op im lặng\n    // Warm workspace đầu tiên (default). Multi-workspace warm là overkill — lazy\n    // connect còn lại khi tool resolve workspace khác.\n    await getClient(ids[0]!);\n  } catch {\n    // Swallow — warm là best-effort. Lần gọi tool đầu tiên sẽ retry lazy connect\n    // như cũ (getClient throw → builder return error result rõ ràng cho LLM).\n  }\n}\n\n/** Bound JSON length cho log tool args (T-56 #60) — tránh bloat stderr. */\nconst LOG_ARGS_CAP = 500;\n\n/**\n * T-64 #69: Resolve console filter pattern từ config cho global install.\n * - `quietUpstreamNoise === false` → null (escape hatch, KHÔNG filter)\n * - `upstreamNoisePatterns` override → compile user pattern (case-insensitive)\n * - Default → DEFAULT_UPSTREAM_NOISE_PATTERNS\n *\n * KHÔNG throw nếu pattern invalid (skip + fallback default).\n */\nfunction resolvePatternsFromConfig(config: Config): RegExp[] | null {\n  if (config.quietUpstreamNoise === false) return null;\n  if (config.upstreamNoisePatterns !== undefined && config.upstreamNoisePatterns.length > 0) {\n    const compiled: RegExp[] = [];\n    for (const src of config.upstreamNoisePatterns) {\n      try {\n        compiled.push(new RegExp(src, \"i\"));\n      } catch {\n        // Skip invalid — validateConfig đã catch khi load, runtime skip cho safety.\n      }\n    }\n    return compiled.length > 0 ? compiled : DEFAULT_UPSTREAM_NOISE_PATTERNS;\n  }\n  return DEFAULT_UPSTREAM_NOISE_PATTERNS;\n}\n\n/**\n * T-56 #60: Log tool call khi LLM gọi Huly tool (debug observability).\n * Subscribe tool_execution_start → log `[huly_<tool>] args: <json>` ra stderr.\n *\n * Bounds:\n * - Filter `toolName.startsWith(\"huly_\")` — skip built-in tool (bash, read, ...).\n * - Sanitize args qua `sanitize()` (strip LEAK_PATTERNS — token/secret) trước log.\n * - Truncate JSON > LOG_ARGS_CAP chars (500) + đuôi `... (truncated, N chars total)`.\n * - console.error (stderr) — pi TUI hiển thị nhưng JSON/print mode KHÔNG parse\n *   thành output → an toàn cho programmatic consumer.\n */\nfunction logToolCall(event: { toolName: string; args: unknown }): void {\n  if (!event.toolName.startsWith(\"huly_\")) return;\n  let json: string;\n  try {\n    json = JSON.stringify(event.args ?? {});\n  } catch {\n    json = \"<unserializable>\";\n  }\n  // Truncate TRƯỚC sanitize (code-review MINOR #1) — đảm bảo sanitize luôn chạy\n  // sau cùng, không có secret nào lọt qua vì slice cắt giữa (vd token có ký tự\n  // lạ KHÔNG match LEAK_PATTERNS → nếu sanitize trước truncate, phần raw token\n  // có thể nằm trong phần bị truncate khỏi log).\n  const capped =\n    json.length > LOG_ARGS_CAP\n      ? `${json.slice(0, LOG_ARGS_CAP)}... (truncated, ${json.length} chars total)`\n      : json;\n  console.error(`[${event.toolName}] args: ${sanitize(capped)}`);\n}\n\n/**\n * pi-huly extension factory — pi gọi default export khi load extension.\n *\n * Idempotent: lần 2+ là no-op (return 0) — tránh dev-reload leak\n * (đăng ký trùng session_shutdown handler + /huly command).\n *\n * @param pi Pi ExtensionAPI\n * @returns number of tools registered (0 nếu đã setup, debug aid)\n */\nexport default function setup(pi: ExtensionAPI): void {\n  // Guard: pi thực guard load 1 lần production, nhưng dev-reload có thể gọi lại.\n  // Tránh leak: 2x session_shutdown handler → closeAll() gọi 2 lần song song.\n  if (setupCalled) return;\n  setupCalled = true;\n\n  // 1. Build tools với render hooks (shallow copy, KHÔNG mutate module global)\n  const tools = buildToolsWithRender();\n\n  // 2. Register 102 tools (21 domain modules)\n  registerAllTools(pi, tools);\n\n  // 3. Register unified /huly command (init/status/workspace/link/unlink)\n  registerHulyCommand(pi);\n\n  // 3.5. T-64 #69: install global console filter ASAP (active toàn session).\n  // Cần thiết vì WS error (wsocket.onerror async callback) fires post-connect —\n  // runWithConsoleFilter trong createHulyClient chỉ cover connect-time, restore\n  // console.error trước khi WS error thật fire → token leak nếu KHÔNG global filter.\n  // Async vì resolveFilterPatterns đọc config ( KHÔNG block setup — fire-and-forget).\n  void (async () => {\n    try {\n      const config = await loadConfig();\n      if (config.quietUpstreamNoise === false) return; // escape hatch\n      const patterns = resolvePatternsFromConfig(config);\n      if (patterns !== null) installGlobalConsoleFilter(patterns);\n    } catch {\n      // Config error → install default patterns (best-effort, KHÔNG block setup).\n      installGlobalConsoleFilter(DEFAULT_UPSTREAM_NOISE_PATTERNS);\n    }\n  })();\n\n  // 4. session_shutdown hook → close all WS connections (FR-12, D14 pool cleanup).\n  // Pi AWAIT handler xong trước khi exit (contract ExtensionHandler async support).\n  // closeAll nên ngắn (WS close nhanh) — nếu block lâu, pi shutdown bị chậm.\n  pi.on(\"session_shutdown\", async () => {\n    try {\n      await closeAll();\n    } catch {\n      // Shutdown cleanup KHÔNG block exit — swallow để pi exit sạch\n      // (dù closeAll throw, handler resolve → pi tiếp tục shutdown).\n    }\n  });\n\n  // 5. T-55 #59: session_start → warm pool fire-and-forget (fix first-call failure).\n  // omp's SessionStartEvent has no `reason` field (unlike Pi), so warm\n  // unconditionally. Handler is fire-and-forget (KHÔNG await); warmPool swallows\n  // mọi error (best-effort).\n  pi.on(\"session_start\", () => {\n    void warmPool(); // fire-and-forget — KHÔNG await, KHÔNG crash setup\n  });\n\n  // 6. T-56 #60: tool_execution_start → log tool name + args (debug observability).\n  // Filter huly_ prefix, sanitize args (strip secret), truncate JSON > 500 chars.\n  // Log ra stderr (pi TUI hiển thị, JSON/print mode không parse → safe).\n  pi.on(\"tool_execution_start\", (event) => {\n    try {\n      logToolCall(event);\n    } catch {\n      // Logging KHÔNG block tool execution — swallow mọi error (vd args circular).\n    }\n  });\n\n}\n"],"x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],"mappings":"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"}